diff options
author | Lizzy Fleckenstein <eliasfleckenstein@web.de> | 2023-02-10 15:53:15 +0100 |
---|---|---|
committer | Lizzy Fleckenstein <eliasfleckenstein@web.de> | 2023-02-10 15:53:15 +0100 |
commit | 6c875082474431a39596b1547b436a9bec1f5533 (patch) | |
tree | bafa770893e6a5a1daea8b57cc5a3f3574da3cb6 /src/to_clt/hud.rs | |
download | mt_net-6c875082474431a39596b1547b436a9bec1f5533.tar.xz |
Initial commit
Diffstat (limited to 'src/to_clt/hud.rs')
-rw-r--r-- | src/to_clt/hud.rs | 155 |
1 files changed, 155 insertions, 0 deletions
diff --git a/src/to_clt/hud.rs b/src/to_clt/hud.rs new file mode 100644 index 0000000..f45d735 --- /dev/null +++ b/src/to_clt/hud.rs @@ -0,0 +1,155 @@ +use super::*; + +#[mt_derive(to = "clt", repr = "u32", enumset)] +pub enum HudStyleFlag { + Bold, + Italic, + Mono, +} + +#[mt_derive(to = "clt", repr = "u8", tag = "attribute", content = "value")] +pub enum HudChange { + Pos([f32; 2]) = 0, + Name(String), + Scale([f32; 2]), + Text(String), + Number(u32), + Item(u32), + Dir(u32), + Align([f32; 2]), + Offset([f32; 2]), + WorldPos([f32; 3]), + ZIndex(i32), + Text2(String), + Style(EnumSet<HudStyleFlag>), +} + +#[mt_derive(to = "clt", repr = "u8")] +pub enum HudType { + Image = 0, + Text, + Statbar, + Inv, + Waypoint, + ImageWaypoint, +} + +#[mt_derive(to = "clt")] +pub struct HudElement { + pub hud_type: HudType, + pub pos: [f32; 2], + pub name: String, + pub scale: [f32; 2], + pub text: String, + pub number: u32, + pub item: u32, + pub dir: u32, + pub align: [f32; 2], + pub offset: [f32; 2], + pub world_pos: [f32; 3], + pub z_index: i32, + pub text_2: String, + pub style: EnumSet<HudStyleFlag>, +} + +impl HudElement { + pub fn apply_change(&mut self, change: HudChange) { + use HudChange::*; + + match change { + Pos(v) => self.pos = v, + Name(v) => self.name = v, + Scale(v) => self.scale = v, + Text(v) => self.text = v, + Number(v) => self.number = v, + Item(v) => self.item = v, + Dir(v) => self.dir = v, + Align(v) => self.align = v, + Offset(v) => self.offset = v, + WorldPos(v) => self.world_pos = v, + ZIndex(v) => self.z_index = v, + Text2(v) => self.text_2 = v, + Style(v) => self.style = v, + } + } +} + +#[mt_derive(to = "clt", repr = "u32", enumset)] +pub enum HudFlag { + Hotbar, + HealthBar, + Crosshair, + WieldedItem, + BreathBar, + Minimap, + RadarMinimap, +} + +#[mt_derive(to = "clt", repr = "u16", tag = "attribute", content = "value")] +pub enum HotbarParam { + Size(#[mt(const16 = 4)] u32) = 0, + Image(String), + SelectionImage(String), +} + +#[mt_derive(to = "clt", repr = "u16")] +pub enum MinimapType { + None = 0, + Surface, + Radar, + Texture, +} + +#[mt_derive(to = "clt")] +pub struct MinimapMode { + pub minimap_type: MinimapType, + pub label: String, + pub size: u16, + pub texture: String, + pub scale: u16, +} + +#[mt_derive(to = "clt", custom)] +pub struct MinimapModePkt { + current: u16, + modes: Vec<MinimapMode>, +} + +#[cfg(feature = "server")] +impl MtSerialize for MinimapModePkt { + fn mt_serialize<C: MtCfg>( + &self, + writer: &mut impl std::io::Write, + ) -> Result<(), SerializeError> { + DefCfg::write_len(self.modes.len(), writer)?; + self.current.mt_serialize::<DefCfg>(writer)?; + self.modes.mt_serialize::<()>(writer)?; + + Ok(()) + } +} + +#[cfg(feature = "client")] +impl MtDeserialize for MinimapModePkt { + fn mt_deserialize<C: MtCfg>(reader: &mut impl std::io::Read) -> Result<Self, DeserializeError> { + let len = DefCfg::read_len(reader)?; + let current = MtDeserialize::mt_deserialize::<DefCfg>(reader)?; + let modes = mt_ser::mt_deserialize_sized_seq(&len, reader)?.try_collect()?; + + Ok(Self { current, modes }) + } +} + +/* +TODO: rustify this + +var DefaultMinimap = []MinimapMode{ + {Type: NoMinimap}, + {Type: SurfaceMinimap, Size: 256}, + {Type: SurfaceMinimap, Size: 128}, + {Type: SurfaceMinimap, Size: 64}, + {Type: RadarMinimap, Size: 512}, + {Type: RadarMinimap, Size: 256}, + {Type: RadarMinimap, Size: 128}, +} +*/ |