melodium_engine/design/
model_instanciation.rs1use 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}