load jets to a collection; wire up cpu controller pattern

This commit is contained in:
2026-10-25 16:22:34 -05:00
parent 22413fabd5
commit cffc4de55f
16 changed files with 102 additions and 32 deletions
+5
View File
@@ -15,6 +15,11 @@ const FactionColor = {
Faction.NEUTRAL: Color(0.71, 0.584, 0.0, 1.0)
}
enum ControlMode {
CPU_MODE,
PLAYER_MODE
}
enum ControllerCommand {
NONE,
PULL_UP,
+12 -4
View File
@@ -1,13 +1,15 @@
[gd_scene load_steps=9 format=3 uid="uid://cx5ewmp2xcuia"]
[gd_scene load_steps=11 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://dk32bn35qku60" path="res://scripts/controllers/factory_systems/factories/jet_factory.tscn" id="2_e2o6t"]
[ext_resource type="PackedScene" uid="uid://d3br5pvjbv7gs" path="res://scripts/jets_collection.tscn" id="2_hve3p"]
[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://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"]
[ext_resource type="PackedScene" uid="uid://gb85fimcn0ya" path="res://scripts/controllers/cpu_system/cpu_controller.tscn" id="9_vef74"]
[node name="game" type="Node3D"]
@@ -18,14 +20,17 @@ transform = Transform3D(0.15819459, -0.4996306, 0.85167116, 0, 0.8625322, 0.5060
current = true
far = 8000.0
[node name="jets_collection" parent="." instance=ExtResource("2_hve3p")]
[node name="controller_manager" parent="." instance=ExtResource("2_j5wjh")]
[node name="factory_controller" parent="controller_manager" instance=ExtResource("2_ryrav")]
[node name="jet_factory" parent="controller_manager/factory_controller" instance=ExtResource("2_e2o6t")]
[node name="spawn_controller" parent="controller_manager" node_paths=PackedStringArray("jet_factory") instance=ExtResource("4_7jktm")]
[node name="spawn_controller" parent="controller_manager" node_paths=PackedStringArray("jet_factory", "jets_collection") instance=ExtResource("4_7jktm")]
jet_factory = NodePath("../factory_controller/jet_factory")
jets_collection = NodePath("../../jets_collection")
[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)
@@ -35,9 +40,12 @@ faction = 0
transform = Transform3D(0.4382143, 0, 0.8988705, 0, 1, 0, -0.8988705, 0, 0.4382143, 0, 100.550575, 0)
faction = 1
[node name="spawner3" parent="controller_manager/spawn_controller" instance=ExtResource("5_ryrav")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 84.06215, 2.5178223, -76.95647)
[node name="game_controller" parent="controller_manager" instance=ExtResource("7_vef74")]
[node name="game_mode" parent="controller_manager/game_controller" instance=ExtResource("3_fc0e3")]
[node name="spawner" parent="." instance=ExtResource("5_ryrav")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 84.06215, 2.5178223, -76.95647)
[node name="cpu_controller" parent="controller_manager" node_paths=PackedStringArray("jets_collection") instance=ExtResource("9_vef74")]
jets_collection = NodePath("../../jets_collection")
+3 -3
View File
@@ -4,7 +4,7 @@ class_name Jet extends CharacterBody3D
@export_enum(
"CPU:0",
"PLAYER:1"
) var control_mode: int = JetController.CPU_MODE
) var control_mode: int = Globals.ControlMode.CPU_MODE
@export_enum(
"Allies:0",
@@ -44,8 +44,8 @@ func set_model(model: Node) -> void:
func set_as_player() -> void:
camera.current = true
controller.control_mode = controller.PLAYER_MODE
controller.control_mode = Globals.ControlMode.PLAYER_MODE
func set_as_cpu() -> void:
camera.current = false
controller.control_mode = controller.CPU_MODE
controller.control_mode = Globals.ControlMode.CPU_MODE
+2
View File
@@ -1,6 +1,8 @@
class_name BaseController extends Node
@export var jets_collection: JetsCollection
var controller_message_bus: ControllerMessageBus = null
+8 -6
View File
@@ -8,6 +8,14 @@ func _init() -> void:
_connect_signals()
_bind_callables()
func _ready() -> void:
var timer = get_tree().create_timer(0.200)
await timer.timeout
controller_message_bus.message.call(
GameReadyEvent.new()
)
func _connect_signals() -> void:
connect("child_entered_tree", register_controller)
connect("child_exiting_tree", unregister_controller)
@@ -18,12 +26,6 @@ func _bind_callables() -> void:
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)
@@ -0,0 +1,18 @@
class_name CPUController extends BaseController
func _controller_message(_event: BaseEvent) -> void:
pass
func _process(_delta: float) -> void:
if not jets_collection: return
for jet: Jet in jets_collection.get_children():
if jet.controller.control_mode == Globals.ControlMode.PLAYER_MODE:
continue
set_jet_action(jet)
func set_jet_action(jet: Jet) -> void:
jet.controller.cpu.yaw_left()
@@ -0,0 +1 @@
uid://u1tiecau7p8g
@@ -0,0 +1,6 @@
[gd_scene load_steps=2 format=3 uid="uid://gb85fimcn0ya"]
[ext_resource type="Script" uid="uid://u1tiecau7p8g" path="res://scripts/controllers/cpu_system/cpu_controller.gd" id="1_0c7ho"]
[node name="cpu_controller" type="Node"]
script = ExtResource("1_0c7ho")
@@ -22,8 +22,6 @@ func _get_jet_type(faction: int) -> Jet:
else:
jet = create_neutral_jet()
get_tree().root.add_child.call_deferred(jet)
return jet
@@ -40,6 +40,8 @@ func spawn_jet(faction: Globals.Faction, callback: Callable) -> Jet:
if not spawner.is_available: continue
jet = callback.call(faction)
jets_collection.add_child.call(jet)
spawner.align_to_position.call_deferred(jet)
return jet
@@ -16,9 +16,6 @@ func _debug_setup() -> void:
visible = false
return
var timer = get_tree().create_timer(0.200)
await timer.timeout
visible = true
var visual_node: MeshInstance3D = get_node("visual")
var visual_node2: MeshInstance3D = get_node("visual_direction")
+7 -11
View File
@@ -1,40 +1,36 @@
class_name JetController extends Node
const CPU_MODE: int = 0
const PLAYER_MODE: int = 1
@export_enum(
"CPU:0",
"PLAYER:1"
) var control_mode: int = PLAYER_MODE
) var control_mode: int = Globals.ControlMode.PLAYER_MODE
@onready var cpu: CPU = $cpu
@onready var player: Player = $player
func process(delta: float) -> Globals.ControllerCommand:
match control_mode:
CPU_MODE:
Globals.ControlMode.CPU_MODE:
return cpu.process(delta)
PLAYER_MODE:
Globals.ControlMode.PLAYER_MODE:
return player.process(delta)
_:
return Globals.ControllerCommand.NONE
func physics_process(delta: float) -> Globals.ControllerCommand:
if CPU_MODE == control_mode:
if Globals.ControlMode.CPU_MODE == control_mode:
return cpu.physics_process(delta)
elif PLAYER_MODE == control_mode:
elif Globals.ControlMode.PLAYER_MODE == control_mode:
return player.physics_process(delta)
return Globals.ControllerCommand.NONE
func unhandled_input(event: InputEvent) -> Globals.ControllerCommand:
if CPU_MODE == control_mode:
if Globals.ControlMode.CPU_MODE == control_mode:
return cpu.unhandled_input(event)
elif PLAYER_MODE == control_mode:
elif Globals.ControlMode.PLAYER_MODE == control_mode:
return player.unhandled_input(event)
return Globals.ControllerCommand.NONE
+30 -3
View File
@@ -1,11 +1,38 @@
class_name CPU extends Node
var command: Globals.ControllerCommand = Globals.ControllerCommand.NONE
func process(_delta: float) -> Globals.ControllerCommand:
return Globals.ControllerCommand.YAW_LEFT
return command
func physics_process(_delta: float) -> Globals.ControllerCommand:
return Globals.ControllerCommand.NONE
return command
func unhandled_input(_event: InputEvent) -> Globals.ControllerCommand:
return Globals.ControllerCommand.NONE
return command
func pull_up() -> void:
command = Globals.ControllerCommand.PULL_UP
func push_down() -> void:
command = Globals.ControllerCommand.PUSH_DOWN
func yaw_left() -> void:
command = Globals.ControllerCommand.YAW_LEFT
func yaw_right() -> void:
command = Globals.ControllerCommand.YAW_RIGHT
func roll_left() -> void:
command = Globals.ControllerCommand.ROLL_LEFT
func roll_right() -> void:
command = Globals.ControllerCommand.ROLL_RIGHT
func throttle_up() -> void:
command = Globals.ControllerCommand.THROTTLE_UP
func throttle_down() -> void:
command = Globals.ControllerCommand.THROTTLE_DOWN
+1
View File
@@ -0,0 +1 @@
class_name JetsCollection extends Node3D
+1
View File
@@ -0,0 +1 @@
uid://dx87oh0d3xqa
+6
View File
@@ -0,0 +1,6 @@
[gd_scene load_steps=2 format=3 uid="uid://d3br5pvjbv7gs"]
[ext_resource type="Script" uid="uid://dx87oh0d3xqa" path="res://scripts/jets_collection.gd" id="1_ugihe"]
[node name="jets_collection" type="Node3D"]
script = ExtResource("1_ugihe")