创建新工程

This commit is contained in:
moyin
2025-12-05 19:00:14 +08:00
commit ff4fa5fffd
227 changed files with 32804 additions and 0 deletions

View File

@@ -0,0 +1,156 @@
extends Node
## 在线角色显示属性测试
## Feature: godot-ai-town-game, Property 22: 在线角色显示
const TEST_ITERATIONS = 50
# 测试结果统计
var test_results = {
"passed": 0,
"failed": 0,
"errors": []
}
func _ready():
print("\n=== Property Test: Online Character Display ===")
await test_property_online_character_display()
print_results()
print("=== Property Test Completed ===\n")
## Feature: godot-ai-town-game, Property 22: 在线角色显示
func test_property_online_character_display():
"""
属性测试:在线角色显示
对于任意玩家进入游戏场景时,系统应该显示所有当前在线玩家的角色
验证需求: 11.1
"""
print("\n[Property Test] Testing online character display...")
print("Running ", TEST_ITERATIONS, " iterations...")
for i in range(TEST_ITERATIONS):
# 创建世界管理器和角色容器
var world_manager = WorldManager.new()
var character_container = Node2D.new()
character_container.name = "CharacterContainer"
add_child(world_manager)
add_child(character_container)
world_manager.set_character_container(character_container)
await get_tree().process_frame
# 生成随机数量的在线角色
var num_online_characters = randi() % 5 + 1 # 1-5 个在线角色
var spawned_characters = []
for j in range(num_online_characters):
var character_data = _generate_online_character_data(j)
var character = world_manager.spawn_character(character_data, false)
if character:
spawned_characters.append({
"id": character_data[CharacterData.FIELD_ID],
"character": character
})
await get_tree().process_frame
# 验证所有在线角色都被正确显示
var all_displayed = true
var display_errors = []
for char_info in spawned_characters:
var char_id = char_info["id"]
var character = char_info["character"]
# 检查角色是否在场景树中
if not is_instance_valid(character):
all_displayed = false
display_errors.append({
"character_id": char_id,
"error": "character_not_valid"
})
continue
if not character.is_inside_tree():
all_displayed = false
display_errors.append({
"character_id": char_id,
"error": "not_in_scene_tree"
})
continue
# 检查角色是否标记为在线
if not character.is_online:
all_displayed = false
display_errors.append({
"character_id": char_id,
"error": "not_marked_online"
})
continue
# 检查角色是否可见
if not character.visible:
all_displayed = false
display_errors.append({
"character_id": char_id,
"error": "not_visible"
})
# 验证世界管理器中记录的角色数量
var managed_characters = world_manager.get_all_characters()
if managed_characters.size() != num_online_characters:
all_displayed = false
display_errors.append({
"error": "character_count_mismatch",
"expected": num_online_characters,
"actual": managed_characters.size()
})
if all_displayed:
test_results["passed"] += 1
else:
test_results["failed"] += 1
test_results["errors"].append({
"iteration": i + 1,
"num_characters": num_online_characters,
"errors": display_errors
})
# 清理
world_manager.clear_all_characters()
world_manager.queue_free()
character_container.queue_free()
await get_tree().process_frame
func _generate_online_character_data(index: int) -> Dictionary:
"""生成在线角色数据"""
var character_data = CharacterData.create(
"OnlinePlayer" + str(index),
"owner_" + str(index),
Vector2(randf_range(100, 900), randf_range(100, 700))
)
# 确保角色标记为在线
character_data[CharacterData.FIELD_IS_ONLINE] = true
return character_data
func print_results():
"""打印测试结果"""
print("\n=== Test Results ===")
print("Total iterations: ", TEST_ITERATIONS)
print("Passed: ", test_results["passed"])
print("Failed: ", test_results["failed"])
if test_results["failed"] > 0:
print("\n❌ FAILED: Some iterations failed")
print("First 5 errors:")
for i in range(min(5, test_results["errors"].size())):
var error = test_results["errors"][i]
print(" Error ", i + 1, ": ", error)
else:
print("\n✅ PASSED: All online characters displayed correctly")
print("Property 22 validated: Online characters are properly spawned and visible")