3 #[mt_derive(to = "clt", tag = "type", content = "data", custom)]
15 textures: Vec<String>,
20 #[mt_derive(to = "clt", tag = "type", custom)]
23 Custom { sun: Color, moon: Color },
26 #[mt_derive(to = "clt", custom)]
27 pub struct SkyParams {
30 pub fog_tint: FogTint,
34 #[cfg(feature = "server")]
35 impl MtSerialize for SkyParams {
36 fn mt_serialize<C: MtCfg>(
38 writer: &mut impl std::io::Write,
39 ) -> Result<(), mt_ser::SerializeError> {
40 self.bg_color.mt_serialize::<DefCfg>(writer)?;
43 Sky::Regular { .. } => "regular",
44 Sky::Skybox { .. } => "skybox",
45 Sky::Plain => "plain",
47 .mt_serialize::<DefCfg>(writer)?;
49 self.clouds.mt_serialize::<DefCfg>(writer)?;
51 match &self.fog_tint {
53 let unused_color = Color {
60 unused_color.mt_serialize::<DefCfg>(writer)?;
61 unused_color.mt_serialize::<DefCfg>(writer)?;
62 "default".mt_serialize::<DefCfg>(writer)?;
64 FogTint::Custom { sun, moon } => {
65 sun.mt_serialize::<DefCfg>(writer)?;
66 moon.mt_serialize::<DefCfg>(writer)?;
67 "custom".mt_serialize::<DefCfg>(writer)?;
81 day_sky.mt_serialize::<DefCfg>(writer)?;
82 day_horizon.mt_serialize::<DefCfg>(writer)?;
83 dawn_sky.mt_serialize::<DefCfg>(writer)?;
84 dawn_horizon.mt_serialize::<DefCfg>(writer)?;
85 night_sky.mt_serialize::<DefCfg>(writer)?;
86 night_horizon.mt_serialize::<DefCfg>(writer)?;
87 indoor.mt_serialize::<DefCfg>(writer)?;
89 Sky::Skybox { textures } => {
90 textures.mt_serialize::<DefCfg>(writer)?;
99 #[cfg(feature = "client")]
100 impl MtDeserialize for SkyParams {
101 fn mt_deserialize<C: MtCfg>(
102 reader: &mut impl std::io::Read,
103 ) -> Result<Self, mt_ser::DeserializeError> {
104 use mt_ser::DeserializeError::InvalidEnum;
106 let bg_color = MtDeserialize::mt_deserialize::<DefCfg>(reader)?;
107 let sky_type = String::mt_deserialize::<DefCfg>(reader)?;
108 let clouds = MtDeserialize::mt_deserialize::<DefCfg>(reader)?;
110 let sun = MtDeserialize::mt_deserialize::<DefCfg>(reader)?;
111 let moon = MtDeserialize::mt_deserialize::<DefCfg>(reader)?;
113 let fog_tint_type = String::mt_deserialize::<DefCfg>(reader)?;
114 let fog_tint = match fog_tint_type.as_str() {
115 "default" => FogTint::Default,
116 "custom" => FogTint::Custom { sun, moon },
117 _ => return Err(InvalidEnum("FogTint", Box::new(fog_tint_type))),
120 let sky = match sky_type.as_str() {
122 let day_sky = MtDeserialize::mt_deserialize::<DefCfg>(reader)?;
123 let day_horizon = MtDeserialize::mt_deserialize::<DefCfg>(reader)?;
124 let dawn_sky = MtDeserialize::mt_deserialize::<DefCfg>(reader)?;
125 let dawn_horizon = MtDeserialize::mt_deserialize::<DefCfg>(reader)?;
126 let night_sky = MtDeserialize::mt_deserialize::<DefCfg>(reader)?;
127 let night_horizon = MtDeserialize::mt_deserialize::<DefCfg>(reader)?;
128 let indoor = MtDeserialize::mt_deserialize::<DefCfg>(reader)?;
141 let textures = MtDeserialize::mt_deserialize::<DefCfg>(reader)?;
143 Sky::Skybox { textures }
145 "plain" => Sky::Plain,
146 _ => return Err(InvalidEnum("Sky", Box::new(sky_type))),
158 #[mt_derive(to = "clt")]
159 pub struct SunParams {
162 pub tone_map: String,
168 #[mt_derive(to = "clt")]
169 pub struct MoonParams {
172 pub tone_map: String,
176 #[mt_derive(to = "clt")]
177 pub struct StarParams {
184 #[mt_derive(to = "clt")]
185 pub struct CloudParams {
187 pub diffuse_color: Color,
188 pub ambient_color: Color,
191 pub speed: Vector2<f32>,