Advertisement
Guest User

Untitled

a guest
Jan 28th, 2020
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Rust 1.07 KB | None | 0 0
  1. #[derive(Debug)]
  2. struct Scene {
  3.     root: Rc<RefCell<SceneNode>>
  4. }
  5.  
  6. impl Scene {
  7.     pub fn new() -> Scene {
  8.         Scene {
  9.             root: Rc::new(RefCell::new(SceneNode::new(String::from("root"))))
  10.         }
  11.     }
  12.    
  13.     pub fn root(&self) -> Rc<RefCell<SceneNode>> {
  14.         self.root.clone()
  15.     }
  16. }
  17.  
  18. #[derive(Debug)]
  19. struct SceneNode {
  20.     identifier: String,
  21.     parent: Option<Weak<RefCell<SceneNode>>>,
  22.     children: HashMap<String, Rc<RefCell<SceneNode>>>
  23. }
  24.  
  25. impl SceneNode {
  26.     pub fn new(identifier: String) -> SceneNode {
  27.         SceneNode {
  28.             identifier,
  29.             parent: None,
  30.             children: HashMap::new()
  31.         }
  32.     }
  33.    
  34.     pub fn identifier(&self) -> &String {
  35.         &self.identifier
  36.     }
  37.    
  38.     pub fn add_child(&mut self, child: SceneNode) {
  39.         // How? child.set_parent(self);
  40.         self.children.insert(child.identifier().clone(), Rc::new(RefCell::new(child)));
  41.     }
  42.    
  43.     pub fn set_parent(&mut self, parent: Option<Weak<RefCell<SceneNode>>>) {
  44.         self.parent = parent;
  45.     }
  46. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement