mittens_engine/engine/ecs/component/
signal_observer_router.rs1use crate::engine::ecs::component::Component;
2use crate::engine::ecs::component::ce_helpers::*;
3use crate::engine::ecs::{ComponentId, SignalEmitter};
4
5#[derive(Debug, Clone, Default)]
7pub struct SignalObserverRouterComponent {
8 pub blacklist: Vec<String>,
10
11 pub whitelist: Vec<String>,
13}
14
15impl SignalObserverRouterComponent {
16 pub fn new() -> Self {
17 Self::default()
18 }
19
20 pub fn with_blacklist(mut self, blacklist: Vec<String>) -> Self {
21 self.blacklist = blacklist;
22 self
23 }
24
25 pub fn with_whitelist(mut self, whitelist: Vec<String>) -> Self {
26 self.whitelist = whitelist;
27 self
28 }
29}
30
31impl Component for SignalObserverRouterComponent {
32 fn name(&self) -> &'static str {
33 "signal_observer_router"
34 }
35
36 fn as_any(&self) -> &dyn std::any::Any {
37 self
38 }
39
40 fn as_any_mut(&mut self) -> &mut dyn std::any::Any {
41 self
42 }
43
44 fn init(&mut self, _emit: &mut dyn SignalEmitter, _component: ComponentId) {}
45
46 fn to_mms_ast(
47 &self,
48 _world: &crate::engine::ecs::World,
49 ) -> crate::scripting::ast::ComponentExpression {
50 let mut ce = ce("ObserverRouter");
51 if !self.blacklist.is_empty() {
52 ce = ce.with_call("blacklist", vec![ls(&self.blacklist)]);
53 }
54 if !self.whitelist.is_empty() {
55 ce = ce.with_call("whitelist", vec![ls(&self.whitelist)]);
56 }
57 ce
58 }
59}