1
- use bevy_asset:: Assets ;
1
+ use bevy_asset:: { Assets , Handle } ;
2
2
use bevy_ecs:: {
3
+ bundle:: Bundle ,
4
+ children,
3
5
entity:: Entity ,
4
6
event:: EventReader ,
5
- observer :: Trigger ,
7
+ hierarchy :: Children ,
6
8
prelude:: Component ,
7
9
query:: Changed ,
8
10
reflect:: ReflectComponent ,
11
+ spawn:: SpawnRelated ,
9
12
system:: { Commands , Local , Query , Res , ResMut } ,
10
- world:: OnAdd ,
11
13
} ;
12
- use bevy_hierarchy:: { BuildChildren , Children } ;
13
14
use bevy_image:: Image ;
14
15
use bevy_math:: Rect ;
15
16
#[ cfg( feature = "bevy_ui_picking_backend" ) ]
@@ -19,13 +20,14 @@ use bevy_picking::{
19
20
pointer:: { Location , PointerId , PointerInput } ,
20
21
Pickable ,
21
22
} ;
23
+ use bevy_platform_support:: collections:: HashSet ;
22
24
use bevy_reflect:: Reflect ;
23
25
use bevy_render:: {
24
26
camera:: { Camera , NormalizedRenderTarget } ,
25
27
render_resource:: Extent3d ,
26
28
} ;
27
29
use bevy_transform:: components:: GlobalTransform ;
28
- use bevy_utils:: { default, HashSet } ;
30
+ use bevy_utils:: default;
29
31
#[ cfg( feature = "bevy_ui_picking_backend" ) ]
30
32
use uuid:: Uuid ;
31
33
@@ -149,26 +151,14 @@ pub fn viewport_picking(
149
151
}
150
152
}
151
153
152
- /// Adds a [`PointerId`] and [`ImageNode`] child to entities that have a [`Viewport`] component
153
- /// added to them.
154
- pub fn on_add_viewport (
155
- trigger : Trigger < OnAdd , Viewport > ,
156
- mut commands : Commands ,
157
- viewport_query : Query < & Viewport > ,
158
- camera_query : Query < & Camera > ,
159
- ) {
160
- let node = trigger. target ( ) ;
161
-
162
- let viewport = viewport_query. get ( node) . unwrap ( ) ;
163
- let Ok ( camera) = camera_query. get ( viewport. camera ) else {
164
- return ;
165
- } ;
166
- let Some ( image_handle) = camera. target . as_image ( ) else {
167
- return ;
168
- } ;
169
- commands
170
- . spawn ( (
171
- ImageNode :: new ( image_handle. clone ( ) ) ,
154
+ /// Spawns a new viewport widget with the given `camera` and `target`.
155
+ pub fn viewport ( camera : Entity , target : Handle < Image > ) -> impl Bundle {
156
+ (
157
+ Viewport :: new ( camera) ,
158
+ #[ cfg ( feature = "bevy_ui_picking_backend" ) ]
159
+ PointerId :: Custom ( Uuid :: new_v4 ( ) ) ,
160
+ children ! [ (
161
+ ImageNode :: new( target) ,
172
162
Node {
173
163
position_type: PositionType :: Absolute ,
174
164
top: Val :: ZERO ,
@@ -179,13 +169,8 @@ pub fn on_add_viewport(
179
169
} ,
180
170
#[ cfg( feature = "bevy_ui_picking_backend" ) ]
181
171
Pickable :: IGNORE ,
182
- ) )
183
- . set_parent ( node) ;
184
-
185
- #[ cfg( feature = "bevy_ui_picking_backend" ) ]
186
- commands
187
- . entity ( node)
188
- . insert ( PointerId :: Custom ( Uuid :: new_v4 ( ) ) ) ;
172
+ ) ] ,
173
+ )
189
174
}
190
175
191
176
/// Updates the size of the associated render target for viewports when the node size changes.
0 commit comments