ANIMATION HELL 1999

This commit is contained in:
Schrottkatze 2024-11-23 22:19:17 +01:00
parent fa1f11c602
commit fb1b776e78
Signed by: schrottkatze
SSH key fingerprint: SHA256:hXb3t1vINBFCiDCmhRABHX5ocdbLiKyCdKI4HK2Rbbc
2 changed files with 27 additions and 7 deletions

View file

@ -62,13 +62,16 @@ fn move_player(
&Transform,
&mut Player,
&mut KinematicCharacterController,
&mut Sprite,
&mut PlayerAnimations,
)>,
mut camera_query: Query<&mut Transform, (With<Camera2d>, Without<Player>)>,
phys: Query<&KinematicCharacterControllerOutput>,
player_coords: Res<PlayerCoords>,
time: Res<Time>,
) {
let (mut vel, p_transform, mut player, mut controller) = query.single_mut();
let (mut vel, p_transform, mut player, mut controller, mut sprite, mut anim_state) =
query.single_mut();
let (mut cam_transform) = camera_query.single_mut();
let (output) = phys.get_single();
if player.move_cooldown.tick(time.delta()).finished() {
@ -76,7 +79,7 @@ fn move_player(
let mut move_x = 0;
let mut move_y = 0;
let mut jump = false;
let grounded = output.is_ok_and(|x| x.grounded);
if kb_input.pressed(KeyCode::KeyA) {
moved = true;
move_x -= 1;
@ -85,7 +88,7 @@ fn move_player(
moved = true;
move_x += 1;
}
if kb_input.pressed(KeyCode::Space) && output.is_ok_and(|x| x.grounded) {
if kb_input.pressed(KeyCode::Space) && grounded {
moved = true;
move_y += 1;
}
@ -95,6 +98,13 @@ fn move_player(
controller.translation = Some(Vec2::new(move_x as f32 * 6., 0. - 0.01));
vel.linvel += Vec2::new(0., move_y as f32 * 3. * METER);
if moved && move_x != 0 && grounded {
*anim_state = PlayerAnimations::Walk;
sprite.flip_x = move_x == -1;
} else if !moved {
*anim_state = PlayerAnimations::Idle;
}
}
}

View file

@ -6,21 +6,31 @@ use bevy::utils::HashMap;
use std::hash::Hash;
pub fn run_animations<Tag: Hash + Eq + Component>(
mut query: Query<(&Tag, &mut AnimationManager<Tag>, &mut TextureAtlas)>,
mut query: Query<(
&Tag,
&mut AnimationManager<Tag>,
&mut TextureAtlas,
&mut Handle<Image>,
)>,
time: Res<Time>,
) {
for (tag, mut manager, mut atlas) in &mut query {
for (tag, mut manager, mut atlas, mut tex_handle) in &mut query {
let anim = manager
.animations
.get_mut(tag)
.expect("animations should exist for all tags!");
*tex_handle = anim.tex.clone_weak();
atlas.layout = anim.atlas_layout_handle.clone_weak();
if atlas.index > anim.max_index {
atlas.index = 0
}
anim.frame_timer.tick(time.delta());
dbg!(&anim.frame_timer);
if anim.frame_timer.just_finished() {
dbg!(atlas.index);
if atlas.index == anim.max_index {
if atlas.index >= anim.max_index {
atlas.index = 0;
} else {
atlas.index += 1;