forgot to commit animation FILE LOL

This commit is contained in:
2024-11-09 22:56:13 +02:00
parent 46d3f94426
commit 77dc847c8e

74
src/animations.rs Normal file
View File

@@ -0,0 +1,74 @@
use bevy::ecs::prelude::{Component, Query, Res};
use bevy::prelude::*;
use bevy::prelude::{Time, Timer};
use bevy::sprite::TextureAtlas;
use bevy_ecs_ldtk::ldtk::ldtk_fields::LdtkFields;
use bevy_ecs_ldtk::EntityInstance;
use crate::player::Player;
#[derive(Component, Default)]
pub struct AnimationIndices {
first: i32,
last: i32,
}
#[derive(Component, Deref, DerefMut, Default)]
pub struct AnimationTimer(Timer);
impl AnimationTimer {
fn default() -> Self {
AnimationTimer(Timer::from_seconds(0.1, TimerMode::Repeating))
}
}
impl From<&EntityInstance> for AnimationTimer {
fn from(entity_instance: &EntityInstance) -> Self {
AnimationTimer(Timer::from_seconds(
entity_instance
.get_float_field("animation_timer")
.expect("items field should be correctly typed")
.clone(),
TimerMode::Repeating,
))
}
}
impl From<&EntityInstance> for AnimationIndices {
fn from(entity_instance: &EntityInstance) -> Self {
let indices: Vec<i32> = entity_instance
.iter_ints_field("animation_indices")
.expect("numbers field should be correctly typed")
.cloned()
.collect();
let first = indices.get(0).expect("fuck");
let last = indices.get(1).expect("fuck");
AnimationIndices {
first: *first,
last: *last,
}
}
}
fn animate_player(
time: Res<Time>,
mut query: Query<(&AnimationIndices, &mut AnimationTimer, &mut TextureAtlas), With<Player>>,
) {
for (indices, mut timer, mut atlas) in &mut query {
timer.tick(time.delta());
if timer.just_finished() {
atlas.index = if atlas.index == indices.last as usize {
indices.first as usize
} else {
atlas.index + 1
};
}
}
}
pub struct ShockingAnimationPlugin;
impl Plugin for ShockingAnimationPlugin {
fn build(&self, app: &mut App) {
app.add_systems(Update, animate_player);
}
}