1111//! - [`AngleZ`]
1212//! - [`SpriteColor`]
1313//! - [`ColorMaterial`]
14+ //! - All their delta variants (such as [`TranslationDelta`])
1415//!
1516//! # Your own [`Interpolator`]
1617//!
4546//! type Item = Foo;
4647//!
4748//! // Then we define how we want to interpolate `Foo`
48- //! fn interpolate(&self, item: &mut Self::Item, value: f32) {
49+ //! fn interpolate(&self, item: &mut Self::Item, value: f32, _previous_value: f32 ) {
4950//! // Usually if the type already have the `.lerp` function provided
5051//! // by the `FloatExt` trait then we can use just that
5152//! item.0 = self.start.lerp(self.end, value);
@@ -90,13 +91,13 @@ use bevy::prelude::*;
9091/// Alias for an `Interpolator` as a boxed trait object.
9192pub type BoxedInterpolator < Item > = Box < dyn Interpolator < Item = Item > > ;
9293
93- type InterpolatorClosure < I > = Box < dyn Fn ( & mut I , f32 ) + Send + Sync + ' static > ;
94+ type InterpolatorClosure < I > = Box < dyn Fn ( & mut I , f32 , f32 ) + Send + Sync + ' static > ;
9495
9596/// Create boxed closure in order to be used with dynamic [`Interpolator`]
9697pub fn closure < I , F > ( f : F ) -> InterpolatorClosure < I >
9798where
9899 I : ' static ,
99- F : Fn ( & mut I , f32 ) + Send + Sync + ' static ,
100+ F : Fn ( & mut I , f32 , f32 ) + Send + Sync + ' static ,
100101{
101102 Box :: new ( f)
102103}
@@ -115,7 +116,7 @@ pub trait Interpolator: Send + Sync + 'static {
115116 /// The value should be already sampled from an [`Interpolation`]
116117 ///
117118 /// [`Interpolation`]: crate::interpolation::Interpolation
118- fn interpolate ( & self , item : & mut Self :: Item , value : f32 ) ;
119+ fn interpolate ( & self , item : & mut Self :: Item , value : f32 , previous_value : f32 ) ;
119120}
120121
121122// /// Reflect [`Interpolator`] trait
@@ -197,7 +198,7 @@ pub trait Interpolator: Send + Sync + 'static {
197198
198199/// Default interpolators
199200///
200- /// Register type and systems for the following interpolators:
201+ /// Register type and systems for the following interpolators and their delta interpolators :
201202/// - [`Translation`]
202203/// - [`Rotation`]
203204/// - [`Scale`]
@@ -217,29 +218,47 @@ impl Plugin for DefaultInterpolatorsPlugin {
217218 tween:: component_tween_system :: < Rotation > ( ) ,
218219 tween:: component_tween_system :: < Scale > ( ) ,
219220 tween:: component_tween_system :: < AngleZ > ( ) ,
221+ tween:: component_tween_system :: < TranslationDelta > ( ) ,
222+ tween:: component_tween_system :: < RotationDelta > ( ) ,
223+ tween:: component_tween_system :: < ScaleDelta > ( ) ,
224+ tween:: component_tween_system :: < AngleZDelta > ( )
220225 ) )
221226 . register_type :: < tween:: ComponentTween < Translation > > ( )
222227 . register_type :: < tween:: ComponentTween < Rotation > > ( )
223228 . register_type :: < tween:: ComponentTween < Scale > > ( )
224- . register_type :: < tween:: ComponentTween < AngleZ > > ( ) ;
229+ . register_type :: < tween:: ComponentTween < AngleZ > > ( )
230+ . register_type :: < tween:: ComponentTween < TranslationDelta > > ( )
231+ . register_type :: < tween:: ComponentTween < RotationDelta > > ( )
232+ . register_type :: < tween:: ComponentTween < ScaleDelta > > ( )
233+ . register_type :: < tween:: ComponentTween < AngleZDelta > > ( ) ;
225234
226235 #[ cfg( feature = "bevy_sprite" ) ]
227- app. add_tween_systems ( tween:: component_tween_system :: < SpriteColor > ( ) )
228- . register_type :: < tween:: ComponentTween < SpriteColor > > ( ) ;
236+ app. add_tween_systems ( (
237+ tween:: component_tween_system :: < SpriteColor > ( ) ,
238+ tween:: component_tween_system :: < SpriteColorDelta > ( ) ,
239+ ) )
240+ . register_type :: < tween:: ComponentTween < SpriteColor > > ( )
241+ . register_type :: < tween:: ComponentTween < SpriteColorDelta > > ( ) ;
229242
230243 #[ cfg( feature = "bevy_ui" ) ]
231244 app. add_tween_systems ( (
232245 tween:: component_tween_system :: < ui:: BackgroundColor > ( ) ,
233246 tween:: component_tween_system :: < ui:: BorderColor > ( ) ,
247+ tween:: component_tween_system :: < BackgroundColorDelta > ( ) ,
248+ tween:: component_tween_system :: < BorderColorDelta > ( ) ,
234249 ) )
235- . register_type :: < tween:: ComponentTween < ui:: BackgroundColor > > ( )
236- . register_type :: < tween:: ComponentTween < ui:: BorderColor > > ( ) ;
250+ . register_type :: < tween:: ComponentTween < ui:: BackgroundColor > > ( )
251+ . register_type :: < tween:: ComponentTween < ui:: BorderColor > > ( )
252+ . register_type :: < tween:: ComponentTween < BackgroundColorDelta > > ( )
253+ . register_type :: < tween:: ComponentTween < BorderColorDelta > > ( ) ;
237254
238255 #[ cfg( all( feature = "bevy_sprite" , feature = "bevy_asset" , ) ) ]
239- app. add_tween_systems (
256+ app. add_tween_systems ( (
240257 tween:: asset_tween_system :: < sprite:: ColorMaterial > ( ) ,
241- )
242- . register_type :: < tween:: AssetTween < sprite:: ColorMaterial > > ( ) ;
258+ tween:: asset_tween_system :: < ColorMaterialDelta > ( ) ,
259+ ) )
260+ . register_type :: < tween:: AssetTween < sprite:: ColorMaterial > > ( )
261+ . register_type :: < tween:: ComponentTween < ColorMaterialDelta > > ( ) ;
243262 }
244263}
245264
0 commit comments