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?
512fn play_animations(
513 mut commands: Commands,
514 assets: Res<ExampleAssets>,
515 mut players: Query<(Entity, &mut AnimationPlayer), Without<AnimationGraphHandle>>,
516) {
517 for (entity, mut player) in players.iter_mut() {
518 commands
519 .entity(entity)
520 .insert(AnimationGraphHandle(assets.fox_animation_graph.clone()));
521 player.play(assets.fox_animation_node).repeat();
522 }
523}More examples
379fn init_animations(
380 mut commands: Commands,
381 mut query: Query<(Entity, &mut AnimationPlayer)>,
382 animation_graph: Res<ExampleAnimationGraph>,
383 mut done: Local<bool>,
384) {
385 if *done {
386 return;
387 }
388
389 for (entity, mut player) in query.iter_mut() {
390 commands.entity(entity).insert((
391 AnimationGraphHandle(animation_graph.0.clone()),
392 ExampleAnimationWeights::default(),
393 ));
394 for &node_index in &CLIP_NODE_INDICES {
395 player.play(node_index.into()).repeat();
396 }
397
398 *done = true;
399 }
400}
401
402/// Read cursor position relative to clip nodes, allowing the user to change weights
403/// when dragging the node UI widgets.
404fn handle_weight_drag(
405 mut interaction_query: Query<(&Interaction, &RelativeCursorPosition, &ClipNode)>,
406 mut animation_weights_query: Query<&mut ExampleAnimationWeights>,
407) {
408 for (interaction, relative_cursor, clip_node) in &mut interaction_query {
409 if !matches!(*interaction, Interaction::Pressed) {
410 continue;
411 }
412
413 let Some(pos) = relative_cursor.normalized else {
414 continue;
415 };
416
417 for mut animation_weights in animation_weights_query.iter_mut() {
418 animation_weights.weights[clip_node.index] = pos.x.clamp(0., 1.);
419 }
420 }
421}
422
423// Updates the UI based on the weights that the user has chosen.
424fn update_ui(
425 mut text_query: Query<&mut Text>,
426 mut background_query: Query<&mut Node, Without<Text>>,
427 container_query: Query<(&Children, &ClipNode)>,
428 animation_weights_query: Query<&ExampleAnimationWeights, Changed<ExampleAnimationWeights>>,
429) {
430 for animation_weights in animation_weights_query.iter() {
431 for (children, clip_node) in &container_query {
432 // Draw the green background color to visually indicate the weight.
433 let mut bg_iter = background_query.iter_many_mut(children);
434 if let Some(mut node) = bg_iter.fetch_next() {
435 // All nodes are the same width, so `NODE_RECTS[0]` is as good as any other.
436 node.width = px(NODE_RECTS[0].width * animation_weights.weights[clip_node.index]);
437 }
438
439 // Update the node labels with the current weights.
440 let mut text_iter = text_query.iter_many_mut(children);
441 if let Some(mut text) = text_iter.fetch_next() {
442 **text = format!(
443 "{}\n{:.2}",
444 clip_node.text, animation_weights.weights[clip_node.index]
445 );
446 }
447 }
448 }
449}
450
451/// Takes the weights that were set in the UI and assigns them to the actual
452/// playing animation.
453fn sync_weights(mut query: Query<(&mut AnimationPlayer, &ExampleAnimationWeights)>) {
454 for (mut animation_player, animation_weights) in query.iter_mut() {
455 for (&animation_node_index, &animation_weight) in CLIP_NODE_INDICES
456 .iter()
457 .zip(animation_weights.weights.iter())
458 {
459 // If the animation happens to be no longer active, restart it.
460 if !animation_player.is_playing_animation(animation_node_index.into()) {
461 animation_player.play(animation_node_index.into());
462 }
463
464 // Set the weight.
465 if let Some(active_animation) =
466 animation_player.animation_mut(animation_node_index.into())
467 {
468 active_animation.set_weight(animation_weight);
469 }
470 }
471 }
472}58fn play_animation_when_ready(
59 scene_ready: On<SceneInstanceReady>,
60 mut commands: Commands,
61 children: Query<&Children>,
62 animations_to_play: Query<&AnimationToPlay>,
63 mut players: Query<&mut AnimationPlayer>,
64) {
65 if let Ok(animation_to_play) = animations_to_play.get(scene_ready.entity) {
66 for child in children.iter_descendants(scene_ready.entity) {
67 if let Ok(mut player) = players.get_mut(child) {
68 player.play(animation_to_play.index).repeat();
69
70 commands
71 .entity(child)
72 .insert(AnimationGraphHandle(animation_to_play.graph_handle.clone()));
73 }
74 }
75 }
76}230fn setup_scene_once_loaded(
231 scene_ready: On<SceneInstanceReady>,
232 animations: Res<Animations>,
233 foxes: Res<Foxes>,
234 mut commands: Commands,
235 children: Query<&Children>,
236 mut players: Query<&mut AnimationPlayer>,
237) {
238 for child in children.iter_descendants(scene_ready.entity) {
239 if let Ok(mut player) = players.get_mut(child) {
240 let playing_animation = player.play(animations.node_indices[0]).repeat();
241 if !foxes.sync {
242 playing_animation.seek_to(scene_ready.entity.index() as f32 / 10.0);
243 }
244 commands
245 .entity(child)
246 .insert(AnimationGraphHandle(animations.graph.clone()));
247 }
248 }
249}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 ..Default::default()
48 },
49 Bloom {
50 intensity: 0.4,
51 ..Bloom::NATURAL
52 },
53 ));
54
55 // The text that will be changed by animation events.
56 commands.spawn((
57 MessageText,
58 Text2d::default(),
59 TextFont {
60 font_size: 119.0,
61 ..default()
62 },
63 TextColor(Color::NONE),
64 ));
65
66 // Create a new animation clip.
67 let mut animation = AnimationClip::default();
68
69 // This is only necessary if you want the duration of the
70 // animation to be longer than the last event in the clip.
71 animation.set_duration(2.0);
72
73 // Add events at the specified time.
74 animation.add_event(
75 0.0,
76 SetMessage {
77 value: "HELLO".into(),
78 color: ALICE_BLUE.into(),
79 },
80 );
81 animation.add_event(
82 1.0,
83 SetMessage {
84 value: "BYE".into(),
85 color: CRIMSON.into(),
86 },
87 );
88
89 // Create the animation graph.
90 let (graph, animation_index) = AnimationGraph::from_clip(animations.add(animation));
91 let mut player = AnimationPlayer::default();
92 player.play(animation_index).repeat();
93
94 commands.spawn((AnimationGraphHandle(graphs.add(graph)), player));
95}64fn play_animation_when_ready(
65 scene_ready: On<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(scene_ready.entity) {
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(scene_ready.entity) {
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?
453fn sync_weights(mut query: Query<(&mut AnimationPlayer, &ExampleAnimationWeights)>) {
454 for (mut animation_player, animation_weights) in query.iter_mut() {
455 for (&animation_node_index, &animation_weight) in CLIP_NODE_INDICES
456 .iter()
457 .zip(animation_weights.weights.iter())
458 {
459 // If the animation happens to be no longer active, restart it.
460 if !animation_player.is_playing_animation(animation_node_index.into()) {
461 animation_player.play(animation_node_index.into());
462 }
463
464 // Set the weight.
465 if let Some(active_animation) =
466 animation_player.animation_mut(animation_node_index.into())
467 {
468 active_animation.set_weight(animation_weight);
469 }
470 }
471 }
472}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?
267fn keyboard_animation_control(
268 keyboard_input: Res<ButtonInput<KeyCode>>,
269 mut animation_player: Query<(&mut AnimationPlayer, &mut AnimationTransitions)>,
270 animations: Res<Animations>,
271 mut current_animation: Local<usize>,
272 mut foxes: ResMut<Foxes>,
273) {
274 if keyboard_input.just_pressed(KeyCode::Space) {
275 foxes.moving = !foxes.moving;
276 }
277
278 if keyboard_input.just_pressed(KeyCode::ArrowUp) {
279 foxes.speed *= 1.25;
280 }
281
282 if keyboard_input.just_pressed(KeyCode::ArrowDown) {
283 foxes.speed *= 0.8;
284 }
285
286 if keyboard_input.just_pressed(KeyCode::Enter) {
287 *current_animation = (*current_animation + 1) % animations.node_indices.len();
288 }
289
290 for (mut player, mut transitions) in &mut animation_player {
291 if keyboard_input.just_pressed(KeyCode::Space) {
292 if player.all_paused() {
293 player.resume_all();
294 } else {
295 player.pause_all();
296 }
297 }
298
299 if keyboard_input.just_pressed(KeyCode::ArrowUp) {
300 player.adjust_speeds(1.25);
301 }
302
303 if keyboard_input.just_pressed(KeyCode::ArrowDown) {
304 player.adjust_speeds(0.8);
305 }
306
307 if keyboard_input.just_pressed(KeyCode::ArrowLeft) {
308 player.seek_all_by(-0.1);
309 }
310
311 if keyboard_input.just_pressed(KeyCode::ArrowRight) {
312 player.seek_all_by(0.1);
313 }
314
315 if keyboard_input.just_pressed(KeyCode::Enter) {
316 transitions
317 .play(
318 &mut player,
319 animations.node_indices[*current_animation],
320 Duration::from_millis(250),
321 )
322 .repeat();
323 }
324 }
325}Sourcepub fn pause_all(&mut self) -> &mut AnimationPlayer
pub fn pause_all(&mut self) -> &mut AnimationPlayer
Pause all playing animations.
Examples found in repository?
267fn keyboard_animation_control(
268 keyboard_input: Res<ButtonInput<KeyCode>>,
269 mut animation_player: Query<(&mut AnimationPlayer, &mut AnimationTransitions)>,
270 animations: Res<Animations>,
271 mut current_animation: Local<usize>,
272 mut foxes: ResMut<Foxes>,
273) {
274 if keyboard_input.just_pressed(KeyCode::Space) {
275 foxes.moving = !foxes.moving;
276 }
277
278 if keyboard_input.just_pressed(KeyCode::ArrowUp) {
279 foxes.speed *= 1.25;
280 }
281
282 if keyboard_input.just_pressed(KeyCode::ArrowDown) {
283 foxes.speed *= 0.8;
284 }
285
286 if keyboard_input.just_pressed(KeyCode::Enter) {
287 *current_animation = (*current_animation + 1) % animations.node_indices.len();
288 }
289
290 for (mut player, mut transitions) in &mut animation_player {
291 if keyboard_input.just_pressed(KeyCode::Space) {
292 if player.all_paused() {
293 player.resume_all();
294 } else {
295 player.pause_all();
296 }
297 }
298
299 if keyboard_input.just_pressed(KeyCode::ArrowUp) {
300 player.adjust_speeds(1.25);
301 }
302
303 if keyboard_input.just_pressed(KeyCode::ArrowDown) {
304 player.adjust_speeds(0.8);
305 }
306
307 if keyboard_input.just_pressed(KeyCode::ArrowLeft) {
308 player.seek_all_by(-0.1);
309 }
310
311 if keyboard_input.just_pressed(KeyCode::ArrowRight) {
312 player.seek_all_by(0.1);
313 }
314
315 if keyboard_input.just_pressed(KeyCode::Enter) {
316 transitions
317 .play(
318 &mut player,
319 animations.node_indices[*current_animation],
320 Duration::from_millis(250),
321 )
322 .repeat();
323 }
324 }
325}Sourcepub fn resume_all(&mut self) -> &mut AnimationPlayer
pub fn resume_all(&mut self) -> &mut AnimationPlayer
Resume all active animations.
Examples found in repository?
267fn keyboard_animation_control(
268 keyboard_input: Res<ButtonInput<KeyCode>>,
269 mut animation_player: Query<(&mut AnimationPlayer, &mut AnimationTransitions)>,
270 animations: Res<Animations>,
271 mut current_animation: Local<usize>,
272 mut foxes: ResMut<Foxes>,
273) {
274 if keyboard_input.just_pressed(KeyCode::Space) {
275 foxes.moving = !foxes.moving;
276 }
277
278 if keyboard_input.just_pressed(KeyCode::ArrowUp) {
279 foxes.speed *= 1.25;
280 }
281
282 if keyboard_input.just_pressed(KeyCode::ArrowDown) {
283 foxes.speed *= 0.8;
284 }
285
286 if keyboard_input.just_pressed(KeyCode::Enter) {
287 *current_animation = (*current_animation + 1) % animations.node_indices.len();
288 }
289
290 for (mut player, mut transitions) in &mut animation_player {
291 if keyboard_input.just_pressed(KeyCode::Space) {
292 if player.all_paused() {
293 player.resume_all();
294 } else {
295 player.pause_all();
296 }
297 }
298
299 if keyboard_input.just_pressed(KeyCode::ArrowUp) {
300 player.adjust_speeds(1.25);
301 }
302
303 if keyboard_input.just_pressed(KeyCode::ArrowDown) {
304 player.adjust_speeds(0.8);
305 }
306
307 if keyboard_input.just_pressed(KeyCode::ArrowLeft) {
308 player.seek_all_by(-0.1);
309 }
310
311 if keyboard_input.just_pressed(KeyCode::ArrowRight) {
312 player.seek_all_by(0.1);
313 }
314
315 if keyboard_input.just_pressed(KeyCode::Enter) {
316 transitions
317 .play(
318 &mut player,
319 animations.node_indices[*current_animation],
320 Duration::from_millis(250),
321 )
322 .repeat();
323 }
324 }
325}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?
267fn keyboard_animation_control(
268 keyboard_input: Res<ButtonInput<KeyCode>>,
269 mut animation_player: Query<(&mut AnimationPlayer, &mut AnimationTransitions)>,
270 animations: Res<Animations>,
271 mut current_animation: Local<usize>,
272 mut foxes: ResMut<Foxes>,
273) {
274 if keyboard_input.just_pressed(KeyCode::Space) {
275 foxes.moving = !foxes.moving;
276 }
277
278 if keyboard_input.just_pressed(KeyCode::ArrowUp) {
279 foxes.speed *= 1.25;
280 }
281
282 if keyboard_input.just_pressed(KeyCode::ArrowDown) {
283 foxes.speed *= 0.8;
284 }
285
286 if keyboard_input.just_pressed(KeyCode::Enter) {
287 *current_animation = (*current_animation + 1) % animations.node_indices.len();
288 }
289
290 for (mut player, mut transitions) in &mut animation_player {
291 if keyboard_input.just_pressed(KeyCode::Space) {
292 if player.all_paused() {
293 player.resume_all();
294 } else {
295 player.pause_all();
296 }
297 }
298
299 if keyboard_input.just_pressed(KeyCode::ArrowUp) {
300 player.adjust_speeds(1.25);
301 }
302
303 if keyboard_input.just_pressed(KeyCode::ArrowDown) {
304 player.adjust_speeds(0.8);
305 }
306
307 if keyboard_input.just_pressed(KeyCode::ArrowLeft) {
308 player.seek_all_by(-0.1);
309 }
310
311 if keyboard_input.just_pressed(KeyCode::ArrowRight) {
312 player.seek_all_by(0.1);
313 }
314
315 if keyboard_input.just_pressed(KeyCode::Enter) {
316 transitions
317 .play(
318 &mut player,
319 animations.node_indices[*current_animation],
320 Duration::from_millis(250),
321 )
322 .repeat();
323 }
324 }
325}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?
267fn keyboard_animation_control(
268 keyboard_input: Res<ButtonInput<KeyCode>>,
269 mut animation_player: Query<(&mut AnimationPlayer, &mut AnimationTransitions)>,
270 animations: Res<Animations>,
271 mut current_animation: Local<usize>,
272 mut foxes: ResMut<Foxes>,
273) {
274 if keyboard_input.just_pressed(KeyCode::Space) {
275 foxes.moving = !foxes.moving;
276 }
277
278 if keyboard_input.just_pressed(KeyCode::ArrowUp) {
279 foxes.speed *= 1.25;
280 }
281
282 if keyboard_input.just_pressed(KeyCode::ArrowDown) {
283 foxes.speed *= 0.8;
284 }
285
286 if keyboard_input.just_pressed(KeyCode::Enter) {
287 *current_animation = (*current_animation + 1) % animations.node_indices.len();
288 }
289
290 for (mut player, mut transitions) in &mut animation_player {
291 if keyboard_input.just_pressed(KeyCode::Space) {
292 if player.all_paused() {
293 player.resume_all();
294 } else {
295 player.pause_all();
296 }
297 }
298
299 if keyboard_input.just_pressed(KeyCode::ArrowUp) {
300 player.adjust_speeds(1.25);
301 }
302
303 if keyboard_input.just_pressed(KeyCode::ArrowDown) {
304 player.adjust_speeds(0.8);
305 }
306
307 if keyboard_input.just_pressed(KeyCode::ArrowLeft) {
308 player.seek_all_by(-0.1);
309 }
310
311 if keyboard_input.just_pressed(KeyCode::ArrowRight) {
312 player.seek_all_by(0.1);
313 }
314
315 if keyboard_input.just_pressed(KeyCode::Enter) {
316 transitions
317 .play(
318 &mut player,
319 animations.node_indices[*current_animation],
320 Duration::from_millis(250),
321 )
322 .repeat();
323 }
324 }
325}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?
453fn sync_weights(mut query: Query<(&mut AnimationPlayer, &ExampleAnimationWeights)>) {
454 for (mut animation_player, animation_weights) in query.iter_mut() {
455 for (&animation_node_index, &animation_weight) in CLIP_NODE_INDICES
456 .iter()
457 .zip(animation_weights.weights.iter())
458 {
459 // If the animation happens to be no longer active, restart it.
460 if !animation_player.is_playing_animation(animation_node_index.into()) {
461 animation_player.play(animation_node_index.into());
462 }
463
464 // Set the weight.
465 if let Some(active_animation) =
466 animation_player.animation_mut(animation_node_index.into())
467 {
468 active_animation.set_weight(animation_weight);
469 }
470 }
471 }
472}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,
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 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 AnimationPlayer
impl FromArg for AnimationPlayer
Source§impl FromReflect for AnimationPlayer
impl FromReflect for AnimationPlayer
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 AnimationPlayer
impl GetOwnership for AnimationPlayer
Source§impl GetTypeRegistration for AnimationPlayer
impl GetTypeRegistration for AnimationPlayer
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 AnimationPlayer
impl IntoReturn for AnimationPlayer
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 AnimationPlayer
impl PartialReflect for AnimationPlayer
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 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. Read moreSource§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 AnimationPlayer
impl Reflect for AnimationPlayer
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 AnimationPlayer
impl Struct for AnimationPlayer
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<'_> ⓘ
Source§fn to_dynamic_struct(&self) -> DynamicStruct
fn to_dynamic_struct(&self) -> DynamicStruct
DynamicStruct from this struct.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>
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 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,
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> 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, W> HasTypeWitness<W> for Twhere
W: MakeTypeWitness<Arg = T>,
T: ?Sized,
impl<T, W> HasTypeWitness<W> for Twhere
W: MakeTypeWitness<Arg = T>,
T: ?Sized,
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<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<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.