|
|
|
"""
|
|
Test Enhanced MMORPG Features
|
|
|
|
This script verifies the implementation of:
|
|
1. Player Glow Implementation (current player gets yellow border highlight)
|
|
2. Player Names Display Implementation (show player names above sprites with level info)
|
|
3. Status Line Implementation (game info bar with player count, time, controls info)
|
|
4. Current Player Tracking (proper assignment and cleanup)
|
|
"""
|
|
|
|
import sys
|
|
import os
|
|
sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'src'))
|
|
|
|
from src.facades.game_facade import GameFacade
|
|
from src.ui.interface_manager import InterfaceManager
|
|
from src.ui.huggingface_ui import HuggingFaceUI
|
|
|
|
def test_enhanced_features():
|
|
"""Test all enhanced MMORPG features."""
|
|
print("🧪 Testing Enhanced MMORPG Features")
|
|
print("=" * 50)
|
|
|
|
|
|
game_facade = GameFacade()
|
|
ui = HuggingFaceUI(game_facade)
|
|
interface_manager = InterfaceManager(game_facade, ui)
|
|
|
|
print("✅ Components initialized successfully")
|
|
|
|
|
|
print("\n1. Testing Current Player Tracking...")
|
|
assert hasattr(interface_manager, 'current_player_id'), "current_player_id attribute missing"
|
|
assert interface_manager.current_player_id is None, "current_player_id should be None initially"
|
|
print("✅ Current player tracking properly initialized")
|
|
|
|
print("\n2. Testing Join Game with Current Player Assignment...")
|
|
|
|
current_state = {}
|
|
result = interface_manager._handle_join_game("TestPlayer1", current_state)
|
|
updated_state, status, player_list, world_html = result
|
|
|
|
|
|
player1_id = updated_state.get("player_id")
|
|
assert player1_id is not None, "Failed to join game via interface manager"
|
|
|
|
|
|
assert interface_manager.current_player_id == player1_id, f"current_player_id not set correctly. Expected: {player1_id}, Got: {interface_manager.current_player_id}"
|
|
assert updated_state["player_id"] == player1_id, "Player state not updated correctly"
|
|
print(f"✅ Current player ID set correctly: {interface_manager.current_player_id}")
|
|
|
|
|
|
print("\n3. Testing World HTML Generation with Enhanced Features...")
|
|
world_html = interface_manager._generate_world_html_with_players()
|
|
|
|
|
|
assert "border: 2px solid yellow; border-radius: 50%;" in world_html, "Player glow effect missing"
|
|
assert "TestPlayer1" in world_html, "Player name missing from display"
|
|
assert "Lv." in world_html, "Level display missing"
|
|
assert "Fantasy Realm" in world_html, "Status line missing"
|
|
assert "Use WASD or Arrow Keys" in world_html, "Controls info missing"
|
|
print("✅ World HTML contains all enhanced features")
|
|
|
|
print("\n4. Testing Multiple Players with Glow Distinction...")
|
|
|
|
current_state2 = {}
|
|
result2 = interface_manager._handle_join_game("TestPlayer2", current_state2)
|
|
updated_state2, status2, player_list2, world_html2 = result2
|
|
player2_id = updated_state2.get("player_id")
|
|
|
|
|
|
assert interface_manager.current_player_id == player2_id, "Current player should be updated to latest joiner"
|
|
|
|
world_html_multi = interface_manager._generate_world_html_with_players()
|
|
|
|
|
|
yellow_border_count = world_html_multi.count("border: 2px solid yellow; border-radius: 50%;")
|
|
assert yellow_border_count == 1, f"Expected 1 yellow border, found {yellow_border_count}"
|
|
print("✅ Only current player has glow effect")
|
|
|
|
print("\n5. Testing Leave Game and Current Player Cleanup...")
|
|
leave_result = interface_manager._handle_leave_game(updated_state2)
|
|
new_state, leave_status, player_list_after, world_html_after = leave_result
|
|
|
|
|
|
assert interface_manager.current_player_id is None, "current_player_id not cleared on leave"
|
|
assert new_state == {}, "Player state not cleared on leave"
|
|
print("✅ Current player tracking cleared on leave")
|
|
|
|
print("\n6. Testing Status Line Dynamic Content...")
|
|
|
|
current_state3 = {}
|
|
result3 = interface_manager._handle_join_game("StatusTestPlayer", current_state3)
|
|
updated_state3, status3, player_list3, world_html3 = result3
|
|
player3_id = updated_state3.get("player_id")
|
|
|
|
world_html_status = interface_manager._generate_world_html_with_players()
|
|
|
|
|
|
assert "Players:" in world_html_status, "Player count missing from status"
|
|
assert "Last Update:" in world_html_status, "Timestamp missing from status"
|
|
import re
|
|
time_pattern = r'\d{2}:\d{2}:\d{2}'
|
|
assert re.search(time_pattern, world_html_status), "Time format not found in status"
|
|
print("✅ Status line contains dynamic content")
|
|
|
|
|
|
print("\n7. Testing Player Name Background Opacity...")
|
|
assert "rgba(255,215,0,0.9)" in world_html_status, "Current player name background missing"
|
|
assert "rgba(255,215,0,0.6)" in world_html_status, "Other player name background missing"
|
|
print("✅ Player name backgrounds have correct opacity")
|
|
|
|
|
|
print("\n8. Testing Z-Index Layering...")
|
|
assert "z-index: 10" in world_html_status, "Sprite z-index missing"
|
|
assert "z-index: 11" in world_html_status, "Name z-index missing"
|
|
assert "z-index: 12" in world_html_status, "Status z-index missing"
|
|
print("✅ Z-index layering implemented correctly")
|
|
|
|
print("\n" + "=" * 50)
|
|
print("🎉 ALL ENHANCED FEATURES TESTS PASSED!")
|
|
print("=" * 50)
|
|
|
|
|
|
print("\n📋 Enhanced Features Successfully Implemented:")
|
|
print("✅ 1. Player Glow Effect - Current player gets yellow border highlight")
|
|
print("✅ 2. Player Names Display - Names with level info shown above sprites")
|
|
print("✅ 3. Status Line - Game info bar with player count, time, controls")
|
|
print("✅ 4. Current Player Tracking - Proper assignment and cleanup")
|
|
print("✅ 5. Dynamic Background Opacity - Different opacity for current vs other players")
|
|
print("✅ 6. Proper Z-Index Layering - Sprites, names, and status properly layered")
|
|
print("✅ 7. Enhanced HTML Generation - All features integrated into world view")
|
|
print("✅ 8. Keyboard Controls Integration - Controls info in status line")
|
|
|
|
return True
|
|
|
|
if __name__ == "__main__":
|
|
try:
|
|
test_enhanced_features()
|
|
sys.exit(0)
|
|
except Exception as e:
|
|
print(f"❌ Test failed with error: {e}")
|
|
import traceback
|
|
traceback.print_exc()
|
|
sys.exit(1)
|
|
|