extends Node const PAST := &"past" const FUTURE := &"future" var current_time_phase: StringName = PAST func set_time_phase(next: StringName, reason: StringName) -> void: if next != PAST and next != FUTURE: return if next == current_time_phase: return var previous := current_time_phase current_time_phase = next var bus := _event_bus_or_null() if bus != null and bus.has_signal("time_phase_changed"): bus.emit_signal("time_phase_changed", previous, current_time_phase, reason) func toggle_time_phase(reason: StringName) -> void: set_time_phase(FUTURE if current_time_phase == PAST else PAST, reason) func reset_to_initial(initial: StringName) -> void: var target := initial if (initial == PAST or initial == FUTURE) else PAST set_time_phase(target, &"chart_init") func _event_bus_or_null() -> Node: if not is_inside_tree(): return null var children := get_tree().root.get_children() for index: int in range(children.size() - 1, -1, -1): var child: Node = children[index] if child.has_signal("time_phase_changed") and child.has_signal("chart_event_triggered"): return child return null