Moguts els checkInputs de Screen a GlobalInputs

This commit is contained in:
2024-11-01 19:07:19 +01:00
parent c66cc965f1
commit 2dd8bbbbf7
9 changed files with 147 additions and 159 deletions

View File

@@ -1605,19 +1605,13 @@ int Game::getController(int player_id)
// Gestiona la entrada durante el juego // Gestiona la entrada durante el juego
void Game::checkInput() void Game::checkInput()
{ {
checkPauseInput(); // Verifica si se debe pausar el juego. // Verifica si se debe pausar el juego.
checkPauseInput();
if (demo_.enabled) demo_.enabled ? handleDemoMode() : handlePlayersInput();
{ // Controla el comportamiento de los jugadores en modo demo.
handleDemoMode();
}
else
{ // Gestiona el input normal de los jugadores.
handlePlayersInput();
}
screen_->checkInput(); // Verifica el input en la pantalla del juego. // Verifica los inputs globales.
globalInputs::check(); // Verifica los inputs globales. globalInputs::check();
} }
// Verifica si alguno de los controladores ha solicitado una pausa y actualiza el estado de pausa del juego. // Verifica si alguno de los controladores ha solicitado una pausa y actualiza el estado de pausa del juego.
@@ -1628,14 +1622,14 @@ void Game::checkPauseInput()
if (input_->checkInput(InputType::SERVICE, INPUT_ALLOW_REPEAT, INPUT_USE_GAMECONTROLLER, i) && if (input_->checkInput(InputType::SERVICE, INPUT_ALLOW_REPEAT, INPUT_USE_GAMECONTROLLER, i) &&
input_->checkInput(InputType::PAUSE, INPUT_DO_NOT_ALLOW_REPEAT, INPUT_USE_GAMECONTROLLER, i)) input_->checkInput(InputType::PAUSE, INPUT_DO_NOT_ALLOW_REPEAT, INPUT_USE_GAMECONTROLLER, i))
{ {
pause(!paused_); // Alterna entre pausado y no pausado. pause(!paused_);
return; return;
} }
// Comprueba el teclado // Comprueba el teclado
if (input_->checkInput(InputType::PAUSE, INPUT_DO_NOT_ALLOW_REPEAT, INPUT_USE_KEYBOARD)) if (input_->checkInput(InputType::PAUSE, INPUT_DO_NOT_ALLOW_REPEAT, INPUT_USE_KEYBOARD))
{ {
pause(!paused_); // Alterna entre pausado y no pausado. pause(!paused_);
return; return;
} }
} }

View File

