Skip to content

Commit

Permalink
feat: support player animation
Browse files Browse the repository at this point in the history
  • Loading branch information
ShenMian committed Jan 18, 2024
1 parent 0fe9537 commit 90d5cdf
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 24 deletions.
Binary file modified assets/textures/spritesheet-full.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/textures/spritesheet-full.png.kra
Binary file not shown.
20 changes: 10 additions & 10 deletions src/systems/level.rs
Original file line number Diff line number Diff line change
Expand Up @@ -53,13 +53,13 @@ pub fn spawn_board(
let database = database.lock().unwrap();
let level = database.get_level_by_id(**level_id).unwrap();

let spritesheet_handle = asset_server.load("textures/spritesheet.png");
let spritesheet_handle = asset_server.load("textures/spritesheet-full.png");
let tile_size = Vector2::new(128.0, 128.0);
let texture_atlas = TextureAtlas::from_grid(
spritesheet_handle,
Vec2::new(tile_size.x, tile_size.y),
4,
2,
13,
8,
None,
None,
);
Expand Down Expand Up @@ -88,19 +88,19 @@ pub fn spawn_board(
continue;
}
let tiles = HashMap::from([
(Tile::Floor, 0),
(Tile::Wall, 1),
(Tile::Crate, 2),
(Tile::Target, 3),
(Tile::Player, 6),
(Tile::Floor, (89, 0.0)),
(Tile::Wall, (84, 1.0)),
(Tile::Crate, (1, 2.0)),
(Tile::Target, (39, 3.0)),
(Tile::Player, (0, 4.0)),
]);
for (tile, sprite_index) in tiles.into_iter() {
for (tile, (sprite_index, z_order)) in tiles.into_iter() {
if level.get_unchecked(&position).intersects(tile) {
let mut entity = parent.spawn((
SpriteSheetBundle {
texture_atlas: texture_atlas_handle.clone(),
sprite: TextureAtlasSprite::new(sprite_index),
transform: Transform::from_xyz(0.0, 0.0, sprite_index as f32),
transform: Transform::from_xyz(0.0, 0.0, z_order),
..default()
},
GridPosition(position),
Expand Down
45 changes: 31 additions & 14 deletions src/systems/render.rs
Original file line number Diff line number Diff line change
Expand Up @@ -44,18 +44,35 @@ pub fn animate_player(
// TODO: 仅进行推动撤回时角色的朝向正确, 但看上去有点怪. 支持操作撤回应该可以解决该问题
let direction = board.player_facing_direction();

let face_up = benimator::Animation::from_indices([4], benimator::FrameRate::from_fps(1.0));
let face_down = benimator::Animation::from_indices([6], benimator::FrameRate::from_fps(1.0));
let face_left = benimator::Animation::from_indices([7], benimator::FrameRate::from_fps(1.0));
let face_right = benimator::Animation::from_indices([5], benimator::FrameRate::from_fps(1.0));
let animation = match direction {
Direction::Up => face_up,
Direction::Right => face_right,
Direction::Down => face_down,
Direction::Left => face_left,
};

if player_movement.directions.is_empty() {}
let face_up = benimator::Animation::from_indices([55], benimator::FrameRate::from_fps(1.0));
let face_down = benimator::Animation::from_indices([52], benimator::FrameRate::from_fps(1.0));
let face_left = benimator::Animation::from_indices([81], benimator::FrameRate::from_fps(1.0));
let face_right = benimator::Animation::from_indices([78], benimator::FrameRate::from_fps(1.0));

let move_up = benimator::Animation::from_indices(55..=57, benimator::FrameRate::from_fps(6.0));
let move_down =
benimator::Animation::from_indices(52..=54, benimator::FrameRate::from_fps(6.0));
let move_left =
benimator::Animation::from_indices(81..=83, benimator::FrameRate::from_fps(6.0));
let move_right =
benimator::Animation::from_indices(78..=80, benimator::FrameRate::from_fps(6.0));

let animation;
if player_movement.directions.is_empty() {
animation = match direction {
Direction::Up => face_up,
Direction::Right => face_right,
Direction::Down => face_down,
Direction::Left => face_left,
};
} else {
animation = match direction {
Direction::Up => move_up,
Direction::Right => move_right,
Direction::Down => move_down,
Direction::Left => move_left,
};
}

animation_state.update(&animation, time.delta());
sprite.index = animation_state.frame_index();
Expand Down Expand Up @@ -130,12 +147,12 @@ pub fn animate_tiles_movement(
- grid_position.y as f32 * tile_size.y;

if (transform.translation.x - target_x).abs() > 0.001 {
transform.translation.x = lerp(transform.translation.x, target_x, 0.5);
transform.translation.x = lerp(transform.translation.x, target_x, 0.3);
} else {
transform.translation.x = target_x;
}
if (transform.translation.y - target_y).abs() > 0.001 {
transform.translation.y = lerp(transform.translation.y, target_y, 0.5);
transform.translation.y = lerp(transform.translation.y, target_y, 0.3);
} else {
transform.translation.y = target_y;
}
Expand Down

0 comments on commit 90d5cdf

Please sign in to comment.