Newer
Older
use bevy::prelude::*;
use bevy::render::camera::ScalingMode;
use micro_banimate::definitions::{create_directional_animation, AnimationSet, AnimationStatus};
use micro_banimate::directionality::{Directionality, Horizontal};
fn main() {
App::new()
.add_plugins(DefaultPlugins)
.add_plugins(micro_banimate::BanimatePluginGroup)
.add_systems(Startup, load_assets)
.add_systems(PostStartup, spawn_assets)
.add_systems(Update, process_input)
.run();
}
#[derive(Default, Resource)]
struct ExampleAssets {
atlas: Handle<TextureAtlasLayout>,
sprites: Handle<Image>,
animations: Handle<AnimationSet>,
}
fn load_assets(
mut commands: Commands,
assets: Res<AssetServer>,
let sprites = assets.load("character.png");
let atlas = atlas.add(TextureAtlasLayout::from_grid(
10,
6,
None,
None,
));
let anim_handle = assets.load("character.anim.json");
commands.insert_resource(ExampleAssets {
animations: anim_handle,
});
}
fn spawn_assets(mut commands: Commands, assets: Res<ExampleAssets>) {
const WIDTH: f32 = 480.0;
const HEIGHT: f32 = 320.0;
commands.spawn((
Sprite::from_atlas_image(
assets.sprites.clone_weak(),
TextureAtlas {
layout: assets.atlas.clone_weak(),
index: 0,
},
create_directional_animation(assets.animations.clone_weak(), "idle"),
Directionality::Right,
commands.spawn((
Camera2d::default(),
OrthographicProjection {
area: Rect::new(-(WIDTH / 2.0), -(HEIGHT / 2.0), WIDTH / 2.0, HEIGHT / 2.0),
scaling_mode: ScalingMode::AutoMin {
min_height: HEIGHT,
min_width: WIDTH,
},
far: 1000.,
near: -1000.,
..OrthographicProjection::default_2d()
}
fn process_input(
mut status_query: Query<(&mut AnimationStatus, &mut Directionality)>,
) {
for (mut status, mut direction) in &mut status_query {
direction.with_horizontal(Horizontal::Left);
}
direction.with_horizontal(Horizontal::Right);
}
status.start_or_continue("idle");
}