#include "TZR_events.h" #include "TZR_resource.h" #include "TZR_globals.h" #include #include void next_state(TZR_KeyState *keystate) { switch (*keystate) { case TZR_KEYSTATE_RELEASE: case TZR_KEYSTATE_UP: *keystate = TZR_KEYSTATE_UP; break; case TZR_KEYSTATE_PRESS: case TZR_KEYSTATE_DOWN: *keystate = TZR_KEYSTATE_DOWN; break; default: break; } } static void get_axis(SDL_GameController *gc, float *out, SDL_GameControllerAxis axis) { const Sint16 v = SDL_GameControllerGetAxis(gc, axis); if (v > -16384 && v < 16384) *out = 0.0f; else *out = (float)v / INT16_MAX; } void TZR_CycleEvents(void) { TZR_ResourcesWatch(); for (int i = 0; i < SDL_NUM_SCANCODES; i++) next_state(&___tzr_keystates[i]); for (int i = 0; i < 256; i++) next_state(&___tzr_mousestates[i]); for (int i = 0; i < SDL_CONTROLLER_BUTTON_MAX; i++) next_state(&___tzr_joystates[i]); TZR_Event e; while (TZR_PollEvent(&e)) ; for (size_t i = 0; i < ___tzr_joysticks_size; i++) { TZR_Joystick *const jstick = &___tzr_joysticks[i]; if (jstick->ptr == NULL) continue; for (int k = 0; k < SDL_CONTROLLER_BUTTON_MAX; k++) { if (SDL_GameControllerGetButton(jstick->ptr, k)) { if (___tzr_joystates[k] != TZR_KEYSTATE_DOWN) ___tzr_joystates[k] = TZR_KEYSTATE_PRESS; } else { if (___tzr_joystates[k] != TZR_KEYSTATE_UP) ___tzr_joystates[k] = TZR_KEYSTATE_RELEASE; } } get_axis(jstick->ptr, &jstick->leftx, SDL_CONTROLLER_AXIS_LEFTX); get_axis(jstick->ptr, &jstick->lefty, SDL_CONTROLLER_AXIS_LEFTY); get_axis(jstick->ptr, &jstick->rightx, SDL_CONTROLLER_AXIS_RIGHTX); get_axis(jstick->ptr, &jstick->righty, SDL_CONTROLLER_AXIS_RIGHTY); } }