mittens_engine/engine/ecs/component/
renderer_settings.rs1use crate::engine::ecs::ComponentId;
2use crate::engine::ecs::component::Component;
3use crate::engine::graphics::MsaaMode;
4
5#[derive(Debug, Clone, Copy)]
9pub struct RendererSettingsComponent {
10 pub msaa4x: bool,
11 pub window_size: Option<[u32; 2]>,
12}
13
14impl RendererSettingsComponent {
15 pub fn new() -> Self {
16 Self {
17 msaa4x: true,
18 window_size: None,
19 }
20 }
21
22 pub fn msaa_off() -> Self {
23 Self {
24 msaa4x: false,
25 window_size: None,
26 }
27 }
28
29 pub fn with_window_size(mut self, width: u32, height: u32) -> Self {
30 if width > 0 && height > 0 {
31 self.window_size = Some([width, height]);
32 }
33 self
34 }
35
36 pub fn msaa_mode(&self) -> MsaaMode {
37 if self.msaa4x {
38 MsaaMode::Msaa4x
39 } else {
40 MsaaMode::Off
41 }
42 }
43}
44
45impl Default for RendererSettingsComponent {
46 fn default() -> Self {
47 Self::new()
48 }
49}
50
51impl Component for RendererSettingsComponent {
52 fn name(&self) -> &'static str {
53 "renderer_settings"
54 }
55
56 fn as_any(&self) -> &dyn std::any::Any {
57 self
58 }
59
60 fn as_any_mut(&mut self) -> &mut dyn std::any::Any {
61 self
62 }
63
64 fn init(&mut self, emit: &mut dyn crate::engine::ecs::SignalEmitter, component: ComponentId) {
65 emit.push_intent_now(
66 component,
67 crate::engine::ecs::IntentValue::RegisterRendererSettings {
68 component_ids: vec![component],
69 },
70 );
71 }
72
73 fn to_mms_ast(
74 &self,
75 _world: &crate::engine::ecs::World,
76 ) -> crate::scripting::ast::ComponentExpression {
77 use crate::engine::ecs::component::ce_helpers::*;
78 let mut ce = if self.msaa4x {
79 ce("RendererSettings")
80 } else {
81 ce_call("RendererSettings", "msaa_off", vec![])
82 };
83 if let Some([w, h]) = self.window_size {
84 ce = ce.with_call("window_size", vec![num(w as f64), num(h as f64)]);
85 }
86 ce
87 }
88}