Skip to main content

dreamwell_engine/physics/
render_mode.rs

1use serde::{Deserialize, Serialize};
2
3/// Render mode — GPU rendering strategy for particles.
4#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
5pub enum RenderMode {
6    Billboard,
7    StretchedBillboard,
8    Ribbon,
9    Beam,
10    MeshInstance,
11    ShardInstance,
12    MeshletCluster,
13    VolumetricImpostor,
14    PointCloud,
15}
16
17/// Representation mode — camera/view perspective for rendering.
18#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
19pub enum RepresentationMode {
20    Sprite2D,
21    TopDown2D,
22    Isometric2D,
23    SideScroll2D,
24    World3D,
25    TopDown3D,
26    FirstPerson3D,
27    ThirdPerson3D,
28}
29
30impl RenderMode {
31    pub const ALL: &[RenderMode] = &[
32        Self::Billboard,
33        Self::StretchedBillboard,
34        Self::Ribbon,
35        Self::Beam,
36        Self::MeshInstance,
37        Self::ShardInstance,
38        Self::MeshletCluster,
39        Self::VolumetricImpostor,
40        Self::PointCloud,
41    ];
42
43    pub fn name(&self) -> &'static str {
44        match self {
45            Self::Billboard => "Billboard",
46            Self::StretchedBillboard => "Stretched Billboard",
47            Self::Ribbon => "Ribbon",
48            Self::Beam => "Beam",
49            Self::MeshInstance => "Mesh Instance",
50            Self::ShardInstance => "Shard Instance",
51            Self::MeshletCluster => "Meshlet Cluster",
52            Self::VolumetricImpostor => "Volumetric Impostor",
53            Self::PointCloud => "Point Cloud",
54        }
55    }
56}
57
58impl RepresentationMode {
59    pub const ALL: &[RepresentationMode] = &[
60        Self::Sprite2D,
61        Self::TopDown2D,
62        Self::Isometric2D,
63        Self::SideScroll2D,
64        Self::World3D,
65        Self::TopDown3D,
66        Self::FirstPerson3D,
67        Self::ThirdPerson3D,
68    ];
69}
70
71#[cfg(test)]
72mod tests {
73    use super::*;
74
75    #[test]
76    fn render_mode_all() {
77        assert_eq!(RenderMode::ALL.len(), 9);
78    }
79
80    #[test]
81    fn representation_mode_all() {
82        assert_eq!(RepresentationMode::ALL.len(), 8);
83    }
84}