treballant en redefine keys

This commit is contained in:
2025-11-02 17:31:44 +01:00
parent f7aa6a2b8b
commit 13513384d1
2 changed files with 192 additions and 8 deletions

View File

@@ -40,6 +40,12 @@ class Title {
POST_FADE_MENU,
};
enum class ControlsMenuState {
MAIN, // Mostrar menu principal de controles
KEYBOARD_REMAP, // Redefinir teclas del teclado
JOYSTICK_REMAP, // Redefinir botones del joystick (futuro)
};
// --- Constantes de tiempo (en segundos) ---
static constexpr float SHOW_LOADING_DURATION = 5.0F; // Tiempo mostrando loading screen (antes 500 frames)
static constexpr float FADE_STEP_INTERVAL = 0.05F; // Intervalo entre pasos de fade (antes cada 4 frames)
@@ -77,6 +83,12 @@ class Title {
float fade_accumulator_; // Acumulador para controlar el fade por tiempo
SceneManager::Scene exit_scene_; // Escena de destino al salir del título
// --- Variables para redefinir controles ---
ControlsMenuState controls_menu_state_; // Subestado del menu de controles
int remap_step_; // Paso actual en la redefinicion (0=LEFT, 1=RIGHT, 2=JUMP)
SDL_Scancode temp_keys_[3]; // Almacenamiento temporal de teclas capturadas
std::string remap_error_message_; // Mensaje de error si la tecla es invalida
// --- Funciones ---
void update(); // Actualiza las variables
void render(); // Dibuja en pantalla
@@ -98,7 +110,13 @@ class Title {
void renderMainMenu(); // Dibuja el menu principal
void renderCheevosMenu(); // Dibuja el menu de logros
void renderControlsMenu(); // Dibuja el menu de controles
void renderKeyboardRemap(); // Dibuja la pantalla de redefinir teclado
void moveCheevosList(int direction, float delta_time); // Desplaza la lista de logros (time-based)
void handleControlsMenuKeyboardRemap(const SDL_Event& event); // Maneja la captura de teclas
bool isKeyValid(SDL_Scancode scancode); // Valida si una tecla es permitida
bool isKeyDuplicate(SDL_Scancode scancode, int current_step); // Valida si una tecla esta duplicada
void applyKeyboardRemap(); // Aplica y guarda las teclas redefinidas
std::string getActionName(int step); // Retorna el nombre de la accion (LEFT/RIGHT/JUMP)
void createCheevosTexture(); // Crea y rellena la surface para mostrar los logros
void resetCheevosScroll(); // Resetea el scroll de la lista de logros
void fillTitleSurface(); // Dibuja los elementos en la surface