necra-prototypes/operation/operation.gd
2025-03-29 10:54:45 +01:00

66 lines
1.7 KiB
GDScript

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)