les tecles de funcio ja no arriben a jinput

This commit is contained in:
2026-04-04 18:39:53 +02:00
parent b707bdd63b
commit 699989efb0
4 changed files with 41 additions and 16 deletions

View File

@@ -14,7 +14,9 @@ namespace GlobalInputs {
static bool inc_zoom_was_pressed = false;
static bool fullscreen_was_pressed = false;
void handle() {
auto handle() -> bool {
bool consumed = false;
// Decrement zoom
bool dec_zoom = JI_KeyPressed(Options::keys_gui.dec_zoom);
if (dec_zoom && !dec_zoom_was_pressed) {
@@ -22,7 +24,9 @@ namespace GlobalInputs {
char msg[32];
snprintf(msg, sizeof(msg), "ZOOM %dx", Screen::get()->getZoom());
Overlay::showNotification(msg);
consumed = true;
}
if (dec_zoom) consumed = true; // Mentres estiga polsada, consumir-la
dec_zoom_was_pressed = dec_zoom;
// Increment zoom
@@ -32,7 +36,9 @@ namespace GlobalInputs {
char msg[32];
snprintf(msg, sizeof(msg), "ZOOM %dx", Screen::get()->getZoom());
Overlay::showNotification(msg);
consumed = true;
}
if (inc_zoom) consumed = true;
inc_zoom_was_pressed = inc_zoom;
// Toggle fullscreen
@@ -40,8 +46,12 @@ namespace GlobalInputs {
if (fullscreen && !fullscreen_was_pressed) {
Screen::get()->toggleFullscreen();
Overlay::showNotification(Screen::get()->isFullscreen() ? "FULLSCREEN" : "WINDOWED");
consumed = true;
}
if (fullscreen) consumed = true;
fullscreen_was_pressed = fullscreen;
return consumed;
}
} // namespace GlobalInputs

View File

@@ -2,5 +2,6 @@
namespace GlobalInputs {
// Comprovar una vegada per frame, després de JI_Update()
void handle();
// Retorna true si ha consumit alguna tecla (per suprimir-la de la capa de joc)
auto handle() -> bool;
} // namespace GlobalInputs

View File

@@ -4,6 +4,7 @@
#include "core/input/global_inputs.hpp"
#include "core/jail/jgame.hpp"
#include "game/options.hpp"
const bool* keystates; // = SDL_GetKeyboardState( NULL );
SDL_Event event;
@@ -11,6 +12,13 @@ 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;
}
void JI_DisableKeyboard(Uint32 time) {
waitTime = time;
}
@@ -32,11 +40,15 @@ 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)) {
key_pressed = true;
JI_moveCheats(event.key.scancode);
}
}
}
// GlobalInputs processa les tecles GUI per polling
GlobalInputs::handle();
}

View File

@@ -28,7 +28,10 @@ namespace Overlay {
// --- Estat de les notificacions ---
enum class Status { RISING, STAY, VANISHING, FINISHED };
enum class Status { RISING,
STAY,
VANISHING,
FINISHED };
struct Notification {
std::string message;
@@ -119,8 +122,7 @@ namespace Overlay {
// Elimina les acabades
notifications_.erase(
std::remove_if(notifications_.begin(), notifications_.end(),
[](const Notification& n) { return n.status == Status::FINISHED; }),
std::remove_if(notifications_.begin(), notifications_.end(), [](const Notification& n) { return n.status == Status::FINISHED; }),
notifications_.end());
}