melodium_engine/design/
model_instanciation.rs

1use super::Parameter;
2use core::fmt::Debug;
3use melodium_common::descriptor::{Attribuable, Attributes, Identifier, Model};
4use std::collections::HashMap;
5use std::sync::Weak;
6
7#[derive(Debug, Clone)]
8pub struct ModelInstanciation {
9    pub name: String,
10    pub descriptor: Weak<dyn Model>,
11    pub parameters: HashMap<String, Parameter>,
12    pub attributes: Attributes,
13}
14
15impl ModelInstanciation {
16    pub fn make_use(&self, identifier: &Identifier) -> bool {
17        self.descriptor
18            .upgrade()
19            .map(|desc| desc.identifier() == identifier)
20            .unwrap_or(false)
21            || self
22                .parameters
23                .iter()
24                .any(|(_, parameter)| parameter.make_use(identifier))
25    }
26
27    pub fn uses(&self) -> Vec<Identifier> {
28        let descriptor = self.descriptor.upgrade().unwrap();
29        let mut uses = vec![descriptor.identifier().clone()];
30        uses.extend(
31            self.parameters
32                .iter()
33                .flat_map(|(_, parameter)| parameter.uses()),
34        );
35        uses
36    }
37}
38
39impl Attribuable for ModelInstanciation {
40    fn attributes(&self) -> &Attributes {
41        &self.attributes
42    }
43}