@@ -8,6 +8,7 @@
#include "options.h" // Para Options, OptionsAudio, options, OptionsM... #include "options.h" // Para Options, OptionsAudio, options, OptionsM...
#include "section.h" // Para Name, Options, name, options #include "section.h" // Para Name, Options, name, options
#include "utils.h" // Para boolToOnOff, stringInVector #include "utils.h" // Para boolToOnOff, stringInVector
#include "screen.h"
namespace globalInputs namespace globalInputs
{ {
@@ -54,7 +55,7 @@ namespace globalInputs
} }
// Activa o desactiva el audio // Activa o desactiva el audio
void switchAudio() void toggleAudio()
{ {
options.audio.enabled = !options.audio.enabled; options.audio.enabled = !options.audio.enabled;
if (options.audio.enabled) if (options.audio.enabled)
@@ -73,26 +74,73 @@ namespace globalInputs
// Comprueba los inputs que se pueden introducir en cualquier sección del juego // Comprueba los inputs que se pueden introducir en cualquier sección del juego
void check() void check()
{ {
// Comprueba si se sale con el teclado // Teclado
{
#ifndef ARCADE
// Comprueba el teclado para cambiar entre pantalla completa y ventana
if (Input::get()->checkInput(InputType::WINDOW_FULLSCREEN, INPUT_DO_NOT_ALLOW_REPEAT, INPUT_USE_KEYBOARD))
{
Screen::get()->toggleVideoMode();
const std::string mode = options.video.mode == ScreenVideoMode::WINDOW ? "Window" : "Fullscreen";
Notifier::get()->showText(mode + " mode");
return;
}
// Comprueba el teclado para decrementar el tamaño de la ventana
if (Input::get()->checkInput(InputType::WINDOW_DEC_SIZE, INPUT_DO_NOT_ALLOW_REPEAT, INPUT_USE_KEYBOARD))
{
Screen::get()->decWindowSize();
const std::string size = std::to_string(options.video.window.size);
Notifier::get()->showText("Window size x" + size);
return;
}
// Comprueba el teclado para incrementar el tamaño de la ventana
if (Input::get()->checkInput(InputType::WINDOW_INC_SIZE, INPUT_DO_NOT_ALLOW_REPEAT, INPUT_USE_KEYBOARD))
{
Screen::get()->incWindowSize();
const std::string size = std::to_string(options.video.window.size);
Notifier::get()->showText("Window size x" + size);
return;
}
#endif
// Salir
if (Input::get()->checkInput(InputType::EXIT, INPUT_DO_NOT_ALLOW_REPEAT, INPUT_USE_KEYBOARD)) if (Input::get()->checkInput(InputType::EXIT, INPUT_DO_NOT_ALLOW_REPEAT, INPUT_USE_KEYBOARD))
{ {
quit(section::Options::QUIT_WITH_KEYBOARD); quit(section::Options::QUIT_WITH_KEYBOARD);
return; return;
} }
// Comprueba si se va a resetear el juego // Reset
if (Input::get()->checkInput(InputType::RESET, INPUT_DO_NOT_ALLOW_REPEAT, INPUT_USE_KEYBOARD)) if (Input::get()->checkInput(InputType::RESET, INPUT_DO_NOT_ALLOW_REPEAT, INPUT_USE_KEYBOARD))
{ {
reset(); reset();
return; return;
} }
// Audio
if (Input::get()->checkInput(InputType::MUTE, INPUT_DO_NOT_ALLOW_REPEAT, INPUT_USE_KEYBOARD)) if (Input::get()->checkInput(InputType::MUTE, INPUT_DO_NOT_ALLOW_REPEAT, INPUT_USE_KEYBOARD))
{ {
switchAudio(); toggleAudio();
return; return;
} }
// Shaders
if (Input::get()->checkInput(InputType::VIDEO_SHADERS, INPUT_DO_NOT_ALLOW_REPEAT, INPUT_USE_KEYBOARD))
{
Screen::get()->toggleShaders();
return;
}
#ifdef DEBUG
// Comprueba el teclado para mostrar la información de debug
if (Input::get()->checkInput(InputType::SHOWINFO, INPUT_DO_NOT_ALLOW_REPEAT, INPUT_USE_KEYBOARD))
{
Screen::get()->toggleDebugInfo();
return;
}
#endif
// OnScreenHelp
if (Input::get()->checkInput(InputType::SERVICE, INPUT_ALLOW_REPEAT, INPUT_USE_KEYBOARD)) if (Input::get()->checkInput(InputType::SERVICE, INPUT_ALLOW_REPEAT, INPUT_USE_KEYBOARD))
{ {
service_pressed_counter[0]++; service_pressed_counter[0]++;
@@ -106,10 +154,13 @@ namespace globalInputs
} }
service_pressed_counter[0] = 0; service_pressed_counter[0] = 0;
}
// Mandos
{
for (int i = 0; i < Input::get()->getNumControllers(); ++i) for (int i = 0; i < Input::get()->getNumControllers(); ++i)
{ {
// Comprueba si se sale con el mando // Salir
if (Input::get()->checkInput(InputType::SERVICE, INPUT_ALLOW_REPEAT, INPUT_USE_GAMECONTROLLER, i) && if (Input::get()->checkInput(InputType::SERVICE, INPUT_ALLOW_REPEAT, INPUT_USE_GAMECONTROLLER, i) &&
Input::get()->checkInput(InputType::EXIT, INPUT_DO_NOT_ALLOW_REPEAT, INPUT_USE_GAMECONTROLLER, i)) Input::get()->checkInput(InputType::EXIT, INPUT_DO_NOT_ALLOW_REPEAT, INPUT_USE_GAMECONTROLLER, i))
{ {
@@ -117,7 +168,7 @@ namespace globalInputs
return; return;
} }
// Comprueba si se va a resetear el juego // Reset
if (Input::get()->checkInput(InputType::SERVICE, INPUT_ALLOW_REPEAT, INPUT_USE_GAMECONTROLLER, i) && if (Input::get()->checkInput(InputType::SERVICE, INPUT_ALLOW_REPEAT, INPUT_USE_GAMECONTROLLER, i) &&
Input::get()->checkInput(InputType::RESET, INPUT_DO_NOT_ALLOW_REPEAT, INPUT_USE_GAMECONTROLLER, i)) Input::get()->checkInput(InputType::RESET, INPUT_DO_NOT_ALLOW_REPEAT, INPUT_USE_GAMECONTROLLER, i))
{ {
@@ -125,14 +176,31 @@ namespace globalInputs
return; return;
} }
// Comprueba si se va a activar o desactivar el audio // Audio
if (Input::get()->checkInput(InputType::SERVICE, INPUT_ALLOW_REPEAT, INPUT_USE_GAMECONTROLLER, i) && if (Input::get()->checkInput(InputType::SERVICE, INPUT_ALLOW_REPEAT, INPUT_USE_GAMECONTROLLER, i) &&
Input::get()->checkInput(InputType::MUTE, INPUT_DO_NOT_ALLOW_REPEAT, INPUT_USE_GAMECONTROLLER, i)) Input::get()->checkInput(InputType::MUTE, INPUT_DO_NOT_ALLOW_REPEAT, INPUT_USE_GAMECONTROLLER, i))
{ {
switchAudio(); toggleAudio();
return; return;
} }
// Shaders
if (Input::get()->checkInput(InputType::SERVICE, INPUT_ALLOW_REPEAT, INPUT_USE_GAMECONTROLLER, i) &&
Input::get()->checkInput(InputType::VIDEO_SHADERS, INPUT_DO_NOT_ALLOW_REPEAT, INPUT_USE_GAMECONTROLLER, i))
{
Screen::get()->toggleShaders();
return;
}
#ifdef DEBUG
// Debug Info
if (Input::get()->checkInput(InputType::SERVICE, INPUT_ALLOW_REPEAT, INPUT_USE_GAMECONTROLLER, i) &&
Input::get()->checkInput(InputType::SHOWINFO, INPUT_DO_NOT_ALLOW_REPEAT, INPUT_USE_GAMECONTROLLER, i))
{
Screen::get()->toggleDebugInfo();
return;
}
#endif
// OnScreenHelp
if (Input::get()->checkInput(InputType::SERVICE, INPUT_ALLOW_REPEAT, INPUT_USE_GAMECONTROLLER, i)) if (Input::get()->checkInput(InputType::SERVICE, INPUT_ALLOW_REPEAT, INPUT_USE_GAMECONTROLLER, i))
{ {
service_pressed_counter[i + 1]++; service_pressed_counter[i + 1]++;
@@ -148,4 +216,5 @@ namespace globalInputs
service_pressed_counter[i + 1] = 0; service_pressed_counter[i + 1] = 0;
} }
} }
}
} }

View File

@@ -208,9 +208,6 @@ void HiScoreTable::checkInput()
return; return;
} }
// Comprueba el input para el resto de objetos
Screen::get()->checkInput();
// Comprueba los inputs que se pueden introducir en cualquier sección del juego // Comprueba los inputs que se pueden introducir en cualquier sección del juego
globalInputs::check(); globalInputs::check();
} }

