pub struct GlobalTransform(/* private fields */);Expand description
GlobalTransform is an affine transformation from entity-local coordinates to worldspace coordinates.
You cannot directly mutate GlobalTransform; instead, you change an entity’s transform by manipulating
its Transform, which indirectly causes Bevy to update its GlobalTransform.
- To get the global transform of an entity, you should get its
GlobalTransform. - For transform hierarchies to work correctly, you must have both a
Transformand aGlobalTransform.GlobalTransformis automatically inserted wheneverTransformis inserted.
§Transform and GlobalTransform
Transform transforms an entity relative to its parent’s reference frame, or relative to world space coordinates,
if it doesn’t have a ChildOf component.
GlobalTransform is managed by Bevy; it is computed by successively applying the Transform of each ancestor
entity which has a Transform. This is done automatically by Bevy-internal systems in the TransformSystems::Propagate
system set.
This system runs during PostUpdate. If you
update the Transform of an entity in this schedule or after, you will notice a 1 frame lag
before the GlobalTransform is updated.
§Examples
Implementations§
Source§impl GlobalTransform
impl GlobalTransform
Sourcepub const IDENTITY: GlobalTransform
pub const IDENTITY: GlobalTransform
An identity GlobalTransform that maps all points in space to themselves.
Sourcepub fn affine(&self) -> Affine3A
pub fn affine(&self) -> Affine3A
Returns the 3d affine transformation matrix as an Affine3A.
Examples found in repository?
208fn try_plot(
209 event: On<TryPlot>,
210 sprite: Query<(&Sprite, &Anchor, &GlobalTransform), With<SpriteToSave>>,
211 camera: Single<(&Camera, &GlobalTransform)>,
212 texture_atlases: Res<Assets<TextureAtlasLayout>>,
213 draw_color: Res<DrawColor>,
214 mut images: ResMut<Assets<Image>>,
215) {
216 let Ok((sprite, anchor, sprite_transform)) = sprite.get(event.entity) else {
217 return;
218 };
219 let (camera, camera_transform) = camera.into_inner();
220 let Ok(world_position) = camera.viewport_to_world_2d(camera_transform, event.location.position)
221 else {
222 return;
223 };
224 let relative_to_sprite = sprite_transform
225 .affine()
226 .inverse()
227 .transform_point3(world_position.extend(0.0));
228 let Ok(pixel_space) = sprite.compute_pixel_space_point(
229 relative_to_sprite.xy(),
230 *anchor,
231 &images,
232 &texture_atlases,
233 ) else {
234 return;
235 };
236 let pixel_coordinates = pixel_space.floor().as_uvec2();
237 let mut image = images.get_mut(&sprite.image).unwrap();
238 // For an actual drawing app, you'd at least draw a line from the last point, but this is
239 // simpler.
240 image
241 .set_color_at(pixel_coordinates.x, pixel_coordinates.y, draw_color.0)
242 .unwrap();
243}More examples
332pub fn extract_colored_mesh2d(
333 mut commands: Commands,
334 mut previous_len: Local<usize>,
335 // When extracting, you must use `Extract` to mark the `SystemParam`s
336 // which should be taken from the main world.
337 query: Extract<
338 Query<
339 (
340 Entity,
341 RenderEntity,
342 &ViewVisibility,
343 &GlobalTransform,
344 &Mesh2d,
345 ),
346 With<ColoredMesh2d>,
347 >,
348 >,
349 mut render_mesh_instances: ResMut<RenderColoredMesh2dInstances>,
350) {
351 let mut values = Vec::with_capacity(*previous_len);
352 for (entity, render_entity, view_visibility, transform, handle) in &query {
353 if !view_visibility.get() {
354 continue;
355 }
356
357 let transforms = Mesh2dTransforms {
358 world_from_local: transform.affine().into(),
359 flags: MeshFlags::empty().bits(),
360 };
361
362 values.push((render_entity, ColoredMesh2d));
363 render_mesh_instances.insert(
364 entity.into(),
365 RenderMesh2dInstance {
366 mesh_asset_id: handle.0.id(),
367 transforms,
368 material_bind_group_id: Material2dBindGroupId::default(),
369 automatic_batching: false,
370 tag: 0,
371 },
372 );
373 }
374 *previous_len = values.len();
375 commands.try_insert_batch(values);
376}Sourcepub fn compute_transform(&self) -> Transform
pub fn compute_transform(&self) -> Transform
Returns the transformation as a Transform.
The transform is expected to be non-degenerate and without shearing, or the output will be invalid.
Sourcepub fn to_isometry(&self) -> Isometry3d
pub fn to_isometry(&self) -> Isometry3d
Computes a Scale-Rotation-Translation decomposition of the transformation and returns the isometric part as an isometry. Any scaling done by the transformation will be ignored. Note: this is a somewhat costly and lossy conversion.
The transform is expected to be non-degenerate and without shearing, or the output will be invalid.
Sourcepub fn reparented_to(&self, parent: &GlobalTransform) -> Transform
pub fn reparented_to(&self, parent: &GlobalTransform) -> Transform
Returns the Transform self would have if it was a child of an entity
with the parent GlobalTransform.
This is useful if you want to “reparent” an Entity.
Say you have an entity e1 that you want to turn into a child of e2,
but you want e1 to keep the same global transform, even after re-parenting. You would use:
#[derive(Component)]
struct ToReparent {
new_parent: Entity,
}
fn reparent_system(
mut commands: Commands,
mut targets: Query<(&mut Transform, Entity, &GlobalTransform, &ToReparent)>,
transforms: Query<&GlobalTransform>,
) {
for (mut transform, entity, initial, to_reparent) in targets.iter_mut() {
if let Ok(parent_transform) = transforms.get(to_reparent.new_parent) {
*transform = initial.reparented_to(parent_transform);
commands.entity(entity)
.remove::<ToReparent>()
.insert(ChildOf(to_reparent.new_parent));
}
}
}The transform is expected to be non-degenerate and without shearing, or the output will be invalid.
Sourcepub fn to_scale_rotation_translation(&self) -> (Vec3, Quat, Vec3)
pub fn to_scale_rotation_translation(&self) -> (Vec3, Quat, Vec3)
Extracts scale, rotation and translation from self.
The transform is expected to be non-degenerate and without shearing, or the output will be invalid.
Examples found in repository?
104fn draw_bounds<Shape: Bounded2d + Send + Sync + 'static>(
105 q: Query<(&DrawBounds<Shape>, &GlobalTransform)>,
106 mut gizmos: Gizmos,
107) {
108 for (shape, transform) in &q {
109 let (_, rotation, translation) = transform.to_scale_rotation_translation();
110 let translation = translation.truncate();
111 let rotation = rotation.to_euler(EulerRot::XYZ).2;
112 let isometry = Isometry2d::new(translation, Rot2::radians(rotation));
113
114 let aabb = shape.0.aabb_2d(isometry);
115 gizmos.rect_2d(aabb.center(), aabb.half_size() * 2.0, RED);
116
117 let bounding_circle = shape.0.bounding_circle(isometry);
118 gizmos.circle_2d(bounding_circle.center, bounding_circle.radius(), BLUE);
119 }
120}Sourcepub fn up(&self) -> Dir3
pub fn up(&self) -> Dir3
Return the local up vector (Y).
Examples found in repository?
13fn draw_cursor(
14 camera_query: Single<(&Camera, &GlobalTransform)>,
15 ground: Single<&GlobalTransform, With<Ground>>,
16 window: Single<&Window>,
17 mut gizmos: Gizmos,
18) {
19 let (camera, camera_transform) = *camera_query;
20
21 if let Some(cursor_position) = window.cursor_position()
22 // Calculate a ray pointing from the camera into the world based on the cursor's position.
23 && let Ok(ray) = camera.viewport_to_world(camera_transform, cursor_position)
24 // Calculate if and where the ray is hitting the ground plane.
25 && let Some(point) = ray.plane_intersection_point(ground.translation(), InfinitePlane3d::new(ground.up()))
26 {
27 // Draw a circle just above the ground plane at that position.
28 gizmos.circle(
29 Isometry3d::new(
30 point + ground.up() * 0.01,
31 Quat::from_rotation_arc(Vec3::Z, ground.up().as_vec3()),
32 ),
33 0.2,
34 Color::WHITE,
35 );
36 }
37}Sourcepub fn translation(&self) -> Vec3
pub fn translation(&self) -> Vec3
Get the translation as a Vec3.
Examples found in repository?
122fn interact_bodies(mut query: Query<(&Mass, &GlobalTransform, &mut Acceleration)>) {
123 let mut iter = query.iter_combinations_mut();
124 while let Some([(Mass(m1), transform1, mut acc1), (Mass(m2), transform2, mut acc2)]) =
125 iter.fetch_next()
126 {
127 let delta = transform2.translation() - transform1.translation();
128 let distance_sq: f32 = delta.length_squared();
129
130 let f = GRAVITY_CONSTANT / distance_sq;
131 let force_unit_mass = delta * f;
132 acc1.0 += force_unit_mass * *m2;
133 acc2.0 -= force_unit_mass * *m1;
134 }
135}More examples
346fn draw_camera_gizmo(cameras: Query<(&Camera, &GlobalTransform)>, mut gizmos: Gizmos) {
347 for (camera, transform) in &cameras {
348 // As above, we use the order as a cheap tag to tell the depth texture
349 // apart from the main texture.
350 if camera.order >= 0 {
351 continue;
352 }
353
354 // Draw a cone representing the camera.
355 gizmos.primitive_3d(
356 &Cone {
357 radius: 1.0,
358 height: 3.0,
359 },
360 Isometry3d::new(
361 transform.translation(),
362 // We have to rotate here because `Cone` primitives are oriented
363 // along +Y and cameras point along +Z.
364 transform.rotation() * Quat::from_rotation_x(FRAC_PI_2),
365 ),
366 LIME,
367 );
368 }
369}13fn draw_cursor(
14 camera_query: Single<(&Camera, &GlobalTransform)>,
15 ground: Single<&GlobalTransform, With<Ground>>,
16 window: Single<&Window>,
17 mut gizmos: Gizmos,
18) {
19 let (camera, camera_transform) = *camera_query;
20
21 if let Some(cursor_position) = window.cursor_position()
22 // Calculate a ray pointing from the camera into the world based on the cursor's position.
23 && let Ok(ray) = camera.viewport_to_world(camera_transform, cursor_position)
24 // Calculate if and where the ray is hitting the ground plane.
25 && let Some(point) = ray.plane_intersection_point(ground.translation(), InfinitePlane3d::new(ground.up()))
26 {
27 // Draw a circle just above the ground plane at that position.
28 gizmos.circle(
29 Isometry3d::new(
30 point + ground.up() * 0.01,
31 Quat::from_rotation_arc(Vec3::Z, ground.up().as_vec3()),
32 ),
33 0.2,
34 Color::WHITE,
35 );
36 }
37}45fn observe_on_step(
46 step: On<Step>,
47 particle: Res<ParticleAssets>,
48 mut commands: Commands,
49 transforms: Query<&GlobalTransform>,
50 mut seeded_rng: ResMut<SeededRng>,
51) -> Result {
52 let translation = transforms.get(step.trigger().target)?.translation();
53 // Spawn a bunch of particles.
54 for _ in 0..14 {
55 let horizontal = seeded_rng.0.random::<Dir2>() * seeded_rng.0.random_range(8.0..12.0);
56 let vertical = seeded_rng.0.random_range(0.0..4.0);
57 let size = seeded_rng.0.random_range(0.2..1.0);
58
59 commands.spawn((
60 Particle {
61 lifetime_timer: Timer::from_seconds(
62 seeded_rng.0.random_range(0.2..0.6),
63 TimerMode::Once,
64 ),
65 size,
66 velocity: Vec3::new(horizontal.x, vertical, horizontal.y) * 10.0,
67 },
68 Mesh3d(particle.mesh.clone()),
69 MeshMaterial3d(particle.material.clone()),
70 Transform {
71 translation,
72 scale: Vec3::splat(size),
73 ..Default::default()
74 },
75 ));
76 }
77 Ok(())
78}330fn observe_on_step(
331 step: On<Step>,
332 particle: Res<ParticleAssets>,
333 mut commands: Commands,
334 transforms: Query<&GlobalTransform>,
335 mut seeded_rng: ResMut<SeededRng>,
336) -> Result {
337 let translation = transforms.get(step.trigger().target)?.translation();
338 // Spawn a bunch of particles.
339 for _ in 0..14 {
340 let horizontal = seeded_rng.0.random::<Dir2>() * seeded_rng.0.random_range(8.0..12.0);
341 let vertical = seeded_rng.0.random_range(0.0..4.0);
342 let size = seeded_rng.0.random_range(0.2..1.0);
343
344 commands.spawn((
345 Particle {
346 lifetime_timer: Timer::from_seconds(
347 seeded_rng.0.random_range(0.2..0.6),
348 TimerMode::Once,
349 ),
350 size,
351 velocity: Vec3::new(horizontal.x, vertical, horizontal.y) * 10.0,
352 },
353 Mesh3d(particle.mesh.clone()),
354 MeshMaterial3d(particle.material.clone()),
355 Transform {
356 translation,
357 scale: Vec3::splat(size),
358 ..Default::default()
359 },
360 ));
361 }
362 Ok(())
363}247fn example_control_system(
248 mut materials: ResMut<Assets<StandardMaterial>>,
249 controllable: Query<(&MeshMaterial3d<StandardMaterial>, &ExampleControls)>,
250 camera: Single<
251 (
252 Entity,
253 &mut Camera,
254 &mut Transform,
255 &GlobalTransform,
256 Has<Hdr>,
257 ),
258 With<Camera3d>,
259 >,
260 mut labels: Query<(&mut Node, &ExampleLabel)>,
261 mut display: Single<&mut Text, With<ExampleDisplay>>,
262 labeled: Query<&GlobalTransform>,
263 mut state: Local<ExampleState>,
264 time: Res<Time>,
265 input: Res<ButtonInput<KeyCode>>,
266 mut commands: Commands,
267) {
268 if input.pressed(KeyCode::ArrowUp) {
269 state.alpha = (state.alpha + time.delta_secs()).min(1.0);
270 } else if input.pressed(KeyCode::ArrowDown) {
271 state.alpha = (state.alpha - time.delta_secs()).max(0.0);
272 }
273
274 if input.just_pressed(KeyCode::Space) {
275 state.unlit = !state.unlit;
276 }
277
278 let randomize_colors = input.just_pressed(KeyCode::KeyC);
279
280 for (material_handle, controls) in &controllable {
281 let mut material = materials.get_mut(material_handle).unwrap();
282
283 if controls.color && randomize_colors {
284 material.base_color = Srgba {
285 red: random(),
286 green: random(),
287 blue: random(),
288 alpha: state.alpha,
289 }
290 .into();
291 } else {
292 material.base_color.set_alpha(state.alpha);
293 }
294
295 if controls.unlit {
296 material.unlit = state.unlit;
297 }
298 }
299
300 let (entity, camera, mut camera_transform, camera_global_transform, hdr) = camera.into_inner();
301
302 if input.just_pressed(KeyCode::KeyH) {
303 if hdr {
304 commands.entity(entity).remove::<Hdr>();
305 } else {
306 commands.entity(entity).insert(Hdr);
307 }
308 }
309
310 let rotation = if input.pressed(KeyCode::ArrowLeft) {
311 time.delta_secs()
312 } else if input.pressed(KeyCode::ArrowRight) {
313 -time.delta_secs()
314 } else {
315 0.0
316 };
317
318 camera_transform.rotate_around(Vec3::ZERO, Quat::from_rotation_y(rotation));
319
320 for (mut node, label) in &mut labels {
321 let world_position = labeled.get(label.entity).unwrap().translation() + Vec3::Y;
322
323 let viewport_position = camera
324 .world_to_viewport(camera_global_transform, world_position)
325 .unwrap();
326
327 node.top = px(viewport_position.y);
328 node.left = px(viewport_position.x);
329 }
330
331 display.0 = format!(
332 " HDR: {}\nAlpha: {:.2}",
333 if hdr { "ON " } else { "OFF" },
334 state.alpha
335 );
336}Sourcepub fn translation_vec3a(&self) -> Vec3A
pub fn translation_vec3a(&self) -> Vec3A
Get the translation as a Vec3A.
Examples found in repository?
357fn draw_gizmos(mut gizmos: Gizmos, spotlight: Query<(&GlobalTransform, &SpotLight, &Visibility)>) {
358 if let Ok((global_transform, spotlight, visibility)) = spotlight.single()
359 && visibility != Visibility::Hidden
360 {
361 gizmos.primitive_3d(
362 &Cone::new(7.0 * spotlight.outer_angle, 7.0),
363 Isometry3d {
364 rotation: global_transform.rotation() * Quat::from_rotation_x(FRAC_PI_2),
365 translation: global_transform.translation_vec3a() * 0.5,
366 },
367 YELLOW,
368 );
369 }
370}More examples
263fn draw_gizmos(mut gizmos: Gizmos, decals: Query<&GlobalTransform, With<ClusteredDecal>>) {
264 for global_transform in &decals {
265 gizmos.primitive_3d(
266 &Cuboid {
267 // Since the clustered decal is a 1×1×1 cube in model space, its
268 // half-size is half of the scaling part of its transform.
269 half_size: global_transform.scale() * 0.5,
270 },
271 Isometry3d {
272 rotation: global_transform.rotation(),
273 translation: global_transform.translation_vec3a(),
274 },
275 GOLD,
276 );
277 }
278}311fn draw_gizmos(
312 mut gizmos: Gizmos,
313 decals: Query<(&GlobalTransform, &Selection), With<ClusteredDecal>>,
314) {
315 for (global_transform, selection) in &decals {
316 let color = match *selection {
317 Selection::Camera => continue,
318 Selection::DecalA => ORANGE_RED,
319 Selection::DecalB => LIME,
320 };
321
322 gizmos.primitive_3d(
323 &Cuboid {
324 // Since the clustered decal is a 1×1×1 cube in model space, its
325 // half-size is half of the scaling part of its transform.
326 half_size: global_transform.scale() * 0.5,
327 },
328 Isometry3d {
329 rotation: global_transform.rotation(),
330 translation: global_transform.translation_vec3a(),
331 },
332 color,
333 );
334 }
335}Sourcepub fn rotation(&self) -> Quat
pub fn rotation(&self) -> Quat
Get the rotation as a Quat.
The transform is expected to be non-degenerate and without shearing, or the output will be invalid.
§Warning
This is calculated using to_scale_rotation_translation, meaning that you
should probably use it directly if you also need translation or scale.
Examples found in repository?
357fn draw_gizmos(mut gizmos: Gizmos, spotlight: Query<(&GlobalTransform, &SpotLight, &Visibility)>) {
358 if let Ok((global_transform, spotlight, visibility)) = spotlight.single()
359 && visibility != Visibility::Hidden
360 {
361 gizmos.primitive_3d(
362 &Cone::new(7.0 * spotlight.outer_angle, 7.0),
363 Isometry3d {
364 rotation: global_transform.rotation() * Quat::from_rotation_x(FRAC_PI_2),
365 translation: global_transform.translation_vec3a() * 0.5,
366 },
367 YELLOW,
368 );
369 }
370}More examples
263fn draw_gizmos(mut gizmos: Gizmos, decals: Query<&GlobalTransform, With<ClusteredDecal>>) {
264 for global_transform in &decals {
265 gizmos.primitive_3d(
266 &Cuboid {
267 // Since the clustered decal is a 1×1×1 cube in model space, its
268 // half-size is half of the scaling part of its transform.
269 half_size: global_transform.scale() * 0.5,
270 },
271 Isometry3d {
272 rotation: global_transform.rotation(),
273 translation: global_transform.translation_vec3a(),
274 },
275 GOLD,
276 );
277 }
278}346fn draw_camera_gizmo(cameras: Query<(&Camera, &GlobalTransform)>, mut gizmos: Gizmos) {
347 for (camera, transform) in &cameras {
348 // As above, we use the order as a cheap tag to tell the depth texture
349 // apart from the main texture.
350 if camera.order >= 0 {
351 continue;
352 }
353
354 // Draw a cone representing the camera.
355 gizmos.primitive_3d(
356 &Cone {
357 radius: 1.0,
358 height: 3.0,
359 },
360 Isometry3d::new(
361 transform.translation(),
362 // We have to rotate here because `Cone` primitives are oriented
363 // along +Y and cameras point along +Z.
364 transform.rotation() * Quat::from_rotation_x(FRAC_PI_2),
365 ),
366 LIME,
367 );
368 }
369}311fn draw_gizmos(
312 mut gizmos: Gizmos,
313 decals: Query<(&GlobalTransform, &Selection), With<ClusteredDecal>>,
314) {
315 for (global_transform, selection) in &decals {
316 let color = match *selection {
317 Selection::Camera => continue,
318 Selection::DecalA => ORANGE_RED,
319 Selection::DecalB => LIME,
320 };
321
322 gizmos.primitive_3d(
323 &Cuboid {
324 // Since the clustered decal is a 1×1×1 cube in model space, its
325 // half-size is half of the scaling part of its transform.
326 half_size: global_transform.scale() * 0.5,
327 },
328 Isometry3d {
329 rotation: global_transform.rotation(),
330 translation: global_transform.translation_vec3a(),
331 },
332 color,
333 );
334 }
335}Sourcepub fn scale(&self) -> Vec3
pub fn scale(&self) -> Vec3
Get the scale as a Vec3.
The transform is expected to be non-degenerate and without shearing, or the output will be invalid.
Some of the computations overlap with to_scale_rotation_translation, which means you should use
it instead if you also need rotation.
Examples found in repository?
263fn draw_gizmos(mut gizmos: Gizmos, decals: Query<&GlobalTransform, With<ClusteredDecal>>) {
264 for global_transform in &decals {
265 gizmos.primitive_3d(
266 &Cuboid {
267 // Since the clustered decal is a 1×1×1 cube in model space, its
268 // half-size is half of the scaling part of its transform.
269 half_size: global_transform.scale() * 0.5,
270 },
271 Isometry3d {
272 rotation: global_transform.rotation(),
273 translation: global_transform.translation_vec3a(),
274 },
275 GOLD,
276 );
277 }
278}More examples
311fn draw_gizmos(
312 mut gizmos: Gizmos,
313 decals: Query<(&GlobalTransform, &Selection), With<ClusteredDecal>>,
314) {
315 for (global_transform, selection) in &decals {
316 let color = match *selection {
317 Selection::Camera => continue,
318 Selection::DecalA => ORANGE_RED,
319 Selection::DecalB => LIME,
320 };
321
322 gizmos.primitive_3d(
323 &Cuboid {
324 // Since the clustered decal is a 1×1×1 cube in model space, its
325 // half-size is half of the scaling part of its transform.
326 half_size: global_transform.scale() * 0.5,
327 },
328 Isometry3d {
329 rotation: global_transform.rotation(),
330 translation: global_transform.translation_vec3a(),
331 },
332 color,
333 );
334 }
335}Sourcepub fn radius_vec3a(&self, extents: Vec3A) -> f32
pub fn radius_vec3a(&self, extents: Vec3A) -> f32
Get an upper bound of the radius from the given extents.
Sourcepub fn transform_point(&self, point: Vec3) -> Vec3
pub fn transform_point(&self, point: Vec3) -> Vec3
Transforms the given point from local space to global space, applying shear, scale, rotation and translation.
It can be used like this:
let global_transform = GlobalTransform::from_xyz(1., 2., 3.);
let local_point = Vec3::new(1., 2., 3.);
let global_point = global_transform.transform_point(local_point);
assert_eq!(global_point, Vec3::new(2., 4., 6.));let global_point = Vec3::new(2., 4., 6.);
let global_transform = GlobalTransform::from_xyz(1., 2., 3.);
let local_point = global_transform.affine().inverse().transform_point3(global_point);
assert_eq!(local_point, Vec3::new(1., 2., 3.))To apply shear, scale, and rotation without applying translation, different functions are available:
let global_transform = GlobalTransform::from_xyz(1., 2., 3.);
let local_direction = Vec3::new(1., 2., 3.);
let global_direction = global_transform.affine().transform_vector3(local_direction);
assert_eq!(global_direction, Vec3::new(1., 2., 3.));
let roundtripped_local_direction = global_transform.affine().inverse().transform_vector3(global_direction);
assert_eq!(roundtripped_local_direction, local_direction);Examples found in repository?
528fn create_cubes(
529 image_assets: Res<Assets<Image>>,
530 mut commands: Commands,
531 irradiance_volumes: Query<(&IrradianceVolume, &GlobalTransform)>,
532 voxel_cube_parents: Query<Entity, With<VoxelCubeParent>>,
533 voxel_cubes: Query<Entity, With<VoxelCube>>,
534 example_assets: Res<ExampleAssets>,
535 mut voxel_visualization_material_assets: ResMut<Assets<VoxelVisualizationMaterial>>,
536) {
537 // If voxel cubes have already been spawned, don't do anything.
538 if !voxel_cubes.is_empty() {
539 return;
540 }
541
542 let Some(voxel_cube_parent) = voxel_cube_parents.iter().next() else {
543 return;
544 };
545
546 for (irradiance_volume, global_transform) in irradiance_volumes.iter() {
547 let Some(image) = image_assets.get(&irradiance_volume.voxels) else {
548 continue;
549 };
550
551 let resolution = image.texture_descriptor.size;
552
553 let voxel_cube_material = voxel_visualization_material_assets.add(ExtendedMaterial {
554 base: StandardMaterial::from(Color::from(RED)),
555 extension: VoxelVisualizationExtension {
556 irradiance_volume_info: VoxelVisualizationIrradianceVolumeInfo {
557 world_from_voxel: VOXEL_FROM_WORLD.inverse(),
558 voxel_from_world: VOXEL_FROM_WORLD,
559 resolution: uvec3(
560 resolution.width,
561 resolution.height,
562 resolution.depth_or_array_layers,
563 ),
564 intensity: IRRADIANCE_VOLUME_INTENSITY,
565 },
566 },
567 });
568
569 let scale = vec3(
570 1.0 / resolution.width as f32,
571 1.0 / resolution.height as f32,
572 1.0 / resolution.depth_or_array_layers as f32,
573 );
574
575 // Spawn a cube for each voxel.
576 for z in 0..resolution.depth_or_array_layers {
577 for y in 0..resolution.height {
578 for x in 0..resolution.width {
579 let uvw = (uvec3(x, y, z).as_vec3() + 0.5) * scale - 0.5;
580 let pos = global_transform.transform_point(uvw);
581 let voxel_cube = commands
582 .spawn((
583 Mesh3d(example_assets.voxel_cube.clone()),
584 MeshMaterial3d(voxel_cube_material.clone()),
585 Transform::from_scale(Vec3::splat(VOXEL_CUBE_SCALE))
586 .with_translation(pos),
587 ))
588 .insert(VoxelCube)
589 .insert(NotShadowCaster)
590 .id();
591
592 commands.entity(voxel_cube_parent).add_child(voxel_cube);
593 }
594 }
595 }
596 }
597}Sourcepub fn mul_transform(&self, transform: Transform) -> GlobalTransform
pub fn mul_transform(&self, transform: Transform) -> GlobalTransform
Multiplies self with transform component by component, returning the
resulting GlobalTransform
Trait Implementations§
Source§impl Clone for GlobalTransform
impl Clone for GlobalTransform
Source§fn clone(&self) -> GlobalTransform
fn clone(&self) -> GlobalTransform
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Component for GlobalTransform
impl Component for GlobalTransform
Source§const STORAGE_TYPE: StorageType = bevy_ecs::component::StorageType::Table
const STORAGE_TYPE: StorageType = bevy_ecs::component::StorageType::Table
Source§type Mutability = Mutable
type Mutability = Mutable
Component<Mutability = Mutable>,
while immutable components will instead have Component<Mutability = Immutable>. Read moreSource§fn register_required_components(
_requiree: ComponentId,
required_components: &mut RequiredComponentsRegistrator<'_, '_>,
)
fn register_required_components( _requiree: ComponentId, required_components: &mut RequiredComponentsRegistrator<'_, '_>, )
Source§fn clone_behavior() -> ComponentCloneBehavior
fn clone_behavior() -> ComponentCloneBehavior
Source§fn relationship_accessor() -> Option<ComponentRelationshipAccessor<GlobalTransform>>
fn relationship_accessor() -> Option<ComponentRelationshipAccessor<GlobalTransform>>
ComponentRelationshipAccessor required for working with relationships in dynamic contexts. Read moreSource§fn on_add() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
fn on_add() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
Source§fn on_insert() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
fn on_insert() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
Source§fn on_discard() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
fn on_discard() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
Source§fn on_remove() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
fn on_remove() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
Source§fn on_despawn() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
fn on_despawn() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
Source§fn map_entities<E>(_this: &mut Self, _mapper: &mut E)where
E: EntityMapper,
fn map_entities<E>(_this: &mut Self, _mapper: &mut E)where
E: EntityMapper,
EntityMapper. This is used to remap entities in contexts like scenes and entity cloning.
When deriving Component, this is populated by annotating fields containing entities with #[entities] Read moreimpl Copy for GlobalTransform
Source§impl Debug for GlobalTransform
impl Debug for GlobalTransform
Source§impl Default for GlobalTransform
impl Default for GlobalTransform
Source§fn default() -> GlobalTransform
fn default() -> GlobalTransform
Source§impl<'de> Deserialize<'de> for GlobalTransform
impl<'de> Deserialize<'de> for GlobalTransform
Source§fn deserialize<__D>(
__deserializer: __D,
) -> Result<GlobalTransform, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(
__deserializer: __D,
) -> Result<GlobalTransform, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
Source§impl From<Affine3A> for GlobalTransform
impl From<Affine3A> for GlobalTransform
Source§fn from(value: Affine3A) -> GlobalTransform
fn from(value: Affine3A) -> GlobalTransform
Source§impl From<GlobalTransform> for Transform
The transform is expected to be non-degenerate and without shearing, or the output
will be invalid.
impl From<GlobalTransform> for Transform
The transform is expected to be non-degenerate and without shearing, or the output will be invalid.
Source§fn from(transform: GlobalTransform) -> Transform
fn from(transform: GlobalTransform) -> Transform
Source§impl From<Mat4> for GlobalTransform
impl From<Mat4> for GlobalTransform
Source§fn from(world_from_local: Mat4) -> GlobalTransform
fn from(world_from_local: Mat4) -> GlobalTransform
Source§impl From<Transform> for GlobalTransform
impl From<Transform> for GlobalTransform
Source§fn from(transform: Transform) -> GlobalTransform
fn from(transform: Transform) -> GlobalTransform
Source§impl FromArg for GlobalTransform
impl FromArg for GlobalTransform
Source§impl FromReflect for GlobalTransform
impl FromReflect for GlobalTransform
Source§fn from_reflect(
reflect: &(dyn PartialReflect + 'static),
) -> Option<GlobalTransform>
fn from_reflect( reflect: &(dyn PartialReflect + 'static), ) -> Option<GlobalTransform>
Self from a reflected value.Source§fn take_from_reflect(
reflect: Box<dyn PartialReflect>,
) -> Result<Self, Box<dyn PartialReflect>>
fn take_from_reflect( reflect: Box<dyn PartialReflect>, ) -> Result<Self, Box<dyn PartialReflect>>
Self using,
constructing the value using from_reflect if that fails. Read moreSource§impl GetOwnership for GlobalTransform
impl GetOwnership for GlobalTransform
Source§impl GetTypeRegistration for GlobalTransform
impl GetTypeRegistration for GlobalTransform
Source§fn get_type_registration() -> TypeRegistration
fn get_type_registration() -> TypeRegistration
TypeRegistration for this type.Source§fn register_type_dependencies(registry: &mut TypeRegistry)
fn register_type_dependencies(registry: &mut TypeRegistry)
Source§impl IntoReturn for GlobalTransform
impl IntoReturn for GlobalTransform
Source§fn into_return<'into_return>(self) -> Return<'into_return>where
GlobalTransform: 'into_return,
fn into_return<'into_return>(self) -> Return<'into_return>where
GlobalTransform: 'into_return,
Source§impl Mul for GlobalTransform
impl Mul for GlobalTransform
Source§type Output = GlobalTransform
type Output = GlobalTransform
* operator.Source§fn mul(
self,
global_transform: GlobalTransform,
) -> <GlobalTransform as Mul>::Output
fn mul( self, global_transform: GlobalTransform, ) -> <GlobalTransform as Mul>::Output
* operation. Read moreSource§impl Mul<GlobalTransform> for Transform
impl Mul<GlobalTransform> for Transform
Source§type Output = GlobalTransform
type Output = GlobalTransform
* operator.Source§fn mul(
self,
global_transform: GlobalTransform,
) -> <Transform as Mul<GlobalTransform>>::Output
fn mul( self, global_transform: GlobalTransform, ) -> <Transform as Mul<GlobalTransform>>::Output
* operation. Read moreSource§impl Mul<Transform> for GlobalTransform
impl Mul<Transform> for GlobalTransform
Source§impl Mul<Vec3> for GlobalTransform
impl Mul<Vec3> for GlobalTransform
Source§impl PartialEq for GlobalTransform
impl PartialEq for GlobalTransform
Source§fn eq(&self, other: &GlobalTransform) -> bool
fn eq(&self, other: &GlobalTransform) -> bool
self and other values to be equal, and is used by ==.Source§impl PartialReflect for GlobalTransform
impl PartialReflect for GlobalTransform
Source§fn get_represented_type_info(&self) -> Option<&'static TypeInfo>
fn get_represented_type_info(&self) -> Option<&'static TypeInfo>
Source§fn try_apply(
&mut self,
value: &(dyn PartialReflect + 'static),
) -> Result<(), ApplyError>
fn try_apply( &mut self, value: &(dyn PartialReflect + 'static), ) -> Result<(), ApplyError>
Source§fn reflect_kind(&self) -> ReflectKind
fn reflect_kind(&self) -> ReflectKind
Source§fn reflect_ref(&self) -> ReflectRef<'_>
fn reflect_ref(&self) -> ReflectRef<'_>
Source§fn reflect_mut(&mut self) -> ReflectMut<'_>
fn reflect_mut(&mut self) -> ReflectMut<'_>
Source§fn reflect_owned(self: Box<GlobalTransform>) -> ReflectOwned
fn reflect_owned(self: Box<GlobalTransform>) -> ReflectOwned
Source§fn try_into_reflect(
self: Box<GlobalTransform>,
) -> Result<Box<dyn Reflect>, Box<dyn PartialReflect>>
fn try_into_reflect( self: Box<GlobalTransform>, ) -> Result<Box<dyn Reflect>, Box<dyn PartialReflect>>
Source§fn try_as_reflect(&self) -> Option<&(dyn Reflect + 'static)>
fn try_as_reflect(&self) -> Option<&(dyn Reflect + 'static)>
Source§fn try_as_reflect_mut(&mut self) -> Option<&mut (dyn Reflect + 'static)>
fn try_as_reflect_mut(&mut self) -> Option<&mut (dyn Reflect + 'static)>
Source§fn into_partial_reflect(self: Box<GlobalTransform>) -> Box<dyn PartialReflect>
fn into_partial_reflect(self: Box<GlobalTransform>) -> Box<dyn PartialReflect>
Source§fn as_partial_reflect(&self) -> &(dyn PartialReflect + 'static)
fn as_partial_reflect(&self) -> &(dyn PartialReflect + 'static)
Source§fn as_partial_reflect_mut(&mut self) -> &mut (dyn PartialReflect + 'static)
fn as_partial_reflect_mut(&mut self) -> &mut (dyn PartialReflect + 'static)
Source§fn reflect_partial_eq(
&self,
value: &(dyn PartialReflect + 'static),
) -> Option<bool>
fn reflect_partial_eq( &self, value: &(dyn PartialReflect + 'static), ) -> Option<bool>
Source§fn reflect_partial_cmp(
&self,
value: &(dyn PartialReflect + 'static),
) -> Option<Ordering>
fn reflect_partial_cmp( &self, value: &(dyn PartialReflect + 'static), ) -> Option<Ordering>
Source§fn debug(&self, f: &mut Formatter<'_>) -> Result<(), Error>
fn debug(&self, f: &mut Formatter<'_>) -> Result<(), Error>
Source§fn reflect_clone(&self) -> Result<Box<dyn Reflect>, ReflectCloneError>
fn reflect_clone(&self) -> Result<Box<dyn Reflect>, ReflectCloneError>
Self using reflection. Read moreSource§fn apply(&mut self, value: &(dyn PartialReflect + 'static))
fn apply(&mut self, value: &(dyn PartialReflect + 'static))
Source§fn to_dynamic(&self) -> Box<dyn PartialReflect>
fn to_dynamic(&self) -> Box<dyn PartialReflect>
Source§fn reflect_clone_and_take<T>(&self) -> Result<T, ReflectCloneError>
fn reflect_clone_and_take<T>(&self) -> Result<T, ReflectCloneError>
PartialReflect, combines reflect_clone and
take in a useful fashion, automatically constructing an appropriate
ReflectCloneError if the downcast fails.Source§fn reflect_hash(&self) -> Option<u64>
fn reflect_hash(&self) -> Option<u64>
Source§fn is_dynamic(&self) -> bool
fn is_dynamic(&self) -> bool
Source§impl Reflect for GlobalTransform
impl Reflect for GlobalTransform
Source§fn into_any(self: Box<GlobalTransform>) -> Box<dyn Any>
fn into_any(self: Box<GlobalTransform>) -> Box<dyn Any>
Box<dyn Any>. Read moreSource§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut dyn Any. Read moreSource§fn into_reflect(self: Box<GlobalTransform>) -> Box<dyn Reflect>
fn into_reflect(self: Box<GlobalTransform>) -> Box<dyn Reflect>
Source§fn as_reflect(&self) -> &(dyn Reflect + 'static)
fn as_reflect(&self) -> &(dyn Reflect + 'static)
Source§fn as_reflect_mut(&mut self) -> &mut (dyn Reflect + 'static)
fn as_reflect_mut(&mut self) -> &mut (dyn Reflect + 'static)
Source§impl Serialize for GlobalTransform
impl Serialize for GlobalTransform
Source§fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
impl StructuralPartialEq for GlobalTransform
Source§impl TransformPoint for GlobalTransform
impl TransformPoint for GlobalTransform
Source§impl TupleStruct for GlobalTransform
impl TupleStruct for GlobalTransform
Source§fn field(&self, index: usize) -> Option<&(dyn PartialReflect + 'static)>
fn field(&self, index: usize) -> Option<&(dyn PartialReflect + 'static)>
index as a
&dyn Reflect.Source§fn field_mut(
&mut self,
index: usize,
) -> Option<&mut (dyn PartialReflect + 'static)>
fn field_mut( &mut self, index: usize, ) -> Option<&mut (dyn PartialReflect + 'static)>
index
as a &mut dyn Reflect.Source§fn iter_fields(&self) -> TupleStructFieldIter<'_> ⓘ
fn iter_fields(&self) -> TupleStructFieldIter<'_> ⓘ
Source§fn to_dynamic_tuple_struct(&self) -> DynamicTupleStruct
fn to_dynamic_tuple_struct(&self) -> DynamicTupleStruct
DynamicTupleStruct from this tuple struct.Source§fn get_represented_tuple_struct_info(&self) -> Option<&'static TupleStructInfo>
fn get_represented_tuple_struct_info(&self) -> Option<&'static TupleStructInfo>
None if TypeInfo is not available.Source§impl TypePath for GlobalTransform
impl TypePath for GlobalTransform
Source§fn type_path() -> &'static str
fn type_path() -> &'static str
Source§fn short_type_path() -> &'static str
fn short_type_path() -> &'static str
Source§fn type_ident() -> Option<&'static str>
fn type_ident() -> Option<&'static str>
Source§fn crate_name() -> Option<&'static str>
fn crate_name() -> Option<&'static str>
Auto Trait Implementations§
impl Freeze for GlobalTransform
impl RefUnwindSafe for GlobalTransform
impl Send for GlobalTransform
impl Sync for GlobalTransform
impl Unpin for GlobalTransform
impl UnsafeUnpin for GlobalTransform
impl UnwindSafe for GlobalTransform
Blanket Implementations§
Source§impl<T, U> AsBindGroupShaderType<U> for T
impl<T, U> AsBindGroupShaderType<U> for T
Source§fn as_bind_group_shader_type(&self, _images: &RenderAssets<GpuImage>) -> U
fn as_bind_group_shader_type(&self, _images: &RenderAssets<GpuImage>) -> U
T ShaderType for self. When used in AsBindGroup
derives, it is safe to assume that all images in self exist.Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<T> Brush for T
Source§impl<C> Bundle for Cwhere
C: Component,
impl<C> Bundle for Cwhere
C: Component,
fn component_ids( components: &mut ComponentsRegistrator<'_>, ) -> impl Iterator<Item = ComponentId> + use<C>
Source§fn get_component_ids(
components: &Components,
) -> impl Iterator<Item = Option<ComponentId>>
fn get_component_ids( components: &Components, ) -> impl Iterator<Item = Option<ComponentId>>
Source§impl<C> BundleFromComponents for Cwhere
C: Component,
impl<C> BundleFromComponents for Cwhere
C: Component,
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> ConditionalSend for Twhere
T: Send,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
impl<S, T> Duplex<S> for Twhere
T: FromSample<S> + ToSample<S>,
Source§impl<C> DynamicBundle for Cwhere
C: Component,
impl<C> DynamicBundle for Cwhere
C: Component,
Source§unsafe fn get_components(
ptr: MovingPtr<'_, C>,
func: &mut impl FnMut(StorageType, OwningPtr<'_>),
) -> <C as DynamicBundle>::Effect
unsafe fn get_components( ptr: MovingPtr<'_, C>, func: &mut impl FnMut(StorageType, OwningPtr<'_>), ) -> <C as DynamicBundle>::Effect
Source§unsafe fn apply_effect(
_ptr: MovingPtr<'_, MaybeUninit<C>>,
_entity: &mut EntityWorldMut<'_>,
)
unsafe fn apply_effect( _ptr: MovingPtr<'_, MaybeUninit<C>>, _entity: &mut EntityWorldMut<'_>, )
Source§impl<T> DynamicTypePath for Twhere
T: TypePath,
impl<T> DynamicTypePath for Twhere
T: TypePath,
Source§fn reflect_type_path(&self) -> &str
fn reflect_type_path(&self) -> &str
TypePath::type_path.Source§fn reflect_short_type_path(&self) -> &str
fn reflect_short_type_path(&self) -> &str
Source§fn reflect_type_ident(&self) -> Option<&str>
fn reflect_type_ident(&self) -> Option<&str>
TypePath::type_ident.Source§fn reflect_crate_name(&self) -> Option<&str>
fn reflect_crate_name(&self) -> Option<&str>
TypePath::crate_name.Source§fn reflect_module_path(&self) -> Option<&str>
fn reflect_module_path(&self) -> Option<&str>
Source§impl<T> DynamicTyped for Twhere
T: Typed,
impl<T> DynamicTyped for Twhere
T: Typed,
Source§fn reflect_type_info(&self) -> &'static TypeInfo
fn reflect_type_info(&self) -> &'static TypeInfo
Typed::type_info.Source§impl<T> ErasedBundleTemplate for T
impl<T> ErasedBundleTemplate for T
Source§unsafe fn apply(
&self,
context: &mut TemplateContext<'_, '_>,
) -> Result<(), BevyError>
unsafe fn apply( &self, context: &mut TemplateContext<'_, '_>, ) -> Result<(), BevyError>
entity. Read moreSource§fn clone_template(&self) -> Box<dyn ErasedBundleTemplate>
fn clone_template(&self) -> Box<dyn ErasedBundleTemplate>
Clone.Source§impl<T> ErasedComponentTemplate for T
impl<T> ErasedComponentTemplate for T
Source§unsafe fn apply(
&self,
context: &mut TemplateContext<'_, '_>,
bundle_writer: &mut BundleWriter<'_>,
) -> Result<(), BevyError>
unsafe fn apply( &self, context: &mut TemplateContext<'_, '_>, bundle_writer: &mut BundleWriter<'_>, ) -> Result<(), BevyError>
entity. Read moreSource§fn clone_template(&self) -> Box<dyn ErasedComponentTemplate>
fn clone_template(&self) -> Box<dyn ErasedComponentTemplate>
Clone.impl<T> ErasedDestructor for Twhere
T: 'static,
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.Source§impl<S> FromSample<S> for S
impl<S> FromSample<S> for S
fn from_sample_(s: S) -> S
Source§impl<T> FromTemplate for T
impl<T> FromTemplate for T
Source§impl<T> FromWorld for Twhere
T: Default,
impl<T> FromWorld for Twhere
T: Default,
Source§fn from_world(_world: &mut World) -> T
fn from_world(_world: &mut World) -> T
Creates Self using default().
Source§impl<T> GetPath for T
impl<T> GetPath for T
Source§fn reflect_path<'p>(
&self,
path: impl ReflectPath<'p>,
) -> Result<&(dyn PartialReflect + 'static), ReflectPathError<'p>>
fn reflect_path<'p>( &self, path: impl ReflectPath<'p>, ) -> Result<&(dyn PartialReflect + 'static), ReflectPathError<'p>>
path. Read moreSource§fn reflect_path_mut<'p>(
&mut self,
path: impl ReflectPath<'p>,
) -> Result<&mut (dyn PartialReflect + 'static), ReflectPathError<'p>>
fn reflect_path_mut<'p>( &mut self, path: impl ReflectPath<'p>, ) -> Result<&mut (dyn PartialReflect + 'static), ReflectPathError<'p>>
path. Read moreSource§fn path<'p, T>(
&self,
path: impl ReflectPath<'p>,
) -> Result<&T, ReflectPathError<'p>>where
T: Reflect,
fn path<'p, T>(
&self,
path: impl ReflectPath<'p>,
) -> Result<&T, ReflectPathError<'p>>where
T: Reflect,
path. Read moreSource§fn path_mut<'p, T>(
&mut self,
path: impl ReflectPath<'p>,
) -> Result<&mut T, ReflectPathError<'p>>where
T: Reflect,
fn path_mut<'p, T>(
&mut self,
path: impl ReflectPath<'p>,
) -> Result<&mut T, ReflectPathError<'p>>where
T: Reflect,
path. Read moreSource§impl<S> GetTupleStructField for Swhere
S: TupleStruct,
impl<S> GetTupleStructField for Swhere
S: TupleStruct,
Source§impl<T, W> HasTypeWitness<W> for Twhere
W: MakeTypeWitness<Arg = T>,
T: ?Sized,
impl<T, W> HasTypeWitness<W> for Twhere
W: MakeTypeWitness<Arg = T>,
T: ?Sized,
impl<T> HitDataExtra for T
Source§impl<T> Identity for Twhere
T: ?Sized,
impl<T> Identity for Twhere
T: ?Sized,
Source§impl<T> InitializeFromFunction<T> for T
impl<T> InitializeFromFunction<T> for T
Source§fn initialize_from_function(f: fn() -> T) -> T
fn initialize_from_function(f: fn() -> T) -> T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> IntoResult<T> for T
impl<T> IntoResult<T> for T
Source§fn into_result(self) -> Result<T, RunSystemError>
fn into_result(self) -> Result<T, RunSystemError>
Source§impl<F, T> IntoSample<T> for Fwhere
T: FromSample<F>,
impl<F, T> IntoSample<T> for Fwhere
T: FromSample<F>,
fn into_sample(self) -> T
Source§impl<G> PatchFromTemplate for Gwhere
G: FromTemplate,
impl<G> PatchFromTemplate for Gwhere
G: FromTemplate,
Source§fn patch<F>(func: F) -> TemplatePatch<F, <G as PatchFromTemplate>::Template>
fn patch<F>(func: F) -> TemplatePatch<F, <G as PatchFromTemplate>::Template>
func, and turns it into a TemplatePatch.Source§impl<T> PatchTemplate for Twhere
T: Template,
impl<T> PatchTemplate for Twhere
T: Template,
Source§fn patch_template<F>(func: F) -> TemplatePatch<F, T>
fn patch_template<F>(func: F) -> TemplatePatch<F, T>
Source§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<R, P> ReadPrimitive<R> for P
impl<R, P> ReadPrimitive<R> for P
Source§fn read_from_little_endian(read: &mut R) -> Result<Self, Error>
fn read_from_little_endian(read: &mut R) -> Result<Self, Error>
ReadEndian::read_from_little_endian().impl<T> Reflectable for T
Source§impl<T> Serialize for T
impl<T> Serialize for T
fn erased_serialize(&self, serializer: &mut dyn Serializer) -> Result<(), Error>
fn do_erased_serialize( &self, serializer: &mut dyn Serializer, ) -> Result<(), ErrorImpl>
impl<T> Settings for T
Source§impl<Ret> SpawnIfAsync<(), Ret> for Ret
impl<Ret> SpawnIfAsync<(), Ret> for Ret
Source§impl<T, O> SuperFrom<T> for Owhere
O: From<T>,
impl<T, O> SuperFrom<T> for Owhere
O: From<T>,
Source§fn super_from(input: T) -> O
fn super_from(input: T) -> O
Source§impl<T, O, M> SuperInto<O, M> for Twhere
O: SuperFrom<T, M>,
impl<T, O, M> SuperInto<O, M> for Twhere
O: SuperFrom<T, M>,
Source§fn super_into(self) -> O
fn super_into(self) -> O
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.Source§impl<T> Template for T
impl<T> Template for T
Source§fn build_template(
&self,
_context: &mut TemplateContext<'_, '_>,
) -> Result<<T as Template>::Output, BevyError>
fn build_template( &self, _context: &mut TemplateContext<'_, '_>, ) -> Result<<T as Template>::Output, BevyError>
entity context to produce a Template::Output.Source§fn clone_template(&self) -> T
fn clone_template(&self) -> T
Clone.