diff options
Diffstat (limited to 'src/to_clt')
-rw-r--r-- | src/to_clt/env.rs | 14 | ||||
-rw-r--r-- | src/to_clt/hud.rs | 6 | ||||
-rw-r--r-- | src/to_clt/sky.rs | 192 |
3 files changed, 208 insertions, 4 deletions
diff --git a/src/to_clt/env.rs b/src/to_clt/env.rs index 031ee96..ecd3db3 100644 --- a/src/to_clt/env.rs +++ b/src/to_clt/env.rs @@ -1,5 +1,15 @@ use super::*; +#[mt_derive(to = "clt", repr = "str")] +pub enum ObjVisual { + Cube, + Sprite, + UprightSprite, + Mesh, + Wielditem, + Item, +} + #[mt_derive(to = "clt")] pub struct ObjProps { #[mt(const_before = "4u8")] // version @@ -9,7 +19,7 @@ pub struct ObjProps { pub collision_box: ([f32; 3], [f32; 3]), pub selection_box: ([f32; 3], [f32; 3]), pub pointable: bool, - pub visual: String, + pub visual: ObjVisual, pub visual_size: [f32; 3], pub textures: Vec<String>, pub sprite_sheet_size: [i16; 2], // in sprites @@ -93,7 +103,7 @@ pub struct ObjPhysicsOverride { pub old_sneak: bool, } -const GENERIC_CAO: u8 = 101; +pub const GENERIC_CAO: u8 = 101; #[mt_derive(to = "clt", repr = "u8", tag = "type", content = "data")] pub enum ObjMsg { diff --git a/src/to_clt/hud.rs b/src/to_clt/hud.rs index 64fe26b..3b2a456 100644 --- a/src/to_clt/hud.rs +++ b/src/to_clt/hud.rs @@ -123,7 +123,7 @@ impl MtSerialize for MinimapModesPkt { fn mt_serialize<C: MtCfg>( &self, writer: &mut impl std::io::Write, - ) -> Result<(), SerializeError> { + ) -> Result<(), mt_ser::SerializeError> { DefCfg::write_len(self.modes.len(), writer)?; self.current.mt_serialize::<DefCfg>(writer)?; self.modes.mt_serialize::<()>(writer)?; @@ -134,7 +134,9 @@ impl MtSerialize for MinimapModesPkt { #[cfg(feature = "client")] impl MtDeserialize for MinimapModesPkt { - fn mt_deserialize<C: MtCfg>(reader: &mut impl std::io::Read) -> Result<Self, DeserializeError> { + fn mt_deserialize<C: MtCfg>( + reader: &mut impl std::io::Read, + ) -> Result<Self, mt_ser::DeserializeError> { let len = DefCfg::read_len(reader)?; let current = MtDeserialize::mt_deserialize::<DefCfg>(reader)?; let modes = mt_ser::mt_deserialize_sized_seq::<DefCfg, _>(&len, reader)?.try_collect()?; diff --git a/src/to_clt/sky.rs b/src/to_clt/sky.rs new file mode 100644 index 0000000..c9cb642 --- /dev/null +++ b/src/to_clt/sky.rs @@ -0,0 +1,192 @@ +use super::*; + +#[mt_derive(to = "clt", tag = "type", content = "data", custom)] +pub enum Sky { + Regular { + day_sky: Color, + day_horizon: Color, + dawn_sky: Color, + dawn_horizon: Color, + night_sky: Color, + night_horizon: Color, + indoor: Color, + }, + Skybox { + textures: Vec<String>, + }, + Plain, +} + +#[mt_derive(to = "clt", tag = "type", custom)] +pub enum FogTint { + Default, + Custom { sun: Color, moon: Color }, +} + +#[mt_derive(to = "clt", custom)] +pub struct SkyParams { + pub bg_color: Color, + pub clouds: bool, + pub fog_tint: FogTint, + pub sky: Sky, +} + +#[cfg(feature = "server")] +impl MtSerialize for SkyParams { + fn mt_serialize<C: MtCfg>( + &self, + writer: &mut impl std::io::Write, + ) -> Result<(), mt_ser::SerializeError> { + self.bg_color.mt_serialize::<DefCfg>(writer)?; + + match &self.sky { + Sky::Regular { .. } => "regular", + Sky::Skybox { .. } => "skybox", + Sky::Plain => "plain", + } + .mt_serialize::<DefCfg>(writer)?; + + self.clouds.mt_serialize::<DefCfg>(writer)?; + + match &self.fog_tint { + FogTint::Default => { + let unused_color = Color { + a: 0, + r: 0, + g: 0, + b: 0, + }; + + unused_color.mt_serialize::<DefCfg>(writer)?; + unused_color.mt_serialize::<DefCfg>(writer)?; + "default".mt_serialize::<DefCfg>(writer)?; + } + FogTint::Custom { sun, moon } => { + sun.mt_serialize::<DefCfg>(writer)?; + moon.mt_serialize::<DefCfg>(writer)?; + "custom".mt_serialize::<DefCfg>(writer)?; + } + } + + match &self.sky { + Sky::Regular { + day_sky, + day_horizon, + dawn_sky, + dawn_horizon, + night_sky, + night_horizon, + indoor, + } => { + day_sky.mt_serialize::<DefCfg>(writer)?; + day_horizon.mt_serialize::<DefCfg>(writer)?; + dawn_sky.mt_serialize::<DefCfg>(writer)?; + dawn_horizon.mt_serialize::<DefCfg>(writer)?; + night_sky.mt_serialize::<DefCfg>(writer)?; + night_horizon.mt_serialize::<DefCfg>(writer)?; + indoor.mt_serialize::<DefCfg>(writer)?; + } + Sky::Skybox { textures } => { + textures.mt_serialize::<DefCfg>(writer)?; + } + Sky::Plain => {} + } + + Ok(()) + } +} + +#[cfg(feature = "client")] +impl MtDeserialize for SkyParams { + fn mt_deserialize<C: MtCfg>( + reader: &mut impl std::io::Read, + ) -> Result<Self, mt_ser::DeserializeError> { + use mt_ser::DeserializeError::InvalidEnum; + + let bg_color = MtDeserialize::mt_deserialize::<DefCfg>(reader)?; + let sky_type = String::mt_deserialize::<DefCfg>(reader)?; + let clouds = MtDeserialize::mt_deserialize::<DefCfg>(reader)?; + + let sun = MtDeserialize::mt_deserialize::<DefCfg>(reader)?; + let moon = MtDeserialize::mt_deserialize::<DefCfg>(reader)?; + + let fog_tint_type = String::mt_deserialize::<DefCfg>(reader)?; + let fog_tint = match fog_tint_type.as_str() { + "default" => FogTint::Default, + "custom" => FogTint::Custom { sun, moon }, + _ => return Err(InvalidEnum("FogTint", Box::new(fog_tint_type))), + }; + + let sky = match sky_type.as_str() { + "regular" => { + let day_sky = MtDeserialize::mt_deserialize::<DefCfg>(reader)?; + let day_horizon = MtDeserialize::mt_deserialize::<DefCfg>(reader)?; + let dawn_sky = MtDeserialize::mt_deserialize::<DefCfg>(reader)?; + let dawn_horizon = MtDeserialize::mt_deserialize::<DefCfg>(reader)?; + let night_sky = MtDeserialize::mt_deserialize::<DefCfg>(reader)?; + let night_horizon = MtDeserialize::mt_deserialize::<DefCfg>(reader)?; + let indoor = MtDeserialize::mt_deserialize::<DefCfg>(reader)?; + + Sky::Regular { + day_sky, + day_horizon, + dawn_sky, + dawn_horizon, + night_sky, + night_horizon, + indoor, + } + } + "skybox" => { + let textures = MtDeserialize::mt_deserialize::<DefCfg>(reader)?; + + Sky::Skybox { textures } + } + "plain" => Sky::Plain, + _ => return Err(InvalidEnum("Sky", Box::new(sky_type))), + }; + + Ok(Self { + bg_color, + clouds, + fog_tint, + sky, + }) + } +} + +#[mt_derive(to = "clt")] +pub struct SunParams { + pub visible: bool, + pub texture: String, + pub tone_map: String, + pub rise: String, + pub rising: bool, + pub size: f32, +} + +#[mt_derive(to = "clt")] +pub struct MoonParams { + pub visible: bool, + pub texture: String, + pub tone_map: String, + pub size: f32, +} + +#[mt_derive(to = "clt")] +pub struct StarParams { + pub visible: bool, + pub count: u32, + pub color: Color, + pub size: f32, +} + +#[mt_derive(to = "clt")] +pub struct CloudParams { + pub density: f32, + pub diffuse_color: Color, + pub ambient_color: Color, + pub height: f32, + pub thickness: f32, + pub speed: [f32; 2], +} |