174 lines
4.2 KiB
C++
174 lines
4.2 KiB
C++
#include "define_buttons.h"
|
|
|
|
// Constructor
|
|
DefineButtons::DefineButtons(Input *input, Text *text, param_t *param, options_t *options, section_t *section)
|
|
{
|
|
// Copia punteros a los objetos
|
|
this->input = input;
|
|
this->text = text;
|
|
this->param = param;
|
|
this->options = options;
|
|
this->section = section;
|
|
|
|
// Inicializa variables
|
|
enabled = false;
|
|
x = param->gameWidth / 2;
|
|
y = param->pressStart;
|
|
indexController = 0;
|
|
indexButton = 0;
|
|
|
|
buttons.clear();
|
|
db_button_t button;
|
|
|
|
button.label = "DISPARO IZQUIERDA";
|
|
button.input = input_fire_left;
|
|
button.button = SDL_CONTROLLER_BUTTON_X;
|
|
buttons.push_back(button);
|
|
|
|
button.label = "DISPARO CENTRO";
|
|
button.input = input_fire_center;
|
|
button.button = SDL_CONTROLLER_BUTTON_Y;
|
|
buttons.push_back(button);
|
|
|
|
button.label = "DISPARO DERECHA";
|
|
button.input = input_fire_right;
|
|
button.button = SDL_CONTROLLER_BUTTON_RIGHTSHOULDER;
|
|
buttons.push_back(button);
|
|
|
|
button.label = "START";
|
|
button.input = input_start;
|
|
button.button = SDL_CONTROLLER_BUTTON_START;
|
|
buttons.push_back(button);
|
|
|
|
button.label = "SALIR DEL JUEGO";
|
|
button.input = input_exit;
|
|
button.button = SDL_CONTROLLER_BUTTON_BACK;
|
|
buttons.push_back(button);
|
|
|
|
for (int i = 0; i < input->getNumControllers(); ++i)
|
|
{
|
|
controllerNames.push_back(input->getControllerName(i));
|
|
}
|
|
}
|
|
|
|
// Destructor
|
|
DefineButtons::~DefineButtons()
|
|
{
|
|
}
|
|
|
|
// Actualiza las variables del objeto
|
|
void DefineButtons::update()
|
|
{
|
|
if (enabled)
|
|
{
|
|
}
|
|
}
|
|
|
|
// Dibuja el objeto en pantalla
|
|
void DefineButtons::render()
|
|
{
|
|
if (enabled)
|
|
{
|
|
text->writeCentered(x, y - 10, "PLAYER " + std::to_string(indexController + 1));
|
|
text->writeCentered(x, y, controllerNames[indexController]);
|
|
text->writeCentered(x, y + 10, buttons[indexButton].label);
|
|
}
|
|
}
|
|
|
|
// Comprueba el botón que se ha pulsado
|
|
void DefineButtons::doControllerButtonDown(SDL_ControllerButtonEvent *event)
|
|
{
|
|
int i = input->getJoyIndex(event->which);
|
|
|
|
// Solo pillamos botones del mando que toca
|
|
if (i != indexController)
|
|
{
|
|
return;
|
|
}
|
|
|
|
buttons[indexButton].button = (SDL_GameControllerButton)event->button;
|
|
incIndexButton();
|
|
}
|
|
|
|
// Asigna los botones definidos al input
|
|
void DefineButtons::bindButtons()
|
|
{
|
|
for (int i = 0; i < (int)buttons.size(); ++i)
|
|
{
|
|
input->bindGameControllerButton(indexController, buttons[i].input, buttons[i].button);
|
|
}
|
|
}
|
|
|
|
// Comprueba las entradas
|
|
void DefineButtons::checkInput()
|
|
{
|
|
if (enabled)
|
|
{
|
|
SDL_Event event;
|
|
|
|
// Comprueba los eventos que hay en la cola
|
|
while (SDL_PollEvent(&event))
|
|
{
|
|
// Evento de salida de la aplicación
|
|
if (event.type == SDL_QUIT)
|
|
{
|
|
section->name = SECTION_PROG_QUIT;
|
|
break;
|
|
}
|
|
|
|
if (event.type == SDL_CONTROLLERBUTTONDOWN)
|
|
doControllerButtonDown(&event.cbutton);
|
|
}
|
|
}
|
|
}
|
|
|
|
// Habilita el objeto
|
|
void DefineButtons::enable(int index)
|
|
{
|
|
if (input->getNumControllers() > 0)
|
|
{
|
|
enabled = true;
|
|
indexController = index;
|
|
indexButton = 0;
|
|
}
|
|
}
|
|
|
|
// Comprueba si está habilitado
|
|
bool DefineButtons::isEnabled()
|
|
{
|
|
return enabled;
|
|
}
|
|
|
|
// Incrementa el indice de los botones
|
|
void DefineButtons::incIndexButton()
|
|
{
|
|
indexButton++;
|
|
|
|
// Comprueba si ha finalizado
|
|
if (indexButton == (int)buttons.size())
|
|
{
|
|
// Asigna los botones definidos al input
|
|
bindButtons();
|
|
|
|
// Guarda los cambios en las opciones
|
|
saveBindingsToOptions();
|
|
|
|
input->allActive(indexController);
|
|
|
|
// Reinicia variables
|
|
indexButton = 0;
|
|
indexController = 0;
|
|
enabled = false;
|
|
}
|
|
}
|
|
|
|
// Guarda los cambios en las opciones
|
|
void DefineButtons::saveBindingsToOptions()
|
|
{
|
|
// Modifica las opciones para colocar los valores asignados
|
|
options->controller[indexController].name = input->getControllerName(indexController);
|
|
for (int j = 0; j < (int)options->controller[indexController].inputs.size(); ++j)
|
|
{
|
|
options->controller[indexController].buttons[j] = input->getControllerBinding(indexController, options->controller[indexController].inputs[j]);
|
|
}
|
|
} |