mirror of
https://github.com/jcreek/CosmicClash.git
synced 2026-09-10 16:04:04 +00:00
04691aaa48
Lands the non-networked Phase 0 tasks from multiplayer-todo.md (ship/camera/ arena refactors, sim constants, background FPS handling) plus a first pass at exposing graphics/performance settings (presets, resolution scaling, vsync, FPS cap, perf overlay) and a GPU profiling harness for the real-hardware follow-up in task 0.15b.
42 lines
1.6 KiB
GDScript
42 lines
1.6 KiB
GDScript
class_name HudInstrument
|
|
extends Control
|
|
|
|
# Shared base for the HUD's procedural instruments (heading tape, attitude
|
|
# indicator, gauges): the exponential-smoothing weight calc and the
|
|
# angle-aware lerp helper they all use. Each instrument still owns its own
|
|
# _process (smoothing 1-2 distinct fields) and _draw (entirely bespoke).
|
|
|
|
const SMOOTHING := 12.0
|
|
# _draw does real work (text shaping, building point arrays); nobody can
|
|
# perceive an instrument repainting faster than this, so redraws are paced
|
|
# to it independently of the render frame rate — value smoothing itself
|
|
# still runs every _process call, only the (expensive) repaint is throttled.
|
|
const REDRAW_INTERVAL := 1.0 / 60.0
|
|
|
|
var _time_since_redraw := 0.0
|
|
|
|
|
|
static func lerp_angle_deg(from: float, to: float, weight: float) -> float:
|
|
return rad_to_deg(lerp_angle(deg_to_rad(from), deg_to_rad(to), weight))
|
|
|
|
|
|
# Shortest signed distance from `from` to `to` in degrees, wrapped to
|
|
# [-180, 180]. Use this (never a plain subtraction) to decide whether an
|
|
# angle that wraps around (heading, roll) has moved enough to redraw —
|
|
# a naive delta gives a false-large jump at the 0/360 boundary.
|
|
static func angle_delta_deg(from: float, to: float) -> float:
|
|
return wrapf(to - from, -180.0, 180.0)
|
|
|
|
|
|
func _smoothing_weight(delta: float) -> float:
|
|
return 1.0 - exp(-SMOOTHING * delta) # frame-rate independent
|
|
|
|
|
|
# Call instead of queue_redraw() directly once a subclass's _process has
|
|
# decided the smoothed value moved enough to warrant a repaint.
|
|
func _throttled_redraw(delta: float) -> void:
|
|
_time_since_redraw += delta
|
|
if _time_since_redraw >= REDRAW_INTERVAL:
|
|
_time_since_redraw = 0.0
|
|
queue_redraw()
|