mirror of https://git.sr.ht/~kikoodx/crystal-tower
input manager
This commit is contained in:
parent
7636abbeb8
commit
c333b69113
|
@ -9,10 +9,11 @@ include(Fxconv)
|
|||
|
||||
find_package(Gint 2.6.0 REQUIRED)
|
||||
|
||||
include_directories(include)
|
||||
include_directories(inc)
|
||||
|
||||
set(SOURCES
|
||||
src/main.c
|
||||
src/input.c
|
||||
)
|
||||
|
||||
set(LEVELS
|
||||
|
|
7
Makefile
7
Makefile
|
@ -1,8 +1,11 @@
|
|||
all:
|
||||
all: format
|
||||
fxsdk build-cg
|
||||
|
||||
format:
|
||||
clang-format -style=file -i src/**.c inc/**.h
|
||||
|
||||
clean:
|
||||
rm -rf build-cg/
|
||||
rm -f *.g3a
|
||||
|
||||
.PHONY: clean
|
||||
.PHONY: format clean
|
||||
|
|
|
@ -0,0 +1,21 @@
|
|||
#pragma once
|
||||
/* use this to get user input, NOT gint/keyboard.h */
|
||||
|
||||
enum Key { K_A, K_B, K_UP, K_DOWN, K_LEFT, K_RIGHT, K_EXIT, K_COUNT };
|
||||
enum KeyState { KS_UP, KS_RELEASE, KS_DOWN, KS_PRESS };
|
||||
|
||||
struct Input {
|
||||
int keys[K_COUNT];
|
||||
enum KeyState states[K_COUNT];
|
||||
};
|
||||
|
||||
/* called by main.c once */
|
||||
void input_init(void);
|
||||
|
||||
/* call this to update key states once per frame */
|
||||
void input_update(void);
|
||||
|
||||
int input_down(enum Key);
|
||||
int input_pressed(enum Key);
|
||||
int input_up(enum Key);
|
||||
int input_released(enum Key);
|
|
@ -0,0 +1,68 @@
|
|||
#include "input.h"
|
||||
#include <gint/keyboard.h>
|
||||
|
||||
static struct Input input;
|
||||
|
||||
void
|
||||
input_init(void)
|
||||
{
|
||||
int i = K_COUNT;
|
||||
while (i-- > 0) {
|
||||
input.states[i] = KS_UP;
|
||||
}
|
||||
input.keys[K_A] = KEY_SHIFT;
|
||||
input.keys[K_B] = KEY_ALPHA;
|
||||
input.keys[K_LEFT] = KEY_LEFT;
|
||||
input.keys[K_RIGHT] = KEY_RIGHT;
|
||||
input.keys[K_UP] = KEY_UP;
|
||||
input.keys[K_DOWN] = KEY_DOWN;
|
||||
input.keys[K_EXIT] = KEY_EXIT;
|
||||
}
|
||||
|
||||
void
|
||||
input_update(void)
|
||||
{
|
||||
int i = K_COUNT;
|
||||
clearevents();
|
||||
while (i-- > 0) {
|
||||
const int kdown = keydown(input.keys[i]);
|
||||
enum KeyState *const state = &input.states[i];
|
||||
const enum KeyState prev_state = input.states[i];
|
||||
switch (prev_state) {
|
||||
case KS_UP:
|
||||
case KS_RELEASE:
|
||||
*state = (kdown) ? (KS_PRESS) : (KS_UP);
|
||||
break;
|
||||
case KS_DOWN:
|
||||
case KS_PRESS:
|
||||
*state = (kdown) ? (KS_DOWN) : (KS_RELEASE);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
input_down(enum Key k)
|
||||
{
|
||||
return input.states[k] == KS_DOWN || input.states[k] == KS_PRESS;
|
||||
}
|
||||
|
||||
int
|
||||
input_pressed(enum Key k)
|
||||
{
|
||||
return input.states[k] == KS_PRESS;
|
||||
}
|
||||
|
||||
int
|
||||
input_up(enum Key k)
|
||||
{
|
||||
return !input_down(k);
|
||||
}
|
||||
|
||||
int
|
||||
input_released(enum Key k)
|
||||
{
|
||||
return input.states[k] == KS_RELEASE;
|
||||
}
|
10
src/main.c
10
src/main.c
|
@ -1,6 +1,10 @@
|
|||
#include <gint/keyboard.h>
|
||||
#include "input.h"
|
||||
|
||||
int main(void) {
|
||||
getkey();
|
||||
int
|
||||
main(void)
|
||||
{
|
||||
input_init();
|
||||
while (!input_pressed(K_EXIT))
|
||||
input_update();
|
||||
return 1;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue