105 lines
2.7 KiB
GDScript
105 lines
2.7 KiB
GDScript
extends SceneTree
|
|
|
|
const BattleStateScript := preload("res://scripts/core/battle_state.gd")
|
|
|
|
|
|
func _init() -> void:
|
|
var failures: Array[String] = []
|
|
_check_manual_gate(failures)
|
|
_check_same_pass_gate(failures)
|
|
|
|
if failures.is_empty():
|
|
print("event after_event smoke ok")
|
|
quit(0)
|
|
return
|
|
|
|
for failure in failures:
|
|
push_error(failure)
|
|
quit(1)
|
|
|
|
|
|
func _check_manual_gate(failures: Array[String]) -> void:
|
|
var state = _loaded_state(failures, "manual gate")
|
|
if state == null:
|
|
return
|
|
var logs := []
|
|
state.log_added.connect(func(message: String) -> void:
|
|
logs.append(message)
|
|
)
|
|
state.fired_event_ids.clear()
|
|
state.battle_events.clear()
|
|
state.battle_events.append({
|
|
"id": "dependent_report",
|
|
"once": true,
|
|
"when": {
|
|
"type": "turn_start",
|
|
"team": "player",
|
|
"turn": 1,
|
|
"after_event": "signal_ready"
|
|
},
|
|
"actions": [
|
|
{"type": "log", "text": "Dependent event fired."}
|
|
]
|
|
})
|
|
|
|
state._run_events("turn_start", "player", 1)
|
|
if logs.has("Dependent event fired."):
|
|
failures.append("after_event dependent fired before prerequisite")
|
|
|
|
state.fired_event_ids["signal_ready"] = true
|
|
state._run_events("turn_start", "player", 1)
|
|
if not logs.has("Dependent event fired."):
|
|
failures.append("after_event dependent did not fire after prerequisite")
|
|
|
|
logs.clear()
|
|
state._run_events("turn_start", "player", 1)
|
|
if logs.has("Dependent event fired."):
|
|
failures.append("after_event dependent repeated despite once flag")
|
|
|
|
|
|
func _check_same_pass_gate(failures: Array[String]) -> void:
|
|
var state = _loaded_state(failures, "same pass gate")
|
|
if state == null:
|
|
return
|
|
var logs := []
|
|
state.log_added.connect(func(message: String) -> void:
|
|
logs.append(message)
|
|
)
|
|
state.fired_event_ids.clear()
|
|
state.battle_events.clear()
|
|
state.battle_events.append({
|
|
"id": "signal_ready",
|
|
"once": true,
|
|
"when": {"type": "turn_start", "team": "player", "turn": 1},
|
|
"actions": [
|
|
{"type": "log", "text": "Signal ready."}
|
|
]
|
|
})
|
|
state.battle_events.append({
|
|
"id": "dependent_report",
|
|
"once": true,
|
|
"when": {
|
|
"type": "turn_start",
|
|
"team": "player",
|
|
"turn": 1,
|
|
"after_event": "signal_ready"
|
|
},
|
|
"actions": [
|
|
{"type": "log", "text": "Dependent event fired."}
|
|
]
|
|
})
|
|
|
|
state._run_events("turn_start", "player", 1)
|
|
if not logs.has("Signal ready."):
|
|
failures.append("same-pass prerequisite did not fire")
|
|
if not logs.has("Dependent event fired."):
|
|
failures.append("same-pass dependent did not fire after prerequisite")
|
|
|
|
|
|
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 smoke scenario" % label)
|
|
return null
|
|
return state
|