Refactored to be controller centric; added message buss pattern with early support eent types

This commit is contained in:
2026-10-24 21:41:44 -05:00
parent d70d4de95e
commit 85155df097
49 changed files with 234 additions and 33 deletions
+18 -10
View File
@@ -1,10 +1,13 @@
[gd_scene load_steps=6 format=3 uid="uid://cx5ewmp2xcuia"] [gd_scene load_steps=9 format=3 uid="uid://cx5ewmp2xcuia"]
[ext_resource type="PackedScene" uid="uid://bhjfvc7gkrvah" path="res://base_environment.tscn" id="1_80nbo"] [ext_resource type="PackedScene" uid="uid://bhjfvc7gkrvah" path="res://base_environment.tscn" id="1_80nbo"]
[ext_resource type="PackedScene" uid="uid://dk32bn35qku60" path="res://scripts/factories/jet_factory.tscn" id="2_e2o6t"] [ext_resource type="PackedScene" uid="uid://dk32bn35qku60" path="res://scripts/controllers/factory_systems/factories/jet_factory.tscn" id="2_e2o6t"]
[ext_resource type="PackedScene" uid="uid://nlwfoq6opqck" path="res://scripts/game_modes/game_mode.tscn" id="3_fc0e3"] [ext_resource type="PackedScene" uid="uid://vcteetx5wu8r" path="res://scripts/controllers/controller_manager.tscn" id="2_j5wjh"]
[ext_resource type="PackedScene" uid="uid://cn0pa8rp6uvue" path="res://scripts/controllers/factory_systems/factory_controller.tscn" id="2_ryrav"]
[ext_resource type="PackedScene" uid="uid://nlwfoq6opqck" path="res://scripts/controllers/game_system/game_modes/game_mode.tscn" id="3_fc0e3"]
[ext_resource type="PackedScene" uid="uid://cuqllmpojcml5" path="res://scripts/controllers/spawn_system/spawn_controller.tscn" id="4_7jktm"] [ext_resource type="PackedScene" uid="uid://cuqllmpojcml5" path="res://scripts/controllers/spawn_system/spawn_controller.tscn" id="4_7jktm"]
[ext_resource type="PackedScene" uid="uid://bgrku2wvaadgg" path="res://scripts/controllers/spawn_system/spawner.tscn" id="5_ryrav"] [ext_resource type="PackedScene" uid="uid://bgrku2wvaadgg" path="res://scripts/controllers/spawn_system/spawner.tscn" id="5_ryrav"]
[ext_resource type="PackedScene" uid="uid://ir8lwj1gx7m2" path="res://scripts/controllers/game_system/game_controller.tscn" id="7_vef74"]
[node name="game" type="Node3D"] [node name="game" type="Node3D"]
@@ -15,18 +18,23 @@ transform = Transform3D(0.15819459, -0.4996306, 0.85167116, 0, 0.8625322, 0.5060
current = true current = true
far = 8000.0 far = 8000.0
[node name="jet_factory" parent="." instance=ExtResource("2_e2o6t")] [node name="controller_manager" parent="." instance=ExtResource("2_j5wjh")]
[node name="game_mode" parent="." node_paths=PackedStringArray("jet_factory") instance=ExtResource("3_fc0e3")] [node name="factory_controller" parent="controller_manager" instance=ExtResource("2_ryrav")]
jet_factory = NodePath("../jet_factory")
[node name="spawn_controller" parent="." node_paths=PackedStringArray("jet_factory") instance=ExtResource("4_7jktm")] [node name="jet_factory" parent="controller_manager/factory_controller" instance=ExtResource("2_e2o6t")]
jet_factory = NodePath("../jet_factory")
[node name="spawner" parent="spawn_controller" instance=ExtResource("5_ryrav")] [node name="spawn_controller" parent="controller_manager" node_paths=PackedStringArray("jet_factory") instance=ExtResource("4_7jktm")]
jet_factory = NodePath("../factory_controller/jet_factory")
[node name="spawner" parent="controller_manager/spawn_controller" instance=ExtResource("5_ryrav")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 214.19254, 80.63972, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 214.19254, 80.63972, 0)
faction = 0 faction = 0
[node name="spawner2" parent="spawn_controller" instance=ExtResource("5_ryrav")] [node name="spawner2" parent="controller_manager/spawn_controller" instance=ExtResource("5_ryrav")]
transform = Transform3D(0.4382143, 0, 0.8988705, 0, 1, 0, -0.8988705, 0, 0.4382143, 0, 100.550575, 0) transform = Transform3D(0.4382143, 0, 0.8988705, 0, 1, 0, -0.8988705, 0, 0.4382143, 0, 100.550575, 0)
faction = 1 faction = 1
[node name="game_controller" parent="controller_manager" instance=ExtResource("7_vef74")]
[node name="game_mode" parent="controller_manager/game_controller" instance=ExtResource("3_fc0e3")]
+36
View File
@@ -0,0 +1,36 @@
class_name BaseController extends Node
var controller_message_bus: ControllerMessageBus = null
func _controller_message(_event: BaseEvent) -> void:
assert(false, "Controller Base '_controller_message' must be overridden...")
func set_controller_message_bus(message_bus: ControllerMessageBus) -> void:
controller_message_bus = message_bus
func unset_controller_message_bus() -> void:
controller_message_bus = null
func message(event: BaseEvent):
return controller_message_bus.message.call(event)
func message_to(message_str: String, event: BaseEvent):
return controller_message_bus.message_to.call(message_str, event)
func message_to_selected(cnames: Array[String], event: BaseEvent):
var responses: Array = Array()
for cname: String in cnames:
responses.append(
controller_message_bus.message_to.call(name, event)
)
return responses
func register_controller(cname: String, controller: BaseController) -> void:
controller_message_bus.register_controller.call(cname, controller)
func unregister_controller(cname: String) -> void:
controller_message_bus.unregister_controller.call(cname)
@@ -0,0 +1 @@
uid://c8i66sp2l1d0f
+49
View File
@@ -0,0 +1,49 @@
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
@@ -0,0 +1 @@
uid://d20ceb66ipyp
@@ -0,0 +1,6 @@
[gd_scene load_steps=2 format=3 uid="uid://vcteetx5wu8r"]
[ext_resource type="Script" uid="uid://d20ceb66ipyp" path="res://scripts/controllers/controller_manager.gd" id="1_rd3hb"]
[node name="controller_manager" type="Node"]
script = ExtResource("1_rd3hb")
@@ -0,0 +1 @@
class_name FactoryBase extends Node
@@ -0,0 +1 @@
uid://cwip0ysw4l6qp
@@ -1,4 +1,4 @@
class_name JetFactory extends Node class_name JetFactory extends FactoryBase
const JET = preload("res://scenes/jet.tscn") const JET = preload("res://scenes/jet.tscn")
@@ -1,6 +1,6 @@
[gd_scene load_steps=2 format=3 uid="uid://dk32bn35qku60"] [gd_scene load_steps=2 format=3 uid="uid://dk32bn35qku60"]
[ext_resource type="Script" uid="uid://c6b0hhfg0xdi4" path="res://scripts/factories/jet_factory.gd" id="1_k26y6"] [ext_resource type="Script" uid="uid://c6b0hhfg0xdi4" path="res://scripts/controllers/factory_systems/factories/jet_factory.gd" id="1_k26y6"]
[node name="jet_factory" type="Node"] [node name="jet_factory" type="Node"]
script = ExtResource("1_k26y6") script = ExtResource("1_k26y6")
@@ -0,0 +1,10 @@
class_name FactoryController extends BaseController
func _ready() -> void:
for factory: FactoryBase in get_children():
pass
func _controller_message(event: BaseEvent) -> void:
if event is BaseEvent:
pass
@@ -0,0 +1 @@
uid://dnb2440074qh5
@@ -0,0 +1,6 @@
[gd_scene load_steps=2 format=3 uid="uid://cn0pa8rp6uvue"]
[ext_resource type="Script" uid="uid://dnb2440074qh5" path="res://scripts/controllers/factory_systems/factory_controller.gd" id="1_yovwh"]
[node name="factory_controller" type="Node"]
script = ExtResource("1_yovwh")
@@ -0,0 +1,15 @@
class_name GameController extends BaseController
func _controller_message(event: BaseEvent) -> void:
if event is GameReadyEvent:
handle_game_ready_event()
func handle_game_ready_event() -> void:
controller_message_bus.message.call(
CreateAlliesJetEvent.new()
)
controller_message_bus.message.call(
CreateAxisJetEvent.new()
)
@@ -0,0 +1 @@
uid://cj1b7xcnaiuu6
@@ -0,0 +1,6 @@
[gd_scene load_steps=2 format=3 uid="uid://ir8lwj1gx7m2"]
[ext_resource type="Script" uid="uid://cj1b7xcnaiuu6" path="res://scripts/controllers/game_system/game_controller.gd" id="1_itum8"]
[node name="game_controller" type="Node"]
script = ExtResource("1_itum8")
@@ -2,8 +2,8 @@ class_name GameMode extends Node
const MODES: Dictionary = { const MODES: Dictionary = {
0: preload("res://scripts/game_modes/dog_fight.gd"), 0: preload("res://scripts/controllers/game_system/game_modes/dog_fight.gd"),
1: preload("res://scripts/game_modes/dog_fight_waves.gd") 1: preload("res://scripts/controllers/game_system/game_modes/dog_fight_waves.gd")
} }
@export_enum( @export_enum(
@@ -0,0 +1,3 @@
[gd_scene format=3 uid="uid://nlwfoq6opqck"]
[node name="game_mode" type="Node"]
@@ -1,16 +1,21 @@
class_name SpawnController extends Node class_name SpawnController extends BaseController
@export var jet_factory: JetFactory @export var jet_factory: JetFactory
func _ready() -> void: func _ready() -> void:
spawn_sides() pass
func _controller_message(event: BaseEvent) -> void:
func spawn_sides() -> void: if event is BaseCreateJetEvent:
if event is CreateAlliesJetEvent:
spawn_allies_jet() spawn_allies_jet()
elif event is CreateAxisJetEvent:
spawn_axis_jet() spawn_axis_jet()
elif event is CreateNeutralJetEvent:
spawn_neutral_jet()
func spawn_neutral_jet(): func spawn_neutral_jet():
var _jet = spawn_jet( var _jet = spawn_jet(
@@ -18,7 +23,7 @@ func spawn_neutral_jet():
) )
func spawn_allies_jet(): func spawn_allies_jet():
var _jet = spawn_jet( var _jet = spawn_jet.call(
Globals.Faction.ALLIES, jet_factory.create_cpu_jet Globals.Faction.ALLIES, jet_factory.create_cpu_jet
) )
@@ -2,5 +2,5 @@
[ext_resource type="Script" uid="uid://bd8ae65orh663" path="res://scripts/controllers/spawn_system/spawn_controller.gd" id="1_xcv1c"] [ext_resource type="Script" uid="uid://bd8ae65orh663" path="res://scripts/controllers/spawn_system/spawn_controller.gd" id="1_xcv1c"]
[node name="spawn_controller" type="Node3D"] [node name="spawn_controller" type="Node"]
script = ExtResource("1_xcv1c") script = ExtResource("1_xcv1c")
-6
View File
@@ -1,6 +0,0 @@
[gd_scene load_steps=2 format=3 uid="uid://nlwfoq6opqck"]
[ext_resource type="Script" uid="uid://dwkkrl7unxqau" path="res://scripts/game_modes/game_mode.gd" id="1_7wd16"]
[node name="game_mode" type="Node"]
script = ExtResource("1_7wd16")
+4 -3
View File
@@ -15,11 +15,12 @@ const PLAYER_MODE: int = 1
func process(delta: float) -> Globals.ControllerCommand: func process(delta: float) -> Globals.ControllerCommand:
if CPU_MODE == control_mode: match control_mode:
CPU_MODE:
return cpu.process(delta) return cpu.process(delta)
elif PLAYER_MODE == control_mode: PLAYER_MODE:
return player.process(delta) return player.process(delta)
_:
return Globals.ControllerCommand.NONE return Globals.ControllerCommand.NONE
func physics_process(delta: float) -> Globals.ControllerCommand: func physics_process(delta: float) -> Globals.ControllerCommand:
@@ -0,0 +1,25 @@
class_name ControllerMessageBus extends Node
var message: Callable = Callable(self, "_message")
var message_to: Callable = Callable(self, "_message_to")
var message_to_selected: Callable = Callable(self, "_message_to_selected")
var register_controller: Callable = Callable(self, "_register_controller")
var unregister_controller: Callable = Callable(self, "_unregister_controller")
func _message(_event: BaseEvent):
assert(false, "Controller Message Bus 'message' must be overriden by Controller Manager...")
func _message_to(_ename: String, _event: BaseEvent):
assert(false, "Controller Message Bus 'message_to' must be overriden by Controller Manager...")
func _message_to_selected(_ename: Array, _event: BaseEvent):
assert(false, "Controller Message Bus 'message_to_selected' must be overriden by Controller Manager...")
func _register_controller(_ename: String, _controller: BaseController):
assert(false, "Controller Message Bus 'register_controller' must be overriden by Controller Manager...")
func _unregister_controller(_ename: String):
assert(false, "Controller Message Bus 'unregister_controller' must be overriden by Controller Manager...")
@@ -0,0 +1 @@
uid://cgv5ev5tk7kqk
@@ -0,0 +1 @@
class_name BaseCreateJetEvent extends BaseFactoryEvent
@@ -0,0 +1 @@
uid://bsjs01g58nv7h
+1
View File
@@ -0,0 +1 @@
class_name BaseEvent extends Node
@@ -0,0 +1 @@
uid://bpd4j7rj2xe0j
@@ -0,0 +1 @@
class_name BaseFactoryEvent extends BaseEvent
@@ -0,0 +1 @@
uid://87yd8iurl2af
@@ -0,0 +1 @@
class_name CreateAlliesJetEvent extends BaseCreateJetEvent
@@ -0,0 +1 @@
uid://bnvkuhn12sq16
@@ -0,0 +1 @@
class_name CreateAxisJetEvent extends BaseCreateJetEvent
@@ -0,0 +1 @@
uid://b1pxjdwfxur45
@@ -0,0 +1 @@
class_name CreateNeutralJetEvent extends BaseCreateJetEvent
@@ -0,0 +1 @@
uid://ml1cwry7qnxa
@@ -0,0 +1 @@
class_name GameReadyEvent extends BaseEvent
@@ -0,0 +1 @@
uid://6i1gnfxc83tx
+9
View File
@@ -0,0 +1,9 @@
class_name MessageBus extends Node
func register_listener(listener) -> void:
pass
func unregister_listener(listener) -> void:
pass
+1
View File
@@ -0,0 +1 @@
uid://gros71i53nx8
+6
View File
@@ -0,0 +1,6 @@
[gd_scene load_steps=2 format=3 uid="uid://k82r6e6quh5l"]
[ext_resource type="Script" uid="uid://gros71i53nx8" path="res://scripts/message_bus/message_bus.gd" id="1_kwdl0"]
[node name="message_bus" type="Node"]
script = ExtResource("1_kwdl0")