gitignore no ha deixat versionar cap fitxer de core

afegida gestió de ratolí
This commit is contained in:
2025-12-03 09:42:45 +01:00
parent aa66dd41c1
commit 9f0dfc4e24
39 changed files with 2983 additions and 3 deletions

View File

@@ -0,0 +1,63 @@
#include "core/input/mouse.hpp"
namespace Mouse {
Uint32 cursor_hide_time = 3000; // Tiempo en milisegundos para ocultar el cursor
Uint32 last_mouse_move_time = 0; // Última vez que el ratón se movió
bool cursor_visible = true; // Estado del cursor
// Modo forzado: Usado cuando SDLManager entra en pantalla completa.
// Cuando está activado, el cursor permanece oculto independientemente del movimiento del ratón.
// SDLManager controla esto mediante llamadas a setForceHidden().
bool force_hidden = false;
void setForceHidden(bool force) {
force_hidden = force;
if (force) {
// Entrando en modo oculto forzado: ocultar cursor inmediatamente
if (cursor_visible) {
SDL_HideCursor();
cursor_visible = false;
}
} else {
// Saliendo de modo oculto forzado: mostrar cursor y resetear temporizador
SDL_ShowCursor();
cursor_visible = true;
last_mouse_move_time = SDL_GetTicks(); // Resetear temporizador
}
}
bool isForceHidden() {
return force_hidden;
}
void handleEvent(const SDL_Event& event) {
// CRÍTICO: Si estamos en modo forzado, ignorar todos los eventos del ratón
if (force_hidden) {
return; // Salir temprano - no procesar ningún evento
}
// MODO NORMAL: Mostrar cursor al mover el ratón
if (event.type == SDL_EVENT_MOUSE_MOTION) {
last_mouse_move_time = SDL_GetTicks();
if (!cursor_visible) {
SDL_ShowCursor();
cursor_visible = true;
}
}
}
void updateCursorVisibility() {
// CRÍTICO: Si estamos en modo forzado, no aplicar lógica de timeout
if (force_hidden) {
return; // Salir temprano - el cursor permanece oculto
}
// MODO NORMAL: Auto-ocultar basado en timeout
Uint32 current_time = SDL_GetTicks();
if (cursor_visible && (current_time - last_mouse_move_time > cursor_hide_time)) {
SDL_HideCursor();
cursor_visible = false;
}
}
} // namespace Mouse

View File

@@ -0,0 +1,16 @@
#pragma once
#include <SDL3/SDL.h>
namespace Mouse {
extern Uint32 cursor_hide_time; // Tiempo en milisegundos para ocultar el cursor
extern Uint32 last_mouse_move_time; // Última vez que el ratón se movió
extern bool cursor_visible; // Estado del cursor
void handleEvent(const SDL_Event& event);
void updateCursorVisibility();
// Control de visibilidad forzada (para modo pantalla completa)
void setForceHidden(bool force); // Activar/desactivar ocultación forzada
bool isForceHidden(); // Consultar estado actual
} // namespace Mouse