diff options
author | kdx <kikoodx@paranoici.org> | 2023-07-17 07:29:45 +0200 |
---|---|---|
committer | kdx <kikoodx@paranoici.org> | 2023-07-17 07:29:45 +0200 |
commit | 8c81a1c579c358f56929525afe5635c4937c2c88 (patch) | |
tree | 801bfd9fe42c44e303d87b4d69398e9e28380251 | |
parent | 353c17a4445bf352f371e6e3bca8ce4a71976e94 (diff) | |
download | fld-8c81a1c579c358f56929525afe5635c4937c2c88.tar.gz |
update mouse and key states
-rw-r--r-- | src/cycleEvents.cpp | 43 |
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; |