39 lines
1.2 KiB
C++
39 lines
1.2 KiB
C++
#include "PacManAnimation.hpp"
|
|
|
|
PositionInt PacManAnimation::animationFrame(Direction direction) const {
|
|
switch (direction) {
|
|
case Direction::LEFT:
|
|
return left_animation[animation_position];
|
|
case Direction::RIGHT:
|
|
return right_animation[animation_position];
|
|
case Direction::UP:
|
|
return up_animation[animation_position];
|
|
case Direction::DOWN:
|
|
return down_animation[animation_position];
|
|
case Direction::NONE:
|
|
default:
|
|
return Atlas::pacman_closed;
|
|
}
|
|
}
|
|
|
|
[[nodiscard]] PositionInt PacManAnimation::deathAnimationFrame(Direction direction) const {
|
|
return PositionInt{ animation_position, 1 };
|
|
}
|
|
|
|
void PacManAnimation::updateAnimationPosition(std::chrono::milliseconds time_delta, bool dead) {
|
|
if (dead && animation_position >= 11)
|
|
return;
|
|
|
|
animation_position_delta += (0.02) * double(time_delta.count());
|
|
animation_position = int(animation_position + animation_position_delta);
|
|
|
|
if (!dead)
|
|
animation_position = animation_position % 4;
|
|
|
|
animation_position_delta = (animation_position_delta < 1) ? animation_position_delta : (animation_position_delta - 1);
|
|
}
|
|
|
|
void PacManAnimation::pause() {
|
|
animation_position = 0;
|
|
animation_position_delta = 0;
|
|
}
|