redefinir tecles

This commit is contained in:
2026-04-05 00:41:04 +02:00
parent a328681365
commit f8b60cb641
11 changed files with 167 additions and 24 deletions

View File

@@ -74,10 +74,10 @@ namespace Gamepad {
pad_ = nullptr;
pad_id_ = 0;
// Neteja qualsevol tecla virtual que poguera estar premuda
JI_SetVirtualKey(SDL_SCANCODE_UP, false);
JI_SetVirtualKey(SDL_SCANCODE_DOWN, false);
JI_SetVirtualKey(SDL_SCANCODE_LEFT, false);
JI_SetVirtualKey(SDL_SCANCODE_RIGHT, false);
JI_SetVirtualKey(SDL_SCANCODE_UP, JI_VSRC_GAMEPAD, false);
JI_SetVirtualKey(SDL_SCANCODE_DOWN, JI_VSRC_GAMEPAD, false);
JI_SetVirtualKey(SDL_SCANCODE_LEFT, JI_VSRC_GAMEPAD, false);
JI_SetVirtualKey(SDL_SCANCODE_RIGHT, JI_VSRC_GAMEPAD, false);
}
}
}
@@ -140,16 +140,16 @@ namespace Gamepad {
if (b && !prev_b_) pushKey(SDL_SCANCODE_BACKSPACE);
// Assegura que el joc no rep tecles de moviment mentre el menú està obert
JI_SetVirtualKey(SDL_SCANCODE_UP, false);
JI_SetVirtualKey(SDL_SCANCODE_DOWN, false);
JI_SetVirtualKey(SDL_SCANCODE_LEFT, false);
JI_SetVirtualKey(SDL_SCANCODE_RIGHT, false);
JI_SetVirtualKey(SDL_SCANCODE_UP, JI_VSRC_GAMEPAD, false);
JI_SetVirtualKey(SDL_SCANCODE_DOWN, JI_VSRC_GAMEPAD, false);
JI_SetVirtualKey(SDL_SCANCODE_LEFT, JI_VSRC_GAMEPAD, false);
JI_SetVirtualKey(SDL_SCANCODE_RIGHT, JI_VSRC_GAMEPAD, false);
} else {
// Moviment al joc — level-triggered (polling)
JI_SetVirtualKey(SDL_SCANCODE_UP, up);
JI_SetVirtualKey(SDL_SCANCODE_DOWN, dn);
JI_SetVirtualKey(SDL_SCANCODE_LEFT, lt);
JI_SetVirtualKey(SDL_SCANCODE_RIGHT, rt);
JI_SetVirtualKey(SDL_SCANCODE_UP, JI_VSRC_GAMEPAD, up);
JI_SetVirtualKey(SDL_SCANCODE_DOWN, JI_VSRC_GAMEPAD, dn);
JI_SetVirtualKey(SDL_SCANCODE_LEFT, JI_VSRC_GAMEPAD, lt);
JI_SetVirtualKey(SDL_SCANCODE_RIGHT, JI_VSRC_GAMEPAD, rt);
// Botó A al joc: emet Enter per avançar seqüències (JI_AnyKey)
if (a && !prev_a_) pushKey(SDL_SCANCODE_RETURN);
}

View File

@@ -0,0 +1,27 @@
#include "core/input/key_remap.hpp"
#include <SDL3/SDL.h>
#include "core/jail/jinput.hpp"
#include "game/options.hpp"
namespace KeyRemap {
static void mirror(SDL_Scancode custom, SDL_Scancode standard, const bool* ks) {
if (custom == standard || custom == SDL_SCANCODE_UNKNOWN) {
JI_SetVirtualKey(standard, JI_VSRC_REMAP, false);
return;
}
JI_SetVirtualKey(standard, JI_VSRC_REMAP, ks[custom]);
}
void update() {
const bool* ks = SDL_GetKeyboardState(nullptr);
if (!ks) return;
mirror(Options::keys_game.up, SDL_SCANCODE_UP, ks);
mirror(Options::keys_game.down, SDL_SCANCODE_DOWN, ks);
mirror(Options::keys_game.left, SDL_SCANCODE_LEFT, ks);
mirror(Options::keys_game.right, SDL_SCANCODE_RIGHT, ks);
}
} // namespace KeyRemap

View File

@@ -0,0 +1,8 @@
#pragma once
// Remapeja tecles del joc: llig les tecles personalitzades de l'usuari
// (Options::keys_game) i les reflecteix a les tecles estàndard virtuals
// que el joc polla (SDL_SCANCODE_UP/DOWN/LEFT/RIGHT).
namespace KeyRemap {
void update(); // cridat cada frame des del Director
}