- unitat mouse per amagar el punter

- overlay captura el esc i confirma la eixida (falla en game)
This commit is contained in:
2026-04-04 22:32:53 +02:00
parent d4fc7c0ee8
commit a4ee304a79
7 changed files with 175 additions and 44 deletions

View File

@@ -3,7 +3,9 @@
#include <string>
#include "core/input/global_inputs.hpp"
#include "core/input/mouse.hpp"
#include "core/jail/jgame.hpp"
#include "core/rendering/overlay.hpp"
#include "game/options.hpp"
const bool* keystates; // = SDL_GetKeyboardState( NULL );
@@ -11,6 +13,7 @@ SDL_Event event;
Uint8 cheat[5];
bool key_pressed = false;
int waitTime = 0;
static bool esc_blocked_ = false; // Bloqueja ESC per polling quan l'overlay l'ha consumit
// Comprova si un scancode pertany a les tecles reservades per a la GUI
static bool isGuiKey(SDL_Scancode sc) {
@@ -47,20 +50,40 @@ void JI_Update() {
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)) {
// ESC interceptat per l'overlay (doble pulsació per eixir)
if (event.key.scancode == SDL_SCANCODE_ESCAPE) {
if (Overlay::handleEscape()) {
// Consumit: primera pulsació, bloqueja ESC per polling
esc_blocked_ = true;
} else {
// Segona pulsació: desbloqueja i passa al joc
esc_blocked_ = false;
key_pressed = true;
JG_QuitSignal();
}
} else if (!isGuiKey(event.key.scancode)) {
// Tecles normals del joc
key_pressed = true;
JI_moveCheats(event.key.scancode);
}
}
Mouse::handleEvent(event);
}
// GlobalInputs processa les tecles GUI per polling
// Desbloqueja ESC quan la tecla ja no està polsada i l'overlay ha fet timeout
if (esc_blocked_ && !keystates[SDL_SCANCODE_ESCAPE]) {
esc_blocked_ = false;
}
Mouse::updateCursorVisibility();
GlobalInputs::handle();
}
bool JI_KeyPressed(int key) {
return waitTime > 0 ? false : (keystates[key] != 0);
if (waitTime > 0) return false;
// Si ESC està bloquejat per l'overlay, no la passem al joc
if (key == SDL_SCANCODE_ESCAPE && esc_blocked_) return false;
return keystates[key] != 0;
}
bool JI_CheatActivated(const char* cheat_code) {