1
1
use bevy_asset:: Handle ;
2
2
use bevy_ecs:: {
3
- bundle:: Bundle , change_detection:: ResMut , entity:: Entity , prelude:: Changed , system:: Query ,
3
+ bundle:: Bundle ,
4
+ change_detection:: ResMut ,
5
+ entity:: Entity ,
6
+ prelude:: { Changed , Component } ,
7
+ system:: Query ,
4
8
} ;
5
9
use bevy_transform:: components:: { GlobalTransform , Transform } ;
6
10
7
11
use crate :: { DynamicScene , InstanceId , Scene , SceneSpawner } ;
8
12
13
+ #[ derive( Default , Component ) ]
14
+ pub struct HasSceneInstance ( Option < InstanceId > ) ;
15
+
9
16
#[ derive( Default , Bundle ) ]
10
17
pub struct SceneBundle {
11
18
pub scene : Handle < Scene > ,
12
- pub instance_id : Option < InstanceId > ,
19
+ pub instance_id : HasSceneInstance ,
13
20
pub transform : Transform ,
14
21
pub global_transform : GlobalTransform ,
15
22
}
16
23
17
24
#[ allow( clippy:: type_complexity) ]
18
25
pub fn scene_bundle_spawner (
19
26
mut scene_to_spawn : Query <
20
- ( Entity , & Handle < Scene > , & mut Option < InstanceId > ) ,
27
+ ( Entity , & Handle < Scene > , & mut HasSceneInstance ) ,
21
28
Changed < Handle < Scene > > ,
22
29
> ,
23
30
mut scene_spawner : ResMut < SceneSpawner > ,
24
31
) {
25
32
for ( entity, scene, mut instance) in scene_to_spawn. iter_mut ( ) {
26
- if let Some ( id) = instance. replace ( scene_spawner. spawn_as_child ( scene. clone ( ) , entity) ) {
33
+ if let Some ( id) = instance
34
+ . 0
35
+ . replace ( scene_spawner. spawn_as_child ( scene. clone ( ) , entity) )
36
+ {
27
37
scene_spawner. despawn_instance ( id) ;
28
38
}
29
39
}
@@ -32,22 +42,23 @@ pub fn scene_bundle_spawner(
32
42
#[ derive( Default , Bundle ) ]
33
43
pub struct DynamicSceneBundle {
34
44
pub scene : Handle < DynamicScene > ,
35
- pub instance_id : Option < InstanceId > ,
45
+ pub instance_id : HasSceneInstance ,
36
46
pub transform : Transform ,
37
47
pub global_transform : GlobalTransform ,
38
48
}
39
49
40
50
#[ allow( clippy:: type_complexity) ]
41
51
pub fn dynamic_scene_bundle_spawner (
42
52
mut dynamic_scene_to_spawn : Query <
43
- ( Entity , & Handle < DynamicScene > , & mut Option < InstanceId > ) ,
53
+ ( Entity , & Handle < DynamicScene > , & mut HasSceneInstance ) ,
44
54
Changed < Handle < DynamicScene > > ,
45
55
> ,
46
56
mut scene_spawner : ResMut < SceneSpawner > ,
47
57
) {
48
58
for ( entity, dynamic_scene, mut instance) in dynamic_scene_to_spawn. iter_mut ( ) {
49
- if let Some ( id) =
50
- instance. replace ( scene_spawner. spawn_dynamic_as_child ( dynamic_scene. clone ( ) , entity) )
59
+ if let Some ( id) = instance
60
+ . 0
61
+ . replace ( scene_spawner. spawn_dynamic_as_child ( dynamic_scene. clone ( ) , entity) )
51
62
{
52
63
scene_spawner. despawn_instance ( id) ;
53
64
}
0 commit comments