#include "core/jail/jinput.hpp" #include #include "core/input/global_inputs.hpp" #include "core/jail/jgame.hpp" #include "game/options.hpp" const bool* keystates; // = SDL_GetKeyboardState( NULL ); SDL_Event event; Uint8 cheat[5]; bool key_pressed = false; int waitTime = 0; // Comprova si un scancode pertany a les tecles reservades per a la GUI static bool isGuiKey(SDL_Scancode sc) { return sc == Options::keys_gui.dec_zoom || sc == Options::keys_gui.inc_zoom || sc == Options::keys_gui.fullscreen || sc == Options::keys_gui.toggle_shader || sc == Options::keys_gui.toggle_aspect_ratio || sc == Options::keys_gui.toggle_supersampling || sc == Options::keys_gui.next_shader || sc == Options::keys_gui.next_shader_preset || sc == Options::keys_gui.toggle_stretch_filter; } void JI_DisableKeyboard(Uint32 time) { waitTime = time; } void JI_moveCheats(Uint8 new_key) { cheat[0] = cheat[1]; cheat[1] = cheat[2]; cheat[2] = cheat[3]; cheat[3] = cheat[4]; cheat[4] = new_key; } void JI_Update() { key_pressed = false; keystates = SDL_GetKeyboardState(NULL); if (waitTime > 0) waitTime--; while (SDL_PollEvent(&event)) { if (event.type == SDL_EVENT_QUIT) JG_QuitSignal(); if (event.type == SDL_EVENT_KEY_UP) { // Si és una tecla GUI, no la passem al joc legacy if (!isGuiKey(event.key.scancode)) { key_pressed = true; JI_moveCheats(event.key.scancode); } } } // GlobalInputs processa les tecles GUI per polling GlobalInputs::handle(); } bool JI_KeyPressed(int key) { return waitTime > 0 ? false : (keystates[key] != 0); } bool JI_CheatActivated(const char* cheat_code) { bool found = true; for (size_t i = 0; i < strlen(cheat_code); i++) { if (cheat[i] != cheat_code[i]) found = false; } return found; } bool JI_AnyKey() { return waitTime > 0 ? false : key_pressed; }