use nalgebra_glm::Mat4;
#[derive(Clone, Copy, PartialEq)]
pub struct Transform(pub Mat4);
impl Default for Transform {
fn default() -> Self {
Self(Mat4::identity())
}
}
#[derive(Clone, Default, PartialEq)]
pub struct MeshName(pub String);
#[derive(Clone, Copy, Default, PartialEq)]
pub struct MaterialId(pub u32);
#[derive(Clone, Copy, PartialEq)]
pub struct Visible(pub bool);
impl Default for Visible {
fn default() -> Self {
Self(true)
}
}
#[derive(Clone, Copy, Default, PartialEq)]
pub struct MorphWeights(pub [f32; 8]);
#[derive(Clone, Copy, PartialEq)]
pub struct CullingMask(pub u32);
impl Default for CullingMask {
fn default() -> Self {
Self(u32::MAX)
}
}
#[derive(Clone, Copy, Default, PartialEq)]
pub struct Layer(pub u32);
#[derive(Clone, Default)]
pub struct RenderEmitter(pub crate::particles::ParticleEmitter);
pub struct ShadowCaster;
pub struct SelectionOutline;
nightshade_ecs::dynamic_schema! {
pub fn register_render_components {
transform: Transform => TRANSFORM,
mesh: MeshName => MESH,
material: MaterialId => MATERIAL,
visible: Visible => VISIBLE,
morph_weights: MorphWeights => MORPH_WEIGHTS,
culling_mask: CullingMask => CULLING_MASK,
layer: Layer => LAYER,
light: crate::config::RenderLightData => LIGHT,
decal: crate::config::RenderDecalData => DECAL,
water: crate::config::RenderWaterData => WATER,
emitter: RenderEmitter => EMITTER,
instanced: crate::config::InstancedObjectData => INSTANCED,
bounds: crate::config::RenderBounds => BOUNDS,
text: crate::config::RenderText => TEXT,
cloth: crate::config::RenderClothData => CLOTH,
meshlet: crate::config::MeshletPlacement => MESHLET,
}
}
nightshade_ecs::impl_component!(
Transform,
MeshName,
MaterialId,
Visible,
MorphWeights,
CullingMask,
Layer,
RenderEmitter,
crate::config::RenderLightData,
crate::config::RenderDecalData,
crate::config::RenderWaterData,
crate::config::InstancedObjectData,
crate::config::RenderBounds,
crate::config::RenderText,
crate::config::RenderClothData,
crate::config::MeshletPlacement,
crate::bounding_volume::BoundingVolume,
crate::particles::ParticleEmitter,
crate::render_layer::RenderLayer,
crate::config::ViewportUpdateMode,
);