Añadidas nuevas funciones al botón de servicio

El botón de servicio se puede usar en cualquier sección del juego
This commit is contained in:
2024-09-15 13:03:53 +02:00
parent a435e3ed8c
commit 04935c652d
14 changed files with 171 additions and 40 deletions

View File

@@ -225,7 +225,13 @@ bool Input::checkAnyInput(int device, int index)
// Comprueba si hay algún botón pulsado. Devuelve 0 en caso de no encontrar nada o el indice del dispositivo + 1. Se hace así para poder gastar el valor devuelto como un valor "booleano"
int Input::checkAnyButtonPressed(bool repeat)
{
// Solo comprueba los botones
// Si está pulsado el botón de servicio, ningún botón se puede considerar pulsado
if (checkInput(input_service, INPUT_ALLOW_REPEAT, INPUT_USE_ANY))
{
return 0;
}
// Solo comprueba los botones definidos previamente
for (auto bi : buttonInputs)
{
// Comprueba el teclado

View File

@@ -44,8 +44,8 @@ enum inputs_e
input_number_of_inputs
};
#define ALLOW_REPEAT true
#define DO_NOT_ALLOW_REPEAT false
#define INPUT_ALLOW_REPEAT true
#define INPUT_DO_NOT_ALLOW_REPEAT false
#define INPUT_USE_KEYBOARD 0
#define INPUT_USE_GAMECONTROLLER 1
@@ -111,7 +111,7 @@ public:
bool checkAnyInput(int device = INPUT_USE_ANY, int index = 0);
// Comprueba si hay algún botón pulsado
int checkAnyButtonPressed(bool repeat = DO_NOT_ALLOW_REPEAT);
int checkAnyButtonPressed(bool repeat = INPUT_DO_NOT_ALLOW_REPEAT);
// Busca si hay mandos conectados
bool discoverGameControllers();

View File

@@ -319,21 +319,21 @@ void Screen::update()
void Screen::checkInput()
{
#ifndef ARCADE
if (input->checkInput(input_window_fullscreen, DO_NOT_ALLOW_REPEAT))
if (input->checkInput(input_window_fullscreen, INPUT_DO_NOT_ALLOW_REPEAT))
{
switchVideoMode();
const std::string mode = options->video.mode == SCREEN_VIDEO_MODE_WINDOW ? "Window" : "Fullscreen";
showNotification(mode + " mode");
}
else if (input->checkInput(input_window_dec_size, DO_NOT_ALLOW_REPEAT))
else if (input->checkInput(input_window_dec_size, INPUT_DO_NOT_ALLOW_REPEAT))
{
decWindowSize();
const std::string size = std::to_string(options->video.window.size);
showNotification("Window size x" + size);
}
else if (input->checkInput(input_window_inc_size, DO_NOT_ALLOW_REPEAT))
else if (input->checkInput(input_window_inc_size, INPUT_DO_NOT_ALLOW_REPEAT))
{
incWindowSize();
const std::string size = std::to_string(options->video.window.size);
@@ -341,12 +341,12 @@ void Screen::checkInput()
}
#endif
if (input->checkInput(input_video_shaders, DO_NOT_ALLOW_REPEAT))
if (input->checkInput(input_video_shaders, INPUT_DO_NOT_ALLOW_REPEAT))
{
switchShaders();
}
else if (input->checkInput(input_showinfo, DO_NOT_ALLOW_REPEAT))
else if (input->checkInput(input_showinfo, INPUT_DO_NOT_ALLOW_REPEAT))
{
showInfo = !showInfo;
}

View File

@@ -511,7 +511,7 @@ void Director::initOptions()
c.inputs.push_back(input_fire_center);
c.inputs.push_back(input_fire_right);
c.inputs.push_back(input_start);
c.inputs.push_back(input_exit);
c.inputs.push_back(input_service);
c.buttons.clear();
c.buttons.push_back(SDL_CONTROLLER_BUTTON_X);
@@ -779,8 +779,8 @@ bool Director::saveConfigFile()
file << "controller" + joyIndex + ".inputs.fire_left=" + std::to_string((int)options->controller[index].buttons[0]) + "\n";
file << "controller" + joyIndex + ".inputs.fire_center=" + std::to_string((int)options->controller[index].buttons[1]) + "\n";
file << "controller" + joyIndex + ".inputs.fire_right=" + std::to_string((int)options->controller[index].buttons[2]) + "\n";
file << "controller" + joyIndex + ".inputs.fire_start=" + std::to_string((int)options->controller[index].buttons[3]) + "\n";
file << "controller" + joyIndex + ".inputs.fire_exit=" + std::to_string((int)options->controller[index].buttons[4]) + "\n";
file << "controller" + joyIndex + ".inputs.start=" + std::to_string((int)options->controller[index].buttons[3]) + "\n";
file << "controller" + joyIndex + ".inputs.service=" + std::to_string((int)options->controller[index].buttons[4]) + "\n";
if (index < numPlayers - 1)
{
@@ -1080,12 +1080,12 @@ bool Director::setOptions(options_t *options, std::string var, std::string value
options->controller[0].buttons[2] = (SDL_GameControllerButton)std::stoi(value);
}
else if (var == "controller1.inputs.fire_start")
else if (var == "controller1.inputs.start")
{
options->controller[0].buttons[3] = (SDL_GameControllerButton)std::stoi(value);
}
else if (var == "controller1.inputs.fire_exit")
else if (var == "controller1.inputs.service")
{
options->controller[0].buttons[4] = (SDL_GameControllerButton)std::stoi(value);
}
@@ -1110,12 +1110,12 @@ bool Director::setOptions(options_t *options, std::string var, std::string value
options->controller[1].buttons[2] = (SDL_GameControllerButton)std::stoi(value);
}
else if (var == "controller2.inputs.fire_start")
else if (var == "controller2.inputs.start")
{
options->controller[1].buttons[3] = (SDL_GameControllerButton)std::stoi(value);
}
else if (var == "controller2.inputs.fire_exit")
else if (var == "controller2.inputs.service")
{
options->controller[1].buttons[4] = (SDL_GameControllerButton)std::stoi(value);
}

View File

@@ -1,4 +1,5 @@
#include "game.h"
#include "service.h"
#define GAME_OVER_COUNTER 350
@@ -124,7 +125,7 @@ void Game::init(int playerID)
// Obtiene el "id" del jugador que va a jugar
Player *player = getPlayer(playerID);
// Cambia el estado del jugador seleccionado
player->setStatusPlaying(PLAYER_STATUS_PLAYING);
@@ -2038,20 +2039,37 @@ void Game::updateMenace()
void Game::checkInput()
{
// Comprueba las teclas que afectan al programa (solo para el primer jugador)
if (input->checkInput(input_exit, DO_NOT_ALLOW_REPEAT))
if (input->checkInput(input_exit, INPUT_DO_NOT_ALLOW_REPEAT))
{
section->name = SECTION_PROG_QUIT;
section->options = SECTION_OPTIONS_QUIT_NORMAL;
return;
}
else if (input->checkInput(input_reset, DO_NOT_ALLOW_REPEAT))
// Comprueba el botón de SERVICE
switch (checkServiceButton(input, 0))
{
case SERVICE_EXIT:
{
section->name = SECTION_PROG_QUIT;
section->options = SECTION_OPTIONS_QUIT_SHUTDOWN;
break;
}
case SERVICE_SHADERS:
{
screen->switchShaders();
break;
}
case SERVICE_RESET:
{
section->name = SECTION_PROG_LOGO;
screen->showNotification("Reset");
return;
break;
}
else if (input->checkInput(input_mute, DO_NOT_ALLOW_REPEAT))
case SERVICE_MUTE:
{
const bool value = !options->audio.music.enabled;
options->audio.music.enabled = value;
@@ -2060,12 +2078,19 @@ void Game::checkInput()
JA_EnableSound(value);
const std::string text = value ? "on" : "off";
screen->showNotification("Audio " + text);
return;
break;
}
else if (input->checkInput(input_pause, DO_NOT_ALLOW_REPEAT))
case SERVICE_PAUSE:
{
pause(!paused);
break;
}
default:
{
break;
}
}
// Modo Demo activo
@@ -2153,7 +2178,7 @@ void Game::checkInput()
if (player->isPlaying())
{
// Input a la izquierda
if (input->checkInput(input_left, ALLOW_REPEAT, options->controller[controllerIndex].deviceType, options->controller[controllerIndex].index))
if (input->checkInput(input_left, INPUT_ALLOW_REPEAT, options->controller[controllerIndex].deviceType, options->controller[controllerIndex].index))
{
player->setInput(input_left);
#ifdef RECORDING
@@ -2163,7 +2188,7 @@ void Game::checkInput()
else
{
// Input a la derecha
if (input->checkInput(input_right, ALLOW_REPEAT, options->controller[controllerIndex].deviceType, options->controller[controllerIndex].index))
if (input->checkInput(input_right, INPUT_ALLOW_REPEAT, options->controller[controllerIndex].deviceType, options->controller[controllerIndex].index))
{
player->setInput(input_right);
#ifdef RECORDING
@@ -2242,7 +2267,7 @@ void Game::checkInput()
else
{
// Si no está jugando, el botón de start le permite continuar jugando
if (input->checkInput(input_start, ALLOW_REPEAT, options->controller[controllerIndex].deviceType, options->controller[controllerIndex].index))
if (input->checkInput(input_start, INPUT_ALLOW_REPEAT, options->controller[controllerIndex].deviceType, options->controller[controllerIndex].index))
{
// Si no ha entrado ya en el estado de game over, entonces se puede continuar
if (gameOverCounter == GAME_OVER_COUNTER)

View File

@@ -1,4 +1,5 @@
#include "hiscore_table.h"
#include "service.h"
#include <iostream>
// Constructor
@@ -194,9 +195,10 @@ void HiScoreTable::checkEvents()
// Comprueba las entradas
void HiScoreTable::checkInput()
{
if (input->checkInput(input_exit, DO_NOT_ALLOW_REPEAT))
if (input->checkInput(input_exit, INPUT_DO_NOT_ALLOW_REPEAT))
{
section->name = SECTION_PROG_QUIT;
section->options = SECTION_OPTIONS_QUIT_NORMAL;
}
else if (input->checkAnyButtonPressed())
@@ -206,6 +208,22 @@ void HiScoreTable::checkInput()
section->options = SECTION_OPTIONS_TITLE_1;
}
// Comprueba el botón de SERVICE
switch (checkServiceButton(input, 0))
{
case SERVICE_EXIT:
section->name = SECTION_PROG_QUIT;
section->options = SECTION_OPTIONS_QUIT_SHUTDOWN;
break;
case SERVICE_SHADERS:
screen->switchShaders();
break;
default:
break;
}
// Comprueba el input para el resto de objetos
screen->checkInput();
}

View File

@@ -1,4 +1,5 @@
#include "instructions.h"
#include "service.h"
#include <iostream>
// Constructor
@@ -323,9 +324,10 @@ void Instructions::checkEvents()
// Comprueba las entradas
void Instructions::checkInput()
{
if (input->checkInput(input_exit, DO_NOT_ALLOW_REPEAT))
if (input->checkInput(input_exit, INPUT_DO_NOT_ALLOW_REPEAT))
{
section->name = SECTION_PROG_QUIT;
section->options = SECTION_OPTIONS_QUIT_NORMAL;
}
else if (input->checkAnyButtonPressed())
@@ -335,6 +337,22 @@ void Instructions::checkInput()
section->options = SECTION_OPTIONS_TITLE_1;
}
// Comprueba el botón de SERVICE
switch (checkServiceButton(input, 0))
{
case SERVICE_EXIT:
section->name = SECTION_PROG_QUIT;
section->options = SECTION_OPTIONS_QUIT_SHUTDOWN;
break;
case SERVICE_SHADERS:
screen->switchShaders();
break;
default:
break;
}
// Comprueba el input para el resto de objetos
screen->checkInput();
}

View File

@@ -1,4 +1,5 @@
#include "intro.h"
#include "service.h"
// Constructor
Intro::Intro(Screen *screen, Asset *asset, Input *input, Lang *lang, param_t *param, section_t *section, JA_Music_t *music)
@@ -193,9 +194,10 @@ void Intro::checkEvents()
// Comprueba las entradas
void Intro::checkInput()
{
if (input->checkInput(input_exit, DO_NOT_ALLOW_REPEAT))
if (input->checkInput(input_exit, INPUT_DO_NOT_ALLOW_REPEAT))
{
section->name = SECTION_PROG_QUIT;
section->options = SECTION_OPTIONS_QUIT_NORMAL;
}
else if (input->checkAnyButtonPressed())
@@ -205,6 +207,22 @@ void Intro::checkInput()
section->options = SECTION_OPTIONS_TITLE_1;
}
// Comprueba el botón de SERVICE
switch (checkServiceButton(input, 0))
{
case SERVICE_EXIT:
section->name = SECTION_PROG_QUIT;
section->options = SECTION_OPTIONS_QUIT_SHUTDOWN;
break;
case SERVICE_SHADERS:
screen->switchShaders();
break;
default:
break;
}
// Comprueba el input para el resto de objetos
screen->checkInput();
}

View File

@@ -1,4 +1,5 @@
#include "logo.h"
#include "service.h"
#include <iostream>
// Constructor
@@ -103,9 +104,11 @@ void Logo::checkEvents()
// Comprueba las entradas
void Logo::checkInput()
{
if (input->checkInput(input_exit, DO_NOT_ALLOW_REPEAT))
if (input->checkInput(input_exit, INPUT_DO_NOT_ALLOW_REPEAT))
{
section->name = SECTION_PROG_QUIT;
section->options = SECTION_OPTIONS_QUIT_NORMAL;
return;
}
else if (input->checkAnyButtonPressed())
@@ -114,6 +117,23 @@ void Logo::checkInput()
section->options = SECTION_OPTIONS_TITLE_1;
}
// Comprueba el botón de SERVICE
switch (checkServiceButton(input, 0))
{
case SERVICE_EXIT:
section->name = SECTION_PROG_QUIT;
section->options = SECTION_OPTIONS_QUIT_SHUTDOWN;
return;
break;
case SERVICE_SHADERS:
screen->switchShaders();
break;
default:
break;
}
// Comprueba el input para el resto de objetos
screen->checkInput();
}

View File

@@ -23,7 +23,8 @@ int main(int argc, char *argv[])
// Destruye el objeto Director
delete director;
std::cout << "\nGame end" << std::endl;
const std::string endType = exit == SECTION_OPTIONS_QUIT_NORMAL ? "to terminal" : "shutdown";
std::cout << "\nGame end -> " << endType << std::endl;
return exit;
}

View File

@@ -24,6 +24,21 @@ int checkServiceButton(Input *input, int index)
{
return SERVICE_PAUSE;
}
else if (input->checkInput(input_up, false, INPUT_USE_GAMECONTROLLER, index))
{
return SERVICE_SWAP_CONTROLLERS;
}
else if (input->checkInput(input_down, false, INPUT_USE_GAMECONTROLLER, index))
{
return SERVICE_RESET;
}
else if (input->checkInput(input_left, false, INPUT_USE_GAMECONTROLLER, index))
{
return SERVICE_MUTE;
}
}
return SERVICE_NULL;

View File

@@ -5,11 +5,17 @@
#include "common/input.h"
#include "const.h"
#define SERVICE_NULL 0
#define SERVICE_EXIT 1
#define SERVICE_CONFIG 2
#define SERVICE_SHADERS 3
#define SERVICE_PAUSE 4
enum service_e
{
SERVICE_NULL,
SERVICE_EXIT,
SERVICE_CONFIG,
SERVICE_SHADERS,
SERVICE_PAUSE,
SERVICE_SWAP_CONTROLLERS,
SERVICE_RESET,
SERVICE_MUTE
};
// Comprueba el botón de servicio del controlador "index"
int checkServiceButton(Input *input, int index);

View File

@@ -1,4 +1,5 @@
#include "title.h"
#include "service.h"
// Constructor
Title::Title(Screen *screen, Asset *asset, Input *input, options_t *options, Lang *lang, param_t *param, section_t *section, JA_Music_t *music)
@@ -248,14 +249,14 @@ void Title::checkInput()
//////////////////////////////////////////////////
// Comprueba el teclado para salir
if (input->checkInput(input_exit, DO_NOT_ALLOW_REPEAT, INPUT_USE_KEYBOARD))
if (input->checkInput(input_exit, INPUT_DO_NOT_ALLOW_REPEAT, INPUT_USE_KEYBOARD))
{
section->name = SECTION_PROG_QUIT;
section->options = SECTION_OPTIONS_QUIT_NORMAL;
}
// Comprueba el teclado para empezar a jugar
if (input->checkInput(input_start, false, INPUT_USE_KEYBOARD))
if (input->checkInput(input_start, INPUT_DO_NOT_ALLOW_REPEAT, INPUT_USE_KEYBOARD))
{
if (section->options == SECTION_OPTIONS_TITLE_2 || ALLOW_TITLE_ANIMATION_SKIP)
{
@@ -284,6 +285,10 @@ void Title::checkInput()
defineButtons->enable(0);
break;
case SERVICE_SWAP_CONTROLLERS:
defineButtons->swapControllers();
break;
default:
break;
}
@@ -291,7 +296,7 @@ void Title::checkInput()
// Comprueba el botón de START de los mandos
for (int i = 0; i < input->getNumControllers(); ++i)
{
if (input->checkInput(input_start, false, INPUT_USE_GAMECONTROLLER, i))
if (input->checkInput(input_start, INPUT_DO_NOT_ALLOW_REPEAT, INPUT_USE_GAMECONTROLLER, i))
{
if (section->options == SECTION_OPTIONS_TITLE_2 || ALLOW_TITLE_ANIMATION_SKIP)
{

View File

@@ -20,7 +20,6 @@
#include "tiledbg.h"
#include "game_logo.h"
#include "define_buttons.h"
#include "service.h"
// Textos
#define TEXT_COPYRIGHT "@2020,2024 JailDesigner"