Refactored to be controller centric; added message buss pattern with early support eent types
This commit is contained in:
@@ -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")]
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -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
-1
@@ -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
-1
@@ -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
-2
@@ -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:
|
||||||
|
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():
|
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")
|
||||||
|
|||||||
@@ -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")
|
|
||||||
@@ -15,12 +15,13 @@ 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:
|
||||||
return cpu.process(delta)
|
CPU_MODE:
|
||||||
elif PLAYER_MODE == control_mode:
|
return cpu.process(delta)
|
||||||
return player.process(delta)
|
PLAYER_MODE:
|
||||||
|
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:
|
||||||
if CPU_MODE == control_mode:
|
if CPU_MODE == control_mode:
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -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
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
class_name MessageBus extends Node
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
func register_listener(listener) -> void:
|
||||||
|
pass
|
||||||
|
|
||||||
|
func unregister_listener(listener) -> void:
|
||||||
|
pass
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://gros71i53nx8
|
||||||
@@ -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")
|
||||||
Reference in New Issue
Block a user