From eedf870f779ff0c45b7ec384d56971fdfe74e678 Mon Sep 17 00:00:00 2001 From: itdominator <1itdominator@gmail.com> Date: Sun, 18 Oct 2026 22:58:58 -0500 Subject: [PATCH] Wired up player controls to jet control surfaces; additional jet factory and game mode work --- base_environment.tscn | 25 +++++++- game.tscn | 4 +- project.godot | 10 ++++ scenes/jet.gd | 38 ++++++++---- scenes/jet.tscn | 5 +- scripts/factories/jet_factory.gd | 12 ++++ scripts/game_modes/base_game_mode.gd | 8 +++ scripts/game_modes/dog_fight.gd | 9 +++ scripts/game_modes/dog_fight_waves.gd | 5 ++ scripts/game_modes/game_mode.gd | 4 +- scripts/jet_controls/controller.gd | 5 +- scripts/jet_controls/player.gd | 16 +++-- scripts/jet_variants/base_jet.gd | 84 ++++++++++++++++++++------- scripts/jet_variants/eagle_plus.gd | 14 ++--- scripts/jet_variants/saker_falcon.gd | 14 ++--- 15 files changed, 192 insertions(+), 61 deletions(-) diff --git a/base_environment.tscn b/base_environment.tscn index 89e8b73..a8a2f55 100644 --- a/base_environment.tscn +++ b/base_environment.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=4 format=3 uid="uid://bhjfvc7gkrvah"] +[gd_scene load_steps=9 format=3 uid="uid://bhjfvc7gkrvah"] [sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_6qa24"] @@ -10,9 +10,32 @@ radiance_size = 2 background_mode = 2 sky = SubResource("Sky_f3sb7") +[sub_resource type="BoxMesh" id="BoxMesh_6qa24"] +subdivide_depth = 35 + +[sub_resource type="Gradient" id="Gradient_6qa24"] +offsets = PackedFloat32Array(0, 0.49146757, 0.79522187, 1) +colors = PackedColorArray(0.101960786, 0.23137255, 0.101960786, 1, 0.3529412, 0.5882353, 0.3529412, 1, 1, 0.73200893, 0.572837, 1, 0.39866272, 0.30974528, 0, 1) + +[sub_resource type="FastNoiseLite" id="FastNoiseLite_sw2hg"] + +[sub_resource type="NoiseTexture2D" id="NoiseTexture2D_dxvaa"] +noise = SubResource("FastNoiseLite_sw2hg") +color_ramp = SubResource("Gradient_6qa24") + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_qc2au"] +albedo_texture = SubResource("NoiseTexture2D_dxvaa") +metallic = 1.0 + [node name="base_environment" type="Node"] [node name="sky" type="WorldEnvironment" parent="."] environment = SubResource("Environment_sw2hg") [node name="sun" type="DirectionalLight3D" parent="."] +transform = Transform3D(-0.99999994, 6.181724e-08, -6.181724e-08, 0, 0.70710677, 0.70710677, 8.742277e-08, 0.70710677, -0.70710677, 0, 0, 0) + +[node name="ground" type="CSGMesh3D" parent="."] +transform = Transform3D(10000, 0, 0, 0, 1, 0, 0, 0, 10000, -0.94091797, -43.000427, 0.12632751) +mesh = SubResource("BoxMesh_6qa24") +material = SubResource("StandardMaterial3D_qc2au") diff --git a/game.tscn b/game.tscn index ff45a52..0c33c7e 100644 --- a/game.tscn +++ b/game.tscn @@ -13,5 +13,5 @@ current = true [node name="jet_factory" parent="." instance=ExtResource("2_e2o6t")] -[node name="game_mode" parent="." node_paths=PackedStringArray("jetFactory") instance=ExtResource("3_fc0e3")] -jetFactory = NodePath("../jet_factory") +[node name="game_mode" parent="." node_paths=PackedStringArray("jet_factory") instance=ExtResource("3_fc0e3")] +jet_factory = NodePath("../jet_factory") diff --git a/project.godot b/project.godot index bdac5ac..b8f10df 100644 --- a/project.godot +++ b/project.godot @@ -65,3 +65,13 @@ roll_right={ , Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194321,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) ] } +throttle_up={ +"deadzone": 0.2, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":32,"key_label":0,"unicode":32,"location":0,"echo":false,"script":null) +] +} +throttle_down={ +"deadzone": 0.2, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":true,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":32,"key_label":0,"unicode":32,"location":0,"echo":false,"script":null) +] +} diff --git a/scenes/jet.gd b/scenes/jet.gd index 8219af8..9b83530 100644 --- a/scenes/jet.gd +++ b/scenes/jet.gd @@ -1,36 +1,50 @@ -class_name Jet extends Node3D +class_name Jet extends CharacterBody3D +@export_enum( + "CPU:0", + "PLAYER:1" +) var control_mode: int = JetController.CPU_MODE -@export_enum("CPU:0", "PLAYER:1") var control_mode: int = JetController.CPU_MODE -@export_enum("Allies:0", "Axis:1") var CONFLICT_SIDE: int +@export_enum( + "Allies:0", + "Axis:1", + "Neutral:2" +) var faction: int @onready var camera: Camera3D = $camera @onready var controller: JetController = $controller +var control_frame: BaseJet = null + func _ready() -> void: pass -func _process(delta: float) -> void: - var action = controller.process(delta) - if not action: return +#func _process(delta: float) -> void: + #var action = controller.process(delta) + #if action: + #control_frame.do_action(action, delta, self) -#func _physics_process(delta: float) -> void: - #var action = controller.physics_process(delta) - #if not action: return +func _physics_process(delta: float) -> void: + var action = controller.process(delta) + + if action: + control_frame.do_action(action, delta, self) + + move_and_slide() #func _unhandled_input(event: InputEvent) -> void: #var action = controller.unhandled_input(event) #if not action: return -func set_model(model: Node): +func set_model(model: Node) -> void: add_child(model) -func set_as_player(): +func set_as_player() -> void: camera.current = true controller.control_mode = controller.PLAYER_MODE -func set_as_cpu(): +func set_as_cpu() -> void: camera.current = false controller.control_mode = controller.CPU_MODE diff --git a/scenes/jet.tscn b/scenes/jet.tscn index 18524ec..40ed1d8 100644 --- a/scenes/jet.tscn +++ b/scenes/jet.tscn @@ -3,10 +3,11 @@ [ext_resource type="Script" uid="uid://be64wnjbfhnhh" path="res://scenes/jet.gd" id="1_l0pwp"] [ext_resource type="PackedScene" uid="uid://b5btmjvj2gosl" path="res://scripts/jet_controls/controller.tscn" id="2_t5v3o"] -[node name="jet" type="Node3D"] +[node name="jet" type="CharacterBody3D"] script = ExtResource("1_l0pwp") [node name="camera" type="Camera3D" parent="."] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 120, 350) +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 5, 18) +current = true [node name="controller" parent="." instance=ExtResource("2_t5v3o")] diff --git a/scripts/factories/jet_factory.gd b/scripts/factories/jet_factory.gd index 836f3f5..409c7a5 100644 --- a/scripts/factories/jet_factory.gd +++ b/scripts/factories/jet_factory.gd @@ -43,15 +43,27 @@ func create_cpu_jet(faction: int = 0) -> Jet: func create_neutral_jet() -> Jet: var jet = JET.new() + jet.add_child( NEUTRAL_JET.MODEL.instantiate() ) + jet.faction = Globals.FACTION.NEUTRAL + jet.control_frame = NEUTRAL_JET + return jet func create_allies_jet() -> Jet: var jet = JET.instantiate() + jet.add_child( ALLIES_JET.MODEL.instantiate() ) + jet.faction = Globals.FACTION.ALLIES + jet.control_frame = ALLIES_JET + return jet func create_axis_jet() -> Jet: var jet = JET.instantiate() + jet.add_child( AXIS_JET.MODEL.instantiate() ) + jet.faction = Globals.FACTION.AXIS + jet.control_frame = AXIS_JET + return jet diff --git a/scripts/game_modes/base_game_mode.gd b/scripts/game_modes/base_game_mode.gd index df2b707..1fc4bd5 100644 --- a/scripts/game_modes/base_game_mode.gd +++ b/scripts/game_modes/base_game_mode.gd @@ -1 +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 diff --git a/scripts/game_modes/dog_fight.gd b/scripts/game_modes/dog_fight.gd index 654e5fe..b003368 100644 --- a/scripts/game_modes/dog_fight.gd +++ b/scripts/game_modes/dog_fight.gd @@ -1 +1,10 @@ class_name DogFight extends BaseGameMode + + + +func _init() -> void: + SPAWN_COUNT = 16 + LIFE_CHIPS_COUNT = SPAWN_COUNT * 3 + +func _ready() -> void: + pass diff --git a/scripts/game_modes/dog_fight_waves.gd b/scripts/game_modes/dog_fight_waves.gd index 9994cfe..8251eca 100644 --- a/scripts/game_modes/dog_fight_waves.gd +++ b/scripts/game_modes/dog_fight_waves.gd @@ -1 +1,6 @@ class_name DogFightWaves extends BaseGameMode + + + +func _init() -> void: + pass diff --git a/scripts/game_modes/game_mode.gd b/scripts/game_modes/game_mode.gd index 505c114..c3b1fc2 100644 --- a/scripts/game_modes/game_mode.gd +++ b/scripts/game_modes/game_mode.gd @@ -11,9 +11,9 @@ const MODES: Dictionary = { "Dog Fight Waves:1" ) var mode: int = 0 -@export var jetFactory: JetFactory +@export var jet_factory: JetFactory func _ready() -> void: #MODES[mode].instantiate() - jetFactory.create_player_jet(Globals.FACTION.ALLIES) + jet_factory.create_player_jet(Globals.FACTION.ALLIES) diff --git a/scripts/jet_controls/controller.gd b/scripts/jet_controls/controller.gd index 3b90c89..a613dbf 100644 --- a/scripts/jet_controls/controller.gd +++ b/scripts/jet_controls/controller.gd @@ -4,7 +4,10 @@ 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 +@export_enum( + "CPU:0", + "PLAYER:1" +) var control_mode: int = PLAYER_MODE @onready var cpu: CPU = $cpu @onready var player: Player = $player diff --git a/scripts/jet_controls/player.gd b/scripts/jet_controls/player.gd index 6764ab0..0d4f49e 100644 --- a/scripts/jet_controls/player.gd +++ b/scripts/jet_controls/player.gd @@ -2,18 +2,22 @@ class_name Player extends Node func process(_delta: float) -> String: - if Input.is_action_just_pressed("pull_up"): + if Input.is_action_pressed("pull_up"): return "pull_up" - if Input.is_action_just_pressed("push_down"): + if Input.is_action_pressed("push_down"): return "push_down" - if Input.is_action_just_pressed("yaw_left"): + if Input.is_action_pressed("yaw_left"): return "yaw_left" - if Input.is_action_just_pressed("yaw_right"): + if Input.is_action_pressed("yaw_right"): return "yaw_right" - if Input.is_action_just_pressed("roll_left"): + if Input.is_action_pressed("roll_left"): return "roll_left" - if Input.is_action_just_pressed("roll_right"): + if Input.is_action_pressed("roll_right"): return "roll_right" + if Input.is_action_pressed("throttle_up"): + return "throttle_up" + if Input.is_action_pressed("throttle_down"): + return "throttle_down" return "" diff --git a/scripts/jet_variants/base_jet.gd b/scripts/jet_variants/base_jet.gd index cd590c9..99a72aa 100644 --- a/scripts/jet_variants/base_jet.gd +++ b/scripts/jet_variants/base_jet.gd @@ -1,33 +1,75 @@ class_name BaseJet extends Node -var HEALTH: int = 100 -var YAW_SPEED: int = 50 -var ROLL_SPEED: int = 100 -var MIN_SPEED: int = 50 -var MAX_SPEED: int = 200 +var CONFLICT_SIDE = Globals.FACTION.NEUTRAL + +var HEALTH: int = 100 +var YAW_SPEED: int = 50 +var ROLL_SPEED: int = 100 +var MIN_SPEED: int = 200 +var MAX_SPEED: int = 2000 +var ACCELERATION: int = 5 -func pull_up(): - pass +func do_action( + action: String, + delta: float, + jet: Jet +) -> void: + var change_rate: float = deg_to_rad(1) * delta -func push_down(): - pass + match action: + "pull_up": + pull_up(change_rate, jet) + "push_down": + push_down(change_rate, jet) + "yaw_left": + yaw_left(change_rate, jet) + "yaw_right": + yaw_right(change_rate, jet) + "roll_left": + roll_left(change_rate, jet) + "roll_right": + roll_right(change_rate, jet) + "throttle_up": + throttle_up(delta, jet) + "throttle_down": + throttle_down(delta, jet) + _: + pass -func yaw_left(): - pass +func pull_up(change_rate: float, jet: Jet) -> void: + jet.rotate_object_local(Vector3.RIGHT, change_rate * MIN_SPEED) -func yaw_right(): - pass +func push_down(change_rate: float, jet: Jet) -> void: + jet.rotate_object_local(Vector3.LEFT, change_rate * MIN_SPEED) -func roll_left(): - pass +func yaw_left(change_rate: float, jet: Jet) -> void: + jet.rotate_object_local(Vector3.UP, change_rate * YAW_SPEED) -func roll_right(): - pass +func yaw_right(change_rate: float, jet: Jet) -> void: + jet.rotate_object_local(Vector3.DOWN, change_rate * YAW_SPEED) -func throttle_up(): - pass +func roll_left(change_rate: float, jet: Jet) -> void: + jet.rotate_object_local(Vector3.BACK, change_rate * ROLL_SPEED) -func throttle_down(): - pass +func roll_right(change_rate: float, jet: Jet) -> void: + jet.rotate_object_local(Vector3.FORWARD, change_rate * ROLL_SPEED) + +func throttle_up(delta: float, jet: Jet) -> void: + jet.velocity += (jet.transform.basis.z * -(delta * ACCELERATION)) + #clamp( + #jet.velocity, + #MIN_SPEED * Vector3.ONE, + #MAX_SPEED * Vector3.ONE + #) + + jet.velocity = jet.velocity.limit_length(MAX_SPEED) + +func throttle_down(delta: float, jet: Jet) -> void: + jet.velocity += (jet.transform.basis.z * (delta * ACCELERATION)) + clamp( + jet.velocity, + MIN_SPEED * Vector3.ONE, + MAX_SPEED * Vector3.ONE + ) diff --git a/scripts/jet_variants/eagle_plus.gd b/scripts/jet_variants/eagle_plus.gd index 9f61f64..2ccae68 100644 --- a/scripts/jet_variants/eagle_plus.gd +++ b/scripts/jet_variants/eagle_plus.gd @@ -1,13 +1,13 @@ class_name EaglePlus extends BaseJet -const CONFLICT_SIDE = 0 -const MODEL = preload("uid://cfcid44xnsbdt") +const MODEL = preload("uid://cfcid44xnsbdt") func _init() -> void: - HEALTH = 100 - YAW_SPEED = 50 - ROLL_SPEED = 100 - MIN_SPEED = 50 - MAX_SPEED = 200 + CONFLICT_SIDE = Globals.FACTION.ALLIES + HEALTH = 100 + YAW_SPEED = 50 + ROLL_SPEED = 100 + MIN_SPEED = 50 + MAX_SPEED = 200 diff --git a/scripts/jet_variants/saker_falcon.gd b/scripts/jet_variants/saker_falcon.gd index 9fab7a8..e3c2e7a 100644 --- a/scripts/jet_variants/saker_falcon.gd +++ b/scripts/jet_variants/saker_falcon.gd @@ -1,13 +1,13 @@ class_name SakerFalcon extends BaseJet -const CONFLICT_SIDE = 1 -const MODEL = preload("uid://d07rxx62esueq") +const MODEL = preload("uid://d07rxx62esueq") func _init() -> void: - HEALTH = 100 - YAW_SPEED = 50 - ROLL_SPEED = 100 - MIN_SPEED = 50 - MAX_SPEED = 200 + CONFLICT_SIDE = Globals.FACTION.AXIS + HEALTH = 100 + YAW_SPEED = 50 + ROLL_SPEED = 100 + MIN_SPEED = 50 + MAX_SPEED = 200