This also adds interactive player movement. I am much more satisfied with the coordinate space math in this commit compared to the previous commit.
60 lines
1.3 KiB
C++
60 lines
1.3 KiB
C++
#pragma once
|
|
|
|
#include <stdint.h>
|
|
|
|
struct count_flop_t {
|
|
int8_t count;
|
|
uint8_t flop;
|
|
uint8_t das;
|
|
uint8_t repeat;
|
|
};
|
|
|
|
struct input_t {
|
|
count_flop_t right;
|
|
count_flop_t left;
|
|
count_flop_t down;
|
|
count_flop_t up;
|
|
count_flop_t start;
|
|
count_flop_t a;
|
|
count_flop_t b;
|
|
count_flop_t c;
|
|
count_flop_t r;
|
|
count_flop_t x;
|
|
count_flop_t y;
|
|
count_flop_t z;
|
|
count_flop_t l;
|
|
};
|
|
|
|
void digital_callback(uint8_t fsm_state, uint8_t data);
|
|
|
|
extern input_t input;
|
|
|
|
constexpr int input_arr = 1;
|
|
constexpr int input_das = 1;
|
|
constexpr int input_debounce = 2;
|
|
|
|
static constexpr inline int32_t
|
|
input_flopped(count_flop_t& button)
|
|
{
|
|
if (button.count == input_debounce && button.flop == 0) {
|
|
button.flop = 1;
|
|
return 1;
|
|
} else if (button.flop == 1 && button.das == input_das && button.repeat == 0) {
|
|
button.repeat = 1;
|
|
button.das = 0;
|
|
return 2;
|
|
} else if (button.repeat == 1 && (button.das == input_arr)) {
|
|
button.das = 0;
|
|
return 2;
|
|
} else {
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
struct event {
|
|
static inline bool cursor_left() { return input_flopped(input.left ) >= 1; }
|
|
static inline bool cursor_right() { return input_flopped(input.right) >= 1; }
|
|
static inline bool cursor_up() { return input_flopped(input.up ) >= 1; }
|
|
static inline bool cursor_down() { return input_flopped(input.down ) >= 1; }
|
|
};
|