use crate::prelude::*;
use bevy::asset::Asset;
use bevy::color::LinearRgba;
use bevy::prelude::*;
#[derive(Asset, PartialEq, Debug, Clone, Default, Reflect)]
#[reflect(Default)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", reflect(Serialize, Deserialize))]
pub struct MToonOutline {
pub mode: OutlineWidthMode,
pub width_factor: f32,
pub color: LinearRgba,
pub lighting_mix_factor: f32,
}
impl From<&VrmcMaterialsExtensitions> for MToonOutline {
fn from(value: &VrmcMaterialsExtensitions) -> Self {
let color = value.outline_color_factor;
Self {
mode: match value.outline_width_mode.as_str() {
"worldCoordinates" => OutlineWidthMode::WorldCoordinates,
_ => OutlineWidthMode::None,
},
width_factor: value.outline_width_factor.unwrap_or_default(),
lighting_mix_factor: value.outline_lighting_mix_factor,
color: LinearRgba::rgb(color[0], color[1], color[2]),
}
}
}
#[derive(Reflect, Debug, Clone, Default, Copy, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", reflect(Serialize, Deserialize))]
pub enum OutlineWidthMode {
#[default]
None,
WorldCoordinates,
}