From 85d55e42119ea80cd1cd9e9e34c05ea7d07b3a88 Mon Sep 17 00:00:00 2001 From: Lizzy Fleckenstein Date: Tue, 28 Feb 2023 18:08:41 +0100 Subject: Use cgmath and support BS constant --- src/to_clt/media.rs | 95 +++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 78 insertions(+), 17 deletions(-) (limited to 'src/to_clt/media.rs') diff --git a/src/to_clt/media.rs b/src/to_clt/media.rs index c05492d..93f9f6c 100644 --- a/src/to_clt/media.rs +++ b/src/to_clt/media.rs @@ -72,11 +72,11 @@ pub enum Alpha { pub enum TileAnim { None = 0, VerticalFrame { - n_frames: [u16; 2], + n_frames: Vector2, duration: f32, }, SpriteSheet { - aspect_ratio: [u8; 2], + aspect_ratio: Vector2, duration: f32, }, } @@ -214,28 +214,89 @@ impl MtDeserialize for TileDef { } } +trait BsAabb: Sized { + fn ser(&self) -> Self; + fn des(&self) -> Self; +} + +impl BsAabb for Aabb3 { + fn ser(&self) -> Self { + collision::Aabb::mul_s(self, BS) + } + + fn des(&self) -> Self { + collision::Aabb::mul_s(self, BS) + } +} + +impl BsAabb for Vec { + fn ser(&self) -> Self { + self.iter().map(BsAabb::ser).collect() + } + + fn des(&self) -> Self { + self.iter().map(BsAabb::des).collect() + } +} + +impl BsAabb for [T; N] { + fn ser(&self) -> Self { + std::array::from_fn(|i| self[i].ser()) + } + + fn des(&self) -> Self { + std::array::from_fn(|i| self[i].des()) + } +} + +#[cfg(feature = "server")] +fn ser_bs_aabb(aabb: &T) -> Result { + Ok(aabb.ser()) +} + +#[cfg(feature = "client")] +fn des_bs_aabb(aabb: T) -> Result { + Ok(aabb.des()) +} + +#[mt_derive(to = "clt")] +pub struct MountedNodeBox { + #[mt(map_ser = "ser_bs_aabb", map_des = "des_bs_aabb")] + wall_top: Aabb3, + #[mt(map_ser = "ser_bs_aabb", map_des = "des_bs_aabb")] + wall_bottom: Aabb3, + #[mt(map_ser = "ser_bs_aabb", map_des = "des_bs_aabb")] + wall_sides: Aabb3, +} + +#[mt_derive(to = "clt")] +pub struct ConnectedNodeBox { + #[mt(map_ser = "ser_bs_aabb", map_des = "des_bs_aabb")] + fixed: Vec>, + #[mt(map_ser = "ser_bs_aabb", map_des = "des_bs_aabb")] + connect_dirs: [Vec>; 6], + #[mt(map_ser = "ser_bs_aabb", map_des = "des_bs_aabb")] + disconnect_dirs: [Vec>; 6], + #[mt(map_ser = "ser_bs_aabb", map_des = "des_bs_aabb")] + disconnect_all: Vec>, + #[mt(map_ser = "ser_bs_aabb", map_des = "des_bs_aabb")] + disconnect_sides: Vec>, +} + #[mt_derive(to = "clt", repr = "u8", tag = "type")] #[mt(const_before = "6u8")] pub enum NodeBox { Cube = 0, Fixed { - fixed: Vec>, - }, - Mounted { - wall_top: RangeInclusive<[f32; 3]>, - wall_bottom: RangeInclusive<[f32; 3]>, - wall_sides: RangeInclusive<[f32; 3]>, + #[mt(map_ser = "ser_bs_aabb", map_des = "des_bs_aabb")] + fixed: Vec>, }, + Mounted(Box), Leveled { - fixed: Vec>, - }, - Connected { - fixed: Vec>, - connect_dirs: [Vec>; 6], - disconnect_dirs: [Vec>; 6], - disconnect_all: Vec>, - disconnect_sides: Vec>, + #[mt(map_ser = "ser_bs_aabb", map_des = "des_bs_aabb")] + fixed: Vec>, }, + Connected(Box), } #[mt_derive(to = "clt")] @@ -413,7 +474,7 @@ pub struct ItemDef { pub description: String, pub inventory_image: String, pub wield_image: String, - pub wield_scale: [f32; 3], + pub wield_scale: Vector3, pub stack_max: u16, pub usable: bool, pub can_point_liquids: bool, -- cgit v1.2.3