View File

@@ -313,9 +313,6 @@ void Instructions::checkInput()
return; return;
} }
// Comprueba el input para el resto de objetos
Screen::get()->checkInput();
// Comprueba los inputs que se pueden introducir en cualquier sección del juego // Comprueba los inputs que se pueden introducir en cualquier sección del juego
globalInputs::check(); globalInputs::check();
} }

View File

@@ -191,9 +191,6 @@ void Intro::checkInput()
return; return;
} }
// Comprueba el input para el resto de objetos
Screen::get()->checkInput();
// Comprueba los inputs que se pueden introducir en cualquier sección del juego // Comprueba los inputs que se pueden introducir en cualquier sección del juego
globalInputs::check(); globalInputs::check();
} }

View File

@@ -105,9 +105,6 @@ void Logo::checkInput()
return; return;
} }
// Comprueba el input para el resto de objetos
Screen::get()->checkInput();
// Comprueba los inputs que se pueden introducir en cualquier sección del juego // Comprueba los inputs que se pueden introducir en cualquier sección del juego
globalInputs::check(); globalInputs::check();
} }

View File

@@ -98,7 +98,7 @@ void Screen::blit()
OnScreenHelp::get()->render(); OnScreenHelp::get()->render();
// Muestra información por pantalla // Muestra información por pantalla
displayInfo(); renderInfo();
// Muestra las notificaciones // Muestra las notificaciones
Notifier::get()->render(); Notifier::get()->render();
@@ -210,7 +210,7 @@ void Screen::setVideoMode(ScreenVideoMode videoMode)
} }
// Camibia entre pantalla completa y ventana // Camibia entre pantalla completa y ventana
void Screen::switchVideoMode() void Screen::toggleVideoMode()
{ {
options.video.mode = options.video.mode == ScreenVideoMode::WINDOW ? ScreenVideoMode::FULLSCREEN : ScreenVideoMode::WINDOW; options.video.mode = options.video.mode == ScreenVideoMode::WINDOW ? ScreenVideoMode::FULLSCREEN : ScreenVideoMode::WINDOW;
setVideoMode(options.video.mode); setVideoMode(options.video.mode);
@@ -260,74 +260,6 @@ void Screen::update()
OnScreenHelp::get()->update(); OnScreenHelp::get()->update();
} }
// Comprueba las entradas
void Screen::checkInput()
{
#ifndef ARCADE
// Comprueba el teclado para cambiar entre pantalla completa y ventana
if (Input::get()->checkInput(InputType::WINDOW_FULLSCREEN, INPUT_DO_NOT_ALLOW_REPEAT, INPUT_USE_KEYBOARD))
{
switchVideoMode();
const std::string mode = options.video.mode == ScreenVideoMode::WINDOW ? "Window" : "Fullscreen";
Notifier::get()->showText(mode + " mode");
return;
}
// Comprueba el teclado para decrementar el tamaño de la ventana
if (Input::get()->checkInput(InputType::WINDOW_DEC_SIZE, INPUT_DO_NOT_ALLOW_REPEAT, INPUT_USE_KEYBOARD))
{
decWindowSize();
const std::string size = std::to_string(options.video.window.size);
Notifier::get()->showText("Window size x" + size);
return;
}
// Comprueba el teclado para incrementar el tamaño de la ventana
if (Input::get()->checkInput(InputType::WINDOW_INC_SIZE, INPUT_DO_NOT_ALLOW_REPEAT, INPUT_USE_KEYBOARD))
{
incWindowSize();
const std::string size = std::to_string(options.video.window.size);
Notifier::get()->showText("Window size x" + size);
return;
}
#endif
// Comprueba el teclado para activar o desactivar los shaders
if (Input::get()->checkInput(InputType::VIDEO_SHADERS, INPUT_DO_NOT_ALLOW_REPEAT, INPUT_USE_KEYBOARD))
{
switchShaders();
return;
}
#ifdef DEBUG
// Comprueba el teclado para mostrar la información de debug
if (Input::get()->checkInput(InputType::SHOWINFO, INPUT_DO_NOT_ALLOW_REPEAT, INPUT_USE_KEYBOARD))
{
show_info_ = !show_info_;
return;
}
#endif
for (int i = 0; i < Input::get()->getNumControllers(); ++i)
{
// Comprueba los mandos para activar o desactivar los shaders
if (Input::get()->checkInput(InputType::SERVICE, INPUT_ALLOW_REPEAT, INPUT_USE_GAMECONTROLLER, i) &&
Input::get()->checkInput(InputType::VIDEO_SHADERS, INPUT_DO_NOT_ALLOW_REPEAT, INPUT_USE_GAMECONTROLLER, i))
{
switchShaders();
return;
}
// Comprueba los mandos para mostrar la información de debug
if (Input::get()->checkInput(InputType::SERVICE, INPUT_ALLOW_REPEAT, INPUT_USE_GAMECONTROLLER, i) &&
Input::get()->checkInput(InputType::SHOWINFO, INPUT_DO_NOT_ALLOW_REPEAT, INPUT_USE_GAMECONTROLLER, i))
{
show_info_ = !show_info_;
return;
}
}
}
// Agita la pantalla // Agita la pantalla
void Screen::shake() void Screen::shake()
{ {
@@ -404,8 +336,8 @@ void Screen::doAttenuate()
} }
} }
// Activa/desactiva los shaders // Activa / desactiva los shaders
void Screen::switchShaders() void Screen::toggleShaders()
{ {
options.video.shaders = !options.video.shaders; options.video.shaders = !options.video.shaders;
setVideoMode(options.video.mode); setVideoMode(options.video.mode);
@@ -413,6 +345,12 @@ void Screen::switchShaders()
Notifier::get()->showText("Shaders " + value); Notifier::get()->showText("Shaders " + value);
} }
// Activa / desactiva la información de debug
void Screen::toggleDebugInfo()
{
show_info_ = !show_info_;
}
// Atenua la pantalla // Atenua la pantalla
void Screen::attenuate(bool value) void Screen::attenuate(bool value)
{ {
@@ -437,7 +375,7 @@ void Screen::updateFPS()
} }
// Muestra información por pantalla // Muestra información por pantalla
void Screen::displayInfo() void Screen::renderInfo()
{ {
if (show_info_) if (show_info_)
{ {

View File

@@ -92,7 +92,7 @@ private:
void updateFPS(); void updateFPS();
// Muestra información por pantalla // Muestra información por pantalla
void displayInfo(); void renderInfo();
// Calcula la nueva posición de la ventana a partir de la antigua al cambiarla de tamaño // Calcula la nueva posición de la ventana a partir de la antigua al cambiarla de tamaño
SDL_Point getNewPosition(); SDL_Point getNewPosition();
@@ -118,9 +118,6 @@ public:
// Actualiza la lógica de la clase // Actualiza la lógica de la clase
void update(); void update();
// Comprueba las entradas
void checkInput();
// Limpia la pantalla // Limpia la pantalla
void clean(Color color = Color(0x00, 0x00, 0x00)); void clean(Color color = Color(0x00, 0x00, 0x00));
@@ -133,8 +130,8 @@ public:
// Establece el modo de video // Establece el modo de video
void setVideoMode(ScreenVideoMode video_mode); void setVideoMode(ScreenVideoMode video_mode);
// Camibia entre pantalla completa y ventana // Cambia entre pantalla completa y ventana
void switchVideoMode(); void toggleVideoMode();
// Cambia el tamaño de la ventana // Cambia el tamaño de la ventana
void setWindowSize(int size); void setWindowSize(int size);
@@ -157,8 +154,11 @@ public:
// Pone la pantalla de color // Pone la pantalla de color
void flash(Color color, int lenght); void flash(Color color, int lenght);
// Activa/desactiva los shaders // Activa / desactiva los shaders
void switchShaders(); void toggleShaders();
// Activa / desactiva la información de debug
void toggleDebugInfo();
// Atenua la pantalla // Atenua la pantalla
void attenuate(bool value); void attenuate(bool value);

View File

@@ -282,7 +282,6 @@ void Title::checkInput()
} }
// Comprueba el input para el resto de objetos // Comprueba el input para el resto de objetos
Screen::get()->checkInput();
define_buttons_->checkEvents(); define_buttons_->checkEvents();
// Comprueba los inputs que se pueden introducir en cualquier sección del juego // Comprueba los inputs que se pueden introducir en cualquier sección del juego