extends SceneTree const BattleStateScript := preload("res://scripts/core/battle_state.gd") const BattleSceneScript := preload("res://scripts/scenes/battle_scene.gd") func _init() -> void: var failures: Array[String] = [] _check_status_summary_duration_text(failures) _check_hud_reuses_status_summary(failures) if failures.is_empty(): print("status effect summary smoke ok") quit(0) return for failure in failures: push_error(failure) quit(1) func _check_status_summary_duration_text(failures: Array[String]) -> void: var state = _loaded_state(failures, "status summary") if state == null: return var cao_cao: Dictionary = state.get_unit("cao_cao") cao_cao["status_effects"] = [ { "type": "stat_bonus", "stat": "atk", "amount": 3, "remaining_phases": 2 }, { "type": "damage_over_time", "status": "poison", "amount": 4, "remaining_phases": 1 }, { "type": "action_lock", "status": "seal", "action": "skill", "remaining_phases": 3 } ] var summary: String = state.get_status_effect_summary("cao_cao") _check_contains(failures, "stat duration", summary, "무력 +3 (2회)") _check_contains(failures, "poison duration", summary, "독 -4 병력 (1회)") _check_contains(failures, "seal duration", summary, "봉인 책략 봉인 (3회)") func _check_hud_reuses_status_summary(failures: Array[String]) -> void: var scene = BattleSceneScript.new() scene._create_hud() scene.state.load_battle("res://data/scenarios/001_yellow_turbans.json") scene.battle_started = true var cao_cao: Dictionary = scene.state.get_unit("cao_cao") cao_cao["status_effects"] = [ { "type": "stat_bonus", "stat": "def", "amount": -2, "remaining_phases": 2 } ] scene.state.selected_unit_id = "cao_cao" scene.hover_cell = Vector2i(1, 6) scene._update_hud() if scene.selected_label.text.contains("상태:"): failures.append("selected HUD should keep status effects in tooltip/markers, not visible text: %s" % scene.selected_label.text) _check_contains(failures, "selected HUD status tooltip", scene.selected_label.tooltip_text, "상태: 방비 -2 (2회)") if scene.hud_unit_badge_row == null or not scene.hud_unit_badge_row.visible: failures.append("selected HUD should keep status effects discoverable through compact badges") else: _check_contains(failures, "selected badge status tooltip", scene.hud_unit_badge_row.tooltip_text, "상태: 방비 -2 (2회)") _check_contains(failures, "selected HP bar status tooltip", scene.hud_unit_hp_bar.tooltip_text, "상태: 방비 -2 (2회)") _check_contains(failures, "hover tile tooltip status", scene.cell_info_label.tooltip_text, "상태: 방비 -2 (2회)") scene.state.clear_selection() scene._refresh_ranges() var hover_badge := scene._hover_info_badge() _check_contains(failures, "hover tile badge status", str(hover_badge.get("lines", [])), "상태: 방비 -2 (2회)") scene.free() func _loaded_state(failures: Array[String], label: String): var state = BattleStateScript.new() if not state.load_battle("res://data/scenarios/001_yellow_turbans.json"): failures.append("%s could not load opening scenario" % label) return null return state func _check_contains(failures: Array[String], label: String, text: String, expected: String) -> void: if text.contains(expected): return failures.append("%s expected `%s` in `%s`" % [label, expected, text])