@@ -62,39 +62,51 @@ pub struct QueuedScenes {
6262    waiting_entities :  HashMap < AssetId < ScenePatch > ,  Vec < Entity > > , 
6363} 
6464
65+ #[ derive( Resource ,  Default ) ]  
66+ pub  struct  NewScenes  { 
67+     entities :  Vec < Entity > , 
68+ } 
69+ 
70+ pub  fn  on_add_scene_patch_instance ( 
71+     trigger :  On < Add ,  ScenePatchInstance > , 
72+     mut  new_scenes :  ResMut < NewScenes > , 
73+ )  { 
74+     new_scenes. entities . push ( trigger. target ( ) ) ; 
75+ } 
76+ 
6577pub  fn  spawn_queued ( 
6678    world :  & mut  World , 
67-     handles :  & mut  QueryState < ( Entity ,   & ScenePatchInstance ) ,   Added < ScenePatchInstance > > , 
79+     handles :  & mut  QueryState < & ScenePatchInstance > , 
6880    mut  reader :  Local < EventCursor < AssetEvent < ScenePatch > > > , 
6981)  { 
7082    world. resource_scope ( |world,  mut  patches :  Mut < Assets < ScenePatch > > | { 
7183        world. resource_scope ( |world,  mut  queued :  Mut < QueuedScenes > | { 
7284            world. resource_scope ( |world,  events :  Mut < Events < AssetEvent < ScenePatch > > > | { 
73-                 for  ( entity,  id)  in  handles
74-                     . iter ( world) 
75-                     . map ( |( e,  h) | ( e,  h. id ( ) ) ) 
76-                     . collect :: < Vec < _ > > ( ) 
77-                 { 
78-                     if  let  Some ( scene)  = patches. get_mut ( id) . and_then ( |p| p. resolved . as_mut ( ) )  { 
79-                         let  mut  entity_mut = world. get_entity_mut ( entity) . unwrap ( ) ; 
80-                         scene. spawn ( & mut  entity_mut) . unwrap ( ) ; 
81-                     }  else  { 
82-                         let  entities = queued. waiting_entities . entry ( id) . or_default ( ) ; 
83-                         entities. push ( entity) ; 
85+                 loop  { 
86+                     let  mut  new_scenes = world. resource_mut :: < NewScenes > ( ) ; 
87+                     if  new_scenes. entities . is_empty ( )  { 
88+                         break ; 
89+                     } 
90+                     for  entity in  core:: mem:: take ( & mut  new_scenes. entities )  { 
91+                         if  let  Ok ( id)  = handles. get ( world,  entity) . map ( |h| h. id ( ) )  { 
92+                             if  let  Some ( scene)  =
93+                                 patches. get_mut ( id) . and_then ( |p| p. resolved . as_mut ( ) ) 
94+                             { 
95+                                 let  mut  entity_mut = world. get_entity_mut ( entity) . unwrap ( ) ; 
96+                                 scene. spawn ( & mut  entity_mut) . unwrap ( ) ; 
97+                             }  else  { 
98+                                 let  entities = queued. waiting_entities . entry ( id) . or_default ( ) ; 
99+                                 entities. push ( entity) ; 
100+                             } 
101+                         } 
84102                    } 
85103                } 
86104
87105                for  event in  reader. read ( & events)  { 
88-                     if  let  AssetEvent :: LoadedWithDependencies  {  id }  = event { 
89-                         let  Some ( scene)  = patches. get_mut ( * id) . and_then ( |p| p. resolved . as_mut ( ) ) 
90-                         else  { 
91-                             continue ; 
92-                         } ; 
93- 
94-                         let  Some ( entities)  = queued. waiting_entities . remove ( id)  else  { 
95-                             continue ; 
96-                         } ; 
97- 
106+                     if  let  AssetEvent :: LoadedWithDependencies  {  id }  = event
107+                         && let  Some ( scene)  = patches. get_mut ( * id) . and_then ( |p| p. resolved . as_mut ( ) ) 
108+                         && let  Some ( entities)  = queued. waiting_entities . remove ( id) 
109+                     { 
98110                        for  entity in  entities { 
99111                            if  let  Ok ( mut  entity_mut)  = world. get_entity_mut ( entity)  { 
100112                                scene. spawn ( & mut  entity_mut) . unwrap ( ) ; 
0 commit comments