summaryrefslogtreecommitdiff
path: root/src/to_clt
diff options
context:
space:
mode:
authorLizzy Fleckenstein <eliasfleckenstein@web.de>2023-02-28 18:08:41 +0100
committerLizzy Fleckenstein <eliasfleckenstein@web.de>2023-02-28 18:09:05 +0100
commit85d55e42119ea80cd1cd9e9e34c05ea7d07b3a88 (patch)
tree416c228135ab6dbf71ebba6c0a520ed8225476dd /src/to_clt
parent060a3bd858cc76365bfa8b1fd356211e7eb11cbf (diff)
downloadmt_net-85d55e42119ea80cd1cd9e9e34c05ea7d07b3a88.tar.xz
Use cgmath and support BS constant
Diffstat (limited to 'src/to_clt')
-rw-r--r--src/to_clt/hud.rs24
-rw-r--r--src/to_clt/inv.rs2
-rw-r--r--src/to_clt/media.rs95
-rw-r--r--src/to_clt/obj.rs50
-rw-r--r--src/to_clt/sky.rs2
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>,
}