fix(scenegraph): use OnceCell instead of RefCell

This commit is contained in:
Nova
2022-06-14 21:11:46 -04:00
parent 956431bd00
commit 31797e35c4
2 changed files with 4 additions and 8 deletions

View File

@@ -16,7 +16,7 @@ impl Client {
messenger: Messenger::new(connection),
scenegraph: Default::default(),
});
client.scenegraph.set_client(&client);
let _ = client.scenegraph.client.set(Arc::downgrade(&client));
spatial::create_interface(&client);
field::create_interface(&client);
client

View File

@@ -3,7 +3,7 @@ use crate::nodes::core::Node;
use anyhow::Result;
use libstardustxr::scenegraph;
use libstardustxr::scenegraph::ScenegraphError;
use std::cell::RefCell;
use once_cell::sync::OnceCell;
use std::sync::{Arc, Weak};
use core::hash::BuildHasherDefault;
@@ -12,17 +12,13 @@ use rustc_hash::FxHasher;
#[derive(Default)]
pub struct Scenegraph {
client: RefCell<Weak<Client>>,
pub(super) client: OnceCell<Weak<Client>>,
nodes: DashMap<String, Arc<Node>, BuildHasherDefault<FxHasher>>,
}
impl Scenegraph {
pub fn get_client(&self) -> Arc<Client> {
self.client.borrow().upgrade().unwrap()
}
pub fn set_client(&self, client: &Arc<Client>) {
*self.client.borrow_mut() = Arc::downgrade(client);
self.client.get().unwrap().upgrade().unwrap()
}
pub fn add_node(&self, node: Node) -> Arc<Node> {