diff --git a/autoloads/globals.gd b/autoloads/globals.gd index 25e6f98..753dc6c 100644 --- a/autoloads/globals.gd +++ b/autoloads/globals.gd @@ -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, diff --git a/game.tscn b/game.tscn index bac1a9f..58053b8 100644 --- a/game.tscn +++ b/game.tscn @@ -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") diff --git a/scenes/jet.gd b/scenes/jet.gd index 2badf04..962f63b 100644 --- a/scenes/jet.gd +++ b/scenes/jet.gd @@ -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 diff --git a/scripts/controllers/base_controller.gd b/scripts/controllers/base_controller.gd index e4199cd..524edf1 100644 --- a/scripts/controllers/base_controller.gd +++ b/scripts/controllers/base_controller.gd @@ -1,6 +1,8 @@ class_name BaseController extends Node +@export var jets_collection: JetsCollection + var controller_message_bus: ControllerMessageBus = null diff --git a/scripts/controllers/controller_manager.gd b/scripts/controllers/controller_manager.gd index f63f6f1..5bf1d70 100644 --- a/scripts/controllers/controller_manager.gd +++ b/scripts/controllers/controller_manager.gd @@ -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) diff --git a/scripts/controllers/cpu_system/cpu_controller.gd b/scripts/controllers/cpu_system/cpu_controller.gd new file mode 100644 index 0000000..7f71ea1 --- /dev/null +++ b/scripts/controllers/cpu_system/cpu_controller.gd @@ -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() diff --git a/scripts/controllers/cpu_system/cpu_controller.gd.uid b/scripts/controllers/cpu_system/cpu_controller.gd.uid new file mode 100644 index 0000000..8b491ac --- /dev/null +++ b/scripts/controllers/cpu_system/cpu_controller.gd.uid @@ -0,0 +1 @@ +uid://u1tiecau7p8g diff --git a/scripts/controllers/cpu_system/cpu_controller.tscn b/scripts/controllers/cpu_system/cpu_controller.tscn new file mode 100644 index 0000000..130f77b --- /dev/null +++ b/scripts/controllers/cpu_system/cpu_controller.tscn @@ -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") diff --git a/scripts/controllers/factory_systems/factories/jet_factory.gd b/scripts/controllers/factory_systems/factories/jet_factory.gd index 4367669..14c989a 100644 --- a/scripts/controllers/factory_systems/factories/jet_factory.gd +++ b/scripts/controllers/factory_systems/factories/jet_factory.gd @@ -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 diff --git a/scripts/controllers/spawn_system/spawn_controller.gd b/scripts/controllers/spawn_system/spawn_controller.gd index d87768d..24072e5 100644 --- a/scripts/controllers/spawn_system/spawn_controller.gd +++ b/scripts/controllers/spawn_system/spawn_controller.gd @@ -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 diff --git a/scripts/controllers/spawn_system/spawner.gd b/scripts/controllers/spawn_system/spawner.gd index f660346..7462122 100644 --- a/scripts/controllers/spawn_system/spawner.gd +++ b/scripts/controllers/spawn_system/spawner.gd @@ -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") diff --git a/scripts/jet_controls/controller.gd b/scripts/jet_controls/controller.gd index 00161d2..d710b00 100644 --- a/scripts/jet_controls/controller.gd +++ b/scripts/jet_controls/controller.gd @@ -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 diff --git a/scripts/jet_controls/cpu.gd b/scripts/jet_controls/cpu.gd index 1e21bf0..4778b36 100644 --- a/scripts/jet_controls/cpu.gd +++ b/scripts/jet_controls/cpu.gd @@ -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 diff --git a/scripts/jets_collection.gd b/scripts/jets_collection.gd new file mode 100644 index 0000000..038a709 --- /dev/null +++ b/scripts/jets_collection.gd @@ -0,0 +1 @@ +class_name JetsCollection extends Node3D diff --git a/scripts/jets_collection.gd.uid b/scripts/jets_collection.gd.uid new file mode 100644 index 0000000..ea304b1 --- /dev/null +++ b/scripts/jets_collection.gd.uid @@ -0,0 +1 @@ +uid://dx87oh0d3xqa diff --git a/scripts/jets_collection.tscn b/scripts/jets_collection.tscn new file mode 100644 index 0000000..218c23b --- /dev/null +++ b/scripts/jets_collection.tscn @@ -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")