Refactored to be controller centric; added message buss pattern with early support eent types
This commit is contained in:
@@ -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
|
||||
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user