Abans de clavar-li ma a Input

This commit is contained in:
2024-11-01 20:01:17 +01:00
parent 2dd8bbbbf7
commit a1ccb6102a
3 changed files with 27 additions and 39 deletions

View File

@@ -110,30 +110,18 @@ Director::Director(int argc, const char *argv[])
manager->loadFromFile(Asset::get()->get("score.bin")); manager->loadFromFile(Asset::get()->get("score.bin"));
} }
// Inicializa SDL // Inicializa todo
initSDL(); initSDL();
// Inicializa JailAudio
initJailAudio(); initJailAudio();
// Inicializa el texto de debug
dbg_init(renderer_); dbg_init(renderer_);
lang::loadFromFile(getLangFile(static_cast<lang::Code>(options.game.language)));
// Crea los objetos
lang::loadFromFile(getLangFile((lang::Code)options.game.language));
Screen::init(window_, renderer_); Screen::init(window_, renderer_);
Resource::init(); Resource::init();
Input::init(Asset::get()->get("gamecontrollerdb.txt")); Input::init(Asset::get()->get("gamecontrollerdb.txt"));
bindInputs(); bindInputs();
auto notifier_text = std::make_shared<Text>(Resource::get()->getTexture("8bithud.png"), Resource::get()->getTextFile("8bithud.txt")); auto notifier_text = std::make_shared<Text>(Resource::get()->getTexture("8bithud.png"), Resource::get()->getTextFile("8bithud.txt"));
Notifier::init(std::string(), notifier_text, Asset::get()->get("notify.wav")); Notifier::init(std::string(), notifier_text, Asset::get()->get("notify.wav"));
OnScreenHelp::init(); OnScreenHelp::init();
globalInputs::init(); globalInputs::init();
} }
@@ -204,16 +192,20 @@ void Director::bindInputs()
} }
// Mapea las asignaciones a los botones desde el archivo de configuración, si se da el caso // Mapea las asignaciones a los botones desde el archivo de configuración, si se da el caso
for (int i = 0; i < num_gamepads; ++i) for (size_t i = 0; i < num_gamepads; ++i)
for (int index = 0; index < (int)options.controller.size(); ++index) {
if (Input::get()->getControllerName(i) == options.controller[index].name) for (size_t index = 0; index < options.controller.size(); ++index)
{
if (Input::get()->getControllerName(i) == options.controller.at(index).name)
{ {
options.controller[index].plugged = true; options.controller.at(index).plugged = true;
for (int j = 0; j < (int)options.controller[index].inputs.size(); ++j) for (size_t j = 0; j < options.controller.at(index).inputs.size(); ++j)
{ {
Input::get()->bindGameControllerButton(i, options.controller[index].inputs[j], options.controller[index].buttons[j]); Input::get()->bindGameControllerButton(i, options.controller.at(index).inputs.at(j), options.controller.at(index).buttons.at(j));
} }
} }
}
}
// Asigna botones a inputs desde otros inputs // Asigna botones a inputs desde otros inputs
for (int i = 0; i < num_gamepads; ++i) for (int i = 0; i < num_gamepads; ++i)

View File

@@ -75,7 +75,7 @@ void initOptions()
options.controller.push_back(c); options.controller.push_back(c);
} }
options.controller[0].device_type = INPUT_USE_ANY; // El primer jugador puede usar tanto el teclado como el primer mando options.controller.at(0).device_type = INPUT_USE_ANY; // El primer jugador puede usar tanto el teclado como el primer mando
} }
// Carga el fichero de configuración // Carga el fichero de configuración

View File

@@ -323,32 +323,28 @@ void Title::swapControllers()
// Muestra información sobre los controles y los jugadores // Muestra información sobre los controles y los jugadores
void Title::showControllers() void Title::showControllers()
{ {
// Crea cadenas de texto vacias para un numero máximo de mandos // Crea vectores de texto vacíos para un número máximo de mandos
constexpr int MAX_CONTROLLERS = 2; constexpr size_t NUM_CONTROLLERS = 2;
std::string text[MAX_CONTROLLERS]; std::vector<std::string> text(NUM_CONTROLLERS);
int playerControllerIndex[MAX_CONTROLLERS]; std::vector<int> playerControllerIndex(NUM_CONTROLLERS, -1);
for (int i = 0; i < MAX_CONTROLLERS; ++i)
{
text[i].clear();
playerControllerIndex[i] = -1;
}
// Obtiene para cada jugador el índice del mando correspondiente // Obtiene de cada jugador el índice del mando que tiene asignado
for (int i = 0; i < MAX_CONTROLLERS; ++i) for (size_t i = 0; i < NUM_CONTROLLERS; ++i)
{ {
playerControllerIndex[options.controller[i].player_id - 1] = i; // Ejemplo: el jugador 1 tiene el mando 2
playerControllerIndex.at(options.controller.at(i).player_id - 1) = i;
} }
// Genera el texto correspondiente // Genera el texto correspondiente
for (int i = 0; i < MAX_CONTROLLERS; ++i) for (size_t i = 0; i < NUM_CONTROLLERS; ++i)
{ {
const int index = playerControllerIndex[i]; const size_t index = playerControllerIndex.at(i);
if (options.controller[index].plugged) if (options.controller.at(index).plugged)
{ {
text[i] = lang::getText(100) + std::to_string(i + 1) + ": " + options.controller[index].name; text.at(i) = lang::getText(100) + std::to_string(i + 1) + ": " + options.controller.at(index).name;
} }
} }
Notifier::get()->showText(text[0], text[1]); Notifier::get()->showText(text.at(0), text.at(1));
resetCounter(); resetCounter();
} }