input system
parent
4ae83ebdbb
commit
e15cdab4ff
|
@ -0,0 +1,160 @@
|
||||||
|
#include "input.h"
|
||||||
|
#include "raylib.h"
|
||||||
|
|
||||||
|
const static input_map maps[] = {
|
||||||
|
{
|
||||||
|
"left",
|
||||||
|
IN_LEFT,
|
||||||
|
(input_bind[]){
|
||||||
|
{DEV_KEYBOARD, KEY_LEFT},
|
||||||
|
{DEV_KEYBOARD, KEY_A},
|
||||||
|
{0}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"right",
|
||||||
|
IN_RIGHT,
|
||||||
|
(input_bind[]){
|
||||||
|
{DEV_KEYBOARD, KEY_RIGHT},
|
||||||
|
{DEV_KEYBOARD, KEY_D},
|
||||||
|
{0}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"up",
|
||||||
|
IN_UP,
|
||||||
|
(input_bind[]){
|
||||||
|
{DEV_KEYBOARD, KEY_UP},
|
||||||
|
{DEV_KEYBOARD, KEY_W},
|
||||||
|
{0}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"down",
|
||||||
|
IN_DOWN,
|
||||||
|
(input_bind[]){
|
||||||
|
{DEV_KEYBOARD, KEY_DOWN},
|
||||||
|
{DEV_KEYBOARD, KEY_S},
|
||||||
|
{0}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"use",
|
||||||
|
IN_USE,
|
||||||
|
(input_bind[]){
|
||||||
|
{DEV_KEYBOARD, KEY_SPACE},
|
||||||
|
{0}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"sprint",
|
||||||
|
IN_SPRINT,
|
||||||
|
(input_bind[]){
|
||||||
|
{DEV_KEYBOARD, KEY_LEFT_SHIFT},
|
||||||
|
{DEV_KEYBOARD, KEY_RIGHT_SHIFT},
|
||||||
|
{0}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"drop",
|
||||||
|
IN_DROP,
|
||||||
|
(input_bind[]){
|
||||||
|
{DEV_KEYBOARD, KEY_G},
|
||||||
|
{0}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ctrl",
|
||||||
|
IN_CTRL,
|
||||||
|
(input_bind[]){
|
||||||
|
{DEV_KEYBOARD, KEY_LEFT_CONTROL},
|
||||||
|
{DEV_KEYBOARD, KEY_RIGHT_CONTROL},
|
||||||
|
{0}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"toggle inventory",
|
||||||
|
IN_TOGGLE_INV,
|
||||||
|
(input_bind[]){
|
||||||
|
{DEV_KEYBOARD, KEY_TAB},
|
||||||
|
{0}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"toggle build",
|
||||||
|
IN_TOGGLE_DEMOLITION,
|
||||||
|
(input_bind[]){
|
||||||
|
{DEV_KEYBOARD, KEY_B},
|
||||||
|
{0}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{0}
|
||||||
|
};
|
||||||
|
|
||||||
|
input_map input__get_map(uint8_t action) {
|
||||||
|
for (const input_map *map = maps; map->action > 0; ++map) {
|
||||||
|
if (map->action == action) {
|
||||||
|
return *map;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ZPL_PANIC("key not bound!");
|
||||||
|
return maps[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t input_is_down(uint8_t action) {
|
||||||
|
input_map map = input__get_map(action);
|
||||||
|
for (input_bind *bind = map.binds; bind->device > 0; ++bind) {
|
||||||
|
switch (bind->device) {
|
||||||
|
case DEV_KEYBOARD: {
|
||||||
|
if (IsKeyDown(bind->id)) return 1;
|
||||||
|
}break;
|
||||||
|
case DEV_MOUSE: {
|
||||||
|
if (IsMouseButtonDown(bind->id)) return 1;
|
||||||
|
}break;
|
||||||
|
case DEV_JOYSTICK: {
|
||||||
|
// TODO(zaklaus):
|
||||||
|
}break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t input_is_pressed(uint8_t action) {
|
||||||
|
input_map map = input__get_map(action);
|
||||||
|
for (input_bind *bind = map.binds; bind->device > 0; ++bind) {
|
||||||
|
switch (bind->device) {
|
||||||
|
case DEV_KEYBOARD: {
|
||||||
|
if (IsKeyPressed(bind->id)) return 1;
|
||||||
|
}break;
|
||||||
|
case DEV_MOUSE: {
|
||||||
|
if (IsMouseButtonPressed(bind->id)) return 1;
|
||||||
|
}break;
|
||||||
|
case DEV_JOYSTICK: {
|
||||||
|
// TODO(zaklaus):
|
||||||
|
}break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t input_is_released(uint8_t action) {
|
||||||
|
input_map map = input__get_map(action);
|
||||||
|
for (input_bind *bind = map.binds; bind->device > 0; ++bind) {
|
||||||
|
switch (bind->device) {
|
||||||
|
case DEV_KEYBOARD: {
|
||||||
|
if (IsKeyReleased(bind->id)) return 1;
|
||||||
|
}break;
|
||||||
|
case DEV_MOUSE: {
|
||||||
|
if (IsMouseButtonReleased(bind->id)) return 1;
|
||||||
|
}break;
|
||||||
|
case DEV_JOYSTICK: {
|
||||||
|
// TODO(zaklaus):
|
||||||
|
}break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -0,0 +1,39 @@
|
||||||
|
#pragma once
|
||||||
|
#include "system.h"
|
||||||
|
|
||||||
|
enum {
|
||||||
|
IN_NONE,
|
||||||
|
IN_LEFT,
|
||||||
|
IN_RIGHT,
|
||||||
|
IN_UP,
|
||||||
|
IN_DOWN,
|
||||||
|
IN_USE,
|
||||||
|
IN_SPRINT,
|
||||||
|
IN_DROP,
|
||||||
|
IN_CTRL,
|
||||||
|
IN_TOGGLE_INV,
|
||||||
|
IN_TOGGLE_DEMOLITION,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum {
|
||||||
|
DEV_NONE,
|
||||||
|
DEV_KEYBOARD,
|
||||||
|
DEV_MOUSE,
|
||||||
|
DEV_JOYSTICK
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
uint8_t device;
|
||||||
|
uint32_t id;
|
||||||
|
} input_bind;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
const char* name;
|
||||||
|
uint8_t action;
|
||||||
|
input_bind *binds;
|
||||||
|
} input_map;
|
||||||
|
|
||||||
|
uint8_t input_is_down(uint8_t action);
|
||||||
|
uint8_t input_is_pressed(uint8_t action);
|
||||||
|
uint8_t input_is_released(uint8_t action);
|
||||||
|
|
Loading…
Reference in New Issue