melodium_engine/design/
treatment.rs

1use super::{Connection, ModelInstanciation, TreatmentInstanciation};
2use crate::descriptor::Treatment as TreatmentDescriptor;
3use core::fmt::Debug;
4use melodium_common::descriptor::Identifier;
5use std::collections::HashMap;
6use std::sync::Weak;
7
8#[derive(Debug, Clone)]
9pub struct Treatment {
10    pub descriptor: Weak<TreatmentDescriptor>,
11    pub model_instanciations: HashMap<String, ModelInstanciation>,
12    pub treatments: HashMap<String, TreatmentInstanciation>,
13    pub connections: Vec<Connection>,
14}
15
16impl Treatment {
17    pub fn make_use(&self, identifier: &Identifier) -> bool {
18        self.model_instanciations
19            .iter()
20            .any(|(_, model)| model.make_use(identifier))
21            || self
22                .treatments
23                .iter()
24                .any(|(_, treatment)| treatment.make_use(identifier))
25    }
26
27    pub fn uses(&self) -> Vec<Identifier> {
28        let mut uses = vec![];
29        uses.extend(
30            self.model_instanciations
31                .iter()
32                .flat_map(|(_, mi)| mi.uses()),
33        );
34        uses.extend(self.treatments.iter().flat_map(|(_, ti)| ti.uses()));
35        uses
36    }
37}