123456789101112131415161718192021222324252627282930313233 |
- use specs::prelude::*;
-
- use crate::components::*;
-
- pub struct Animator;
-
- impl<'a> System<'a> for Animator {
- type SystemData = (
- WriteStorage<'a, MovementAnimation>,
- WriteStorage<'a, Sprite>,
- ReadStorage<'a, Velocity>,
- );
-
- fn run(&mut self, mut data: Self::SystemData) {
- use self::Direction::*;
-
- for (anim, sprite, vel) in (&mut data.0, &mut data.1, &data.2).join() {
- if vel.speed == 0 {
- continue;
- }
-
- let frames = match vel.direction {
- Left => &anim.left_frames,
- Right => &anim.right_frames,
- Up => &anim.up_frames,
- Down => &anim.down_frames,
- };
-
- anim.current_frame = (anim.current_frame + 1) % frames.len();
- *sprite = frames[anim.current_frame].clone();
- }
- }
- }
|