53 lines
2.3 KiB
C++
53 lines
2.3 KiB
C++
#include "core/system/global_events.hpp"
|
|
|
|
#include "core/input/input.hpp" // Para Input (gamepad add/remove)
|
|
#include "core/input/mouse.hpp"
|
|
#include "core/locale/locale.hpp" // Para Locale
|
|
#include "game/options.hpp" // Para Options, options, OptionsGame, OptionsAudio
|
|
#include "game/scene_manager.hpp" // Para SceneManager
|
|
#include "game/ui/console.hpp" // Para Console
|
|
#include "game/ui/notifier.hpp" // Para Notifier
|
|
|
|
namespace GlobalEvents {
|
|
// Comprueba los eventos que se pueden producir en cualquier sección del juego
|
|
void handle(const SDL_Event& event) {
|
|
#ifndef __EMSCRIPTEN__
|
|
// En la versión web no tenemos evento de quit del navegador
|
|
if (event.type == SDL_EVENT_QUIT) {
|
|
SceneManager::current = SceneManager::Scene::QUIT;
|
|
return;
|
|
}
|
|
#endif
|
|
|
|
if (event.type == SDL_EVENT_RENDER_DEVICE_RESET || event.type == SDL_EVENT_RENDER_TARGETS_RESET) {
|
|
// reLoadTextures();
|
|
}
|
|
|
|
// Conexión/desconexión de gamepads: hay que enrutarlos a Input para que
|
|
// añada el dispositivo a gamepads_. Sin esto, en wasm los gamepads
|
|
// nunca se detectan (la Gamepad API del navegador sólo los expone
|
|
// tras que el usuario los active, más tarde que el discoverGamepads
|
|
// inicial). En desktop también arregla la conexión en caliente.
|
|
if (event.type == SDL_EVENT_GAMEPAD_ADDED || event.type == SDL_EVENT_GAMEPAD_REMOVED) {
|
|
if (Input::get() != nullptr) {
|
|
std::string name = Input::get()->handleEvent(event);
|
|
if (!name.empty() && Notifier::get() != nullptr && Locale::get() != nullptr) {
|
|
const std::string KEY = (event.type == SDL_EVENT_GAMEPAD_ADDED)
|
|
? "ui.gamepad_connected"
|
|
: "ui.gamepad_disconnected";
|
|
Notifier::get()->show({name + " " + Locale::get()->get(KEY)});
|
|
}
|
|
}
|
|
}
|
|
|
|
// Enrutar eventos de texto a la consola cuando está activa
|
|
if (Console::get() != nullptr && Console::get()->isActive()) {
|
|
if (event.type == SDL_EVENT_TEXT_INPUT || event.type == SDL_EVENT_KEY_DOWN) {
|
|
Console::get()->handleEvent(event);
|
|
return;
|
|
}
|
|
}
|
|
|
|
Mouse::handleEvent(event);
|
|
}
|
|
} // namespace GlobalEvents
|