summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkdx <kikoodx@paranoici.org>2023-07-17 07:29:45 +0200
committerkdx <kikoodx@paranoici.org>2023-07-17 07:29:45 +0200
commit8c81a1c579c358f56929525afe5635c4937c2c88 (patch)
tree801bfd9fe42c44e303d87b4d69398e9e28380251
parent353c17a4445bf352f371e6e3bca8ce4a71976e94 (diff)
downloadfld-8c81a1c579c358f56929525afe5635c4937c2c88.tar.gz
update mouse and key states
-rw-r--r--src/cycleEvents.cpp43
1 files changed, 43 insertions, 0 deletions
diff --git a/src/cycleEvents.cpp b/src/cycleEvents.cpp
index 6f2e6dc..5e15602 100644
--- a/src/cycleEvents.cpp
+++ b/src/cycleEvents.cpp
@@ -1,11 +1,54 @@
#include "FLD.hpp"
#include <SDL2/SDL_events.h>
+static void
+next_state(FLD::InputState *state)
+{
+ switch (*state) {
+ case FLD::InputState::Press:
+ *state = FLD::InputState::Down;
+ break;
+ case FLD::InputState::Release:
+ *state = FLD::InputState::Up;
+ break;
+ case FLD::InputState::Down:
+ case FLD::InputState::Up:
+ break;
+ }
+}
+
void
FLD::cycleEvents()
{
+ for (auto& e : _keystates)
+ next_state(&e);
+ for (auto& e : _mousestates)
+ next_state(&e);
+ for (auto& e : _joystates)
+ next_state(&e);
+
SDL_Event e;
while (SDL_PollEvent(&e)) switch (e.type) {
+ case SDL_KEYDOWN:
+ if (e.key.repeat)
+ break;
+ _keystates[e.key.keysym.scancode] = InputState::Press;
+ break;
+ case SDL_KEYUP:
+ _keystates[e.key.keysym.scancode] = InputState::Release;
+ break;
+ case SDL_MOUSEBUTTONDOWN:
+ _mousestates[e.button.button] = InputState::Press;
+ break;
+ case SDL_MOUSEBUTTONUP:
+ _mousestates[e.button.button] = InputState::Release;
+ break;
+ case SDL_JOYDEVICEADDED:
+ /* TODO */
+ break;
+ case SDL_JOYDEVICEREMOVED:
+ /* TODO */
+ break;
case SDL_QUIT:
shouldQuit = true;
break;