@@ -670,9 +670,7 @@ impl<N> Default for LinkScheme<N> {
670670 }
671671}
672672
673- /// SceneGraph is a non-dyn-compatible trait for all scene graphs to implement.
674- /// To use a scene graph as a dyn object, use `dyn SceneGraph` because
675- /// [`SceneGraph`] is dyn-compatible.
673+ /// SceneGraph is a trait for all scene graphs to implement.
676674pub trait SceneGraph : ' static {
677675 type ObjectType : Sized ;
678676 type Prefab : PrefabData < Graph = Self > ;
@@ -713,17 +711,21 @@ pub trait SceneGraph: 'static {
713711 fn add_node ( & mut self , node : Self :: Node ) -> Handle < Self :: Node > ;
714712
715713 /// Destroys the node and its children recursively.
716- fn remove_node ( & mut self , node_handle : Handle < Self :: Node > ) ;
714+ fn remove_node ( & mut self , node_handle : Handle < impl ObjectOrVariant < Self :: Node > > ) ;
717715
718716 /// Links specified child with specified parent.
719- fn link_nodes ( & mut self , child : Handle < Self :: Node > , parent : Handle < Self :: Node > ) ;
717+ fn link_nodes (
718+ & mut self ,
719+ child : Handle < impl ObjectOrVariant < Self :: Node > > ,
720+ parent : Handle < impl ObjectOrVariant < Self :: Node > > ,
721+ ) ;
720722
721723 /// Unlinks specified node from its parent and attaches it to root graph node.
722- fn unlink_node ( & mut self , node_handle : Handle < Self :: Node > ) ;
724+ fn unlink_node ( & mut self , node_handle : Handle < impl ObjectOrVariant < Self :: Node > > ) ;
723725
724726 /// Detaches the node from its parent, making the node unreachable from any other node in the
725727 /// graph.
726- fn isolate_node ( & mut self , node_handle : Handle < Self :: Node > ) ;
728+ fn isolate_node ( & mut self , node_handle : Handle < impl ObjectOrVariant < Self :: Node > > ) ;
727729
728730 /// Borrows a node by its handle.
729731 fn node ( & self , handle : Handle < Self :: Node > ) -> & Self :: Node {
@@ -1831,7 +1833,8 @@ mod test {
18311833 handle
18321834 }
18331835
1834- fn remove_node ( & mut self , node_handle : Handle < Self :: Node > ) {
1836+ fn remove_node ( & mut self , node_handle : Handle < impl ObjectOrVariant < Self :: Node > > ) {
1837+ let node_handle = node_handle. to_base ( ) ;
18351838 self . isolate_node ( node_handle) ;
18361839 let mut stack = vec ! [ node_handle] ;
18371840 while let Some ( handle) = stack. pop ( ) {
@@ -1840,18 +1843,26 @@ mod test {
18401843 }
18411844 }
18421845
1843- fn link_nodes ( & mut self , child : Handle < Self :: Node > , parent : Handle < Self :: Node > ) {
1846+ fn link_nodes (
1847+ & mut self ,
1848+ child : Handle < impl ObjectOrVariant < Self :: Node > > ,
1849+ parent : Handle < impl ObjectOrVariant < Self :: Node > > ,
1850+ ) {
1851+ let child = child. to_base ( ) ;
1852+ let parent = parent. to_base ( ) ;
18441853 self . isolate_node ( child) ;
18451854 self . nodes [ child] . parent = parent;
18461855 self . nodes [ parent] . children . push ( child) ;
18471856 }
18481857
1849- fn unlink_node ( & mut self , node_handle : Handle < Self :: Node > ) {
1858+ fn unlink_node ( & mut self , node_handle : Handle < impl ObjectOrVariant < Self :: Node > > ) {
18501859 self . isolate_node ( node_handle) ;
18511860 self . link_nodes ( node_handle, self . root ) ;
18521861 }
18531862
1854- fn isolate_node ( & mut self , node_handle : Handle < Self :: Node > ) {
1863+ fn isolate_node ( & mut self , node_handle : Handle < impl ObjectOrVariant < Self :: Node > > ) {
1864+ let node_handle = node_handle. to_base ( ) ;
1865+
18551866 let parent_handle =
18561867 std:: mem:: replace ( & mut self . nodes [ node_handle] . parent , Handle :: NONE ) ;
18571868
0 commit comments