aboutsummaryrefslogtreecommitdiff
path: root/sources
diff options
context:
space:
mode:
Diffstat (limited to 'sources')
-rw-r--r--sources/TZR_CycleEvents.c15
-rw-r--r--sources/TZR_LatestInputEvent.c15
-rw-r--r--sources/TZR_PollEvent.c7
-rw-r--r--sources/globals.c1
4 files changed, 32 insertions, 6 deletions
diff --git a/sources/TZR_CycleEvents.c b/sources/TZR_CycleEvents.c
index f9f9945..67c2956 100644
--- a/sources/TZR_CycleEvents.c
+++ b/sources/TZR_CycleEvents.c
@@ -2,7 +2,6 @@
#include "TZR_resource.h"
#include "TZR_globals.h"
#include <SDL2/SDL_scancode.h>
-#include <limits.h>
void
next_state(TZR_KeyState *keystate)
@@ -34,6 +33,7 @@ get_axis(SDL_GameController *gc, float *out, SDL_GameControllerAxis axis)
void
TZR_CycleEvents(void)
{
+ ___tzr_latest_input.type = TZR_EV_NONE;
TZR_ResourcesWatch();
for (int i = 0; i < SDL_NUM_SCANCODES; i++)
next_state(&___tzr_keystates[i]);
@@ -45,7 +45,13 @@ TZR_CycleEvents(void)
___tzr_scroll_y = 0;
TZR_Event e;
while (TZR_PollEvent(&e))
- ;
+ switch (e.type) {
+ case TZR_EV_KEYDOWN:
+ case TZR_EV_MOUSEDOWN:
+ ___tzr_latest_input = e;
+ default:
+ break;
+ }
for (size_t i = 0; i < ___tzr_joysticks_size; i++) {
TZR_Joystick *const jstick = &___tzr_joysticks[i];
@@ -53,8 +59,11 @@ TZR_CycleEvents(void)
continue;
for (int k = 0; k < SDL_CONTROLLER_BUTTON_MAX; k++) {
if (SDL_GameControllerGetButton(jstick->ptr, k)) {
- if (___tzr_joystates[k] != TZR_KEYSTATE_DOWN)
+ if (___tzr_joystates[k] != TZR_KEYSTATE_DOWN) {
___tzr_joystates[k] = TZR_KEYSTATE_PRESS;
+ ___tzr_latest_input.type = TZR_EV_GAMECONTROLLERDOWN;
+ ___tzr_latest_input.button = k;
+ }
} else {
if (___tzr_joystates[k] != TZR_KEYSTATE_UP)
___tzr_joystates[k] = TZR_KEYSTATE_RELEASE;
diff --git a/sources/TZR_LatestInputEvent.c b/sources/TZR_LatestInputEvent.c
new file mode 100644
index 0000000..550e2c3
--- /dev/null
+++ b/sources/TZR_LatestInputEvent.c
@@ -0,0 +1,15 @@
+#include "TZR_events.h"
+#include "TZR_globals.h"
+
+int
+TZR_LatestInputEvent(TZR_Event *e)
+{
+ if (e == NULL) {
+ TZR_Log("e is NULL");
+ return 0;
+ }
+ if (___tzr_latest_input.type == TZR_EV_NONE)
+ return 0;
+ *e = ___tzr_latest_input;
+ return 1;
+}
diff --git a/sources/TZR_PollEvent.c b/sources/TZR_PollEvent.c
index 9560600..15e287b 100644
--- a/sources/TZR_PollEvent.c
+++ b/sources/TZR_PollEvent.c
@@ -2,7 +2,6 @@
#include "TZR_globals.h"
#include "sdl_error.h"
#include "reserve.h"
-#include "getbind.h"
#include <SDL2/SDL_events.h>
#include <SDL2/SDL_gamecontroller.h>
@@ -32,10 +31,12 @@ TZR_PollEvent(TZR_Event *e)
___tzr_keystates[e->button] = TZR_KEYSTATE_RELEASE;
return 1;
case SDL_MOUSEBUTTONDOWN:
+ e->type = TZR_EV_MOUSEDOWN;
+ e->button = se.button.button;
___tzr_mouse_x = se.button.x;
___tzr_mouse_y = se.button.y;
- ___tzr_mousestates[se.button.button] = TZR_KEYSTATE_PRESS;
- break;
+ ___tzr_mousestates[e->button] = TZR_KEYSTATE_PRESS;
+ return 1;
case SDL_MOUSEBUTTONUP:
___tzr_mouse_x = se.button.x;
___tzr_mouse_y = se.button.y;
diff --git a/sources/globals.c b/sources/globals.c
index 4d9597d..0f835e1 100644
--- a/sources/globals.c
+++ b/sources/globals.c
@@ -35,6 +35,7 @@ int ___tzr_camera_y = 0;
SDL_GLContext ___tzr_gl_ctx = NULL;
int ___tzr_scroll_x = 0;
int ___tzr_scroll_y = 0;
+TZR_Event ___tzr_latest_input = {0};
#ifdef TZR_SOLOUD
Soloud ___tzr_soloud = NULL;