Initial project sync
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
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
|
||||
Reference in New Issue
Block a user