Add unique identifier for test_phase3c_walk_recovery.gd
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
class_name TriggerRegistry
|
||||
extends RefCounted
|
||||
## TriggerRegistry - Registry of rule trigger templates (Phase 3c).
|
||||
##
|
||||
## Single source of truth for the trigger types the event system understands.
|
||||
## Adding a new trigger type is just appending an entry here; the RuleEditor and
|
||||
## the panels generate their UI from this registry.
|
||||
|
||||
const TRIGGER_TEMPLATES := {
|
||||
"arrived_at_waypoint": {
|
||||
"label": "Arrives at waypoint",
|
||||
"icon": "📍",
|
||||
"target_type": "waypoint",
|
||||
},
|
||||
"action_finished": {
|
||||
"label": "Completes any action",
|
||||
"icon": "✅",
|
||||
"target_type": "action_type",
|
||||
},
|
||||
"speech_finished": {
|
||||
"label": "Finishes speaking",
|
||||
"icon": "💬",
|
||||
"target_type": "none",
|
||||
},
|
||||
"entered_area": {
|
||||
"label": "Enters trigger area",
|
||||
"icon": "🎯",
|
||||
"target_type": "area",
|
||||
},
|
||||
"collided": {
|
||||
"label": "Collides with something",
|
||||
"icon": "💥",
|
||||
"target_type": "prop",
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
static func types() -> Array[String]:
|
||||
# Dictionary.keys() returns an untyped Array at runtime; build a genuinely
|
||||
# typed Array[String] so callers can store it in typed locals (see
|
||||
# RuleEditor._current_type).
|
||||
var out: Array[String] = []
|
||||
out.assign(TRIGGER_TEMPLATES.keys())
|
||||
return out
|
||||
|
||||
|
||||
static func has_type(type: String) -> bool:
|
||||
return TRIGGER_TEMPLATES.has(type)
|
||||
|
||||
|
||||
static func label(type: String) -> String:
|
||||
var tpl: Dictionary = TRIGGER_TEMPLATES.get(type, {})
|
||||
return String(tpl.get("label", type))
|
||||
|
||||
|
||||
static func icon(type: String) -> String:
|
||||
var tpl: Dictionary = TRIGGER_TEMPLATES.get(type, {})
|
||||
return String(tpl.get("icon", ""))
|
||||
|
||||
|
||||
## Which kind of stage target a trigger needs: "waypoint", "action_type",
|
||||
## "area", "prop", or "none".
|
||||
static func target_type(type: String) -> String:
|
||||
var tpl: Dictionary = TRIGGER_TEMPLATES.get(type, {})
|
||||
return String(tpl.get("target_type", "none"))
|
||||
|
||||
|
||||
## Human-readable summary of a trigger, e.g. "Arrives at waypoint".
|
||||
static func summarize(trigger: Dictionary) -> String:
|
||||
var type := String(trigger.get("type", ""))
|
||||
return "%s %s" % [icon(type), label(type)]
|
||||
Reference in New Issue
Block a user