MCPcopy Index your code
hub / github.com/Multirious/bevy_tween

github.com/Multirious/bevy_tween @v0.13.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.13.0 ↗ · + Follow
316 symbols 637 edges 31 files 132 documented · 42%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Crates.io Version Crates.io License Docs.rs

bevy_tween

Bevy procedural and keyframe animation library.

This is a young plugin and APIs are to be fleshed out. Breaking changes are to be expected!

See changelog here.

Features

  • Ergonomic and user-friendly API: This crate provides functional animation framework, inspired by nom and other functional languages, which allows for declarative animation.

Example

rust let sprite_id = commands.spawn(Sprite { ... }).id(); let sprite = sprite_id.into_target(); commands.animation() .insert(tween( Duration::from_secs(1), EaseKind::Linear, sprite.with(translation(pos0, pos1)) ));

Many functional techniques are available such as decoupling and composition. ```rust fn my_animation( target: TargetComponent, duration: Duration ) -> impl FnOnce(&mut AnimationCommands, &mut Duration) { parallel(( tween(duration, EaseKind::QuadraticOut, target.with(translation(...))), tween(duration, EaseKind::QuadraticOut, target.with(rotation(...))), )) }

let sprite_id = commands.spawn(Sprite { ... }).id(); let sprite = sprite_id.into_target(); commands.animation().insert(my_animation(sprite, Duration::from_secs(1))) ```

  • Flexible and Extensible: This crate is built on top of bevy_time_runner which mean we can extend this crate by adding any components and systems.
  • Tween anything from anywhere, built-in or custom system.
  • Interpolate with any curve, built-in or custom system.
  • Anything else.

  • Parallelism: Tweens are typed and can be query over by their typed system which increase chances for system parallelism.

  • Rich timer control:
  • Looping
  • Time scaling
  • Skip backward or forward
  • Jumping to anywhen

See demos

Goals: - [x] Flexible 🎉 - integration with other crates (?) - [ ] bevy_animation - [x] bevy_lookup_curve - [ ] Editor. While the original goal for this crate is tweening from code, this crate absolutely has the capability to work on any complex animations. The editor will aid in such jobs. - Real-time display at any point in time in the animation. - Editing path from point A to point B with arbitary curve.

Differences and how it works

This crate chose a different approach to storing tween data/input to solve flexibility issues present in bevy_tweening or bevy_easings, like difficulty tweening in parallel or sequence of multiple types.

This approach offers: - As mentioned above, capability to tween in parallel, sequence, or overlapping of any types. - Extendability. And not just for tweening. For example, this crate adds a custom event plugin that can emit arbitrary events anytime in the animation by just building off the same system.

How it works: 1. By building on top of bevy_time_runner, an animator is a tree of entities. 2. The parent is TimeRunner. This entity handles all the timing and progress of its children. 3. The children can be any combination of any components, such as tweens by this crate. 4. Systems are then run in a pipeline, communicating through various dependency-injected components.

Feature gates

  • Defaults
  • bevy_asset

    Add tweening systems for asset. - bevy_render

    Currently add nothing but required by the bevy_sprite feature. - bevy_sprite

    Add some built-in interpolators related to sprite. - bevy_ui

    Add some built-in interpolators related to ui. - Optional - bevy_lookup_curve.

    Adds interpolation implementation using bevy_lookup_curve.

Bevy Version Support

bevy bevy_tween
0.19 0.13
0.18 0.12
0.17 0.10–0.11
0.16 0.8–0.9
0.15 0.7
0.14 0.6
0.13 0.2–0.5

Credits

The first crate that I've learned and improve this crate upon.

There are one common pattern in Godot to uses Node as composition interface which inspired how bevy_time_runner works.

nom provides function parser combinator framework that inspried this crate's animation framework.

Contributions

Contributions are welcome!

License

Licensed under either of

  • Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
  • MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)

at your option.

Your contributions

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Demos

cargo run --example follow -F bevy/bevy_winit

A square will follow your circle with configurable animation.

https://github.com/Multirious/bevy_tween/assets/77918086/d582c2de-0f54-4b22-be03-e3bff3348deb


cargo run --example click -F bevy/bevy_winit

Click left to spawn a circle. Hold right click to repetitively spawn a circle every frame.

https://github.com/Multirious/bevy_tween/assets/77918086/fd0fe9d3-13a2-4261-880c-cc2609b875ba


cargo run --example hold -F bevy/bevy_winit

Hold left click to increase the effect intensitiy.

https://github.com/Multirious/bevy_tween/assets/77918086/33a297a6-19f2-4146-a906-1a88ff037ab3


cargo run --example event -F bevy/bevy_winit

Showcasing the tween event feature.

https://github.com/Multirious/bevy_tween/assets/77918086/9507c467-6428-4aed-bd00-511f05e6e951


cargo run --example sprite_sheet -F bevy/bevy_winit

Sprite Sheet animation.

https://github.com/Multirious/bevy_tween/assets/77918086/e3997b06-38e6-4add-85f5-a885b69c6687

Extension points exported contracts — how you extend this code

Interpolator (Interface)
[`Interpolator`] is used to specify how to interpolate an [`Self::Item`] by the implementor. Currently only used for re [16 …
src/interpolate.rs
IntoTarget (Interface)
Trait for type to convert into a target type. [13 implementers]
src/tween.rs
AnimationBuilderExt (Interface)
Extension trait for types that can be used to make an animation. [3 implementers]
src/combinator.rs
Interpolation (Interface)
A trait for implementing interpolation algorithms. Currently only used for registering [`sample_interpolations_system`] [2 …
src/interpolation.rs
BevyTweenRegisterSystems (Interface)
Helper trait to add systems by this crate to your app for different schedules [1 implementers]
src/lib.rs
TransformTargetStateExt (Interface)
Extension trait to create [`TransformTargetState`] [1 implementers]
src/combinator/state.rs
Sequence (Interface)
(no doc) [1 implementers]
src/combinator/animation_combinators.rs
Parallel (Interface)
(no doc) [1 implementers]
src/combinator/animation_combinators.rs

Core symbols most depended-on inside this repo

spawn
called by 58
src/combinator.rs
with
called by 48
src/tween.rs
secs
called by 42
examples/animation/banner_bounce.rs
clone
called by 30
src/tween.rs
tween_exact
called by 23
src/combinator/animation_combinators.rs
insert
called by 22
src/combinator.rs
into_target
called by 22
src/tween.rs
animation
called by 20
src/combinator.rs

Shape

Function 163
Method 86
Class 51
Interface 10
Enum 6

Languages

Rust100%

Modules by API surface

src/interpolation.rs52 symbols
src/tween.rs26 symbols
src/combinator.rs22 symbols
src/interpolate/transform.rs21 symbols
src/combinator/state.rs21 symbols
src/combinator/animation_combinators.rs16 symbols
src/tween/systems.rs15 symbols
examples/demo/hold.rs14 symbols
src/tween_event.rs11 symbols
examples/interpolator.rs10 symbols
src/lib.rs9 symbols
src/interpolate/ui.rs9 symbols

For agents

$ claude mcp add bevy_tween \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact