Add event prerequisite gates
This commit is contained in:
104
tools/smoke_event_after_event.gd
Normal file
104
tools/smoke_event_after_event.gd
Normal file
@@ -0,0 +1,104 @@
|
||||
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
|
||||
@@ -1502,6 +1502,25 @@ function Check-Required-Flags($RequiredFlags, [string]$ScenarioId, [string]$Cont
|
||||
}
|
||||
}
|
||||
|
||||
function Check-Event-After-Event($When, [string]$ScenarioId, [string]$EventId, $EventIds) {
|
||||
if (-not (Has-Prop $When "after_event")) {
|
||||
return
|
||||
}
|
||||
$afterEvent = [string](Get-Prop $When "after_event" "")
|
||||
if ([string]::IsNullOrWhiteSpace($afterEvent)) {
|
||||
Fail "Scenario $ScenarioId event $EventId has empty after_event."
|
||||
}
|
||||
if (-not ($afterEvent -match "^[a-z0-9_]+$")) {
|
||||
Fail "Scenario $ScenarioId event $EventId has unstable after_event: $afterEvent"
|
||||
}
|
||||
if ($afterEvent -eq $EventId) {
|
||||
Fail "Scenario $ScenarioId event $EventId cannot depend on itself."
|
||||
}
|
||||
if (-not $EventIds.Contains($afterEvent)) {
|
||||
Fail "Scenario $ScenarioId event $EventId references missing after_event: $afterEvent"
|
||||
}
|
||||
}
|
||||
|
||||
function Check-Briefing($Briefing, [string]$ScenarioId) {
|
||||
if ($null -eq $Briefing) {
|
||||
return
|
||||
@@ -1735,6 +1754,7 @@ foreach ($scenario in $campaign.scenarios) {
|
||||
if ($null -eq $when -or $when -is [string] -or $when -is [System.Array]) {
|
||||
Fail "Scenario $scenarioId event $eventId has malformed when."
|
||||
}
|
||||
Check-Event-After-Event $when $scenarioId $eventId $eventIds
|
||||
Check-Required-Flags (Get-Prop $when "campaign_flags" $null) $scenarioId "event $eventId"
|
||||
$trigger = [string]$event.when.type
|
||||
if (-not $validTriggers.Contains($trigger)) {
|
||||
|
||||
Reference in New Issue
Block a user