input module
This commit is contained in:
parent
2a5e9e2412
commit
0135212279
|
@ -12,6 +12,7 @@ include_directories(inc)
|
|||
set(SOURCES
|
||||
src/main.c
|
||||
src/draw.c
|
||||
src/input.c
|
||||
src/player.c
|
||||
)
|
||||
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
#pragma once
|
||||
|
||||
enum Key { K_LEFT, K_RIGHT, K_UP, K_DOWN, K_JUMP, K_EXIT, K_COUNT };
|
||||
enum KeyState { KS_UP, KS_DOWN, KS_PRESS };
|
||||
|
||||
struct Input {
|
||||
enum Key keys[K_COUNT];
|
||||
enum KeyState states[K_COUNT];
|
||||
};
|
||||
|
||||
void input_init(void);
|
||||
void input_update(void);
|
||||
|
||||
int input_down(enum Key);
|
||||
int input_pressed(enum Key);
|
||||
int input_up(enum Key);
|
|
@ -0,0 +1,48 @@
|
|||
#include "input.h"
|
||||
#include <gint/keyboard.h>
|
||||
|
||||
static struct Input input;
|
||||
static const int default_map[K_COUNT] = {KEY_LEFT, KEY_RIGHT, KEY_UP,
|
||||
KEY_DOWN, KEY_SHIFT, KEY_EXIT};
|
||||
|
||||
void
|
||||
input_init(void)
|
||||
{
|
||||
|
||||
int i = K_COUNT;
|
||||
while (i-- > 0) {
|
||||
input.keys[i] = default_map[i];
|
||||
input.states[i] = KS_UP;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
input_update(void)
|
||||
{
|
||||
int i = K_COUNT;
|
||||
clearevents();
|
||||
while (i-- > 0) {
|
||||
const int kdown = keydown(input.keys[i]);
|
||||
input.states[i] = (input.states[i] == KS_UP)
|
||||
? (kdown ? KS_PRESS : KS_UP)
|
||||
: (kdown ? KS_DOWN : KS_UP);
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
input_down(enum Key k)
|
||||
{
|
||||
return input.states[k] != KS_UP;
|
||||
}
|
||||
|
||||
int
|
||||
input_pressed(enum Key k)
|
||||
{
|
||||
return input.states[k] == KS_PRESS;
|
||||
}
|
||||
|
||||
int
|
||||
input_up(enum Key k)
|
||||
{
|
||||
return input.states[k] == KS_UP;
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
#include "input.h"
|
||||
#include "player.h"
|
||||
#include <gint/display.h>
|
||||
#include <gint/keyboard.h>
|
||||
|
||||
static Player player;
|
||||
|
||||
|
@ -18,7 +18,7 @@ main(void)
|
|||
do {
|
||||
update();
|
||||
draw();
|
||||
} while (!keydown(KEY_EXIT));
|
||||
} while (input_up(K_EXIT));
|
||||
|
||||
deinit();
|
||||
return 0;
|
||||
|
@ -27,6 +27,7 @@ main(void)
|
|||
static void
|
||||
init(void)
|
||||
{
|
||||
input_init();
|
||||
player_init(&player);
|
||||
}
|
||||
|
||||
|
@ -38,7 +39,7 @@ deinit(void)
|
|||
static void
|
||||
update(void)
|
||||
{
|
||||
clearevents();
|
||||
input_update();
|
||||
player_update(&player);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue