mirror of
https://github.com/jcreek/CosmicClash.git
synced 2026-07-12 18:43:49 +00:00
feat(*): Add basic flight data to HUD
This commit is contained in:
@@ -46,3 +46,49 @@ offset_bottom = 62.0
|
||||
grow_horizontal = 2
|
||||
label_settings = SubResource("LabelSettings_efag7")
|
||||
horizontal_alignment = 1
|
||||
|
||||
[node name="InfoPanel" type="VBoxContainer" parent="HUD/Control"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 2
|
||||
anchor_top = 1.0
|
||||
anchor_bottom = 1.0
|
||||
offset_left = 10.0
|
||||
offset_top = -200.0
|
||||
offset_right = 300.0
|
||||
offset_bottom = -10.0
|
||||
grow_vertical = 0
|
||||
|
||||
[node name="SpeedLabel" type="Label" parent="HUD/Control/InfoPanel"]
|
||||
layout_mode = 2
|
||||
text = "Speed: 0.0 m/s"
|
||||
label_settings = SubResource("LabelSettings_efag7")
|
||||
|
||||
[node name="AltitudeLabel" type="Label" parent="HUD/Control/InfoPanel"]
|
||||
layout_mode = 2
|
||||
text = "Altitude: 0.0 m"
|
||||
label_settings = SubResource("LabelSettings_efag7")
|
||||
|
||||
[node name="AngularVelLabel" type="Label" parent="HUD/Control/InfoPanel"]
|
||||
layout_mode = 2
|
||||
text = "Angular Vel: 0.0 rad/s"
|
||||
label_settings = SubResource("LabelSettings_efag7")
|
||||
|
||||
[node name="CameraModeLabel" type="Label" parent="HUD/Control/InfoPanel"]
|
||||
layout_mode = 2
|
||||
text = "Camera: Ball Cam"
|
||||
label_settings = SubResource("LabelSettings_efag7")
|
||||
|
||||
[node name="AttitudeLabel" type="Label" parent="HUD/Control/InfoPanel"]
|
||||
layout_mode = 2
|
||||
text = "Pitch: 0° Roll: 0°"
|
||||
label_settings = SubResource("LabelSettings_efag7")
|
||||
|
||||
[node name="HeadingLabel" type="Label" parent="HUD/Control/InfoPanel"]
|
||||
layout_mode = 2
|
||||
text = "Heading: 0°"
|
||||
label_settings = SubResource("LabelSettings_efag7")
|
||||
|
||||
[node name="ThrustLabel" type="Label" parent="HUD/Control/InfoPanel"]
|
||||
layout_mode = 2
|
||||
text = "Thrust: 0%"
|
||||
label_settings = SubResource("LabelSettings_efag7")
|
||||
|
||||
+53
-1
@@ -6,7 +6,7 @@ extends RigidBody3D
|
||||
@export var maneuvering_thrust = 75.0 # Side/vertical thruster power
|
||||
@export var vertical_thrust = 120.0 # Up/down thruster power
|
||||
@export var turbo_multiplier = 2.5 # Turbo boost multiplier
|
||||
@export var max_speed = 25.0 # Maximum velocity
|
||||
@export var max_speed = 35.0 # Maximum velocity
|
||||
@export var rotation_power = 20.0 # Angular thrust power
|
||||
@export var max_angular_speed = 3.0 # Maximum rotation speed
|
||||
@export var drag_coefficient = 0.98 # Linear drag (air resistance)
|
||||
@@ -19,7 +19,16 @@ var camera_smoothing = 10.0
|
||||
|
||||
@onready var camera : Camera3D = get_node("Camera3D")
|
||||
@onready var ball = get_parent().get_node("Ball")
|
||||
|
||||
# HUD Nodes
|
||||
@onready var timer_label = get_node("HUD/Control/TimerLabel")
|
||||
@onready var speed_label = get_node("HUD/Control/InfoPanel/SpeedLabel")
|
||||
@onready var altitude_label = get_node("HUD/Control/InfoPanel/AltitudeLabel")
|
||||
@onready var angular_vel_label = get_node("HUD/Control/InfoPanel/AngularVelLabel")
|
||||
@onready var camera_mode_label = get_node("HUD/Control/InfoPanel/CameraModeLabel")
|
||||
@onready var attitude_label = get_node("HUD/Control/InfoPanel/AttitudeLabel")
|
||||
@onready var heading_label = get_node("HUD/Control/InfoPanel/HeadingLabel")
|
||||
@onready var thrust_label = get_node("HUD/Control/InfoPanel/ThrustLabel")
|
||||
|
||||
var ball_cam_enabled = true
|
||||
|
||||
@@ -68,6 +77,7 @@ func _on_timer_updated(minutes: int, seconds: int):
|
||||
func _physics_process(delta):
|
||||
if camera:
|
||||
_update_camera(delta)
|
||||
_update_hud()
|
||||
|
||||
func _update_camera(delta):
|
||||
if ball_cam_enabled and ball:
|
||||
@@ -272,3 +282,45 @@ func apply_drag_and_limits(state: PhysicsDirectBodyState3D, rotation_input: Vect
|
||||
# Same concept for angular velocity
|
||||
# Physics: ω̂ = ω / |ω|, ω_limited = ω̂ * ω_max
|
||||
state.angular_velocity = state.angular_velocity.normalized() * max_angular_speed
|
||||
|
||||
func _update_hud():
|
||||
# Update speed display
|
||||
# Physics: |v| = √(vₓ² + vᵧ² + vᵤ²) (magnitude of velocity vector)
|
||||
var current_speed = linear_velocity.length()
|
||||
speed_label.text = "Speed: %.1f m/s" % current_speed
|
||||
|
||||
# Update altitude (Y position relative to ground level)
|
||||
# Physics: Height measurement from reference point (y = 0)
|
||||
var current_altitude = global_transform.origin.y
|
||||
altitude_label.text = "Altitude: %.1f m" % current_altitude
|
||||
|
||||
# Update angular velocity
|
||||
# Physics: |ω| = √(ωₓ² + ωᵧ² + ωᵤ²) (magnitude of angular velocity vector)
|
||||
var angular_speed = angular_velocity.length()
|
||||
angular_vel_label.text = "Angular Vel: %.2f rad/s" % angular_speed
|
||||
|
||||
# Update camera mode
|
||||
var camera_mode = "Ball Cam" if ball_cam_enabled else "Ship Cam"
|
||||
camera_mode_label.text = "Camera: %s" % camera_mode
|
||||
|
||||
# Calculate attitude (pitch and roll from ship orientation)
|
||||
# Physics: Euler angles from rotation matrix
|
||||
# Pitch = rotation around X-axis, Roll = rotation around Z-axis
|
||||
var ship_rotation = global_transform.basis.get_euler(EULER_ORDER_XYZ)
|
||||
var pitch_deg = rad_to_deg(ship_rotation.x)
|
||||
var roll_deg = rad_to_deg(ship_rotation.z)
|
||||
attitude_label.text = "Pitch: %.0f° Roll: %.0f°" % [pitch_deg, roll_deg]
|
||||
|
||||
# Calculate heading (yaw - direction ship is facing)
|
||||
# Physics: Yaw = rotation around Y-axis (compass heading)
|
||||
# Convert to 0-360° range for traditional compass display
|
||||
var yaw_deg = rad_to_deg(ship_rotation.y)
|
||||
var heading = fmod(yaw_deg + 360.0, 360.0) # Normalize to 0-360°
|
||||
heading_label.text = "Heading: %.0f°" % heading
|
||||
|
||||
# Calculate current thrust percentage
|
||||
# Physics: Thrust output as percentage of maximum available thrust
|
||||
var thrust_input = get_thrust_input()
|
||||
var thrust_magnitude = thrust_input.length()
|
||||
var thrust_percent = thrust_magnitude * 100.0
|
||||
thrust_label.text = "Thrust: %.0f%%" % thrust_percent
|
||||
|
||||
Reference in New Issue
Block a user