input module

This commit is contained in:
KikooDX 2021-12-15 23:55:44 +01:00
parent 2a5e9e2412
commit 0135212279
4 changed files with 69 additions and 3 deletions

View File

@ -12,6 +12,7 @@ include_directories(inc)
set(SOURCES
src/main.c
src/draw.c
src/input.c
src/player.c
)

16
inc/input.h Normal file
View File

@ -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);

48
src/input.c Normal file
View File

@ -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;
}

View File

@ -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);
}