class_name ControllerManager extends Node var controller_message_bus: ControllerMessageBus = ControllerMessageBus.new() func _init() -> void: _connect_signals() _bind_callables() 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 _ready() -> void: controller_message_bus.message.call( GameReadyEvent.new() ) 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