Skip to main content

flatland_client_ui/
hud.rs

1//! HUD view mode and per-frame play HUD snapshot.
2
3/// Play-client HUD density: normal sidebar, compact essentials, or map-first.
4#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
5pub enum HudViewMode {
6    #[default]
7    Normal,
8    Compact,
9    Map,
10}
11
12impl HudViewMode {
13    pub fn cycle(self) -> Self {
14        match self {
15            Self::Normal => Self::Compact,
16            Self::Compact => Self::Map,
17            Self::Map => Self::Normal,
18        }
19    }
20
21    pub fn label(self) -> &'static str {
22        match self {
23            Self::Normal => "normal",
24            Self::Compact => "compact",
25            Self::Map => "map",
26        }
27    }
28
29    /// Parse a persisted label from client config (`normal` / `compact` / `map`).
30    pub fn from_label(s: &str) -> Option<Self> {
31        match s.trim().to_ascii_lowercase().as_str() {
32            "normal" => Some(Self::Normal),
33            "compact" => Some(Self::Compact),
34            "map" => Some(Self::Map),
35            _ => None,
36        }
37    }
38}
39
40#[derive(Debug, Default)]
41pub struct PlayHud<'a> {
42    pub movement: &'a str,
43    pub sprint_mode: bool,
44    pub map_target: Option<(f32, f32)>,
45    pub auto_nav_goal: Option<(f32, f32)>,
46    /// Mouse hover world position (dim cursor on map).
47    pub mouse_hover: Option<(f32, f32)>,
48    pub view_mode: HudViewMode,
49}