class_name Operation extends Node2D signal succeeded var steps: Array[Node2D] = [] var active_step: Node2D = null func _ready(): var children = get_children() for child in children: if child is Node2D: if "is_skipped" in child and child.is_skipped: _disable_node2d(child) continue steps.push_back(child) if child is CutSequence: child.sequence_succeeded.connect(_on_cut_sequence_succeeded.bind(child)) child.sequence_failed.connect(_on_cut_sequence_failed.bind(child)) _disable_node2d(child) elif child is GrabStep: child.step_succeeded.connect(_on_grab_step_succeeded.bind(child)) _disable_node2d(child) elif child is RitualStep: child.step_succeeded.connect(_on_ritual_step_succeeded.bind(child)) _disable_node2d(child) active_step = steps[0] if active_step is GrabStep: _disable_node2d(%TestBody1) else: _enable_node2d(%TestBody1) _enable_node2d(active_step) func _on_cut_sequence_succeeded(cut_sequence: CutSequence): _disable_node2d(active_step) var next_index = steps.find(cut_sequence) + 1 if next_index == 4: _disable_node2d(%TestBody1) active_step = steps[next_index] _enable_node2d(active_step) func _on_cut_sequence_failed(cut_sequence: CutSequence): pass func _on_grab_step_succeeded(grab_step: GrabStep): var next_index = steps.find(grab_step) + 1 active_step = steps[next_index] _enable_node2d(active_step) func _on_ritual_step_succeeded(ritual_step: RitualStep): succeeded.emit() func _enable_node2d(node: Node2D): node.set_deferred("visible", true) node.set_deferred("process_mode", Node.PROCESS_MODE_INHERIT) func _disable_node2d(node: Node2D): node.set_deferred("visible", false) node.set_deferred("process_mode", Node.PROCESS_MODE_DISABLED)