#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