diff options
author | Lizzy Fleckenstein <eliasfleckenstein@web.de> | 2023-02-28 18:08:41 +0100 |
---|---|---|
committer | Lizzy Fleckenstein <eliasfleckenstein@web.de> | 2023-02-28 18:09:05 +0100 |
commit | 85d55e42119ea80cd1cd9e9e34c05ea7d07b3a88 (patch) | |
tree | 416c228135ab6dbf71ebba6c0a520ed8225476dd /src/to_clt | |
parent | 060a3bd858cc76365bfa8b1fd356211e7eb11cbf (diff) | |
download | mt_net-85d55e42119ea80cd1cd9e9e34c05ea7d07b3a88.tar.xz |
Use cgmath and support BS constant
Diffstat (limited to 'src/to_clt')
-rw-r--r-- | src/to_clt/hud.rs | 24 | ||||
-rw-r--r-- | src/to_clt/inv.rs | 2 | ||||
-rw-r--r-- | src/to_clt/media.rs | 95 | ||||
-rw-r--r-- | src/to_clt/obj.rs | 50 | ||||
-rw-r--r-- | src/to_clt/sky.rs | 2 |
5 files changed, 119 insertions, 54 deletions
diff --git a/src/to_clt/hud.rs b/src/to_clt/hud.rs index 3b2a456..b0f56d9 100644 --- a/src/to_clt/hud.rs +++ b/src/to_clt/hud.rs @@ -9,17 +9,17 @@ pub enum HudStyleFlag { #[mt_derive(to = "clt", repr = "u8", tag = "attribute", content = "value")] pub enum HudChange { - Pos([f32; 2]) = 0, + Pos(Point2<f32>) = 0, Name(String), - Scale([f32; 2]), + Scale(Vector2<f32>), Text(String), Number(u32), Item(u32), Dir(u32), - Align([f32; 2]), - Offset([f32; 2]), - WorldPos([f32; 3]), - Size([i32; 2]), + Align(Vector2<f32>), + Offset(Vector2<f32>), + WorldPos(Point3<f32>), + Size(Vector2<i32>), ZIndex(i32), // this is i16 in HudAdd, minetest is weird Text2(String), Style(EnumSet<HudStyleFlag>), @@ -38,17 +38,17 @@ pub enum HudType { #[mt_derive(to = "clt")] pub struct HudElement { pub hud_type: HudType, - pub pos: [f32; 2], + pub pos: Point2<f32>, pub name: String, - pub scale: [f32; 2], + pub scale: Vector2<f32>, 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 size: [i32; 2], + pub align: Vector2<f32>, + pub offset: Vector2<f32>, + pub world_pos: Point3<f32>, + pub size: Vector2<i32>, pub z_index: i16, pub text_2: String, pub style: EnumSet<HudStyleFlag>, diff --git a/src/to_clt/inv.rs b/src/to_clt/inv.rs index 01eaa75..1a33a68 100644 --- a/src/to_clt/inv.rs +++ b/src/to_clt/inv.rs @@ -23,7 +23,7 @@ fn read_line(reader: &mut impl std::io::Read) -> Result<String, mt_ser::Deserial .try_collect::<Vec<_>>()?; String::from_utf8(utf8) - .map_err(|e| mt_ser::DeserializeError::Other(format!("Invalid UTF-8: {e}").into())) + .map_err(|e| mt_ser::DeserializeError::Other(format!("Invalid UTF-8: {e}"))) } #[cfg(feature = "client")] 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<u16>, duration: f32, }, SpriteSheet { - aspect_ratio: [u8; 2], + aspect_ratio: Vector2<u8>, 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<f32> { + fn ser(&self) -> Self { + collision::Aabb::mul_s(self, BS) + } + + fn des(&self) -> Self { + collision::Aabb::mul_s(self, BS) + } +} + +impl<T: BsAabb> BsAabb for Vec<T> { + fn ser(&self) -> Self { + self.iter().map(BsAabb::ser).collect() + } + + fn des(&self) -> Self { + self.iter().map(BsAabb::des).collect() + } +} + +impl<T: BsAabb, const N: usize> 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<T: BsAabb>(aabb: &T) -> Result<T, mt_ser::SerializeError> { + Ok(aabb.ser()) +} + +#[cfg(feature = "client")] +fn des_bs_aabb<T: BsAabb>(aabb: T) -> Result<T, mt_ser::DeserializeError> { + Ok(aabb.des()) +} + +#[mt_derive(to = "clt")] +pub struct MountedNodeBox { + #[mt(map_ser = "ser_bs_aabb", map_des = "des_bs_aabb")] + wall_top: Aabb3<f32>, + #[mt(map_ser = "ser_bs_aabb", map_des = "des_bs_aabb")] + wall_bottom: Aabb3<f32>, + #[mt(map_ser = "ser_bs_aabb", map_des = "des_bs_aabb")] + wall_sides: Aabb3<f32>, +} + +#[mt_derive(to = "clt")] +pub struct ConnectedNodeBox { + #[mt(map_ser = "ser_bs_aabb", map_des = "des_bs_aabb")] + fixed: Vec<Aabb3<f32>>, + #[mt(map_ser = "ser_bs_aabb", map_des = "des_bs_aabb")] + connect_dirs: [Vec<Aabb3<f32>>; 6], + #[mt(map_ser = "ser_bs_aabb", map_des = "des_bs_aabb")] + disconnect_dirs: [Vec<Aabb3<f32>>; 6], + #[mt(map_ser = "ser_bs_aabb", map_des = "des_bs_aabb")] + disconnect_all: Vec<Aabb3<f32>>, + #[mt(map_ser = "ser_bs_aabb", map_des = "des_bs_aabb")] + disconnect_sides: Vec<Aabb3<f32>>, +} + #[mt_derive(to = "clt", repr = "u8", tag = "type")] #[mt(const_before = "6u8")] pub enum NodeBox { Cube = 0, Fixed { - fixed: Vec<RangeInclusive<[f32; 3]>>, - }, - 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<Aabb3<f32>>, }, + Mounted(Box<MountedNodeBox>), Leveled { - fixed: Vec<RangeInclusive<[f32; 3]>>, - }, - Connected { - fixed: Vec<RangeInclusive<[f32; 3]>>, - connect_dirs: [Vec<RangeInclusive<[f32; 3]>>; 6], - disconnect_dirs: [Vec<RangeInclusive<[f32; 3]>>; 6], - disconnect_all: Vec<RangeInclusive<[f32; 3]>>, - disconnect_sides: Vec<RangeInclusive<[f32; 3]>>, + #[mt(map_ser = "ser_bs_aabb", map_des = "des_bs_aabb")] + fixed: Vec<Aabb3<f32>>, }, + Connected(Box<ConnectedNodeBox>), } #[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<f32>, pub stack_max: u16, pub usable: bool, pub can_point_liquids: bool, diff --git a/src/to_clt/obj.rs b/src/to_clt/obj.rs index 1b605cc..7ce9f32 100644 --- a/src/to_clt/obj.rs +++ b/src/to_clt/obj.rs @@ -16,33 +16,33 @@ pub struct ObjProps { pub max_hp: u16, // player only pub collide_with_nodes: bool, pub weight: f32, // deprecated - pub collision_box: RangeInclusive<[f32; 3]>, - pub selection_box: RangeInclusive<[f32; 3]>, + pub collision_box: Aabb3<f32>, + pub selection_box: Aabb3<f32>, pub pointable: bool, pub visual: ObjVisual, - pub visual_size: [f32; 3], + pub visual_size: Vector3<f32>, pub textures: Vec<String>, - pub sprite_sheet_size: [i16; 2], // in sprites - pub sprite_pos: [i16; 2], // in sprite sheet + pub sprite_sheet_size: Vector2<i16>, // in sprites + pub sprite_pos: Point2<i16>, // in sprite sheet pub visible: bool, pub make_footstep_sounds: bool, - pub rotate_speed: f32, // in radians per second + pub rotate_speed: Rad<f32>, // per second pub mesh: String, pub colors: Vec<Color>, pub collide_with_objs: bool, pub step_height: f32, pub face_rotate_dir: bool, - pub face_rotate_dir_off: f32, // in degrees + pub face_rotate_dir_off: Deg<f32>, pub backface_cull: bool, pub nametag: String, pub nametag_color: Color, - pub face_rotate_speed: f32, // in degrees per second + pub face_rotate_speed: Deg<f32>, // per second pub infotext: String, pub itemstring: String, pub glow: i8, - pub max_breath: u16, // player only - pub eye_height: f32, // player only - pub zoom_fov: f32, // in degrees. player only + pub max_breath: u16, // player only + pub eye_height: f32, // player only + pub zoom_fov: Deg<f32>, // player only pub use_texture_alpha: bool, pub dmg_texture_mod: String, // suffix pub shaded: bool, @@ -52,10 +52,13 @@ pub struct ObjProps { #[mt_derive(to = "clt")] pub struct ObjPos { - pub pos: [f32; 3], - pub vel: [f32; 3], - pub acc: [f32; 3], - pub rot: [f32; 3], + #[mt(multiplier = "BS")] + pub pos: Point3<f32>, + #[mt(multiplier = "BS")] + pub vel: Vector3<f32>, + #[mt(multiplier = "BS")] + pub acc: Vector3<f32>, + pub rot: Euler<Deg<f32>>, pub interpolate: bool, pub end: bool, pub update_interval: f32, @@ -63,7 +66,7 @@ pub struct ObjPos { #[mt_derive(to = "clt")] pub struct ObjSprite { - pub frame0: [i16; 2], + pub frame_0: Point2<i16>, pub frames: u16, pub frame_duration: f32, pub view_angle_frames: bool, @@ -71,7 +74,7 @@ pub struct ObjSprite { #[mt_derive(to = "clt")] pub struct ObjAnim { - pub frames: [i32; 2], + pub frames: Vector2<i32>, pub speed: f32, pub blend: f32, pub no_loop: bool, @@ -79,16 +82,16 @@ pub struct ObjAnim { #[mt_derive(to = "clt")] pub struct ObjBonePos { - pub pos: [f32; 3], - pub rot: [f32; 3], + pub pos: Point3<f32>, + pub rot: Euler<Deg<f32>>, } #[mt_derive(to = "clt")] pub struct ObjAttach { pub parent_id: u16, pub bone: String, - pub pos: [f32; 3], - pub rot: [f32; 3], + pub pos: Point3<f32>, + pub rot: Euler<Deg<f32>>, pub force_visible: bool, } @@ -152,8 +155,9 @@ pub struct ObjInitData { pub name: String, pub is_player: bool, pub id: u16, - pub pos: [f32; 3], - pub rot: [f32; 3], + #[mt(multiplier = "BS")] + pub pos: Point3<f32>, + pub rot: Euler<Deg<f32>>, pub hp: u16, #[mt(len = "u8")] pub msgs: Vec<ObjInitMsg>, diff --git a/src/to_clt/sky.rs b/src/to_clt/sky.rs index c9cb642..d0e0263 100644 --- a/src/to_clt/sky.rs +++ b/src/to_clt/sky.rs @@ -188,5 +188,5 @@ pub struct CloudParams { pub ambient_color: Color, pub height: f32, pub thickness: f32, - pub speed: [f32; 2], + pub speed: Vector2<f32>, } |