Player can move and has a sprite
This commit is contained in:
54
src/main.rs
54
src/main.rs
@@ -114,6 +114,10 @@ fn levelload(
|
|||||||
let parsnip = assets.load("parsnip.png");
|
let parsnip = assets.load("parsnip.png");
|
||||||
// create map from lvl data
|
// create map from lvl data
|
||||||
|
|
||||||
|
let flowerguy = assets.load("flowerfriend.png");
|
||||||
|
let fl_ta_layout = TextureAtlasLayout::from_grid(uvec2(16, 16), 5, 1, None, None);
|
||||||
|
let fl_ta_handle = ta_layouts.add(fl_ta_layout);
|
||||||
|
|
||||||
let lvl = &lvl.ldtk_proj.levels[0];
|
let lvl = &lvl.ldtk_proj.levels[0];
|
||||||
|
|
||||||
let mut lyr_dep = 50f32;
|
let mut lyr_dep = 50f32;
|
||||||
@@ -153,9 +157,18 @@ fn levelload(
|
|||||||
));
|
));
|
||||||
match ei.identifier.as_str() {
|
match ei.identifier.as_str() {
|
||||||
"Player" => {
|
"Player" => {
|
||||||
spawned_ent.insert(Player {});
|
spawned_ent.insert(Player::default());
|
||||||
spawned_ent.insert(PhysicsBody2D { pos, ..default() });
|
spawned_ent.insert(PhysicsBody2D {
|
||||||
spawned_ent.insert(Sprite::from_color(Color::WHITE, vec2(16., 16.)));
|
pos: pos * UNITS_TO_PX_SCALE,
|
||||||
|
..default()
|
||||||
|
});
|
||||||
|
spawned_ent.insert(Sprite::from_atlas_image(
|
||||||
|
flowerguy.clone(),
|
||||||
|
TextureAtlas {
|
||||||
|
layout: fl_ta_handle.clone(),
|
||||||
|
index: 0,
|
||||||
|
},
|
||||||
|
));
|
||||||
}
|
}
|
||||||
"Parsnip" => {
|
"Parsnip" => {
|
||||||
spawned_ent.insert(Sprite::from_image(parsnip.clone()));
|
spawned_ent.insert(Sprite::from_image(parsnip.clone()));
|
||||||
@@ -173,7 +186,8 @@ fn levelload(
|
|||||||
|
|
||||||
fn gameloop(
|
fn gameloop(
|
||||||
keyb: Res<ButtonInput<KeyCode>>,
|
keyb: Res<ButtonInput<KeyCode>>,
|
||||||
mut player_sing: Single<(&mut PhysicsBody2D, &mut Transform), With<Player>>,
|
mut player_sing: Single<(&mut PhysicsBody2D, &mut Transform, &mut Player, &mut Sprite)>,
|
||||||
|
time: Res<Time>,
|
||||||
) {
|
) {
|
||||||
let mut dir = I64Vec2::ZERO;
|
let mut dir = I64Vec2::ZERO;
|
||||||
|
|
||||||
@@ -207,8 +221,36 @@ fn gameloop(
|
|||||||
play_phys.tick();
|
play_phys.tick();
|
||||||
|
|
||||||
*player_sing.1 = Transform::from_xyz(
|
*player_sing.1 = Transform::from_xyz(
|
||||||
(play_phys.pos.x as f32) / UNITS_TO_PX_SCALE as f32,
|
(play_phys.pos.x / UNITS_TO_PX_SCALE) as f32,
|
||||||
(play_phys.pos.y as f32) / UNITS_TO_PX_SCALE as f32,
|
(play_phys.pos.y / UNITS_TO_PX_SCALE) as f32,
|
||||||
100.,
|
100.,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
let plyr = player_sing.2.as_mut();
|
||||||
|
|
||||||
|
if time.elapsed_secs_f64() - plyr.last_frame > 0.1 {
|
||||||
|
plyr.last_frame = time.elapsed_secs_f64();
|
||||||
|
|
||||||
|
if dir.length_squared() > 0 {
|
||||||
|
plyr.anim_index = (plyr.anim_index + 1) % 5;
|
||||||
|
} else {
|
||||||
|
plyr.anim_index = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if dir.x > 0 {
|
||||||
|
plyr.flip = true;
|
||||||
|
} else if dir.x < 0 {
|
||||||
|
plyr.flip = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
let flip = plyr.flip;
|
||||||
|
let anim_index = plyr.anim_index;
|
||||||
|
let spr = player_sing.3.as_mut();
|
||||||
|
|
||||||
|
spr.flip_x = flip;
|
||||||
|
|
||||||
|
if let Some(atlas) = &mut spr.texture_atlas {
|
||||||
|
atlas.index = anim_index;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,8 @@
|
|||||||
use bevy::ecs::component::Component;
|
use bevy::ecs::component::Component;
|
||||||
|
|
||||||
#[derive(Default, Debug, Component)]
|
#[derive(Default, Debug, Component)]
|
||||||
pub struct Player {}
|
pub struct Player {
|
||||||
|
pub last_frame: f64,
|
||||||
|
pub anim_index: usize,
|
||||||
|
pub flip: bool,
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user