- 桥梁与静态物体高度采样修复: - 严格对齐 40250 CMapOutdoor::GetHeight 与 CAttributeInstance::GetHeight - 解析 .mdatr 中的 AttributeHeight 网格,使用 is_in_triangle_2d 准确计算桥面多边形平面方程 - sample_height 查询邻近区块并返回 fMAX(fObjectHeight, fTerrainHeight),彻底解决走上桥面穿透掉入水底/河床的问题 - 新增 test_bridge_height_parity.gd 自动化对拍测试 - 40250 怪物击杀经验动效: - 1:1 实现 FLY_EXP(0) / FLY_HP / FLY_SP 粒子轨迹与爆炸吸附 - 40250 客户端全系统功能对齐(Batches 1-31): - 包含公会、交易、骑乘、变身、钓鱼、采矿、商城、信件、结婚、地牢等 134 套对拍系统与自动化回归测试 - 文档沉淀: - 新增 docs/CLIENT-PARITY-AUDIT-AND-FIX-GUIDE.md 客户端对拍缺陷发现与修复工程指南
78 lines
2.7 KiB
GDScript
78 lines
2.7 KiB
GDScript
# test_intro_loading_parity.gd —— 40250 官方插画过场加载与 Tip 轮播回归测试
|
|
extends SceneTree
|
|
|
|
const SystemClass = preload("res://intro_loading_phase.gd")
|
|
|
|
var _passed: int = 0
|
|
var _failed: int = 0
|
|
|
|
func _assert(cond: bool, msg: String) -> void:
|
|
if cond:
|
|
_passed += 1
|
|
print(" [PASS] %s" % msg)
|
|
else:
|
|
_failed += 1
|
|
printerr(" [FAIL] %s" % msg)
|
|
|
|
func _init() -> void:
|
|
print("\n=== Running test_intro_loading_parity (Batch 30 Direction 2) ===")
|
|
_test_loading_wallpapers_and_tips()
|
|
_test_step_by_step_progress_stream()
|
|
_test_completion_flow()
|
|
|
|
print("\n=== Result: %d Passed, %d Failed ===" % [_passed, _failed])
|
|
if _failed == 0:
|
|
print("ALL TESTS PASSED!\n")
|
|
else:
|
|
printerr("SOME TESTS FAILED!\n")
|
|
quit(0 if _failed == 0 else 1)
|
|
|
|
func _test_loading_wallpapers_and_tips() -> void:
|
|
print("\n--- Test 1: Wallpapers & Tips Selection ---")
|
|
var loader = SystemClass.new()
|
|
loader.start_loading(1, 2)
|
|
|
|
_assert(loader.current_wallpaper == SystemClass.OFFICIAL_LOADING_WALLPAPERS[1], "Selected wallpaper 1")
|
|
_assert(loader.current_tip == SystemClass.OFFICIAL_LOADING_TIPS[2], "Selected tip 2 (Biologist)")
|
|
_assert(loader.current_tip.contains("生物学家"), "Tip content matches official text")
|
|
_assert(loader.progress_percent == 0.0, "Initial progress is 0%")
|
|
_assert(loader.is_completed() == false, "Loading not completed initially")
|
|
|
|
func _test_step_by_step_progress_stream() -> void:
|
|
print("\n--- Test 2: Step-by-Step Progress Stream (25% -> 50% -> 75% -> 100%) ---")
|
|
var loader = SystemClass.new()
|
|
loader.start_loading()
|
|
|
|
# Step 1: Property (25%)
|
|
var s1 = loader.advance_loading_step()
|
|
_assert(s1["step"] == SystemClass.STEP_PROPERTY, "Advanced to STEP_PROPERTY")
|
|
_assert(s1["progress"] == 0.25, "Progress is 25%")
|
|
_assert(s1["status_text"].contains("25%"), "Status text displays 25%")
|
|
|
|
# Step 2: Terrain (50%)
|
|
var s2 = loader.advance_loading_step()
|
|
_assert(s2["step"] == SystemClass.STEP_TERRAIN, "Advanced to STEP_TERRAIN")
|
|
_assert(s2["progress"] == 0.50, "Progress is 50%")
|
|
|
|
# Step 3: Entities (75%)
|
|
var s3 = loader.advance_loading_step()
|
|
_assert(s3["step"] == SystemClass.STEP_ENTITIES, "Advanced to STEP_ENTITIES")
|
|
_assert(s3["progress"] == 0.75, "Progress is 75%")
|
|
|
|
# Step 4: UI & Audio (100%)
|
|
var s4 = loader.advance_loading_step()
|
|
_assert(s4["step"] == SystemClass.STEP_UI_AUDIO, "Advanced to STEP_UI_AUDIO")
|
|
_assert(s4["progress"] == 1.0, "Progress reached 100%")
|
|
|
|
func _test_completion_flow() -> void:
|
|
print("\n--- Test 3: Loading Completion Lifecycle ---")
|
|
var loader = SystemClass.new()
|
|
loader.start_loading()
|
|
|
|
# Run all steps to finish
|
|
for i in range(5):
|
|
loader.advance_loading_step()
|
|
|
|
_assert(loader.is_completed() == true, "Loading fully completed")
|
|
_assert(loader.progress_percent == 1.0, "Progress is 100%")
|