Wired up player controls to jet control surfaces; additional jet factory and game mode work

This commit is contained in:
2026-10-18 22:58:58 -05:00
parent 4462600e06
commit eedf870f77
15 changed files with 192 additions and 61 deletions
+24 -1
View File
@@ -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"] [sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_6qa24"]
@@ -10,9 +10,32 @@ radiance_size = 2
background_mode = 2 background_mode = 2
sky = SubResource("Sky_f3sb7") 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="base_environment" type="Node"]
[node name="sky" type="WorldEnvironment" parent="."] [node name="sky" type="WorldEnvironment" parent="."]
environment = SubResource("Environment_sw2hg") environment = SubResource("Environment_sw2hg")
[node name="sun" type="DirectionalLight3D" parent="."] [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")
+2 -2
View File
@@ -13,5 +13,5 @@ current = true
[node name="jet_factory" parent="." instance=ExtResource("2_e2o6t")] [node name="jet_factory" parent="." instance=ExtResource("2_e2o6t")]
[node name="game_mode" parent="." node_paths=PackedStringArray("jetFactory") instance=ExtResource("3_fc0e3")] [node name="game_mode" parent="." node_paths=PackedStringArray("jet_factory") instance=ExtResource("3_fc0e3")]
jetFactory = NodePath("../jet_factory") jet_factory = NodePath("../jet_factory")
+10
View File
@@ -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) , 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)
]
}
+26 -12
View File
@@ -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(
@export_enum("Allies:0", "Axis:1") var CONFLICT_SIDE: int "Allies:0",
"Axis:1",
"Neutral:2"
) var faction: int
@onready var camera: Camera3D = $camera @onready var camera: Camera3D = $camera
@onready var controller: JetController = $controller @onready var controller: JetController = $controller
var control_frame: BaseJet = null
func _ready() -> void: func _ready() -> void:
pass pass
func _process(delta: float) -> void: #func _process(delta: float) -> void:
var action = controller.process(delta) #var action = controller.process(delta)
if not action: return #if action:
#control_frame.do_action(action, delta, self)
#func _physics_process(delta: float) -> void: func _physics_process(delta: float) -> void:
#var action = controller.physics_process(delta) var action = controller.process(delta)
#if not action: return
if action:
control_frame.do_action(action, delta, self)
move_and_slide()
#func _unhandled_input(event: InputEvent) -> void: #func _unhandled_input(event: InputEvent) -> void:
#var action = controller.unhandled_input(event) #var action = controller.unhandled_input(event)
#if not action: return #if not action: return
func set_model(model: Node): func set_model(model: Node) -> void:
add_child(model) add_child(model)
func set_as_player(): func set_as_player() -> void:
camera.current = true camera.current = true
controller.control_mode = controller.PLAYER_MODE controller.control_mode = controller.PLAYER_MODE
func set_as_cpu(): func set_as_cpu() -> void:
camera.current = false camera.current = false
controller.control_mode = controller.CPU_MODE controller.control_mode = controller.CPU_MODE
+3 -2
View File
@@ -3,10 +3,11 @@
[ext_resource type="Script" uid="uid://be64wnjbfhnhh" path="res://scenes/jet.gd" id="1_l0pwp"] [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"] [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") script = ExtResource("1_l0pwp")
[node name="camera" type="Camera3D" parent="."] [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")] [node name="controller" parent="." instance=ExtResource("2_t5v3o")]
+12
View File
@@ -43,15 +43,27 @@ func create_cpu_jet(faction: int = 0) -> Jet:
func create_neutral_jet() -> Jet: func create_neutral_jet() -> Jet:
var jet = JET.new() var jet = JET.new()
jet.add_child( NEUTRAL_JET.MODEL.instantiate() ) jet.add_child( NEUTRAL_JET.MODEL.instantiate() )
jet.faction = Globals.FACTION.NEUTRAL
jet.control_frame = NEUTRAL_JET
return jet return jet
func create_allies_jet() -> Jet: func create_allies_jet() -> Jet:
var jet = JET.instantiate() var jet = JET.instantiate()
jet.add_child( ALLIES_JET.MODEL.instantiate() ) jet.add_child( ALLIES_JET.MODEL.instantiate() )
jet.faction = Globals.FACTION.ALLIES
jet.control_frame = ALLIES_JET
return jet return jet
func create_axis_jet() -> Jet: func create_axis_jet() -> Jet:
var jet = JET.instantiate() var jet = JET.instantiate()
jet.add_child( AXIS_JET.MODEL.instantiate() ) jet.add_child( AXIS_JET.MODEL.instantiate() )
jet.faction = Globals.FACTION.AXIS
jet.control_frame = AXIS_JET
return jet return jet
+8
View File
@@ -1 +1,9 @@
class_name BaseGameMode extends Node 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
+9
View File
@@ -1 +1,10 @@
class_name DogFight extends BaseGameMode class_name DogFight extends BaseGameMode
func _init() -> void:
SPAWN_COUNT = 16
LIFE_CHIPS_COUNT = SPAWN_COUNT * 3
func _ready() -> void:
pass
+5
View File
@@ -1 +1,6 @@
class_name DogFightWaves extends BaseGameMode class_name DogFightWaves extends BaseGameMode
func _init() -> void:
pass
+2 -2
View File
@@ -11,9 +11,9 @@ const MODES: Dictionary = {
"Dog Fight Waves:1" "Dog Fight Waves:1"
) var mode: int = 0 ) var mode: int = 0
@export var jetFactory: JetFactory @export var jet_factory: JetFactory
func _ready() -> void: func _ready() -> void:
#MODES[mode].instantiate() #MODES[mode].instantiate()
jetFactory.create_player_jet(Globals.FACTION.ALLIES) jet_factory.create_player_jet(Globals.FACTION.ALLIES)
+4 -1
View File
@@ -4,7 +4,10 @@ class_name JetController extends Node
const CPU_MODE: int = 0 const CPU_MODE: int = 0
const PLAYER_MODE: int = 1 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 cpu: CPU = $cpu
@onready var player: Player = $player @onready var player: Player = $player
+10 -6
View File
@@ -2,18 +2,22 @@ class_name Player extends Node
func process(_delta: float) -> String: func process(_delta: float) -> String:
if Input.is_action_just_pressed("pull_up"): if Input.is_action_pressed("pull_up"):
return "pull_up" return "pull_up"
if Input.is_action_just_pressed("push_down"): if Input.is_action_pressed("push_down"):
return "push_down" return "push_down"
if Input.is_action_just_pressed("yaw_left"): if Input.is_action_pressed("yaw_left"):
return "yaw_left" return "yaw_left"
if Input.is_action_just_pressed("yaw_right"): if Input.is_action_pressed("yaw_right"):
return "yaw_right" return "yaw_right"
if Input.is_action_just_pressed("roll_left"): if Input.is_action_pressed("roll_left"):
return "roll_left" return "roll_left"
if Input.is_action_just_pressed("roll_right"): if Input.is_action_pressed("roll_right"):
return "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 "" return ""
+63 -21
View File
@@ -1,33 +1,75 @@
class_name BaseJet extends Node class_name BaseJet extends Node
var HEALTH: int = 100 var CONFLICT_SIDE = Globals.FACTION.NEUTRAL
var YAW_SPEED: int = 50
var ROLL_SPEED: int = 100 var HEALTH: int = 100
var MIN_SPEED: int = 50 var YAW_SPEED: int = 50
var MAX_SPEED: int = 200 var ROLL_SPEED: int = 100
var MIN_SPEED: int = 200
var MAX_SPEED: int = 2000
var ACCELERATION: int = 5
func pull_up(): func do_action(
pass action: String,
delta: float,
jet: Jet
) -> void:
var change_rate: float = deg_to_rad(1) * delta
func push_down(): match action:
pass "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(): func pull_up(change_rate: float, jet: Jet) -> void:
pass jet.rotate_object_local(Vector3.RIGHT, change_rate * MIN_SPEED)
func yaw_right(): func push_down(change_rate: float, jet: Jet) -> void:
pass jet.rotate_object_local(Vector3.LEFT, change_rate * MIN_SPEED)
func roll_left(): func yaw_left(change_rate: float, jet: Jet) -> void:
pass jet.rotate_object_local(Vector3.UP, change_rate * YAW_SPEED)
func roll_right(): func yaw_right(change_rate: float, jet: Jet) -> void:
pass jet.rotate_object_local(Vector3.DOWN, change_rate * YAW_SPEED)
func throttle_up(): func roll_left(change_rate: float, jet: Jet) -> void:
pass jet.rotate_object_local(Vector3.BACK, change_rate * ROLL_SPEED)
func throttle_down(): func roll_right(change_rate: float, jet: Jet) -> void:
pass 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
)
+7 -7
View File
@@ -1,13 +1,13 @@
class_name EaglePlus extends BaseJet class_name EaglePlus extends BaseJet
const CONFLICT_SIDE = 0 const MODEL = preload("uid://cfcid44xnsbdt")
const MODEL = preload("uid://cfcid44xnsbdt")
func _init() -> void: func _init() -> void:
HEALTH = 100 CONFLICT_SIDE = Globals.FACTION.ALLIES
YAW_SPEED = 50 HEALTH = 100
ROLL_SPEED = 100 YAW_SPEED = 50
MIN_SPEED = 50 ROLL_SPEED = 100
MAX_SPEED = 200 MIN_SPEED = 50
MAX_SPEED = 200
+7 -7
View File
@@ -1,13 +1,13 @@
class_name SakerFalcon extends BaseJet class_name SakerFalcon extends BaseJet
const CONFLICT_SIDE = 1 const MODEL = preload("uid://d07rxx62esueq")
const MODEL = preload("uid://d07rxx62esueq")
func _init() -> void: func _init() -> void:
HEALTH = 100 CONFLICT_SIDE = Globals.FACTION.AXIS
YAW_SPEED = 50 HEALTH = 100
ROLL_SPEED = 100 YAW_SPEED = 50
MIN_SPEED = 50 ROLL_SPEED = 100
MAX_SPEED = 200 MIN_SPEED = 50
MAX_SPEED = 200