From a67fd544a6770c10fbd62297d59950b137d56e45 Mon Sep 17 00:00:00 2001 From: DaniTheSkunk <> Date: Sun, 22 Jan 2023 11:31:05 +0000 Subject: [PATCH] gameskunk advance specific input system --- examples/gsa_simple.c | 6 ++--- include/gsa.h | 1 + include/gsa_input.h | 19 ++++++++++++++ meson.build | 1 + src/gsa.c | 3 +++ src/gsa_input.c | 58 +++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 84 insertions(+), 4 deletions(-) create mode 100644 include/gsa_input.h create mode 100644 src/gsa_input.c diff --git a/examples/gsa_simple.c b/examples/gsa_simple.c index 3b36a81..924d7f2 100644 --- a/examples/gsa_simple.c +++ b/examples/gsa_simple.c @@ -26,10 +26,8 @@ void init() { void tick() { i32 x, y; - x = sw_gamepads[0].button_down[SW_GAMEPAD_BUTTON_DPAD_LEFT] - - sw_gamepads[0].button_down[SW_GAMEPAD_BUTTON_DPAD_RIGHT]; - y = sw_gamepads[0].button_down[SW_GAMEPAD_BUTTON_DPAD_UP] - - sw_gamepads[0].button_down[SW_GAMEPAD_BUTTON_DPAD_DOWN]; + x = input.down.dpad_left - input.down.dpad_right; + y = input.down.dpad_up - input.down.dpad_down; maps[0].scrollx -= x; maps[0].scrolly -= y; diff --git a/include/gsa.h b/include/gsa.h index abfa16c..f77740f 100644 --- a/include/gsa.h +++ b/include/gsa.h @@ -21,6 +21,7 @@ #include "embed_gfx.h" #endif +#include "gsa_input.h" #include "skunkworks.h" #include "vec2i.h" #include "window.h" diff --git a/include/gsa_input.h b/include/gsa_input.h new file mode 100644 index 0000000..6f38493 --- /dev/null +++ b/include/gsa_input.h @@ -0,0 +1,19 @@ +#ifndef GUARD_E847906A380863BFA9BE2CD8BC8943DA +#define GUARD_E847906A380863BFA9BE2CD8BC8943DA + +#include "types.h" + +struct _gsa_input_set { + bool dpad_up, dpad_down, dpad_left, dpad_right, face_up, face_down, + face_left, face_right, l, r, start, select; +}; + +struct gsa_input { + struct _gsa_input_set down, pressed; +}; + +extern struct gsa_input input; + +void _gsa_input_tick(); + +#endif /* GUARD_E847906A380863BFA9BE2CD8BC8943DA */ diff --git a/meson.build b/meson.build index 9bbf7c1..32ca09d 100644 --- a/meson.build +++ b/meson.build @@ -46,6 +46,7 @@ skunk_sources = [ 'src/framebuffer.c', 'src/gamepad.c', 'src/gsa.c', + 'src/gsa_input.c', 'src/image32.c', 'src/image8.c', 'src/scaler.c', diff --git a/src/gsa.c b/src/gsa.c index 71cfbb4..89a34d9 100644 --- a/src/gsa.c +++ b/src/gsa.c @@ -8,6 +8,7 @@ #include #define GSA_NOMAIN #include "gsa.h" +#include "gsa_input.h" struct gsa_sprite sprites[256]; struct gsa_map maps[MAX_TILEMAPS]; @@ -166,6 +167,8 @@ static void update_palette_gl() { void _gsa_tick() { i32 i, x, y, startx, starty, endx, endy; + _gsa_input_tick(); + tick(); next_render_vert = 0; diff --git a/src/gsa_input.c b/src/gsa_input.c new file mode 100644 index 0000000..77352c5 --- /dev/null +++ b/src/gsa_input.c @@ -0,0 +1,58 @@ +#include "gsa_input.h" +#include "gamepad.h" + +struct gsa_input input; + +void _gsa_input_tick() { + u8 gamepad = 0; + + input.pressed.dpad_down = + sw_gamepads[gamepad].button_pressed[SW_GAMEPAD_BUTTON_DPAD_DOWN]; + input.pressed.dpad_up = + sw_gamepads[gamepad].button_pressed[SW_GAMEPAD_BUTTON_DPAD_UP]; + input.pressed.dpad_left = + sw_gamepads[gamepad].button_pressed[SW_GAMEPAD_BUTTON_DPAD_LEFT]; + input.pressed.dpad_right = + sw_gamepads[gamepad].button_pressed[SW_GAMEPAD_BUTTON_DPAD_RIGHT]; + input.pressed.face_down = + sw_gamepads[gamepad].button_pressed[SW_GAMEPAD_BUTTON_FACE_DOWN]; + input.pressed.face_up = + sw_gamepads[gamepad].button_pressed[SW_GAMEPAD_BUTTON_FACE_UP]; + input.pressed.face_left = + sw_gamepads[gamepad].button_pressed[SW_GAMEPAD_BUTTON_FACE_LEFT]; + input.pressed.face_right = + sw_gamepads[gamepad].button_pressed[SW_GAMEPAD_BUTTON_FACE_RIGHT]; + input.pressed.l = + sw_gamepads[gamepad].button_pressed[SW_GAMEPAD_BUTTON_LEFT_SHOULDER]; + input.pressed.r = + sw_gamepads[gamepad].button_pressed[SW_GAMEPAD_BUTTON_RIGHT_SHOULDER]; + input.pressed.select = + sw_gamepads[gamepad].button_pressed[SW_GAMEPAD_BUTTON_BACK]; + input.pressed.start = + sw_gamepads[gamepad].button_pressed[SW_GAMEPAD_BUTTON_START]; + + input.down.dpad_down = + sw_gamepads[gamepad].button_down[SW_GAMEPAD_BUTTON_DPAD_DOWN]; + input.down.dpad_up = + sw_gamepads[gamepad].button_down[SW_GAMEPAD_BUTTON_DPAD_UP]; + input.down.dpad_left = + sw_gamepads[gamepad].button_down[SW_GAMEPAD_BUTTON_DPAD_LEFT]; + input.down.dpad_right = + sw_gamepads[gamepad].button_down[SW_GAMEPAD_BUTTON_DPAD_RIGHT]; + input.down.face_down = + sw_gamepads[gamepad].button_down[SW_GAMEPAD_BUTTON_FACE_DOWN]; + input.down.face_up = + sw_gamepads[gamepad].button_down[SW_GAMEPAD_BUTTON_FACE_UP]; + input.down.face_left = + sw_gamepads[gamepad].button_down[SW_GAMEPAD_BUTTON_FACE_LEFT]; + input.down.face_right = + sw_gamepads[gamepad].button_down[SW_GAMEPAD_BUTTON_FACE_RIGHT]; + input.down.l = + sw_gamepads[gamepad].button_down[SW_GAMEPAD_BUTTON_LEFT_SHOULDER]; + input.down.r = + sw_gamepads[gamepad].button_down[SW_GAMEPAD_BUTTON_RIGHT_SHOULDER]; + input.down.select = + sw_gamepads[gamepad].button_down[SW_GAMEPAD_BUTTON_BACK]; + input.down.start = + sw_gamepads[gamepad].button_down[SW_GAMEPAD_BUTTON_START]; +}