diff options
Diffstat (limited to 'src/classes/render_settings.rs')
-rw-r--r-- | src/classes/render_settings.rs | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/src/classes/render_settings.rs b/src/classes/render_settings.rs new file mode 100644 index 0000000..9751af4 --- /dev/null +++ b/src/classes/render_settings.rs @@ -0,0 +1,40 @@ +use super::{material::Material, pptr::PPtr, vectors::ColorRGBA}; +use crate::object::{Value, parser::FromValue}; +use anyhow::Result; +use serde::Serialize; + +#[derive(Debug, Serialize)] +pub struct RenderSettings { + pub skybox_material: PPtr<Material>, + pub fog_mode: i32, + pub fog_density: f32, + pub linear_fog_start: f32, + pub linear_fog_end: f32, + pub fog: bool, + pub fog_color: ColorRGBA, + pub ambient_equator_color: ColorRGBA, + pub ambient_ground_color: ColorRGBA, + pub ambient_sky_color: ColorRGBA, + pub ambient_intensity: f32, + pub ambient_mode: i32, +} + +impl FromValue for RenderSettings { + fn from_value(v: Value) -> Result<Self> { + let mut fields = v.as_class("RenderSettings")?; + Ok(RenderSettings { + skybox_material: fields.field("m_SkyboxMaterial")?, + fog: fields.field("m_Fog")?, + fog_color: fields.field("m_FogColor")?, + fog_density: fields.field("m_FogDensity")?, + fog_mode: fields.field("m_FogMode")?, + linear_fog_end: fields.field("m_LinearFogEnd")?, + linear_fog_start: fields.field("m_LinearFogStart")?, + ambient_equator_color: fields.field("m_AmbientEquatorColor")?, + ambient_ground_color: fields.field("m_AmbientGroundColor")?, + ambient_intensity: fields.field("m_AmbientIntensity")?, + ambient_mode: fields.field("m_AmbientMode")?, + ambient_sky_color: fields.field("m_AmbientSkyColor")?, + }) + } +} |