mirror of
https://github.com/FyroxEngine/Fyrox.git
synced 2026-10-12 02:02:20 +00:00
AbstractSceneNode + AbstractSceneGraph traits + impls
This commit is contained in:
+37
-5
@@ -3,6 +3,7 @@
|
||||
//! Graph utilities and common algorithms.
|
||||
|
||||
use fxhash::FxHashMap;
|
||||
use fyrox_core::pool::ErasedHandle;
|
||||
use fyrox_core::{
|
||||
log::{Log, MessageKind},
|
||||
pool::Handle,
|
||||
@@ -371,9 +372,11 @@ fn reset_property_modified_flag(entity: &mut dyn Reflect, path: &str) {
|
||||
})
|
||||
}
|
||||
|
||||
pub trait SceneGraphNode:
|
||||
Reflect + NameProvider + Sized + Clone + ComponentProvider + 'static
|
||||
{
|
||||
pub trait AbstractSceneNode: ComponentProvider + Reflect + NameProvider {}
|
||||
|
||||
impl<T: SceneGraphNode> AbstractSceneNode for T {}
|
||||
|
||||
pub trait SceneGraphNode: AbstractSceneNode + Clone + 'static {
|
||||
type Base: Clone;
|
||||
type SceneGraph: SceneGraph<Node = Self>;
|
||||
type ResourceData: PrefabData<Graph = Self::SceneGraph>;
|
||||
@@ -558,7 +561,15 @@ impl<N> Default for LinkScheme<N> {
|
||||
}
|
||||
}
|
||||
|
||||
pub trait BaseSceneGraph: 'static {
|
||||
pub trait AbstractSceneGraph: 'static {
|
||||
fn try_get_node_untyped(&self, handle: ErasedHandle) -> Option<&dyn AbstractSceneNode>;
|
||||
fn try_get_node_untyped_mut(
|
||||
&mut self,
|
||||
handle: ErasedHandle,
|
||||
) -> Option<&mut dyn AbstractSceneNode>;
|
||||
}
|
||||
|
||||
pub trait BaseSceneGraph: AbstractSceneGraph {
|
||||
type Prefab: PrefabData<Graph = Self>;
|
||||
type Node: SceneGraphNode<SceneGraph = Self, ResourceData = Self::Prefab>;
|
||||
|
||||
@@ -1308,7 +1319,11 @@ where
|
||||
|
||||
#[cfg(test)]
|
||||
mod test {
|
||||
use crate::{BaseSceneGraph, NodeMapping, PrefabData, SceneGraph, SceneGraphNode};
|
||||
use crate::{
|
||||
AbstractSceneGraph, AbstractSceneNode, BaseSceneGraph, NodeMapping, PrefabData, SceneGraph,
|
||||
SceneGraphNode,
|
||||
};
|
||||
use fyrox_core::pool::ErasedHandle;
|
||||
use fyrox_core::{
|
||||
pool::{Handle, Pool},
|
||||
reflect::prelude::*,
|
||||
@@ -1463,6 +1478,23 @@ mod test {
|
||||
}
|
||||
}
|
||||
|
||||
impl AbstractSceneGraph for Graph {
|
||||
fn try_get_node_untyped(&self, handle: ErasedHandle) -> Option<&dyn AbstractSceneNode> {
|
||||
self.nodes
|
||||
.try_borrow(handle.into())
|
||||
.map(|n| n as &dyn AbstractSceneNode)
|
||||
}
|
||||
|
||||
fn try_get_node_untyped_mut(
|
||||
&mut self,
|
||||
handle: ErasedHandle,
|
||||
) -> Option<&mut dyn AbstractSceneNode> {
|
||||
self.nodes
|
||||
.try_borrow_mut(handle.into())
|
||||
.map(|n| n as &mut dyn AbstractSceneNode)
|
||||
}
|
||||
}
|
||||
|
||||
impl BaseSceneGraph for Graph {
|
||||
type Prefab = Graph;
|
||||
type Node = Node;
|
||||
|
||||
+20
-1
@@ -294,12 +294,14 @@ pub use control::*;
|
||||
use fyrox_core::futures::future::join_all;
|
||||
use fyrox_core::log::Log;
|
||||
use fyrox_graph::{
|
||||
BaseSceneGraph, NodeHandleMap, NodeMapping, PrefabData, SceneGraph, SceneGraphNode,
|
||||
AbstractSceneGraph, AbstractSceneNode, BaseSceneGraph, NodeHandleMap, NodeMapping, PrefabData,
|
||||
SceneGraph, SceneGraphNode,
|
||||
};
|
||||
pub use node::*;
|
||||
pub use thickness::*;
|
||||
|
||||
pub use fyrox_animation as generic_animation;
|
||||
use fyrox_core::pool::ErasedHandle;
|
||||
|
||||
// TODO: Make this part of UserInterface struct.
|
||||
pub const COLOR_COAL_BLACK: Color = Color::opaque(10, 10, 10);
|
||||
@@ -2802,6 +2804,23 @@ impl PrefabData for UserInterface {
|
||||
}
|
||||
}
|
||||
|
||||
impl AbstractSceneGraph for UserInterface {
|
||||
fn try_get_node_untyped(&self, handle: ErasedHandle) -> Option<&dyn AbstractSceneNode> {
|
||||
self.nodes
|
||||
.try_borrow(handle.into())
|
||||
.map(|n| n as &dyn AbstractSceneNode)
|
||||
}
|
||||
|
||||
fn try_get_node_untyped_mut(
|
||||
&mut self,
|
||||
handle: ErasedHandle,
|
||||
) -> Option<&mut dyn AbstractSceneNode> {
|
||||
self.nodes
|
||||
.try_borrow_mut(handle.into())
|
||||
.map(|n| n as &mut dyn AbstractSceneNode)
|
||||
}
|
||||
}
|
||||
|
||||
impl BaseSceneGraph for UserInterface {
|
||||
type Prefab = Self;
|
||||
type Node = UiNode;
|
||||
|
||||
+19
-1
@@ -60,7 +60,8 @@ use crate::{
|
||||
utils::lightmap::Lightmap,
|
||||
};
|
||||
use fxhash::{FxHashMap, FxHashSet};
|
||||
use fyrox_graph::BaseSceneGraph;
|
||||
use fyrox_core::pool::ErasedHandle;
|
||||
use fyrox_graph::{AbstractSceneGraph, AbstractSceneNode, BaseSceneGraph};
|
||||
use std::{
|
||||
any::{Any, TypeId},
|
||||
fmt::Debug,
|
||||
@@ -1493,6 +1494,23 @@ impl Visit for Graph {
|
||||
}
|
||||
}
|
||||
|
||||
impl AbstractSceneGraph for Graph {
|
||||
fn try_get_node_untyped(&self, handle: ErasedHandle) -> Option<&dyn AbstractSceneNode> {
|
||||
self.pool
|
||||
.try_borrow(handle.into())
|
||||
.map(|n| n as &dyn AbstractSceneNode)
|
||||
}
|
||||
|
||||
fn try_get_node_untyped_mut(
|
||||
&mut self,
|
||||
handle: ErasedHandle,
|
||||
) -> Option<&mut dyn AbstractSceneNode> {
|
||||
self.pool
|
||||
.try_borrow_mut(handle.into())
|
||||
.map(|n| n as &mut dyn AbstractSceneNode)
|
||||
}
|
||||
}
|
||||
|
||||
impl BaseSceneGraph for Graph {
|
||||
type Prefab = Model;
|
||||
type Node = Node;
|
||||
|
||||
Reference in New Issue
Block a user