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), messenger: Messenger::new(connection),
scenegraph: Default::default(), scenegraph: Default::default(),
}); });
client.scenegraph.set_client(&client); let _ = client.scenegraph.client.set(Arc::downgrade(&client));
spatial::create_interface(&client); spatial::create_interface(&client);
field::create_interface(&client); field::create_interface(&client);
client client

View File

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