pokemon/actor.hpp
Zack Buhman e6cae1c242 coordinates: rework map rendering
This also adds interactive player movement.

I am much more satisfied with the coordinate space math in this
commit compared to the previous commit.
2023-07-28 05:46:36 +00:00

67 lines
1012 B
C++

#pragma once
#include "coordinates.hpp"
struct actor_t
{
enum direction {
up,
down,
left,
right,
};
world_t world;
enum direction facing;
bool moving;
uint8_t frame;
constexpr inline offset_t offset()
{
switch (facing) {
case left:
return {-frame, 0};
case right:
return {frame, 0};
case up:
return {0, -frame};
case down:
return {0, frame};
default:
return {0, 0};
}
}
// call tick() before move()
constexpr inline void tick()
{
if (!moving) return;
if (++frame == 16) {
moving = false;
frame = 0;
switch (facing) {
case left: world.x--; break;
case right: world.x++; break;
case up: world.y--; break;
case down: world.y++; break;
}
}
}
constexpr inline void move(enum direction dir)
{
/*
m 1 . 2 . 3 . 4 .
| - | - | - | - |
*/
if (moving) return;
frame = 0;
facing = dir;
moving = true;
}
};