// global_events.cpp - Implementació dels events globals // © 2026 JailDesigner #include "global_events.hpp" #include #include "scene_context.hpp" #include "core/input/input.hpp" #include "core/input/mouse.hpp" #include "core/rendering/sdl_manager.hpp" // Using declarations per simplificar el codi using SceneManager::SceneContext; using SceneType = SceneContext::SceneType; namespace GlobalEvents { auto handle(const SDL_Event& event, SDLManager& sdl, SceneContext& context) -> bool { // 1. Permitir que Input procese el evento (para hotplug de gamepads) auto event_msg = Input::get()->handleEvent(event); if (!event_msg.empty()) { std::cout << "[Input] " << event_msg << '\n'; } // 2. Procesar SDL_EVENT_QUIT directamente (no es input de juego) if (event.type == SDL_EVENT_QUIT) { context.setNextScene(SceneType::EXIT); SceneManager::actual = SceneType::EXIT; return true; } // 3. Gestió del ratolí (auto-ocultar) Mouse::handleEvent(event); // 4. Procesar acciones globales directamente desde eventos SDL // (NO usar Input::checkAction() para evitar desfase de timing) if (event.type == SDL_EVENT_KEY_DOWN) { switch (event.key.scancode) { case SDL_SCANCODE_F1: sdl.decreaseWindowSize(); return true; case SDL_SCANCODE_F2: sdl.increaseWindowSize(); return true; case SDL_SCANCODE_F3: sdl.toggleFullscreen(); return true; case SDL_SCANCODE_F4: sdl.toggleVSync(); return true; case SDL_SCANCODE_ESCAPE: context.setNextScene(SceneType::EXIT); SceneManager::actual = SceneType::EXIT; return true; default: // Tecla no global break; } } return false; // Event no processat } } // namespace GlobalEvents