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
+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
@@ -0,0 +1,65 @@
class_name JetFactory extends FactoryBase
const JET = preload("res://scenes/jet.tscn")
func _ready() -> void:
pass
func _get_jet_type(faction: int) -> Jet:
var jet: Jet = null
if faction == Globals.Faction.ALLIES:
jet = create_allies_jet()
jet.name = Globals.Faction.keys()[Globals.Faction.ALLIES] + "_JET"
elif faction == Globals.Faction.AXIS:
jet = create_axis_jet()
jet.name = Globals.Faction.keys()[Globals.Faction.AXIS] + "_JET"
elif faction == Globals.Faction.NEUTRAL:
jet = create_neutral_jet()
jet.name = Globals.Faction.keys()[Globals.Faction.NEUTRAL] + "_JET"
else:
jet = create_neutral_jet()
get_tree().root.add_child.call_deferred(jet)
return jet
func create_player_jet(faction: int = 0) -> Jet:
var jet: Jet = _get_jet_type(faction)
jet.set_as_player.call_deferred()
return jet
func create_cpu_jet(faction: int = 0) -> Jet:
var jet = _get_jet_type(faction)
jet.set_as_cpu.call_deferred()
return jet
func create_neutral_jet() -> Jet:
return create_jet_frame(
Globals.Faction.NEUTRAL, EaglePlus.new()
)
func create_allies_jet() -> Jet:
return create_jet_frame(
Globals.Faction.ALLIES, EaglePlus.new()
)
func create_axis_jet() -> Jet:
return create_jet_frame(
Globals.Faction.AXIS, SakerFalcon.new()
)
func create_jet_frame(faction: Globals.Faction, frame: BaseJet) -> Jet:
var jet = JET.instantiate()
jet.add_child( frame.MODEL.instantiate() )
jet.faction = faction
jet.control_frame = frame
return jet
@@ -0,0 +1 @@
uid://c6b0hhfg0xdi4
@@ -0,0 +1,6 @@
[gd_scene load_steps=2 format=3 uid="uid://dk32bn35qku60"]
[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"]
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")
@@ -0,0 +1,9 @@
class_name BaseGameMode extends Node
var ALLIES_COUNT: int = 10
var AXIS_COUNT: int = 10
var NEUTRAL_COUNT: int = 10
var SPAWN_COUNT: int = 16
var LIFE_CHIPS_COUNT: int = 200
var WAVES: int = 5
@@ -0,0 +1 @@
uid://bkove4hhspua4
@@ -0,0 +1,10 @@
class_name DogFight extends BaseGameMode
func _init() -> void:
SPAWN_COUNT = 16
LIFE_CHIPS_COUNT = SPAWN_COUNT * 3
func _ready() -> void:
pass
@@ -0,0 +1 @@
uid://bkbfu1tsd611m
@@ -0,0 +1,6 @@
class_name DogFightWaves extends BaseGameMode
func _init() -> void:
pass
@@ -0,0 +1 @@
uid://qo3ajsysrh4c
@@ -0,0 +1,19 @@
class_name GameMode extends Node
const MODES: Dictionary = {
0: preload("res://scripts/controllers/game_system/game_modes/dog_fight.gd"),
1: preload("res://scripts/controllers/game_system/game_modes/dog_fight_waves.gd")
}
@export_enum(
"Dog Fight:0",
"Dog Fight Waves:1"
) var mode: int = 0
@export var jet_factory: JetFactory
func _ready() -> void:
#MODES[mode].instantiate()
pass
@@ -0,0 +1 @@
uid://dwkkrl7unxqau
@@ -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
func _ready() -> void:
spawn_sides()
pass
func _controller_message(event: BaseEvent) -> void:
if event is BaseCreateJetEvent:
if event is CreateAlliesJetEvent:
spawn_allies_jet()
elif event is CreateAxisJetEvent:
spawn_axis_jet()
elif event is CreateNeutralJetEvent:
spawn_neutral_jet()
func spawn_sides() -> void:
spawn_allies_jet()
spawn_axis_jet()
func spawn_neutral_jet():
var _jet = spawn_jet(
@@ -18,7 +23,7 @@ func spawn_neutral_jet():
)
func spawn_allies_jet():
var _jet = spawn_jet(
var _jet = spawn_jet.call(
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"]
[node name="spawn_controller" type="Node3D"]
[node name="spawn_controller" type="Node"]
script = ExtResource("1_xcv1c")