load jets to a collection; wire up cpu controller pattern
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
class_name BaseController extends Node
|
||||
|
||||
|
||||
@export var jets_collection: JetsCollection
|
||||
|
||||
var controller_message_bus: ControllerMessageBus = null
|
||||
|
||||
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
class_name JetsCollection extends Node3D
|
||||
@@ -0,0 +1 @@
|
||||
uid://dx87oh0d3xqa
|
||||
@@ -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")
|
||||
Reference in New Issue
Block a user