Files
aee/source/core/jail/jinput.cpp
2026-04-04 19:07:01 +02:00

75 lines
2.0 KiB
C++

#include "core/jail/jinput.hpp"
#include <string>
#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;
}
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;
}