86 lines
2.4 KiB
GDScript
86 lines
2.4 KiB
GDScript
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")
|
|
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, 3)
|
|
scene._update_hud()
|
|
_check_contains(failures, "selected HUD status", scene.selected_label.text, "상태: 방비 -2 (2회)")
|
|
_check_contains(failures, "hover tile status", scene.cell_info_label.text, "상태: 방비 -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])
|