use super::displacement::{FilterMode, TileStyle};
#[derive(Debug, Clone, PartialEq)]
pub struct Material {
pub id: usize,
pub name: Option<String>,
pub color: Option<(u8, u8, u8, u8)>,
}
impl Material {
pub fn new(id: usize) -> Self {
Self {
id,
name: None,
color: None,
}
}
pub fn with_color(id: usize, r: u8, g: u8, b: u8, a: u8) -> Self {
Self {
id,
name: None,
color: Some((r, g, b, a)),
}
}
}
#[derive(Debug, Clone)]
pub struct ColorGroup {
pub id: usize,
pub colors: Vec<(u8, u8, u8, u8)>,
#[doc(hidden)]
pub parse_order: usize,
}
impl ColorGroup {
pub fn new(id: usize) -> Self {
Self {
id,
colors: Vec::new(),
parse_order: 0,
}
}
}
#[derive(Debug, Clone)]
pub struct BaseMaterialGroup {
pub id: usize,
pub materials: Vec<BaseMaterial>,
#[doc(hidden)]
pub parse_order: usize,
}
impl BaseMaterialGroup {
pub fn new(id: usize) -> Self {
Self {
id,
materials: Vec::new(),
parse_order: 0,
}
}
}
#[derive(Debug, Clone)]
pub struct BaseMaterial {
pub name: String,
pub displaycolor: (u8, u8, u8, u8),
}
impl BaseMaterial {
pub fn new(name: String, displaycolor: (u8, u8, u8, u8)) -> Self {
Self { name, displaycolor }
}
}
#[derive(Debug, Clone)]
pub struct Texture2D {
pub id: usize,
pub path: String,
pub contenttype: String,
pub tilestyleu: TileStyle,
pub tilestylev: TileStyle,
pub filter: FilterMode,
#[doc(hidden)]
pub parse_order: usize,
}
impl Texture2D {
pub fn new(id: usize, path: String, contenttype: String) -> Self {
Self {
id,
path,
contenttype,
tilestyleu: TileStyle::Wrap,
tilestylev: TileStyle::Wrap,
filter: FilterMode::Auto,
parse_order: 0,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq)]
pub struct Tex2Coord {
pub u: f32,
pub v: f32,
}
impl Tex2Coord {
pub fn new(u: f32, v: f32) -> Self {
Self { u, v }
}
}
#[derive(Debug, Clone)]
pub struct Texture2DGroup {
pub id: usize,
pub texid: usize,
pub tex2coords: Vec<Tex2Coord>,
#[doc(hidden)]
pub parse_order: usize,
}
impl Texture2DGroup {
pub fn new(id: usize, texid: usize) -> Self {
Self {
id,
texid,
tex2coords: Vec::new(),
parse_order: 0,
}
}
}
#[derive(Debug, Clone)]
pub struct Composite {
pub values: Vec<f32>,
}
impl Composite {
pub fn new(values: Vec<f32>) -> Self {
Self { values }
}
}
#[derive(Debug, Clone)]
pub struct CompositeMaterials {
pub id: usize,
pub matid: usize,
pub matindices: Vec<usize>,
pub composites: Vec<Composite>,
#[doc(hidden)]
pub parse_order: usize,
}
impl CompositeMaterials {
pub fn new(id: usize, matid: usize, matindices: Vec<usize>) -> Self {
Self {
id,
matid,
matindices,
composites: Vec::new(),
parse_order: 0,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum BlendMethod {
Mix,
Multiply,
}
#[derive(Debug, Clone)]
pub struct Multi {
pub pindices: Vec<usize>,
}
impl Multi {
pub fn new(pindices: Vec<usize>) -> Self {
Self { pindices }
}
}
#[derive(Debug, Clone)]
pub struct MultiProperties {
pub id: usize,
pub pids: Vec<usize>,
pub blendmethods: Vec<BlendMethod>,
pub multis: Vec<Multi>,
#[doc(hidden)]
pub parse_order: usize,
}
impl MultiProperties {
pub fn new(id: usize, pids: Vec<usize>) -> Self {
Self {
id,
pids,
blendmethods: Vec::new(),
multis: Vec::new(),
parse_order: 0,
}
}
}