pub struct AnimationPlayer { /* private fields */ }
Expand description
Animation controls.
Automatically added to any root animations of a scene when it is spawned.
Implementations§
Source§impl AnimationPlayer
impl AnimationPlayer
Sourcepub fn start(&mut self, animation: NodeIndex) -> &mut ActiveAnimation
pub fn start(&mut self, animation: NodeIndex) -> &mut ActiveAnimation
Start playing an animation, restarting it if necessary.
Sourcepub fn play(&mut self, animation: NodeIndex) -> &mut ActiveAnimation
pub fn play(&mut self, animation: NodeIndex) -> &mut ActiveAnimation
Start playing an animation, unless the requested animation is already playing.
Examples found in repository?
513fn play_animations(
514 mut commands: Commands,
515 assets: Res<ExampleAssets>,
516 mut players: Query<(Entity, &mut AnimationPlayer), Without<AnimationGraphHandle>>,
517) {
518 for (entity, mut player) in players.iter_mut() {
519 commands
520 .entity(entity)
521 .insert(AnimationGraphHandle(assets.fox_animation_graph.clone()));
522 player.play(assets.fox_animation_node).repeat();
523 }
524}
More examples
373fn init_animations(
374 mut commands: Commands,
375 mut query: Query<(Entity, &mut AnimationPlayer)>,
376 animation_graph: Res<ExampleAnimationGraph>,
377 mut done: Local<bool>,
378) {
379 if *done {
380 return;
381 }
382
383 for (entity, mut player) in query.iter_mut() {
384 commands.entity(entity).insert((
385 AnimationGraphHandle(animation_graph.0.clone()),
386 ExampleAnimationWeights::default(),
387 ));
388 for &node_index in &CLIP_NODE_INDICES {
389 player.play(node_index.into()).repeat();
390 }
391
392 *done = true;
393 }
394}
395
396/// Read cursor position relative to clip nodes, allowing the user to change weights
397/// when dragging the node UI widgets.
398fn handle_weight_drag(
399 mut interaction_query: Query<(&Interaction, &RelativeCursorPosition, &ClipNode)>,
400 mut animation_weights_query: Query<&mut ExampleAnimationWeights>,
401) {
402 for (interaction, relative_cursor, clip_node) in &mut interaction_query {
403 if !matches!(*interaction, Interaction::Pressed) {
404 continue;
405 }
406
407 let Some(pos) = relative_cursor.normalized else {
408 continue;
409 };
410
411 for mut animation_weights in animation_weights_query.iter_mut() {
412 animation_weights.weights[clip_node.index] = pos.x.clamp(0., 1.);
413 }
414 }
415}
416
417// Updates the UI based on the weights that the user has chosen.
418fn update_ui(
419 mut text_query: Query<&mut Text>,
420 mut background_query: Query<&mut Node, Without<Text>>,
421 container_query: Query<(&Children, &ClipNode)>,
422 animation_weights_query: Query<&ExampleAnimationWeights, Changed<ExampleAnimationWeights>>,
423) {
424 for animation_weights in animation_weights_query.iter() {
425 for (children, clip_node) in &container_query {
426 // Draw the green background color to visually indicate the weight.
427 let mut bg_iter = background_query.iter_many_mut(children);
428 if let Some(mut node) = bg_iter.fetch_next() {
429 // All nodes are the same width, so `NODE_RECTS[0]` is as good as any other.
430 node.width =
431 Val::Px(NODE_RECTS[0].width * animation_weights.weights[clip_node.index]);
432 }
433
434 // Update the node labels with the current weights.
435 let mut text_iter = text_query.iter_many_mut(children);
436 if let Some(mut text) = text_iter.fetch_next() {
437 **text = format!(
438 "{}\n{:.2}",
439 clip_node.text, animation_weights.weights[clip_node.index]
440 );
441 }
442 }
443 }
444}
445
446/// Takes the weights that were set in the UI and assigns them to the actual
447/// playing animation.
448fn sync_weights(mut query: Query<(&mut AnimationPlayer, &ExampleAnimationWeights)>) {
449 for (mut animation_player, animation_weights) in query.iter_mut() {
450 for (&animation_node_index, &animation_weight) in CLIP_NODE_INDICES
451 .iter()
452 .zip(animation_weights.weights.iter())
453 {
454 // If the animation happens to be no longer active, restart it.
455 if !animation_player.is_playing_animation(animation_node_index.into()) {
456 animation_player.play(animation_node_index.into());
457 }
458
459 // Set the weight.
460 if let Some(active_animation) =
461 animation_player.animation_mut(animation_node_index.into())
462 {
463 active_animation.set_weight(animation_weight);
464 }
465 }
466 }
467}
232fn setup_scene_once_loaded(
233 animations: Res<Animations>,
234 foxes: Res<Foxes>,
235 mut commands: Commands,
236 mut player: Query<(Entity, &mut AnimationPlayer)>,
237 mut done: Local<bool>,
238) {
239 if !*done && player.iter().len() == foxes.count {
240 for (entity, mut player) in &mut player {
241 commands
242 .entity(entity)
243 .insert(AnimationGraphHandle(animations.graph.clone()))
244 .insert(AnimationTransitions::new());
245
246 let playing_animation = player.play(animations.node_indices[0]).repeat();
247 if !foxes.sync {
248 playing_animation.seek_to(entity.index() as f32 / 10.0);
249 }
250 }
251 *done = true;
252 }
253}
63fn setup_animations(
64 mut has_setup: Local<bool>,
65 mut commands: Commands,
66 mut players: Query<(Entity, &Name, &mut AnimationPlayer)>,
67 morph_data: Res<MorphData>,
68 mut graphs: ResMut<Assets<AnimationGraph>>,
69) {
70 if *has_setup {
71 return;
72 }
73 for (entity, name, mut player) in &mut players {
74 // The name of the entity in the GLTF scene containing the AnimationPlayer for our morph targets is "Main"
75 if name.as_str() != "Main" {
76 continue;
77 }
78
79 let (graph, animation) = AnimationGraph::from_clip(morph_data.the_wave.clone());
80 commands
81 .entity(entity)
82 .insert(AnimationGraphHandle(graphs.add(graph)));
83
84 player.play(animation).repeat();
85 *has_setup = true;
86 }
87}
37fn setup(
38 mut commands: Commands,
39 mut animations: ResMut<Assets<AnimationClip>>,
40 mut graphs: ResMut<Assets<AnimationGraph>>,
41) {
42 // Camera
43 commands.spawn((
44 Camera2d,
45 Camera {
46 clear_color: ClearColorConfig::Custom(BLACK.into()),
47 hdr: true,
48 ..Default::default()
49 },
50 Bloom {
51 intensity: 0.4,
52 ..Bloom::NATURAL
53 },
54 ));
55
56 // The text that will be changed by animation events.
57 commands.spawn((
58 MessageText,
59 Text2d::default(),
60 TextFont {
61 font_size: 119.0,
62 ..default()
63 },
64 TextColor(Color::NONE),
65 ));
66
67 // Create a new animation clip.
68 let mut animation = AnimationClip::default();
69
70 // This is only necessary if you want the duration of the
71 // animation to be longer than the last event in the clip.
72 animation.set_duration(2.0);
73
74 // Add events at the specified time.
75 animation.add_event(
76 0.0,
77 MessageEvent {
78 value: "HELLO".into(),
79 color: ALICE_BLUE.into(),
80 },
81 );
82 animation.add_event(
83 1.0,
84 MessageEvent {
85 value: "BYE".into(),
86 color: CRIMSON.into(),
87 },
88 );
89
90 // Create the animation graph.
91 let (graph, animation_index) = AnimationGraph::from_clip(animations.add(animation));
92 let mut player = AnimationPlayer::default();
93 player.play(animation_index).repeat();
94
95 commands.spawn((AnimationGraphHandle(graphs.add(graph)), player));
96}
64fn play_animation_when_ready(
65 trigger: Trigger<SceneInstanceReady>,
66 mut commands: Commands,
67 children: Query<&Children>,
68 animations_to_play: Query<&AnimationToPlay>,
69 mut players: Query<&mut AnimationPlayer>,
70) {
71 // The entity we spawned in `setup_mesh_and_animation` is the trigger's target.
72 // Start by finding the AnimationToPlay component we added to that entity.
73 if let Ok(animation_to_play) = animations_to_play.get(trigger.target()) {
74 // The SceneRoot component will have spawned the scene as a hierarchy
75 // of entities parented to our entity. Since the asset contained a skinned
76 // mesh and animations, it will also have spawned an animation player
77 // component. Search our entity's descendants to find the animation player.
78 for child in children.iter_descendants(trigger.target()) {
79 if let Ok(mut player) = players.get_mut(child) {
80 // Tell the animation player to start the animation and keep
81 // repeating it.
82 //
83 // If you want to try stopping and switching animations, see the
84 // `animated_mesh_control.rs` example.
85 player.play(animation_to_play.index).repeat();
86
87 // Add the animation graph. This only needs to be done once to
88 // connect the animation player to the mesh.
89 commands
90 .entity(child)
91 .insert(AnimationGraphHandle(animation_to_play.graph_handle.clone()));
92 }
93 }
94 }
95}
Sourcepub fn stop(&mut self, animation: NodeIndex) -> &mut AnimationPlayer
pub fn stop(&mut self, animation: NodeIndex) -> &mut AnimationPlayer
Stops playing the given animation, removing it from the list of playing animations.
Sourcepub fn stop_all(&mut self) -> &mut AnimationPlayer
pub fn stop_all(&mut self) -> &mut AnimationPlayer
Stops all currently-playing animations.
Sourcepub fn playing_animations(
&self,
) -> impl Iterator<Item = (&NodeIndex, &ActiveAnimation)>
pub fn playing_animations( &self, ) -> impl Iterator<Item = (&NodeIndex, &ActiveAnimation)>
Iterates through all animations that this AnimationPlayer
is
currently playing.
Examples found in repository?
128fn keyboard_control(
129 keyboard_input: Res<ButtonInput<KeyCode>>,
130 mut animation_players: Query<(&mut AnimationPlayer, &mut AnimationTransitions)>,
131 animations: Res<Animations>,
132 mut current_animation: Local<usize>,
133) {
134 for (mut player, mut transitions) in &mut animation_players {
135 let Some((&playing_animation_index, _)) = player.playing_animations().next() else {
136 continue;
137 };
138
139 if keyboard_input.just_pressed(KeyCode::Space) {
140 let playing_animation = player.animation_mut(playing_animation_index).unwrap();
141 if playing_animation.is_paused() {
142 playing_animation.resume();
143 } else {
144 playing_animation.pause();
145 }
146 }
147
148 if keyboard_input.just_pressed(KeyCode::ArrowUp) {
149 let playing_animation = player.animation_mut(playing_animation_index).unwrap();
150 let speed = playing_animation.speed();
151 playing_animation.set_speed(speed * 1.2);
152 }
153
154 if keyboard_input.just_pressed(KeyCode::ArrowDown) {
155 let playing_animation = player.animation_mut(playing_animation_index).unwrap();
156 let speed = playing_animation.speed();
157 playing_animation.set_speed(speed * 0.8);
158 }
159
160 if keyboard_input.just_pressed(KeyCode::ArrowLeft) {
161 let playing_animation = player.animation_mut(playing_animation_index).unwrap();
162 let elapsed = playing_animation.seek_time();
163 playing_animation.seek_to(elapsed - 0.1);
164 }
165
166 if keyboard_input.just_pressed(KeyCode::ArrowRight) {
167 let playing_animation = player.animation_mut(playing_animation_index).unwrap();
168 let elapsed = playing_animation.seek_time();
169 playing_animation.seek_to(elapsed + 0.1);
170 }
171
172 if keyboard_input.just_pressed(KeyCode::Enter) {
173 *current_animation = (*current_animation + 1) % animations.animations.len();
174
175 transitions
176 .play(
177 &mut player,
178 animations.animations[*current_animation],
179 Duration::from_millis(250),
180 )
181 .repeat();
182 }
183
184 if keyboard_input.just_pressed(KeyCode::Digit1) {
185 let playing_animation = player.animation_mut(playing_animation_index).unwrap();
186 playing_animation
187 .set_repeat(RepeatAnimation::Count(1))
188 .replay();
189 }
190
191 if keyboard_input.just_pressed(KeyCode::Digit2) {
192 let playing_animation = player.animation_mut(playing_animation_index).unwrap();
193 playing_animation
194 .set_repeat(RepeatAnimation::Count(2))
195 .replay();
196 }
197
198 if keyboard_input.just_pressed(KeyCode::Digit3) {
199 let playing_animation = player.animation_mut(playing_animation_index).unwrap();
200 playing_animation
201 .set_repeat(RepeatAnimation::Count(3))
202 .replay();
203 }
204
205 if keyboard_input.just_pressed(KeyCode::KeyL) {
206 let playing_animation = player.animation_mut(playing_animation_index).unwrap();
207 playing_animation.set_repeat(RepeatAnimation::Forever);
208 }
209 }
210}
Sourcepub fn playing_animations_mut(
&mut self,
) -> impl Iterator<Item = (&NodeIndex, &mut ActiveAnimation)>
pub fn playing_animations_mut( &mut self, ) -> impl Iterator<Item = (&NodeIndex, &mut ActiveAnimation)>
Iterates through all animations that this AnimationPlayer
is
currently playing, mutably.
Sourcepub fn is_playing_animation(&self, animation: NodeIndex) -> bool
pub fn is_playing_animation(&self, animation: NodeIndex) -> bool
Returns true if the animation is currently playing or paused, or false if the animation is stopped.
Examples found in repository?
448fn sync_weights(mut query: Query<(&mut AnimationPlayer, &ExampleAnimationWeights)>) {
449 for (mut animation_player, animation_weights) in query.iter_mut() {
450 for (&animation_node_index, &animation_weight) in CLIP_NODE_INDICES
451 .iter()
452 .zip(animation_weights.weights.iter())
453 {
454 // If the animation happens to be no longer active, restart it.
455 if !animation_player.is_playing_animation(animation_node_index.into()) {
456 animation_player.play(animation_node_index.into());
457 }
458
459 // Set the weight.
460 if let Some(active_animation) =
461 animation_player.animation_mut(animation_node_index.into())
462 {
463 active_animation.set_weight(animation_weight);
464 }
465 }
466 }
467}
Sourcepub fn all_finished(&self) -> bool
pub fn all_finished(&self) -> bool
Check if all playing animations have finished, according to the repetition behavior.
Sourcepub fn all_paused(&self) -> bool
pub fn all_paused(&self) -> bool
Check if all playing animations are paused.
Examples found in repository?
271fn keyboard_animation_control(
272 keyboard_input: Res<ButtonInput<KeyCode>>,
273 mut animation_player: Query<(&mut AnimationPlayer, &mut AnimationTransitions)>,
274 animations: Res<Animations>,
275 mut current_animation: Local<usize>,
276 mut foxes: ResMut<Foxes>,
277) {
278 if keyboard_input.just_pressed(KeyCode::Space) {
279 foxes.moving = !foxes.moving;
280 }
281
282 if keyboard_input.just_pressed(KeyCode::ArrowUp) {
283 foxes.speed *= 1.25;
284 }
285
286 if keyboard_input.just_pressed(KeyCode::ArrowDown) {
287 foxes.speed *= 0.8;
288 }
289
290 if keyboard_input.just_pressed(KeyCode::Enter) {
291 *current_animation = (*current_animation + 1) % animations.node_indices.len();
292 }
293
294 for (mut player, mut transitions) in &mut animation_player {
295 if keyboard_input.just_pressed(KeyCode::Space) {
296 if player.all_paused() {
297 player.resume_all();
298 } else {
299 player.pause_all();
300 }
301 }
302
303 if keyboard_input.just_pressed(KeyCode::ArrowUp) {
304 player.adjust_speeds(1.25);
305 }
306
307 if keyboard_input.just_pressed(KeyCode::ArrowDown) {
308 player.adjust_speeds(0.8);
309 }
310
311 if keyboard_input.just_pressed(KeyCode::ArrowLeft) {
312 player.seek_all_by(-0.1);
313 }
314
315 if keyboard_input.just_pressed(KeyCode::ArrowRight) {
316 player.seek_all_by(0.1);
317 }
318
319 if keyboard_input.just_pressed(KeyCode::Enter) {
320 transitions
321 .play(
322 &mut player,
323 animations.node_indices[*current_animation],
324 Duration::from_millis(250),
325 )
326 .repeat();
327 }
328 }
329}
Sourcepub fn pause_all(&mut self) -> &mut AnimationPlayer
pub fn pause_all(&mut self) -> &mut AnimationPlayer
Resume all playing animations.
Examples found in repository?
271fn keyboard_animation_control(
272 keyboard_input: Res<ButtonInput<KeyCode>>,
273 mut animation_player: Query<(&mut AnimationPlayer, &mut AnimationTransitions)>,
274 animations: Res<Animations>,
275 mut current_animation: Local<usize>,
276 mut foxes: ResMut<Foxes>,
277) {
278 if keyboard_input.just_pressed(KeyCode::Space) {
279 foxes.moving = !foxes.moving;
280 }
281
282 if keyboard_input.just_pressed(KeyCode::ArrowUp) {
283 foxes.speed *= 1.25;
284 }
285
286 if keyboard_input.just_pressed(KeyCode::ArrowDown) {
287 foxes.speed *= 0.8;
288 }
289
290 if keyboard_input.just_pressed(KeyCode::Enter) {
291 *current_animation = (*current_animation + 1) % animations.node_indices.len();
292 }
293
294 for (mut player, mut transitions) in &mut animation_player {
295 if keyboard_input.just_pressed(KeyCode::Space) {
296 if player.all_paused() {
297 player.resume_all();
298 } else {
299 player.pause_all();
300 }
301 }
302
303 if keyboard_input.just_pressed(KeyCode::ArrowUp) {
304 player.adjust_speeds(1.25);
305 }
306
307 if keyboard_input.just_pressed(KeyCode::ArrowDown) {
308 player.adjust_speeds(0.8);
309 }
310
311 if keyboard_input.just_pressed(KeyCode::ArrowLeft) {
312 player.seek_all_by(-0.1);
313 }
314
315 if keyboard_input.just_pressed(KeyCode::ArrowRight) {
316 player.seek_all_by(0.1);
317 }
318
319 if keyboard_input.just_pressed(KeyCode::Enter) {
320 transitions
321 .play(
322 &mut player,
323 animations.node_indices[*current_animation],
324 Duration::from_millis(250),
325 )
326 .repeat();
327 }
328 }
329}
Sourcepub fn resume_all(&mut self) -> &mut AnimationPlayer
pub fn resume_all(&mut self) -> &mut AnimationPlayer
Resume all active animations.
Examples found in repository?
271fn keyboard_animation_control(
272 keyboard_input: Res<ButtonInput<KeyCode>>,
273 mut animation_player: Query<(&mut AnimationPlayer, &mut AnimationTransitions)>,
274 animations: Res<Animations>,
275 mut current_animation: Local<usize>,
276 mut foxes: ResMut<Foxes>,
277) {
278 if keyboard_input.just_pressed(KeyCode::Space) {
279 foxes.moving = !foxes.moving;
280 }
281
282 if keyboard_input.just_pressed(KeyCode::ArrowUp) {
283 foxes.speed *= 1.25;
284 }
285
286 if keyboard_input.just_pressed(KeyCode::ArrowDown) {
287 foxes.speed *= 0.8;
288 }
289
290 if keyboard_input.just_pressed(KeyCode::Enter) {
291 *current_animation = (*current_animation + 1) % animations.node_indices.len();
292 }
293
294 for (mut player, mut transitions) in &mut animation_player {
295 if keyboard_input.just_pressed(KeyCode::Space) {
296 if player.all_paused() {
297 player.resume_all();
298 } else {
299 player.pause_all();
300 }
301 }
302
303 if keyboard_input.just_pressed(KeyCode::ArrowUp) {
304 player.adjust_speeds(1.25);
305 }
306
307 if keyboard_input.just_pressed(KeyCode::ArrowDown) {
308 player.adjust_speeds(0.8);
309 }
310
311 if keyboard_input.just_pressed(KeyCode::ArrowLeft) {
312 player.seek_all_by(-0.1);
313 }
314
315 if keyboard_input.just_pressed(KeyCode::ArrowRight) {
316 player.seek_all_by(0.1);
317 }
318
319 if keyboard_input.just_pressed(KeyCode::Enter) {
320 transitions
321 .play(
322 &mut player,
323 animations.node_indices[*current_animation],
324 Duration::from_millis(250),
325 )
326 .repeat();
327 }
328 }
329}
Sourcepub fn rewind_all(&mut self) -> &mut AnimationPlayer
pub fn rewind_all(&mut self) -> &mut AnimationPlayer
Rewinds all active animations.
Sourcepub fn adjust_speeds(&mut self, factor: f32) -> &mut AnimationPlayer
pub fn adjust_speeds(&mut self, factor: f32) -> &mut AnimationPlayer
Multiplies the speed of all active animations by the given factor.
Examples found in repository?
271fn keyboard_animation_control(
272 keyboard_input: Res<ButtonInput<KeyCode>>,
273 mut animation_player: Query<(&mut AnimationPlayer, &mut AnimationTransitions)>,
274 animations: Res<Animations>,
275 mut current_animation: Local<usize>,
276 mut foxes: ResMut<Foxes>,
277) {
278 if keyboard_input.just_pressed(KeyCode::Space) {
279 foxes.moving = !foxes.moving;
280 }
281
282 if keyboard_input.just_pressed(KeyCode::ArrowUp) {
283 foxes.speed *= 1.25;
284 }
285
286 if keyboard_input.just_pressed(KeyCode::ArrowDown) {
287 foxes.speed *= 0.8;
288 }
289
290 if keyboard_input.just_pressed(KeyCode::Enter) {
291 *current_animation = (*current_animation + 1) % animations.node_indices.len();
292 }
293
294 for (mut player, mut transitions) in &mut animation_player {
295 if keyboard_input.just_pressed(KeyCode::Space) {
296 if player.all_paused() {
297 player.resume_all();
298 } else {
299 player.pause_all();
300 }
301 }
302
303 if keyboard_input.just_pressed(KeyCode::ArrowUp) {
304 player.adjust_speeds(1.25);
305 }
306
307 if keyboard_input.just_pressed(KeyCode::ArrowDown) {
308 player.adjust_speeds(0.8);
309 }
310
311 if keyboard_input.just_pressed(KeyCode::ArrowLeft) {
312 player.seek_all_by(-0.1);
313 }
314
315 if keyboard_input.just_pressed(KeyCode::ArrowRight) {
316 player.seek_all_by(0.1);
317 }
318
319 if keyboard_input.just_pressed(KeyCode::Enter) {
320 transitions
321 .play(
322 &mut player,
323 animations.node_indices[*current_animation],
324 Duration::from_millis(250),
325 )
326 .repeat();
327 }
328 }
329}
Sourcepub fn seek_all_by(&mut self, amount: f32) -> &mut AnimationPlayer
pub fn seek_all_by(&mut self, amount: f32) -> &mut AnimationPlayer
Seeks all active animations forward or backward by the same amount.
To seek forward, pass a positive value; to seek negative, pass a negative value. Values below 0.0 or beyond the end of the animation clip are clamped appropriately.
Examples found in repository?
271fn keyboard_animation_control(
272 keyboard_input: Res<ButtonInput<KeyCode>>,
273 mut animation_player: Query<(&mut AnimationPlayer, &mut AnimationTransitions)>,
274 animations: Res<Animations>,
275 mut current_animation: Local<usize>,
276 mut foxes: ResMut<Foxes>,
277) {
278 if keyboard_input.just_pressed(KeyCode::Space) {
279 foxes.moving = !foxes.moving;
280 }
281
282 if keyboard_input.just_pressed(KeyCode::ArrowUp) {
283 foxes.speed *= 1.25;
284 }
285
286 if keyboard_input.just_pressed(KeyCode::ArrowDown) {
287 foxes.speed *= 0.8;
288 }
289
290 if keyboard_input.just_pressed(KeyCode::Enter) {
291 *current_animation = (*current_animation + 1) % animations.node_indices.len();
292 }
293
294 for (mut player, mut transitions) in &mut animation_player {
295 if keyboard_input.just_pressed(KeyCode::Space) {
296 if player.all_paused() {
297 player.resume_all();
298 } else {
299 player.pause_all();
300 }
301 }
302
303 if keyboard_input.just_pressed(KeyCode::ArrowUp) {
304 player.adjust_speeds(1.25);
305 }
306
307 if keyboard_input.just_pressed(KeyCode::ArrowDown) {
308 player.adjust_speeds(0.8);
309 }
310
311 if keyboard_input.just_pressed(KeyCode::ArrowLeft) {
312 player.seek_all_by(-0.1);
313 }
314
315 if keyboard_input.just_pressed(KeyCode::ArrowRight) {
316 player.seek_all_by(0.1);
317 }
318
319 if keyboard_input.just_pressed(KeyCode::Enter) {
320 transitions
321 .play(
322 &mut player,
323 animations.node_indices[*current_animation],
324 Duration::from_millis(250),
325 )
326 .repeat();
327 }
328 }
329}
Sourcepub fn animation(&self, animation: NodeIndex) -> Option<&ActiveAnimation>
pub fn animation(&self, animation: NodeIndex) -> Option<&ActiveAnimation>
Returns the ActiveAnimation
associated with the given animation
node if it’s currently playing.
If the animation isn’t currently active, returns None
.
Sourcepub fn animation_mut(
&mut self,
animation: NodeIndex,
) -> Option<&mut ActiveAnimation>
pub fn animation_mut( &mut self, animation: NodeIndex, ) -> Option<&mut ActiveAnimation>
Returns a mutable reference to the ActiveAnimation
associated with
the given animation node if it’s currently active.
If the animation isn’t currently active, returns None
.
Examples found in repository?
448fn sync_weights(mut query: Query<(&mut AnimationPlayer, &ExampleAnimationWeights)>) {
449 for (mut animation_player, animation_weights) in query.iter_mut() {
450 for (&animation_node_index, &animation_weight) in CLIP_NODE_INDICES
451 .iter()
452 .zip(animation_weights.weights.iter())
453 {
454 // If the animation happens to be no longer active, restart it.
455 if !animation_player.is_playing_animation(animation_node_index.into()) {
456 animation_player.play(animation_node_index.into());
457 }
458
459 // Set the weight.
460 if let Some(active_animation) =
461 animation_player.animation_mut(animation_node_index.into())
462 {
463 active_animation.set_weight(animation_weight);
464 }
465 }
466 }
467}
More examples
128fn keyboard_control(
129 keyboard_input: Res<ButtonInput<KeyCode>>,
130 mut animation_players: Query<(&mut AnimationPlayer, &mut AnimationTransitions)>,
131 animations: Res<Animations>,
132 mut current_animation: Local<usize>,
133) {
134 for (mut player, mut transitions) in &mut animation_players {
135 let Some((&playing_animation_index, _)) = player.playing_animations().next() else {
136 continue;
137 };
138
139 if keyboard_input.just_pressed(KeyCode::Space) {
140 let playing_animation = player.animation_mut(playing_animation_index).unwrap();
141 if playing_animation.is_paused() {
142 playing_animation.resume();
143 } else {
144 playing_animation.pause();
145 }
146 }
147
148 if keyboard_input.just_pressed(KeyCode::ArrowUp) {
149 let playing_animation = player.animation_mut(playing_animation_index).unwrap();
150 let speed = playing_animation.speed();
151 playing_animation.set_speed(speed * 1.2);
152 }
153
154 if keyboard_input.just_pressed(KeyCode::ArrowDown) {
155 let playing_animation = player.animation_mut(playing_animation_index).unwrap();
156 let speed = playing_animation.speed();
157 playing_animation.set_speed(speed * 0.8);
158 }
159
160 if keyboard_input.just_pressed(KeyCode::ArrowLeft) {
161 let playing_animation = player.animation_mut(playing_animation_index).unwrap();
162 let elapsed = playing_animation.seek_time();
163 playing_animation.seek_to(elapsed - 0.1);
164 }
165
166 if keyboard_input.just_pressed(KeyCode::ArrowRight) {
167 let playing_animation = player.animation_mut(playing_animation_index).unwrap();
168 let elapsed = playing_animation.seek_time();
169 playing_animation.seek_to(elapsed + 0.1);
170 }
171
172 if keyboard_input.just_pressed(KeyCode::Enter) {
173 *current_animation = (*current_animation + 1) % animations.animations.len();
174
175 transitions
176 .play(
177 &mut player,
178 animations.animations[*current_animation],
179 Duration::from_millis(250),
180 )
181 .repeat();
182 }
183
184 if keyboard_input.just_pressed(KeyCode::Digit1) {
185 let playing_animation = player.animation_mut(playing_animation_index).unwrap();
186 playing_animation
187 .set_repeat(RepeatAnimation::Count(1))
188 .replay();
189 }
190
191 if keyboard_input.just_pressed(KeyCode::Digit2) {
192 let playing_animation = player.animation_mut(playing_animation_index).unwrap();
193 playing_animation
194 .set_repeat(RepeatAnimation::Count(2))
195 .replay();
196 }
197
198 if keyboard_input.just_pressed(KeyCode::Digit3) {
199 let playing_animation = player.animation_mut(playing_animation_index).unwrap();
200 playing_animation
201 .set_repeat(RepeatAnimation::Count(3))
202 .replay();
203 }
204
205 if keyboard_input.just_pressed(KeyCode::KeyL) {
206 let playing_animation = player.animation_mut(playing_animation_index).unwrap();
207 playing_animation.set_repeat(RepeatAnimation::Forever);
208 }
209 }
210}
Trait Implementations§
Source§impl Clone for AnimationPlayer
impl Clone for AnimationPlayer
Source§fn clone(&self) -> AnimationPlayer
fn clone(&self) -> AnimationPlayer
Source§fn clone_from(&mut self, source: &AnimationPlayer)
fn clone_from(&mut self, source: &AnimationPlayer)
source
. Read moreSource§impl Component for AnimationPlayer
impl Component for AnimationPlayer
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,
components: &mut ComponentsRegistrator<'_>,
required_components: &mut RequiredComponents,
inheritance_depth: u16,
recursion_check_stack: &mut Vec<ComponentId>,
)
fn register_required_components( requiree: ComponentId, components: &mut ComponentsRegistrator<'_>, required_components: &mut RequiredComponents, inheritance_depth: u16, recursion_check_stack: &mut Vec<ComponentId>, )
Source§fn clone_behavior() -> ComponentCloneBehavior
fn clone_behavior() -> ComponentCloneBehavior
Source§fn register_component_hooks(hooks: &mut ComponentHooks)
fn register_component_hooks(hooks: &mut ComponentHooks)
Component::on_add
, etc.)ComponentHooks
.Source§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_replace() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
fn on_replace() -> 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 moreSource§impl Default for AnimationPlayer
impl Default for AnimationPlayer
Source§fn default() -> AnimationPlayer
fn default() -> AnimationPlayer
Source§impl FromArg for &'static AnimationPlayerwhere
AnimationPlayer: Any + Send + Sync,
HashMap<NodeIndex, ActiveAnimation>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
HashMap<NodeIndex, f32>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
impl FromArg for &'static AnimationPlayerwhere
AnimationPlayer: Any + Send + Sync,
HashMap<NodeIndex, ActiveAnimation>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
HashMap<NodeIndex, f32>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
Source§impl FromArg for &'static mut AnimationPlayerwhere
AnimationPlayer: Any + Send + Sync,
HashMap<NodeIndex, ActiveAnimation>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
HashMap<NodeIndex, f32>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
impl FromArg for &'static mut AnimationPlayerwhere
AnimationPlayer: Any + Send + Sync,
HashMap<NodeIndex, ActiveAnimation>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
HashMap<NodeIndex, f32>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
Source§impl FromArg for AnimationPlayerwhere
AnimationPlayer: Any + Send + Sync,
HashMap<NodeIndex, ActiveAnimation>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
HashMap<NodeIndex, f32>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
impl FromArg for AnimationPlayerwhere
AnimationPlayer: Any + Send + Sync,
HashMap<NodeIndex, ActiveAnimation>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
HashMap<NodeIndex, f32>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
Source§impl FromReflect for AnimationPlayerwhere
AnimationPlayer: Any + Send + Sync,
HashMap<NodeIndex, ActiveAnimation>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
HashMap<NodeIndex, f32>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
impl FromReflect for AnimationPlayerwhere
AnimationPlayer: Any + Send + Sync,
HashMap<NodeIndex, ActiveAnimation>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
HashMap<NodeIndex, f32>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
Source§fn from_reflect(
reflect: &(dyn PartialReflect + 'static),
) -> Option<AnimationPlayer>
fn from_reflect( reflect: &(dyn PartialReflect + 'static), ) -> Option<AnimationPlayer>
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 &AnimationPlayerwhere
AnimationPlayer: Any + Send + Sync,
HashMap<NodeIndex, ActiveAnimation>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
HashMap<NodeIndex, f32>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
impl GetOwnership for &AnimationPlayerwhere
AnimationPlayer: Any + Send + Sync,
HashMap<NodeIndex, ActiveAnimation>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
HashMap<NodeIndex, f32>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
Source§impl GetOwnership for &mut AnimationPlayerwhere
AnimationPlayer: Any + Send + Sync,
HashMap<NodeIndex, ActiveAnimation>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
HashMap<NodeIndex, f32>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
impl GetOwnership for &mut AnimationPlayerwhere
AnimationPlayer: Any + Send + Sync,
HashMap<NodeIndex, ActiveAnimation>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
HashMap<NodeIndex, f32>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
Source§impl GetOwnership for AnimationPlayerwhere
AnimationPlayer: Any + Send + Sync,
HashMap<NodeIndex, ActiveAnimation>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
HashMap<NodeIndex, f32>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
impl GetOwnership for AnimationPlayerwhere
AnimationPlayer: Any + Send + Sync,
HashMap<NodeIndex, ActiveAnimation>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
HashMap<NodeIndex, f32>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
Source§impl GetTypeRegistration for AnimationPlayerwhere
AnimationPlayer: Any + Send + Sync,
HashMap<NodeIndex, ActiveAnimation>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
HashMap<NodeIndex, f32>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
impl GetTypeRegistration for AnimationPlayerwhere
AnimationPlayer: Any + Send + Sync,
HashMap<NodeIndex, ActiveAnimation>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
HashMap<NodeIndex, f32>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
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 &AnimationPlayerwhere
AnimationPlayer: Any + Send + Sync,
HashMap<NodeIndex, ActiveAnimation>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
HashMap<NodeIndex, f32>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
impl IntoReturn for &AnimationPlayerwhere
AnimationPlayer: Any + Send + Sync,
HashMap<NodeIndex, ActiveAnimation>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
HashMap<NodeIndex, f32>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
Source§fn into_return<'into_return>(self) -> Return<'into_return>where
&AnimationPlayer: 'into_return,
fn into_return<'into_return>(self) -> Return<'into_return>where
&AnimationPlayer: 'into_return,
Source§impl IntoReturn for &mut AnimationPlayerwhere
AnimationPlayer: Any + Send + Sync,
HashMap<NodeIndex, ActiveAnimation>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
HashMap<NodeIndex, f32>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
impl IntoReturn for &mut AnimationPlayerwhere
AnimationPlayer: Any + Send + Sync,
HashMap<NodeIndex, ActiveAnimation>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
HashMap<NodeIndex, f32>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
Source§fn into_return<'into_return>(self) -> Return<'into_return>where
&mut AnimationPlayer: 'into_return,
fn into_return<'into_return>(self) -> Return<'into_return>where
&mut AnimationPlayer: 'into_return,
Source§impl IntoReturn for AnimationPlayerwhere
AnimationPlayer: Any + Send + Sync,
HashMap<NodeIndex, ActiveAnimation>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
HashMap<NodeIndex, f32>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
impl IntoReturn for AnimationPlayerwhere
AnimationPlayer: Any + Send + Sync,
HashMap<NodeIndex, ActiveAnimation>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
HashMap<NodeIndex, f32>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
Source§fn into_return<'into_return>(self) -> Return<'into_return>where
AnimationPlayer: 'into_return,
fn into_return<'into_return>(self) -> Return<'into_return>where
AnimationPlayer: 'into_return,
Source§impl PartialReflect for AnimationPlayerwhere
AnimationPlayer: Any + Send + Sync,
HashMap<NodeIndex, ActiveAnimation>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
HashMap<NodeIndex, f32>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
impl PartialReflect for AnimationPlayerwhere
AnimationPlayer: Any + Send + Sync,
HashMap<NodeIndex, ActiveAnimation>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
HashMap<NodeIndex, f32>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
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<AnimationPlayer>) -> ReflectOwned
fn reflect_owned(self: Box<AnimationPlayer>) -> ReflectOwned
Source§fn try_into_reflect(
self: Box<AnimationPlayer>,
) -> Result<Box<dyn Reflect>, Box<dyn PartialReflect>>
fn try_into_reflect( self: Box<AnimationPlayer>, ) -> 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<AnimationPlayer>) -> Box<dyn PartialReflect>
fn into_partial_reflect(self: Box<AnimationPlayer>) -> 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_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 clone_value(&self) -> Box<dyn PartialReflect>
fn clone_value(&self) -> Box<dyn PartialReflect>
reflect_clone
. To convert reflected values to dynamic ones, use to_dynamic
.Self
into its dynamic representation. Read moreSource§fn to_dynamic(&self) -> Box<dyn PartialReflect>
fn to_dynamic(&self) -> Box<dyn PartialReflect>
Source§fn reflect_hash(&self) -> Option<u64>
fn reflect_hash(&self) -> Option<u64>
Source§fn debug(&self, f: &mut Formatter<'_>) -> Result<(), Error>
fn debug(&self, f: &mut Formatter<'_>) -> Result<(), Error>
Source§fn is_dynamic(&self) -> bool
fn is_dynamic(&self) -> bool
Source§impl Reflect for AnimationPlayerwhere
AnimationPlayer: Any + Send + Sync,
HashMap<NodeIndex, ActiveAnimation>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
HashMap<NodeIndex, f32>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
impl Reflect for AnimationPlayerwhere
AnimationPlayer: Any + Send + Sync,
HashMap<NodeIndex, ActiveAnimation>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
HashMap<NodeIndex, f32>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
Source§fn into_any(self: Box<AnimationPlayer>) -> Box<dyn Any>
fn into_any(self: Box<AnimationPlayer>) -> 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<AnimationPlayer>) -> Box<dyn Reflect>
fn into_reflect(self: Box<AnimationPlayer>) -> 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 Struct for AnimationPlayerwhere
AnimationPlayer: Any + Send + Sync,
HashMap<NodeIndex, ActiveAnimation>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
HashMap<NodeIndex, f32>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
impl Struct for AnimationPlayerwhere
AnimationPlayer: Any + Send + Sync,
HashMap<NodeIndex, ActiveAnimation>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
HashMap<NodeIndex, f32>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
Source§fn field(&self, name: &str) -> Option<&(dyn PartialReflect + 'static)>
fn field(&self, name: &str) -> Option<&(dyn PartialReflect + 'static)>
name
as a &dyn PartialReflect
.Source§fn field_mut(
&mut self,
name: &str,
) -> Option<&mut (dyn PartialReflect + 'static)>
fn field_mut( &mut self, name: &str, ) -> Option<&mut (dyn PartialReflect + 'static)>
name
as a
&mut dyn PartialReflect
.Source§fn field_at(&self, index: usize) -> Option<&(dyn PartialReflect + 'static)>
fn field_at(&self, index: usize) -> Option<&(dyn PartialReflect + 'static)>
index
as a
&dyn PartialReflect
.Source§fn field_at_mut(
&mut self,
index: usize,
) -> Option<&mut (dyn PartialReflect + 'static)>
fn field_at_mut( &mut self, index: usize, ) -> Option<&mut (dyn PartialReflect + 'static)>
index
as a &mut dyn PartialReflect
.Source§fn name_at(&self, index: usize) -> Option<&str>
fn name_at(&self, index: usize) -> Option<&str>
index
.Source§fn iter_fields(&self) -> FieldIter<'_> ⓘ
fn iter_fields(&self) -> FieldIter<'_> ⓘ
fn to_dynamic_struct(&self) -> DynamicStruct
Source§fn clone_dynamic(&self) -> DynamicStruct
fn clone_dynamic(&self) -> DynamicStruct
to_dynamic_struct
insteadDynamicStruct
.Source§fn get_represented_struct_info(&self) -> Option<&'static StructInfo>
fn get_represented_struct_info(&self) -> Option<&'static StructInfo>
None
if TypeInfo
is not available.Source§impl TypePath for AnimationPlayer
impl TypePath for AnimationPlayer
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>
Source§impl Typed for AnimationPlayerwhere
AnimationPlayer: Any + Send + Sync,
HashMap<NodeIndex, ActiveAnimation>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
HashMap<NodeIndex, f32>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
impl Typed for AnimationPlayerwhere
AnimationPlayer: Any + Send + Sync,
HashMap<NodeIndex, ActiveAnimation>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
HashMap<NodeIndex, f32>: FromReflect + TypePath + MaybeTyped + RegisterForReflection,
Auto Trait Implementations§
impl Freeze for AnimationPlayer
impl RefUnwindSafe for AnimationPlayer
impl Send for AnimationPlayer
impl Sync for AnimationPlayer
impl Unpin for AnimationPlayer
impl UnwindSafe for AnimationPlayer
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
Source§impl<C> Bundle for Cwhere
C: Component,
impl<C> Bundle for Cwhere
C: Component,
fn component_ids( components: &mut ComponentsRegistrator<'_>, ids: &mut impl FnMut(ComponentId), )
Source§fn register_required_components(
components: &mut ComponentsRegistrator<'_>,
required_components: &mut RequiredComponents,
)
fn register_required_components( components: &mut ComponentsRegistrator<'_>, required_components: &mut RequiredComponents, )
Bundle
.Source§fn get_component_ids(
components: &Components,
ids: &mut impl FnMut(Option<ComponentId>),
)
fn get_component_ids( components: &Components, ids: &mut impl FnMut(Option<ComponentId>), )
Source§impl<C> BundleFromComponents for Cwhere
C: Component,
impl<C> BundleFromComponents for Cwhere
C: Component,
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
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
Source§impl<C> DynamicBundle for Cwhere
C: Component,
impl<C> DynamicBundle for Cwhere
C: Component,
fn get_components( self, func: &mut impl FnMut(StorageType, OwningPtr<'_>), ) -> <C as DynamicBundle>::Effect
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> 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> 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<S> GetField for Swhere
S: Struct,
impl<S> GetField for Swhere
S: Struct,
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<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<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<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.Source§impl<T> Pointable for T
impl<T> Pointable for T
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()
.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.