mirror of
https://codeberg.org/icewind/vmt-parser.git
synced 2026-06-03 20:14:06 +02:00
unlittwotexture
This commit is contained in:
parent
68ae686cb7
commit
b11b1ae7ec
2 changed files with 102 additions and 0 deletions
|
|
@ -1,6 +1,7 @@
|
|||
mod eyerefract;
|
||||
mod lightmappedgeneric;
|
||||
mod unlitgeneric;
|
||||
mod unlittwotexture;
|
||||
mod vertexlitgeneric;
|
||||
mod water;
|
||||
mod worldvertextransition;
|
||||
|
|
@ -9,6 +10,7 @@ pub use eyerefract::EyeRefractMaterial;
|
|||
pub use lightmappedgeneric::LightMappedGenericMaterial;
|
||||
use serde::{Deserialize, Deserializer, Serialize};
|
||||
pub use unlitgeneric::UnlitGenericMaterial;
|
||||
pub use unlittwotexture::UnlitTwoTextureMaterial;
|
||||
use vdf_reader::entry::{Entry, Table};
|
||||
use vdf_reader::error::UnknownError;
|
||||
use vdf_reader::{from_entry, VdfError};
|
||||
|
|
@ -24,6 +26,8 @@ pub enum Material {
|
|||
VertexLitGeneric(VertexLitGenericMaterial),
|
||||
#[serde(rename = "unlitgeneric")]
|
||||
UnlitGeneric(UnlitGenericMaterial),
|
||||
#[serde(rename = "unlittwotexture")]
|
||||
UnlitTwoTexture(UnlitTwoTextureMaterial),
|
||||
#[serde(rename = "water")]
|
||||
Water(WaterMaterial),
|
||||
#[serde(rename = "worldvertextransition")]
|
||||
|
|
@ -52,6 +56,7 @@ impl Material {
|
|||
Material::LightMappedGeneric(mat) => mat.translucent,
|
||||
Material::VertexLitGeneric(mat) => mat.translucent,
|
||||
Material::UnlitGeneric(mat) => mat.translucent,
|
||||
Material::UnlitTwoTexture(mat) => mat.translucent,
|
||||
Material::WorldVertexTransition(mat) => mat.translucent,
|
||||
Material::Water(_) => true,
|
||||
_ => false,
|
||||
|
|
@ -63,6 +68,7 @@ impl Material {
|
|||
Material::LightMappedGeneric(mat) => mat.no_cull,
|
||||
Material::VertexLitGeneric(mat) => mat.no_cull,
|
||||
Material::UnlitGeneric(mat) => mat.no_cull,
|
||||
Material::UnlitTwoTexture(mat) => mat.no_cull,
|
||||
Material::WorldVertexTransition(mat) => mat.no_cull,
|
||||
Material::Water(_) => true,
|
||||
_ => false,
|
||||
|
|
@ -74,6 +80,7 @@ impl Material {
|
|||
Material::LightMappedGeneric(mat) => mat.alpha_test.then_some(mat.alpha_test_reference),
|
||||
Material::VertexLitGeneric(mat) => mat.alpha_test.then_some(mat.alpha_test_reference),
|
||||
Material::UnlitGeneric(mat) => mat.alpha_test.then_some(mat.alpha_test_reference),
|
||||
Material::UnlitTwoTexture(mat) => mat.alpha_test.then_some(mat.alpha_test_reference),
|
||||
Material::WorldVertexTransition(mat) => {
|
||||
mat.alpha_test.then_some(mat.alpha_test_reference)
|
||||
}
|
||||
|
|
@ -87,6 +94,7 @@ impl Material {
|
|||
Material::LightMappedGeneric(mat) => &mat.base_texture,
|
||||
Material::VertexLitGeneric(mat) => &mat.base_texture,
|
||||
Material::UnlitGeneric(mat) => &mat.base_texture,
|
||||
Material::UnlitTwoTexture(mat) => &mat.base_texture,
|
||||
Material::WorldVertexTransition(mat) => &mat.base_texture,
|
||||
Material::Water(mat) => mat.base_texture.as_deref().unwrap_or_default(),
|
||||
Material::EyeRefract(mat) => &mat.iris,
|
||||
|
|
@ -99,6 +107,7 @@ impl Material {
|
|||
Material::LightMappedGeneric(mat) => mat.bump_map.as_deref(),
|
||||
Material::VertexLitGeneric(mat) => mat.bump_map.as_deref(),
|
||||
Material::UnlitGeneric(mat) => mat.bump_map.as_deref(),
|
||||
Material::UnlitTwoTexture(mat) => mat.bump_map.as_deref(),
|
||||
Material::WorldVertexTransition(mat) => mat.bump_map.as_deref(),
|
||||
Material::Water(mat) => mat.bump_map.as_deref(),
|
||||
_ => None,
|
||||
|
|
@ -109,6 +118,7 @@ impl Material {
|
|||
match self {
|
||||
Material::LightMappedGeneric(mat) => mat.surface_prop.as_deref(),
|
||||
Material::UnlitGeneric(mat) => mat.surface_prop.as_deref(),
|
||||
Material::UnlitTwoTexture(mat) => mat.surface_prop.as_deref(),
|
||||
Material::WorldVertexTransition(mat) => mat.surface_prop.as_deref(),
|
||||
_ => None,
|
||||
}
|
||||
|
|
@ -119,10 +129,22 @@ impl Material {
|
|||
Material::LightMappedGeneric(mat) => mat.alpha,
|
||||
Material::VertexLitGeneric(mat) => mat.alpha,
|
||||
Material::UnlitGeneric(mat) => mat.alpha,
|
||||
Material::UnlitTwoTexture(mat) => mat.alpha,
|
||||
Material::WorldVertexTransition(mat) => mat.alpha,
|
||||
_ => 1.0,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn ignore_z_test(&self) -> bool {
|
||||
match self {
|
||||
Material::LightMappedGeneric(mat) => mat.ignore_z,
|
||||
Material::VertexLitGeneric(mat) => mat.ignore_z,
|
||||
Material::UnlitGeneric(mat) => mat.ignore_z,
|
||||
Material::UnlitTwoTexture(mat) => mat.ignore_z,
|
||||
Material::WorldVertexTransition(mat) => mat.ignore_z,
|
||||
_ => false,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
|
|
|
|||
80
src/material/unlittwotexture.rs
Normal file
80
src/material/unlittwotexture.rs
Normal file
|
|
@ -0,0 +1,80 @@
|
|||
use super::deserialize_path;
|
||||
use crate::{default_scale, default_scale3, TextureTransform, Vec3};
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
pub struct UnlitTwoTextureMaterial {
|
||||
/// The first texture in the blend.
|
||||
#[serde(rename = "$basetexture", deserialize_with = "deserialize_path")]
|
||||
pub base_texture: String,
|
||||
/// The second texture to blend to.
|
||||
#[serde(rename = "$texture2", deserialize_with = "deserialize_path")]
|
||||
pub texture2: String,
|
||||
/// Links the surface to a set of physical properties.
|
||||
#[serde(rename = "$surfaceprop", default)]
|
||||
pub surface_prop: Option<String>,
|
||||
|
||||
/// Transforms the texture before use in the material. This does not affect lightmaps on the surface.
|
||||
#[serde(rename = "$basetexturetransform", default)]
|
||||
pub base_texture_transform: TextureTransform,
|
||||
/// Independently scales the red, green and blue channels of an albedo.
|
||||
#[serde(rename = "$color", default = "default_scale3")]
|
||||
pub color: Vec3,
|
||||
/// Independently scales the red, green and blue channels of an albedo.
|
||||
#[serde(rename = "$color2", default = "default_scale3")]
|
||||
pub color2: Vec3,
|
||||
|
||||
/// Scales the opacity of an entire material.
|
||||
#[serde(rename = "$alpha", default = "default_scale")]
|
||||
pub alpha: f32,
|
||||
/// Specifies a mask to use to determine binary opacity.
|
||||
#[serde(rename = "$alphatest", default)]
|
||||
pub alpha_test: bool,
|
||||
/// Specifies a mask to use to determine binary opacity.
|
||||
#[serde(rename = "$alphatestreference", default = "default_scale")]
|
||||
pub alpha_test_reference: f32,
|
||||
/// Vector-like edge filtering.
|
||||
#[serde(rename = "$distancealpha", default)]
|
||||
pub distance_alpha: bool,
|
||||
/// Disables backface culling.
|
||||
#[serde(rename = "$nocull", default)]
|
||||
pub no_cull: bool,
|
||||
/// Specifies that the material should be partially see-through.
|
||||
#[serde(rename = "$translucent", default)]
|
||||
pub translucent: bool,
|
||||
|
||||
/// bumpmap for the first texture.
|
||||
#[serde(rename = "$bumpmap", default, deserialize_with = "deserialize_path")]
|
||||
pub bump_map: Option<String>,
|
||||
/// bumpmap for the second texture.
|
||||
#[serde(rename = "$bumpmap2", default, deserialize_with = "deserialize_path")]
|
||||
pub bump_map2: Option<String>,
|
||||
/// Per-texel color modification via a warp texture.
|
||||
#[serde(
|
||||
rename = "$lightwarptexture",
|
||||
default,
|
||||
deserialize_with = "deserialize_path"
|
||||
)]
|
||||
pub light_wrap_texture: Option<String>,
|
||||
/// Determines whether the surface is self-illuminated independent of environment lighting.
|
||||
#[serde(rename = "$selfillum", default)]
|
||||
pub self_illum: bool,
|
||||
/// Flags the $bumpmap as being a self-shadowing bumpmap.
|
||||
#[serde(rename = "$ssbump", default)]
|
||||
pub ss_bump: bool,
|
||||
|
||||
/// Specular reflections.
|
||||
#[serde(rename = "$envmap", default, deserialize_with = "deserialize_path")]
|
||||
pub env_map: Option<String>,
|
||||
/// Diffuse reflections.
|
||||
#[serde(rename = "$phong", default)]
|
||||
pub phong: f32,
|
||||
|
||||
/// Prevents fog from overdrawing a material.
|
||||
#[serde(rename = "$nofog", default)]
|
||||
pub no_fog: bool,
|
||||
|
||||
/// Ignore z filtering
|
||||
#[serde(rename = "$ignorez", default)]
|
||||
pub ignore_z: bool,
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue