1mod node;
4pub use node::*;
5
6use std::sync::{RwLock, Arc, Weak};
7use crate::events::EventHandlers;
8
9pub struct Scene {
15 self_ref: Weak<RwLock<Scene>>,
16 nodes: Vec<Arc<RwLock<Node>>>,
17 pub events: EventHandlers
18}
19
20impl Scene {
21 pub fn new() -> Arc<RwLock<Scene>> {
22 let scene = Arc::new(RwLock::new(Scene {
23 self_ref: Weak::new(),
24 nodes: Vec::new(),
25 events: EventHandlers::default()
26 }));
27 scene.write().unwrap().self_ref = Arc::downgrade(&scene);
28 scene
29 }
30
31 pub fn new_node(&mut self) -> Arc<RwLock<Node>> {
33 let n = Node::default(Weak::upgrade(&self.self_ref).unwrap());
34 self.nodes.push(Arc::clone(&n));
35 n
36 }
37
38 pub fn iter_3d(&self) -> impl Iterator<Item=&Arc<RwLock<Node>>> {
40 self.nodes.iter()
41 }
42}