use nalgebra_glm::Vec2;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct Decal {
pub texture: Option<String>,
pub emissive_texture: Option<String>,
pub emissive_strength: f32,
pub color: [f32; 4],
pub size: Vec2,
pub depth: f32,
pub normal_threshold: f32,
pub fade_start: f32,
pub fade_end: f32,
}
impl Default for Decal {
fn default() -> Self {
Self {
texture: None,
emissive_texture: None,
emissive_strength: 1.0,
color: [1.0, 1.0, 1.0, 1.0],
size: Vec2::new(1.0, 1.0),
depth: 1.0,
normal_threshold: 0.5,
fade_start: 50.0,
fade_end: 100.0,
}
}
}
impl Decal {
pub fn new(texture: impl Into<String>) -> Self {
Self {
texture: Some(texture.into()),
..Default::default()
}
}
pub fn with_size(mut self, width: f32, height: f32) -> Self {
self.size = Vec2::new(width, height);
self
}
pub fn with_color(mut self, color: [f32; 4]) -> Self {
self.color = color;
self
}
pub fn with_emissive(mut self, texture: impl Into<String>, strength: f32) -> Self {
self.emissive_texture = Some(texture.into());
self.emissive_strength = strength;
self
}
pub fn with_emissive_strength(mut self, strength: f32) -> Self {
self.emissive_strength = strength;
self
}
pub fn with_depth(mut self, depth: f32) -> Self {
self.depth = depth;
self
}
pub fn with_normal_threshold(mut self, threshold: f32) -> Self {
self.normal_threshold = threshold;
self
}
pub fn with_fade(mut self, start: f32, end: f32) -> Self {
self.fade_start = start;
self.fade_end = end;
self
}
}