use std::time::Duration;
use bevy::prelude::*;
use keyframe_animate::prelude::*;
fn main() {
App::new()
.add_plugins(DefaultPlugins)
.add_plugin(KeyframeAnimationPlugin)
.add_startup_system(spawn)
.run();
}
fn spawn(
mut commands: Commands,
asset_server: Res<AssetServer>,
mut textures: ResMut<Assets<TextureAtlas>>,
) {
commands.spawn_bundle(OrthographicCameraBundle::new_2d());
let coin = Name::new("coin");
let mut animation = KeyframeAnimationClip::default();
let duration = Duration::from_millis(100).as_secs_f32();
animation.add_curve_to_path(
KeyframeEntityPath {
parts: vec![coin.clone()],
},
KeyframeVariableCurve {
keyframe_timestamps: vec![0.0, duration, duration * 2., 3. * duration, 4. * duration],
keyframes: Keyframe::index(vec![0, 1, 2, 3, 4]),
options: Some(vec!["index".to_string()]),
},
);
let mut player = KeyframeAnimationPlayer::new(animation);
player.repeat();
commands
.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_bundle((coin, player));
}