aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkdx <kikoodx@paranoici.org>2024-04-11 03:55:22 +0200
committerkdx <kikoodx@paranoici.org>2024-04-11 03:58:05 +0200
commit10526f2f4ecc8168f060bd8c4cf6cc3b111bd306 (patch)
treeefd1a0f09d829abd99505604efd8361118c8342e
parent690e41f34e1ee5b3afad0d6dd64c07a5eda7fc58 (diff)
downloadtzr-10526f2f4ecc8168f060bd8c4cf6cc3b111bd306.tar.gz
LatestInputEventHEADmain
-rw-r--r--headers/TZR_events.h3
-rw-r--r--headers/TZR_globals.h1
-rw-r--r--headers/TZR_types.h7
-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
7 files changed, 42 insertions, 7 deletions
diff --git a/headers/TZR_events.h b/headers/TZR_events.h
index 4b2b0c6..bba9bb0 100644
--- a/headers/TZR_events.h
+++ b/headers/TZR_events.h
@@ -6,3 +6,6 @@ int TZR_PollEvent(TZR_Event *e);
/* Drain queued events with TZR_PollEvent and call TZR_ResourcesWatch. */
void TZR_CycleEvents(void);
+
+/* Returns 1 if event was set. Resets after each call to CycleEvents. */
+int TZR_LatestInputEvent(TZR_Event *);
diff --git a/headers/TZR_globals.h b/headers/TZR_globals.h
index 8266481..6dca3c8 100644
--- a/headers/TZR_globals.h
+++ b/headers/TZR_globals.h
@@ -35,6 +35,7 @@ extern int ___tzr_camera_y;
extern SDL_GLContext ___tzr_gl_ctx;
extern int ___tzr_scroll_x;
extern int ___tzr_scroll_y;
+extern TZR_Event ___tzr_latest_input;
#ifdef TZR_SOLOUD
extern Soloud ___tzr_soloud;
diff --git a/headers/TZR_types.h b/headers/TZR_types.h
index 012fa71..324d655 100644
--- a/headers/TZR_types.h
+++ b/headers/TZR_types.h
@@ -12,9 +12,14 @@ enum TZR_ResourceType {
};
enum TZR_EventType {
+ TZR_EV_NONE,
TZR_EV_QUIT,
TZR_EV_KEYDOWN,
- TZR_EV_KEYUP
+ TZR_EV_KEYUP,
+ TZR_EV_MOUSEDOWN,
+ TZR_EV_MOUSEUP, //unused
+ TZR_EV_GAMECONTROLLERDOWN,
+ TZR_EV_GAMECONTROLLERUP, //unused
};
enum TZR_KeyState {
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;