pub struct AnimatableCurve<P, C> {
pub property: P,
pub curve: C,
}Expand description
This type allows the conversion of a curve valued in the property type of an
AnimatableProperty into an AnimationCurve which animates that property.
Fields§
§property: PThe property selector, which defines what component to access and how to access a property on that component.
curve: CThe inner curve whose values are used to animate the property.
Implementations§
Source§impl<P, C> AnimatableCurve<P, C>
impl<P, C> AnimatableCurve<P, C>
Sourcepub fn new(property: P, curve: C) -> AnimatableCurve<P, C>
pub fn new(property: P, curve: C) -> AnimatableCurve<P, C>
Create an AnimatableCurve (and thus an AnimationCurve) from a curve
valued in an animatable property.
Examples found in repository?
examples/animation/eased_motion.rs (line 131)
92 fn create(
93 animation_graphs: &mut Assets<AnimationGraph>,
94 animation_clips: &mut Assets<AnimationClip>,
95 ) -> AnimationInfo {
96 // Create an ID that identifies the text node we're going to animate.
97 let animation_target_name = Name::new("Cube");
98 let animation_target_id = AnimationTargetId::from_name(&animation_target_name);
99
100 // Allocate an animation clip.
101 let mut animation_clip = AnimationClip::default();
102
103 // Each leg of the translation motion should take 3 seconds.
104 let animation_domain = interval(0.0, 3.0).unwrap();
105
106 // The easing curve is parametrized over [0, 1], so we reparametrize it and
107 // then ping-pong, which makes it spend another 3 seconds on the return journey.
108 let translation_curve = EasingCurve::new(
109 vec3(-6., 2., 0.),
110 vec3(6., 2., 0.),
111 EaseFunction::CubicInOut,
112 )
113 .reparametrize_linear(animation_domain)
114 .expect("this curve has bounded domain, so this should never fail")
115 .ping_pong()
116 .expect("this curve has bounded domain, so this should never fail");
117
118 // Something similar for rotation. The repetition here is an illusion caused
119 // by the symmetry of the cube; it rotates on the forward journey and never
120 // rotates back.
121 let rotation_curve = EasingCurve::new(
122 Quat::IDENTITY,
123 Quat::from_rotation_y(FRAC_PI_2),
124 EaseFunction::ElasticInOut,
125 )
126 .reparametrize_linear(interval(0.0, 4.0).unwrap())
127 .expect("this curve has bounded domain, so this should never fail");
128
129 animation_clip.add_curve_to_target(
130 animation_target_id,
131 AnimatableCurve::new(animated_field!(Transform::translation), translation_curve),
132 );
133 animation_clip.add_curve_to_target(
134 animation_target_id,
135 AnimatableCurve::new(animated_field!(Transform::rotation), rotation_curve),
136 );
137
138 // Save our animation clip as an asset.
139 let animation_clip_handle = animation_clips.add(animation_clip);
140
141 // Create an animation graph with that clip.
142 let (animation_graph, animation_node_index) =
143 AnimationGraph::from_clip(animation_clip_handle);
144 let animation_graph_handle = animation_graphs.add(animation_graph);
145
146 AnimationInfo {
147 target_name: animation_target_name,
148 target_id: animation_target_id,
149 graph: animation_graph_handle,
150 node_index: animation_node_index,
151 }
152 }More examples
examples/animation/animated_ui.rs (lines 51-61)
37 fn create(
38 animation_graphs: &mut Assets<AnimationGraph>,
39 animation_clips: &mut Assets<AnimationClip>,
40 ) -> AnimationInfo {
41 // Create an ID that identifies the text node we're going to animate.
42 let animation_target_name = Name::new("Text");
43 let animation_target_id = AnimationTargetId::from_name(&animation_target_name);
44
45 // Allocate an animation clip.
46 let mut animation_clip = AnimationClip::default();
47
48 // Create a curve that animates `UiTransform::scale`.
49 animation_clip.add_curve_to_target(
50 animation_target_id,
51 AnimatableCurve::new(
52 animated_field!(UiTransform::scale),
53 AnimatableKeyframeCurve::new(
54 [0.0, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0]
55 .into_iter()
56 .zip([0.3, 1.0, 0.3, 1.0, 0.3, 1.0, 0.3].map(Vec2::splat)),
57 )
58 .expect(
59 "should be able to build translation curve because we pass in valid samples",
60 ),
61 ),
62 );
63
64 // Create a curve that animates font color. Note that this should have
65 // the same time duration as the previous curve.
66 //
67 // This time we use a "custom property", which in this case animates TextColor under the assumption
68 // that it is in the "srgba" format.
69 animation_clip.add_curve_to_target(
70 animation_target_id,
71 AnimatableCurve::new(
72 TextColorProperty,
73 AnimatableKeyframeCurve::new([0.0, 1.0, 2.0, 3.0].into_iter().zip([
74 Srgba::RED,
75 Srgba::GREEN,
76 Srgba::BLUE,
77 Srgba::RED,
78 ]))
79 .expect(
80 "should be able to build translation curve because we pass in valid samples",
81 ),
82 ),
83 );
84
85 // Create a curve that animates `UiTransform::rotation`.
86 //
87 // This animates the 2D rotation of the UI element using `Rot2`.
88 // Like other `Animatable` types, it uses shortest-path interpolation (slerp)
89 // to ensure smooth movement between keyframes.
90 animation_clip.add_curve_to_target(
91 animation_target_id,
92 AnimatableCurve::new(
93 animated_field!(UiTransform::rotation),
94 AnimatableKeyframeCurve::new(
95 [0.0, 1.0, 2.0, 3.0]
96 .into_iter()
97 .zip([0., TAU / 3., TAU / 1.5, TAU].map(Rot2::radians)),
98 )
99 .expect("should be able to build rotation curve because we pass in valid samples"),
100 ),
101 );
102
103 // Save our animation clip as an asset.
104 let animation_clip_handle = animation_clips.add(animation_clip);
105
106 // Create an animation graph with that clip.
107 let (animation_graph, animation_node_index) =
108 AnimationGraph::from_clip(animation_clip_handle);
109 let animation_graph_handle = animation_graphs.add(animation_graph);
110
111 AnimationInfo {
112 target_name: animation_target_name,
113 target_id: animation_target_id,
114 graph: animation_graph_handle,
115 node_index: animation_node_index,
116 }
117 }examples/animation/animated_transform.rs (lines 56-68)
22fn setup(
23 mut commands: Commands,
24 mut meshes: ResMut<Assets<Mesh>>,
25 mut materials: ResMut<Assets<StandardMaterial>>,
26 mut animations: ResMut<Assets<AnimationClip>>,
27 mut graphs: ResMut<Assets<AnimationGraph>>,
28) {
29 // Camera
30 commands.spawn((
31 Camera3d::default(),
32 Transform::from_xyz(-2.0, 2.5, 5.0).looking_at(Vec3::ZERO, Vec3::Y),
33 ));
34
35 // Light
36 commands.spawn((
37 PointLight {
38 intensity: 500_000.0,
39 ..default()
40 },
41 Transform::from_xyz(0.0, 2.5, 0.0),
42 ));
43
44 // Let's use the `Name` component to target entities. We can use anything we
45 // like, but names are convenient.
46 let planet = Name::new("planet");
47 let orbit_controller = Name::new("orbit_controller");
48 let satellite = Name::new("satellite");
49
50 // Creating the animation
51 let mut animation = AnimationClip::default();
52 // A curve can modify a single part of a transform: here, the translation.
53 let planet_animation_target_id = AnimationTargetId::from_name(&planet);
54 animation.add_curve_to_target(
55 planet_animation_target_id,
56 AnimatableCurve::new(
57 animated_field!(Transform::translation),
58 UnevenSampleAutoCurve::new([0.0, 1.0, 2.0, 3.0, 4.0].into_iter().zip([
59 Vec3::new(1.0, 0.0, 1.0),
60 Vec3::new(-1.0, 0.0, 1.0),
61 Vec3::new(-1.0, 0.0, -1.0),
62 Vec3::new(1.0, 0.0, -1.0),
63 // in case seamless looping is wanted, the last keyframe should
64 // be the same as the first one
65 Vec3::new(1.0, 0.0, 1.0),
66 ]))
67 .expect("should be able to build translation curve because we pass in valid samples"),
68 ),
69 );
70 // Or it can modify the rotation of the transform.
71 // To find the entity to modify, the hierarchy will be traversed looking for
72 // an entity with the right name at each level.
73 let orbit_controller_animation_target_id =
74 AnimationTargetId::from_names([planet.clone(), orbit_controller.clone()].iter());
75 animation.add_curve_to_target(
76 orbit_controller_animation_target_id,
77 AnimatableCurve::new(
78 animated_field!(Transform::rotation),
79 UnevenSampleAutoCurve::new([0.0, 1.0, 2.0, 3.0, 4.0].into_iter().zip([
80 Quat::IDENTITY,
81 Quat::from_axis_angle(Vec3::Y, PI / 2.),
82 Quat::from_axis_angle(Vec3::Y, PI / 2. * 2.),
83 Quat::from_axis_angle(Vec3::Y, PI / 2. * 3.),
84 Quat::IDENTITY,
85 ]))
86 .expect("Failed to build rotation curve"),
87 ),
88 );
89 // If a curve in an animation is shorter than the other, it will not repeat
90 // until all other curves are finished. In that case, another animation should
91 // be created for each part that would have a different duration / period.
92 let satellite_animation_target_id = AnimationTargetId::from_names(
93 [planet.clone(), orbit_controller.clone(), satellite.clone()].iter(),
94 );
95 animation.add_curve_to_target(
96 satellite_animation_target_id,
97 AnimatableCurve::new(
98 animated_field!(Transform::scale),
99 UnevenSampleAutoCurve::new(
100 [0.0, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0]
101 .into_iter()
102 .zip([
103 Vec3::splat(0.8),
104 Vec3::splat(1.2),
105 Vec3::splat(0.8),
106 Vec3::splat(1.2),
107 Vec3::splat(0.8),
108 Vec3::splat(1.2),
109 Vec3::splat(0.8),
110 Vec3::splat(1.2),
111 Vec3::splat(0.8),
112 ]),
113 )
114 .expect("Failed to build scale curve"),
115 ),
116 );
117 // There can be more than one curve targeting the same entity path.
118 animation.add_curve_to_target(
119 AnimationTargetId::from_names(
120 [planet.clone(), orbit_controller.clone(), satellite.clone()].iter(),
121 ),
122 AnimatableCurve::new(
123 animated_field!(Transform::rotation),
124 UnevenSampleAutoCurve::new([0.0, 1.0, 2.0, 3.0, 4.0].into_iter().zip([
125 Quat::IDENTITY,
126 Quat::from_axis_angle(Vec3::Y, PI / 2.),
127 Quat::from_axis_angle(Vec3::Y, PI / 2. * 2.),
128 Quat::from_axis_angle(Vec3::Y, PI / 2. * 3.),
129 Quat::IDENTITY,
130 ]))
131 .expect("should be able to build translation curve because we pass in valid samples"),
132 ),
133 );
134
135 // Create the animation graph
136 let (graph, animation_index) = AnimationGraph::from_clip(animations.add(animation));
137
138 // Create the animation player, and set it to repeat
139 let mut player = AnimationPlayer::default();
140 player.play(animation_index).repeat();
141
142 // Create the scene that will be animated
143 // First entity is the planet
144 let planet_entity = commands
145 .spawn((
146 Mesh3d(meshes.add(Sphere::default())),
147 MeshMaterial3d(materials.add(Color::srgb(0.8, 0.7, 0.6))),
148 // Add the animation graph and player
149 planet,
150 AnimationGraphHandle(graphs.add(graph)),
151 player,
152 ))
153 .id();
154 commands.entity(planet_entity).insert((
155 planet_animation_target_id,
156 AnimatedBy(planet_entity),
157 children![(
158 Transform::default(),
159 Visibility::default(),
160 orbit_controller,
161 orbit_controller_animation_target_id,
162 AnimatedBy(planet_entity),
163 children![(
164 Mesh3d(meshes.add(Cuboid::new(0.5, 0.5, 0.5))),
165 MeshMaterial3d(materials.add(Color::srgb(0.3, 0.9, 0.3))),
166 Transform::from_xyz(1.5, 0.0, 0.0),
167 satellite_animation_target_id,
168 AnimatedBy(planet_entity),
169 satellite,
170 )],
171 )],
172 ));
173}Trait Implementations§
Source§impl<P, C> AnimationCurve for AnimatableCurve<P, C>where
P: Send + Sync + 'static + AnimatableProperty + Clone,
C: AnimationCompatibleCurve<<P as AnimatableProperty>::Property> + Clone,
impl<P, C> AnimationCurve for AnimatableCurve<P, C>where
P: Send + Sync + 'static + AnimatableProperty + Clone,
C: AnimationCompatibleCurve<<P as AnimatableProperty>::Property> + Clone,
Source§fn clone_value(&self) -> Box<dyn AnimationCurve>
fn clone_value(&self) -> Box<dyn AnimationCurve>
Returns a boxed clone of this value.
Source§fn evaluator_id(&self) -> EvaluatorId<'_>
fn evaluator_id(&self) -> EvaluatorId<'_>
Returns the type ID of the
AnimationCurveEvaluator. Read moreSource§fn create_evaluator(&self) -> Box<dyn AnimationCurveEvaluator>
fn create_evaluator(&self) -> Box<dyn AnimationCurveEvaluator>
Returns a newly-instantiated
AnimationCurveEvaluator for use with
this curve. Read moreSource§impl<P, C> Clone for AnimatableCurve<P, C>
impl<P, C> Clone for AnimatableCurve<P, C>
Source§fn clone(&self) -> AnimatableCurve<P, C>
fn clone(&self) -> AnimatableCurve<P, C>
Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl<P, C> Debug for AnimatableCurve<P, C>where
C: Debug,
impl<P, C> Debug for AnimatableCurve<P, C>where
C: Debug,
Source§impl<P, C> FromArg for AnimatableCurve<P, C>where
AnimatableCurve<P, C>: Any + Send + Sync,
P: TypePath + PartialReflect + MaybeTyped + RegisterForReflection,
C: TypePath + PartialReflect + MaybeTyped + RegisterForReflection,
impl<P, C> FromArg for AnimatableCurve<P, C>where
AnimatableCurve<P, C>: Any + Send + Sync,
P: TypePath + PartialReflect + MaybeTyped + RegisterForReflection,
C: TypePath + PartialReflect + MaybeTyped + RegisterForReflection,
Source§impl<P, C> FromReflect for AnimatableCurve<P, C>where
AnimatableCurve<P, C>: Any + Send + Sync,
P: TypePath + FromReflect + MaybeTyped + RegisterForReflection,
C: TypePath + FromReflect + MaybeTyped + RegisterForReflection,
impl<P, C> FromReflect for AnimatableCurve<P, C>where
AnimatableCurve<P, C>: Any + Send + Sync,
P: TypePath + FromReflect + MaybeTyped + RegisterForReflection,
C: TypePath + FromReflect + MaybeTyped + RegisterForReflection,
Source§fn from_reflect(
reflect: &(dyn PartialReflect + 'static),
) -> Option<AnimatableCurve<P, C>>
fn from_reflect( reflect: &(dyn PartialReflect + 'static), ) -> Option<AnimatableCurve<P, C>>
Constructs a concrete instance of
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>>
Attempts to downcast the given value to
Self using,
constructing the value using from_reflect if that fails. Read moreSource§impl<P, C> GetOwnership for AnimatableCurve<P, C>where
AnimatableCurve<P, C>: Any + Send + Sync,
P: TypePath + PartialReflect + MaybeTyped + RegisterForReflection,
C: TypePath + PartialReflect + MaybeTyped + RegisterForReflection,
impl<P, C> GetOwnership for AnimatableCurve<P, C>where
AnimatableCurve<P, C>: Any + Send + Sync,
P: TypePath + PartialReflect + MaybeTyped + RegisterForReflection,
C: TypePath + PartialReflect + MaybeTyped + RegisterForReflection,
Source§impl<P, C> GetTypeRegistration for AnimatableCurve<P, C>where
AnimatableCurve<P, C>: Any + Send + Sync,
P: TypePath + PartialReflect + MaybeTyped + RegisterForReflection,
C: TypePath + PartialReflect + MaybeTyped + RegisterForReflection,
impl<P, C> GetTypeRegistration for AnimatableCurve<P, C>where
AnimatableCurve<P, C>: Any + Send + Sync,
P: TypePath + PartialReflect + MaybeTyped + RegisterForReflection,
C: TypePath + PartialReflect + MaybeTyped + RegisterForReflection,
Source§fn get_type_registration() -> TypeRegistration
fn get_type_registration() -> TypeRegistration
Returns the default
TypeRegistration for this type.Source§fn register_type_dependencies(registry: &mut TypeRegistry)
fn register_type_dependencies(registry: &mut TypeRegistry)
Registers other types needed by this type. Read more
Source§impl<P, C> IntoReturn for AnimatableCurve<P, C>where
AnimatableCurve<P, C>: Any + Send + Sync,
P: TypePath + PartialReflect + MaybeTyped + RegisterForReflection,
C: TypePath + PartialReflect + MaybeTyped + RegisterForReflection,
impl<P, C> IntoReturn for AnimatableCurve<P, C>where
AnimatableCurve<P, C>: Any + Send + Sync,
P: TypePath + PartialReflect + MaybeTyped + RegisterForReflection,
C: TypePath + PartialReflect + MaybeTyped + RegisterForReflection,
Source§fn into_return<'into_return>(self) -> Return<'into_return>where
AnimatableCurve<P, C>: 'into_return,
fn into_return<'into_return>(self) -> Return<'into_return>where
AnimatableCurve<P, C>: 'into_return,
Source§impl<P, C> PartialReflect for AnimatableCurve<P, C>where
AnimatableCurve<P, C>: Any + Send + Sync,
P: TypePath + PartialReflect + MaybeTyped + RegisterForReflection,
C: TypePath + PartialReflect + MaybeTyped + RegisterForReflection,
impl<P, C> PartialReflect for AnimatableCurve<P, C>where
AnimatableCurve<P, C>: Any + Send + Sync,
P: TypePath + PartialReflect + MaybeTyped + RegisterForReflection,
C: TypePath + PartialReflect + 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
Returns a zero-sized enumeration of “kinds” of type. Read more
Source§fn reflect_ref(&self) -> ReflectRef<'_>
fn reflect_ref(&self) -> ReflectRef<'_>
Returns an immutable enumeration of “kinds” of type. Read more
Source§fn reflect_mut(&mut self) -> ReflectMut<'_>
fn reflect_mut(&mut self) -> ReflectMut<'_>
Returns a mutable enumeration of “kinds” of type. Read more
Source§fn reflect_owned(self: Box<AnimatableCurve<P, C>>) -> ReflectOwned
fn reflect_owned(self: Box<AnimatableCurve<P, C>>) -> ReflectOwned
Returns an owned enumeration of “kinds” of type. Read more
Source§fn try_into_reflect(
self: Box<AnimatableCurve<P, C>>,
) -> Result<Box<dyn Reflect>, Box<dyn PartialReflect>>
fn try_into_reflect( self: Box<AnimatableCurve<P, C>>, ) -> Result<Box<dyn Reflect>, Box<dyn PartialReflect>>
Attempts to cast this type to a boxed, fully-reflected value.
Source§fn try_as_reflect(&self) -> Option<&(dyn Reflect + 'static)>
fn try_as_reflect(&self) -> Option<&(dyn Reflect + 'static)>
Attempts to cast this type to a fully-reflected value.
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)>
Attempts to cast this type to a mutable, fully-reflected value.
Source§fn into_partial_reflect(
self: Box<AnimatableCurve<P, C>>,
) -> Box<dyn PartialReflect>
fn into_partial_reflect( self: Box<AnimatableCurve<P, C>>, ) -> Box<dyn PartialReflect>
Casts this type to a boxed, reflected value. Read more
Source§fn as_partial_reflect(&self) -> &(dyn PartialReflect + 'static)
fn as_partial_reflect(&self) -> &(dyn PartialReflect + 'static)
Casts this type to a reflected value. Read more
Source§fn as_partial_reflect_mut(&mut self) -> &mut (dyn PartialReflect + 'static)
fn as_partial_reflect_mut(&mut self) -> &mut (dyn PartialReflect + 'static)
Casts this type to a mutable, reflected value. Read more
Source§fn reflect_partial_eq(
&self,
value: &(dyn PartialReflect + 'static),
) -> Option<bool>
fn reflect_partial_eq( &self, value: &(dyn PartialReflect + 'static), ) -> Option<bool>
Returns a “partial equality” comparison result. Read more
Source§fn reflect_partial_cmp(
&self,
value: &(dyn PartialReflect + 'static),
) -> Option<Ordering>
fn reflect_partial_cmp( &self, value: &(dyn PartialReflect + 'static), ) -> Option<Ordering>
Returns a “partial comparison” result. Read more
Source§fn reflect_clone(&self) -> Result<Box<dyn Reflect>, ReflectCloneError>
fn reflect_clone(&self) -> Result<Box<dyn Reflect>, ReflectCloneError>
Attempts to clone
Self using reflection. Read moreSource§fn apply(&mut self, value: &(dyn PartialReflect + 'static))
fn apply(&mut self, value: &(dyn PartialReflect + 'static))
Applies a reflected value to this value. Read more
Source§fn to_dynamic(&self) -> Result<Box<dyn PartialReflect>, ReflectCloneError>
fn to_dynamic(&self) -> Result<Box<dyn PartialReflect>, ReflectCloneError>
Source§fn reflect_clone_and_take<T>(&self) -> Result<T, ReflectCloneError>
fn reflect_clone_and_take<T>(&self) -> Result<T, ReflectCloneError>
For a type implementing
PartialReflect, combines reflect_clone and
take in a useful fashion, automatically constructing an appropriate
ReflectCloneError if the downcast fails.Source§fn reflect_hash(&self) -> Option<u64>
fn reflect_hash(&self) -> Option<u64>
Returns a hash of the value (which includes the type). Read more
Source§fn debug(&self, f: &mut Formatter<'_>) -> Result<(), Error>
fn debug(&self, f: &mut Formatter<'_>) -> Result<(), Error>
Debug formatter for the value. Read more
Source§fn is_dynamic(&self) -> bool
fn is_dynamic(&self) -> bool
Indicates whether or not this type is a dynamic type. Read more
Source§impl<P, C> Reflect for AnimatableCurve<P, C>where
AnimatableCurve<P, C>: Any + Send + Sync,
P: TypePath + PartialReflect + MaybeTyped + RegisterForReflection,
C: TypePath + PartialReflect + MaybeTyped + RegisterForReflection,
impl<P, C> Reflect for AnimatableCurve<P, C>where
AnimatableCurve<P, C>: Any + Send + Sync,
P: TypePath + PartialReflect + MaybeTyped + RegisterForReflection,
C: TypePath + PartialReflect + MaybeTyped + RegisterForReflection,
Source§fn into_any(self: Box<AnimatableCurve<P, C>>) -> Box<dyn Any>
fn into_any(self: Box<AnimatableCurve<P, C>>) -> Box<dyn Any>
Returns the value as a
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)
Returns the value as a
&mut dyn Any. Read moreSource§fn into_reflect(self: Box<AnimatableCurve<P, C>>) -> Box<dyn Reflect>
fn into_reflect(self: Box<AnimatableCurve<P, C>>) -> Box<dyn Reflect>
Casts this type to a boxed, fully-reflected value.
Source§fn as_reflect(&self) -> &(dyn Reflect + 'static)
fn as_reflect(&self) -> &(dyn Reflect + 'static)
Casts this type to a fully-reflected value.
Source§fn as_reflect_mut(&mut self) -> &mut (dyn Reflect + 'static)
fn as_reflect_mut(&mut self) -> &mut (dyn Reflect + 'static)
Casts this type to a mutable, fully-reflected value.
Source§impl<P, C> Struct for AnimatableCurve<P, C>where
AnimatableCurve<P, C>: Any + Send + Sync,
P: TypePath + PartialReflect + MaybeTyped + RegisterForReflection,
C: TypePath + PartialReflect + MaybeTyped + RegisterForReflection,
impl<P, C> Struct for AnimatableCurve<P, C>where
AnimatableCurve<P, C>: Any + Send + Sync,
P: TypePath + PartialReflect + MaybeTyped + RegisterForReflection,
C: TypePath + PartialReflect + MaybeTyped + RegisterForReflection,
Source§fn field(&self, name: &str) -> Option<&(dyn PartialReflect + 'static)>
fn field(&self, name: &str) -> Option<&(dyn PartialReflect + 'static)>
Gets a reference to the value of the field named
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)>
Gets a mutable reference to the value of the field named
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)>
Gets a reference to the value of the field with index
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)>
Gets a mutable reference to the value of the field with index
index
as a &mut dyn PartialReflect.Source§fn index_of_name(&self, name: &str) -> Option<usize>
fn index_of_name(&self, name: &str) -> Option<usize>
Gets the index of the field with the given name.
Source§fn iter_fields(&self) -> FieldIter<'_> ⓘ
fn iter_fields(&self) -> FieldIter<'_> ⓘ
Returns an iterator over the values of the reflectable fields for this struct.
Source§fn to_dynamic_struct(&self) -> Result<DynamicStruct, ReflectCloneError>
fn to_dynamic_struct(&self) -> Result<DynamicStruct, ReflectCloneError>
Creates a new
DynamicStruct from this struct. Read moreSource§fn get_represented_struct_info(&self) -> Option<&'static StructInfo>
fn get_represented_struct_info(&self) -> Option<&'static StructInfo>
Will return
None if TypeInfo is not available.Source§impl<P, C> TypePath for AnimatableCurve<P, C>
impl<P, C> TypePath for AnimatableCurve<P, C>
Source§fn type_path() -> &'static str
fn type_path() -> &'static str
Returns the fully qualified path of the underlying type. Read more
Source§fn short_type_path() -> &'static str
fn short_type_path() -> &'static str
Returns a short, pretty-print enabled path to the type. Read more
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<P, C> Typed for AnimatableCurve<P, C>where
AnimatableCurve<P, C>: Any + Send + Sync,
P: TypePath + PartialReflect + MaybeTyped + RegisterForReflection,
C: TypePath + PartialReflect + MaybeTyped + RegisterForReflection,
impl<P, C> Typed for AnimatableCurve<P, C>where
AnimatableCurve<P, C>: Any + Send + Sync,
P: TypePath + PartialReflect + MaybeTyped + RegisterForReflection,
C: TypePath + PartialReflect + MaybeTyped + RegisterForReflection,
Auto Trait Implementations§
impl<P, C> Freeze for AnimatableCurve<P, C>
impl<P, C> RefUnwindSafe for AnimatableCurve<P, C>where
P: RefUnwindSafe,
C: RefUnwindSafe,
impl<P, C> Send for AnimatableCurve<P, C>
impl<P, C> Sync for AnimatableCurve<P, C>
impl<P, C> Unpin for AnimatableCurve<P, C>
impl<P, C> UnsafeUnpin for AnimatableCurve<P, C>where
P: UnsafeUnpin,
C: UnsafeUnpin,
impl<P, C> UnwindSafe for AnimatableCurve<P, C>where
P: UnwindSafe,
C: UnwindSafe,
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
Return the
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
Mutably borrows from an owned value. Read more
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> ConditionalSend for Twhere
T: Send,
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>
Converts
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>
Converts
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)
Converts
&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)
Converts
&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>
Convert
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>
Convert
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)
Convert
&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)
Convert
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
impl<S, T> Duplex<S> for Twhere
T: FromSample<S> + ToSample<S>,
Source§impl<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
See
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>
See
TypePath::type_ident.Source§fn reflect_crate_name(&self) -> Option<&str>
fn reflect_crate_name(&self) -> Option<&str>
See
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
See
Typed::type_info.impl<T> ErasedDestructor for Twhere
T: 'static,
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
Causes
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,
Causes
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,
Causes
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,
Causes
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,
Causes
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,
Causes
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,
Causes
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,
Causes
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<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>>
Returns a reference to the value specified by
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>>
Returns a mutable reference to the value specified by
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,
Returns a statically typed reference to the value specified by
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,
Returns a statically typed mutable reference to the value specified by
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,
impl<T> HitDataExtra for T
Source§impl<T> Identity for Twhere
T: ?Sized,
impl<T> Identity for Twhere
T: ?Sized,
Source§impl<T> InitializeFromFunction<T> for T
impl<T> InitializeFromFunction<T> for T
Source§fn initialize_from_function(f: fn() -> T) -> T
fn initialize_from_function(f: fn() -> T) -> T
Create an instance of this type from an initialization function
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> ⓘ
Converts
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> ⓘ
Converts
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>
Converts this type into the system output type.
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> PatchTemplate for Twhere
T: Template,
impl<T> PatchTemplate for Twhere
T: Template,
Source§fn patch_template<F>(func: F) -> TemplatePatch<F, T>
fn patch_template<F>(func: F) -> TemplatePatch<F, T>
Source§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Pipes by value. This is generally the method you want to use. Read more
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,
Borrows
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,
Mutably borrows
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
Borrows
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
Mutably borrows
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
Borrows
self, then passes self.deref() into the pipe function.impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
impl<T> Reflectable for T
impl<T> Settings for T
Source§impl<Ret> SpawnIfAsync<(), Ret> for Ret
impl<Ret> SpawnIfAsync<(), Ret> for Ret
Source§impl<T, O> SuperFrom<T> for Owhere
O: From<T>,
impl<T, O> SuperFrom<T> for Owhere
O: From<T>,
Source§fn super_from(input: T) -> O
fn super_from(input: T) -> O
Convert from a type to another type.
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
Convert from a type to another type.
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
Immutable access to the
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
Mutable access to the
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
Immutable access to the
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
Mutable access to the
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
Immutable access to the
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
Mutable access to the
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
Calls
.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
Calls
.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
Calls
.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
Calls
.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
Calls
.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
Calls
.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
Calls
.tap_deref() only in debug builds, and is erased in release
builds.Source§impl<T> Template for T
impl<T> Template for T
Source§fn build_template(
&self,
_context: &mut TemplateContext<'_, '_>,
) -> Result<<T as Template>::Output, BevyError>
fn build_template( &self, _context: &mut TemplateContext<'_, '_>, ) -> Result<<T as Template>::Output, BevyError>
Uses this template and the given
entity context to produce a Template::Output.Source§fn clone_template(&self) -> T
fn clone_template(&self) -> T
Clones this template. See
Clone.Source§impl<T, U> ToSample<U> for Twhere
U: FromSample<T>,
impl<T, U> ToSample<U> for Twhere
U: FromSample<T>,
fn to_sample_(self) -> U
Source§impl<T> TypeData for T
impl<T> TypeData for T
Source§fn clone_type_data(&self) -> Box<dyn TypeData>
fn clone_type_data(&self) -> Box<dyn TypeData>
Creates a type-erased clone of
self.