Benimator
A sprite sheet animation plugin for bevy
Features
- A
SpriteSheetAnimation
component to automatically update the indices of theTextureAtlasSprite
in the same entity - Animation modes:
Repeat
orOnce
- An animation is playing if, and only if, a
Play
component is present in the entity- Simply remove/insert the
Play
component to pause/resume an animation
- Simply remove/insert the
- The animation can be defined from an index-range, or an arbitrary list of indices
- Each frame may have a different duration
Usage
fn main() {
App::build()
.add_plugins(DefaultPlugins)
.add_plugin(AnimationPlugin) // <-- Add the plugin
.add_startup_system(spawn.system())
.run();
}
fn spawn(
mut commands: Commands,
asset_server: Res<AssetServer>,
mut textures: ResMut<Assets<TextureAtlas>>,
mut animations: ResMut<Assets<SpriteSheetAnimation>>,
) {
// Don't forget the camera ;-)
commands.spawn_bundle(OrthographicCameraBundle::new_2d());
// Create an animation
// Here we use an index-range (from 0 to 4) where each frame has the same duration
let animation_handle = animations.add(SpriteSheetAnimation::from_range(
0..=4,
Duration::from_millis(100),
));
commands
// Spawn a bevy sprite-sheet
.spawn_bundle(SpriteSheetBundle {
texture_atlas: textures.add(TextureAtlas::from_grid(asset_server.load("coin.png"), Vec2::new(16.0, 16.0), 5, 1)),
transform: Transform::from_scale(Vec3::splat(10.0)),
..Default::default()
})
// Insert the asset handle of the animation
.insert(animation_handle)
// Start the animation immediately. Remove this component in order to pause the animation.
.insert(Play);
}
Here is the result:
(Asset by La Red Games - CC0)
For more details see the documentation
Installation
Add to Cargo.toml
:
benimator = "0.3.1"
Cargo features
warnings
(enabled by default). Log warnings in case of incorrect usage detected.
Bevy Version Compatibility
bevy | benimator |
---|---|
0.5 | >= 0.1 |
Contribute / Contact
Issues, pull requests are welcome.
It is possible to directly discuss with me (Jomag#2675
) via the bevy discord
License
Licensed under either of
- The Unlicense (UNLICENSE or https://opensource.org/licenses/Unlicense)
- MIT License (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.