summaryrefslogtreecommitdiff
path: root/src/to_clt
diff options
context:
space:
mode:
Diffstat (limited to 'src/to_clt')
-rw-r--r--src/to_clt/env.rs14
-rw-r--r--src/to_clt/hud.rs6
-rw-r--r--src/to_clt/sky.rs192
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],
+}