necra-prototypes/operation/cut_sequence.gd
Antonio Dell'Annunziata 5c785e24af
All checks were successful
/ test (push) Successful in 2s
Integrate map and ritual
2025-03-16 16:26:42 +01:00

47 lines
1.1 KiB
GDScript

class_name CutSequence
extends Node2D
signal sequence_failed
signal sequence_succeeded
@export var is_skipped = false
var cut_sequence_points: Array[CutSequencePoint] = []
func _ready():
_build_sequence()
func _build_sequence():
for c in get_children():
if c is CutSequencePoint:
c.point_cut.connect(_trigger_point_cut.bind(c))
cut_sequence_points.push_back(c)
var cut_indices: Array[int] = []
func _trigger_point_cut(point: CutSequencePoint):
var cut_index = cut_sequence_points.find(point)
var is_cut_valid = false
if cut_indices.is_empty():
is_cut_valid = cut_index == 0 or cut_index == cut_sequence_points.size() - 1
else:
var direction = -1 if cut_indices[0] == 0 else 1
is_cut_valid = cut_index + direction == cut_indices[-1] # Expect the next index
if not is_cut_valid:
_fail_sequence()
return
point.confirm_cut()
cut_indices.push_back(cut_index)
if cut_indices.size() == cut_sequence_points.size():
_succeed_sequence()
func _fail_sequence():
for i in cut_indices:
cut_sequence_points[i].reset_cut()
cut_indices.clear()
sequence_failed.emit()
func _succeed_sequence():
sequence_succeeded.emit()