# test_socket_glow_fx_parity.gd —— 40250 装备灵石镶嵌发光流光粒子 1:1 回归测试套件 extends SceneTree const SocketGlowFxSystem = preload("res://socket_glow_fx_system.gd") var _passed := 0 var _failed := 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_socket_glow_fx_parity (Direction 3: Socket Glow FX 1:1) ===") _test_stone_color_roster() _test_base_refine_auras() _test_socket_stone_glow_blending() _test_material_application() _finish() func _test_stone_color_roster() -> void: print("\n--- Test 1: Spirit Stone Color Roster ---") _assert(SocketGlowFxSystem.STONE_COLORS.size() >= 8, "Has at least 8 Spirit Stone colors defined") _assert(SocketGlowFxSystem.STONE_COLORS.has(28430), "Warrior Stone +4 defined") _assert(SocketGlowFxSystem.STONE_COLORS.has(28432), "Sura Stone +4 defined") _assert(SocketGlowFxSystem.STONE_COLORS.has(28436), "Cooldown Stone +4 defined") _assert(SocketGlowFxSystem.STONE_COLORS.has(28438), "Protection Stone +4 defined") func _test_base_refine_auras() -> void: print("\n--- Test 2: Base Refine Auras (+0~+6 vs +7/+8/+9) ---") var sys := SocketGlowFxSystem.new() # +6 without stones var item_plus6 := {"vnum": 10, "refine_level": 6, "sockets": []} var g6 = sys.calculate_equipment_glow(item_plus6) _assert(g6["is_glowing"] == false, "+6 item without stones has no glow") _assert(g6["glow_intensity"] == 0.0, "Intensity is 0.0") # +7 item var item_plus7 := {"vnum": 10, "refine_level": 7, "sockets": []} var g7 = sys.calculate_equipment_glow(item_plus7) _assert(g7["is_glowing"] == true, "+7 item glows") _assert(g7["glow_intensity"] == 0.6, "+7 intensity is 0.6") _assert(g7["particle_rate"] == 12, "+7 particle rate is 12") # +8 item var item_plus8 := {"vnum": 10, "refine_level": 8, "sockets": []} var g8 = sys.calculate_equipment_glow(item_plus8) _assert(g8["glow_intensity"] == 1.2, "+8 intensity is 1.2") _assert(g8["has_trail"] == true, "+8 has weapon swing trail") # +9 item var item_plus9 := {"vnum": 10, "refine_level": 9, "sockets": []} var g9 = sys.calculate_equipment_glow(item_plus9) _assert(g9["glow_intensity"] == 2.2, "+9 intensity is 2.2") _assert(g9["swirl_enabled"] == true, "+9 has mythic swirling aura") _assert(g9["particle_rate"] == 55, "+9 particle rate is 55") func _test_socket_stone_glow_blending() -> void: print("\n--- Test 3: Socket Stones Color & Intensity Blending ---") var sys := SocketGlowFxSystem.new() var sig_data := {"fired": false, "vnum": 0, "intensity": 0.0} sys.glow_profile_updated.connect(func(v: int, i: float, _c: Color): sig_data["fired"] = true sig_data["vnum"] = v sig_data["intensity"] = i ) # +9 Poison Sword with Warrior Stone (28430, Red) var sword_red := { "vnum": 189, "refine_level": 9, "sockets": [28430] } var g_red = sys.calculate_equipment_glow(sword_red) _assert(g_red["is_glowing"] == true, "Glowing active") _assert(g_red["glow_intensity"] > 2.2, "Intensity boosted by spirit stone (> 2.2)") _assert(g_red["primary_color"].r > 0.9, "Warrior stone creates vivid red color") _assert(sig_data["fired"] == true and sig_data["vnum"] == 189, "glow_profile_updated signal fired") # +9 Sword with Sura Stone (28432, Dark Violet) var sword_purple := { "vnum": 189, "refine_level": 9, "sockets": [28432] } var g_purple = sys.calculate_equipment_glow(sword_purple) _assert(g_purple["primary_color"].b > 0.9, "Sura stone creates deep violet/blue tone") # Item with 3 stones: Red + Purple + Gold var sword_tri := { "vnum": 189, "refine_level": 9, "sockets": [28430, 28432, 28436] } var g_tri = sys.calculate_equipment_glow(sword_tri) _assert(g_tri["stone_count"] == 3, "3 socket stones counted") _assert(g_tri["secondary_color"] == SocketGlowFxSystem.STONE_COLORS[28430]["color"], "Secondary color tracks slot 0 primary stone") func _test_material_application() -> void: print("\n--- Test 4: StandardMaterial3D Direct Injection ---") var sys := SocketGlowFxSystem.new() var mat := StandardMaterial3D.new() var item_plus9 := {"vnum": 10, "refine_level": 9, "sockets": [28430]} var glow = sys.calculate_equipment_glow(item_plus9) sys.apply_to_material(mat, glow) _assert(mat.emission_enabled == true, "Material emission enabled") _assert(mat.emission == glow["primary_color"], "Emission color matches primary color") _assert(is_equal_approx(mat.emission_energy_multiplier, glow["glow_intensity"]), "Energy multiplier matches glow intensity") # Apply empty glow sys.apply_to_material(mat, sys._empty_glow()) _assert(mat.emission_enabled == false, "Emission disabled for non-glowing item") func _finish() -> void: print("\n==========================================") print("Socket Glow FX Parity Tests Finished:") print("Passed: %d, Failed: %d" % [_passed, _failed]) print("==========================================") if _failed > 0: printerr("FAILED: Some tests did not pass.") quit(1) else: print("SUCCESS: All Socket Glow FX parity tests passed!") quit(0)