Skip to main content

mittens_engine/engine/ecs/component/
transform_camera_specific.rs

1use super::Component;
2
3/// Selects a camera-dependent settings transform for its parent transform anchor.
4#[derive(Debug, Clone, Copy, PartialEq, Eq)]
5pub enum TransformCameraSpecificMode {
6    Monoscopic,
7    Stereoscopic,
8}
9
10#[derive(Debug, Clone, Copy)]
11pub struct TransformCameraSpecificComponent {
12    pub mode: TransformCameraSpecificMode,
13}
14
15impl TransformCameraSpecificComponent {
16    pub fn active_monoscopic() -> Self {
17        Self {
18            mode: TransformCameraSpecificMode::Monoscopic,
19        }
20    }
21
22    pub fn active_stereoscopic() -> Self {
23        Self {
24            mode: TransformCameraSpecificMode::Stereoscopic,
25        }
26    }
27}
28
29impl Component for TransformCameraSpecificComponent {
30    fn name(&self) -> &'static str {
31        "transform_camera_specific"
32    }
33    fn as_any(&self) -> &dyn std::any::Any {
34        self
35    }
36    fn as_any_mut(&mut self) -> &mut dyn std::any::Any {
37        self
38    }
39
40    fn to_mms_ast(
41        &self,
42        _world: &crate::engine::ecs::World,
43    ) -> crate::scripting::ast::ComponentExpression {
44        use crate::engine::ecs::component::ce_helpers::ce_call;
45        let ctor = match self.mode {
46            TransformCameraSpecificMode::Monoscopic => "active_monoscopic",
47            TransformCameraSpecificMode::Stereoscopic => "active_stereoscopic",
48        };
49        ce_call("TransformCameraSpecific", ctor, vec![])
50    }
51}