66 lines
1.7 KiB
GDScript
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)
|