2026-10-24 21:41:44 -05:00
|
|
|
class_name ControllerManager extends Node
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var controller_message_bus: ControllerMessageBus = ControllerMessageBus.new()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func _init() -> void:
|
|
|
|
|
_connect_signals()
|
|
|
|
|
_bind_callables()
|
|
|
|
|
|
2026-10-25 16:22:34 -05:00
|
|
|
func _ready() -> void:
|
|
|
|
|
var timer = get_tree().create_timer(0.200)
|
|
|
|
|
await timer.timeout
|
|
|
|
|
|
|
|
|
|
controller_message_bus.message.call(
|
|
|
|
|
GameReadyEvent.new()
|
|
|
|
|
)
|
|
|
|
|
|
2026-10-24 21:41:44 -05:00
|
|
|
func _connect_signals() -> void:
|
|
|
|
|
connect("child_entered_tree", register_controller)
|
|
|
|
|
connect("child_exiting_tree", unregister_controller)
|
|
|
|
|
|
|
|
|
|
func _bind_callables() -> void:
|
|
|
|
|
controller_message_bus.message = Callable(self, "message")
|
|
|
|
|
controller_message_bus.message_to = Callable(self, "message_to")
|
|
|
|
|
controller_message_bus.register_controller = Callable(self, "register_controller")
|
|
|
|
|
controller_message_bus.unregister_controller = Callable(self, "unregister_controller")
|
|
|
|
|
|
|
|
|
|
func register_controller(controller: BaseController) -> void:
|
|
|
|
|
controller.set_controller_message_bus(controller_message_bus)
|
|
|
|
|
|
|
|
|
|
func unregister_controller(controller: BaseController) -> void:
|
|
|
|
|
controller.unset_controller_message_bus()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func message(event: BaseEvent):
|
|
|
|
|
for controller: BaseController in get_children():
|
|
|
|
|
controller._controller_message(event)
|
|
|
|
|
|
|
|
|
|
func message_to(cname: String, event: BaseEvent):
|
|
|
|
|
get_node(cname)._controller_message(event)
|
|
|
|
|
|
|
|
|
|
func message_to_selected(cnames: Array[String], event: BaseEvent):
|
|
|
|
|
var results: Array = Array()
|
|
|
|
|
|
|
|
|
|
for cname: String in cnames:
|
|
|
|
|
results.append(
|
|
|
|
|
controller_message_bus.message_to.call(name, event)
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
return results
|