The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Compatible with Bevy 0.14
Lens::lerp()
now takes a&mut dyn Targetable<T>
instead of&mut T
. This ensures the lens can skip change detection if needed.Targetable<T>
conceptually acts like aMut<T>
, but allows encapsulating assets too. There should be no other change than the function signature to upgrade custom lenses, becausedyn Targetable<T>
now implementsDefer
andDeferMut
, so can be used in place of&mut T
.AssetTarget::new()
now takes a simpleMut<Assets<T>>
instead ofResMut<Assets<T>>
.
- Fixed change detection such that lenses which do not dereference their target do not unconditionally mark that target (component or asset) as changed from the point of view of ECS. (#91)
- Added
Targetable::target(&self) -> &T
. dyn Targetable<T>
now implementsDefer
andDeferMut
, so can be used in place of&T
and&mut T
.- Added
ComponentTarget::to_mut(&mut self) -> Mut<'_, T>
to "reborrow" the component target as aMut<T>
.
- Compatible with Bevy 0.13
- Compatible with Bevy 0.12
- The
AssetAnimator<T>
doesn't take anyHandle<T>
anymore; instead theasset_animator_system::<T>()
retrieves the handle of the asset to animate from the sameEntity
theAssetAnimator<T>
is attached to. This aligns the behavior with component animation. (#101)
- Fixed a panic when a
TextLens
tried to change a text section that wasn't present.
- Added built-in support for the
BackgroundColor
bevy component, under thebevy_ui
feature.
- Compatible with Bevy 0.11
- Added
From<u32>
andFrom<Duration>
forRepeatCount
, respectively yieldingRepeatCount::Finite(value)
andRepeatCount::For(value)
.
- Compatible with Bevy 0.10
- Changed the signature of
with_repeat_count()
to take animpl Into<RepeatCount>
instead of aRepeatCount
by value.
- Added
RepeatCount
andRepeatStrategy
for more granular control over animation looping. - Added
with_repeat_count()
andwith_repeat_strategy()
builder methods toTween<T>
. - Added a
speed()
getter onAnimator<T>
andAssetAnimator<T>
. - Added
set_elapsed(Duration)
andelapsed() -> Duration
to theTweenable<T>
trait. Those methods are preferable overset_progress()
andprogress()
as they avoid the conversion to floating-point values and any rounding errors. - Added a new
bevy_text
feature forText
-related built-in lenses. - Added
Targetable
,ComponentTarget
, andAssetTarget
, which should be considered private even though they appear in the public API. They are a workaround for Bevy 0.8 and will likely be removed in the future once the related Bevy limitation is lifted. - Added the missing
Tween::with_completed()
to raise a callback. - Added completion event and callback support to
Delay<T>
, similar to what existed forTween<T>
. - Added
TotalDuration
and a newTweenable<T>::total_duration()
method to retrieve the total duration of the animation including looping.
- Compatible with Bevy 0.9
- Removed the
tweening_type
parameter from the signature ofTween<T>::new()
; usewith_repeat_count()
andwith_repeat_strategy()
instead. - Animators now always have a tween (instead of it being optional). This means the default animator implementation was removed.
Delay::new()
now panics if theduration
is zero. This prevents creating no-opDelay
objects, and avoids an internal edge case producing wrong results.- Tweens moving to
TweenState::Completed
are now guaranteed to freeze their state. In particular, this means that their direction will not flip at the end of the last loop if their repeat strategy isRepeatStrategy::MirroredRepeat
. - Moved the
TextColorLens
lens from thebevy_ui
feature to the newbevy_text
one, to allow using it without the Bevy UI crate. - Changed the signature of the
component_animator_system()
andasset_animator_system()
public functions to directly consume aResMut<Events<TweenCompleted>>
instead of anEventWriter<TweenCompleted>
, to work around some internal limitations. - Changed
Delay
intoDelay<T>
, taking the animation target type like other tweenables, to be able to emit events and raise callbacks. - Changed
CompletedCallback<T>
to take the tweenable type itself, instead of the target type. Users upgrading should replaceCompletedCallback<T>
withCompletedCallback<Tween<T>>
. - The
set_progress()
,progress()
, andtimes_completed()
method ofTweenable<T>
now have a default implementation, and all built-in tweenables use that implementation.
- Removed
Tweenable::is_looping()
, which was not implemented for most tweenables. - Removed
TweeningType
in favor ofRepeatCount
andRepeatStrategy
.
- Fixed the animator speed feature, which got broken in #44.
- Fixed change detection triggering unconditionally when
component_animator_system()
orasset_animator_system()
are ticked, even when the animator did not mutate its target component or asset. (#33)
- Added
is_forward()
andis_backward()
convenience helpers toTweeningDirection
. - Added
Tween::set_direction()
andTween::with_direction()
which allow configuring the playback direction of a tween, allowing to play it backward from end to start. - Added support for dynamically changing an animation's speed with
Animator::set_speed
. - Added
AnimationSystem
label to tweening tick systems. - Added a
BoxedTweenable
trait to make working withBox<dyn Tweenable + ...>
easier.
- Compatible with Bevy 0.8
- Double boxing in
Sequence
andTracks
was fixed. As a result, any custom tweenables should implementFrom
forBoxedTweenable
to make those APIs easier to use.
- Compatible with Bevy 0.7
- Better dependencies: Introduced features
bevy_sprite
andbevy_ui
taking a dependency on the same-named crates of Bevy, and removed the forced dependency onbevy/render
. The new features are enabled by default, for discoverability, and only impact the prebuilt lenses. The library now builds without any Bevy optional feature.
- Added new built-in rotation lenses based on angle interpolation, to allow rotation animations larger than a half turn:
TransformRotateXLens
TransformRotateYLens
TransformRotateZLens
TransformRotateAxisLens
- Implemented
Default
forTweeningType
(=Once
),EaseMethod
(=Linear
),TweeningDirection
(=Forward
). - Added
Tweenable::is_looping()
,Tweenable::set_progress()
,Tweenable::times_completed()
, andTweenable::rewind()
. - Added
Animator::set_progress()
,Animator::progress()
,Animator::stop()
, andAnimator::rewind()
. - Added
AssetAnimator::set_progress()
,AssetAnimator::progress()
,AssetAnimator::stop()
, andAssetAnimator::rewind()
. - Added the
TweenCompleted
event, raised when aTween<T>
completed its animation if that feature was previously activated withset_completed_event()
orwith_completed_event()
.
TweenState
now contains only two states:Active
andCompleted
. Looping animations are always active, and non-looping ones are completed once they reach their end point.- Merged the
started
andended
callbacks into acompleted
one (Tween::set_completed()
andTween::clear_completed()
), which is invoked when the tween completes a single iteration. That is, for non-looping animations, whenTweenState::Completed
is reached. And for looping animations, once per iteration (going from start -> end, or from end -> start).
- Removed
Tweenable::stop()
. Tweenables do not have a "stop" state anymore, they are only either active or completed. The playback state is only relevant on theAnimator
orAssetAnimator
which controls them.
- Fixed a bug with the alpha value of colored lenses being too large (
TextColorLens
,SpriteColorLens
,ColorMaterialColorLens
).
- Add user callbacks on tween started (
Tween::set_started
) and ended (Tween::set_ended
). - Implement
Default
forAnimatorState
asAnimatorState::Playing
. - Added
Animator::with_state()
andAssetAnimator::with_state()
, builder-like functions to override the defaultAnimatorState
. - Added
Tween::is_looping()
returning true for all butTweeningType::Once
. - Added the
Tweenable<T>
trait, implemented by theTween<T>
andDelay<T>
animation, and by theTracks<T>
andSequence<T>
animation collections. - Added
IntoBoxDynTweenable<T>
, a trait to convert aTweenable<T>
trait object into a boxed variant. - Publicly exposed
Sequence<T>
, a sequence ofTweenable<T>
running one after the other. - Publicly exposed
Tracks<T>
, a collection ofTweenable<T>
running in parallel. - Publicly exposed
TweenState
, the playback state of a singleTweenable<T>
item. - Added
Tween<T>::then()
andSequence<T>::then()
to append aTweenable<T>
to a sequence (creating a new sequence in the case ofTween<T>::then()
). - Added
tweenable()
andtweenable_mut()
on theAnimator<T>
andAssetAnimator<T>
to access their top-levelTweenable<T>
. - Implemented
Default
forAnimator<T>
andAssetAnimator<T>
, creating an animator without any tweenable item (no-op). - Added
Delay
tweenable for a time delay between other tweens. - Added a new
menu
example demonstrating in particular theDelay
tweenable.
- Moved tween duration out of the
TweeningType
enum, which combined with the removal of the "pause" feature in loops makes it a C-like enum. - The
Sequence<T>
progress now reports the progress of the total sequence. Individual sub-tweenables cannot be accessed. - Updated the
sequence
example to add some text showing the current sequence progress. - Modified the signature of
new()
forAnimator<T>
andAssetAnimator<T>
to take a singleTweenable<T>
instead of trying to build aTween<T>
internally. This allows passing anyTweenable<T>
as the top-level animatable item of an animator, and avoids the overhead of maintaining aTracks<T>
internally in each animator when the most common use case is likely to use a singleTween<T>
or aSequence<T>
without parallelism.
- Removed the "pause" feature in-between loops of
TweeningType::Loop
andTweeningType::PingPong
, which can be replaced if needed by a sequence including aDelay
tweenable. RemovedTween::is_paused()
. - Removed
new_single()
andnew_seq()
on theAnimator<T>
andAssetAnimator<T>
. Users should explicitly create aTween<T>
orSequence<T>
instead, and usenew()
.
- Fix missing public export of
component_animator_system()
andasset_animator_system()
preventing the animation of all but the built-in items.
- Add
Tween<T>
describing a single tween animation, independently of its target (asset or component). - Add
Tween<T>::is_paused()
to query when a tweening animation is in its pause phase, if any. - Add
Tween<T>::direction()
to query the playback direction of a tweening animation (forward or backward). - Add
Tween<T>::progress()
to query the progres ratio in [0:1] of a tweening animation. - Enable multiple lenses per animator via "tracks", the ability to add multiple tween animations running in parallel on the same component.
- Enable sequences of tween animations running serially, one after the other, for each track of an animator, allowing to create more complex animations.
- Perform spherical linear interpolation (slerp) for
Quat
rotation ofTransform
animation viaTransformRotationLens
, instead of mere linear interpolation leaving the quaternion non-normalized.
- Update to Bevy 0.6
- Update to rust edition 2021
- Force Cargo resolver v2
- Added built-in lens
SpriteColorLens
, since the color of aSprite
is now an intrinsic property of the component in Bevy 0.6, and does not useColorMaterial
anymore.
Initial version for Bevy 0.5