Files
settled-reach/client/ui/stance_indicator.gd
T
2026-04-05 11:09:10 +02:00

61 lines
1.5 KiB
GDScript

extends Control
## D-053: Stance indicator — shows current movement stance on HUD.
## Sprint/Walk/Careful/Crouch. Color-coded for quick read.
## Lives on UILayer (z-layer 7).
const STANCE_COLORS := {
"Sprint": Color("#d45d5d"), # Red — fast, loud, dangerous
"Walk": Color("#c8d0e0"), # Default — neutral white-blue
"Careful": Color("#6bc9a6"), # Green — quiet, observant
"Crouch": Color("#e8c547"), # Amber — very quiet, slow
}
const STANCE_DEFAULT_COLOR := Color("#c8d0e0")
const BG_COLOR := Color(0.05, 0.05, 0.08, 0.5)
const FONT_SIZE := 13
const PADDING := Vector2(10, 6)
var _current_stance: String = "Walk"
func _ready() -> void:
mouse_filter = Control.MOUSE_FILTER_IGNORE
func update_from_state() -> void:
var stance: String = GameState.player_stance
if stance == _current_stance:
return
_current_stance = stance
queue_redraw()
func _draw() -> void:
var font := ThemeDB.fallback_font
var text := _current_stance
var text_size := font.get_string_size(text, HORIZONTAL_ALIGNMENT_LEFT, -1, FONT_SIZE)
var box_size := text_size + PADDING * 2
# Background
draw_rect(Rect2(Vector2.ZERO, box_size), BG_COLOR)
# Stance text
var color: Color = STANCE_COLORS.get(_current_stance, STANCE_DEFAULT_COLOR)
draw_string(
font,
PADDING + Vector2(0, text_size.y),
text,
HORIZONTAL_ALIGNMENT_LEFT,
-1,
FONT_SIZE,
color
)
# -- Public API ---------------------------------------------------------------
func get_current_stance() -> String:
return _current_stance