Working on support for various controllers

This commit is contained in:
2021-08-31 13:56:03 +02:00
parent 8e6d546b97
commit ad5fb0fc22
6 changed files with 41 additions and 31 deletions

View File

@@ -33,17 +33,14 @@ Director::Director(std::string path)
mOptions->windowSize = 3;
mOptions->language = en_UK;
mOptions->difficulty = DIFFICULTY_NORMAL;
mOptions->input[0] = INPUT_USE_KEYBOARD;
mOptions->input[1] = INPUT_USE_GAMECONTROLLER;
mOptions->input[0].deviceType = INPUT_USE_KEYBOARD;
mOptions->input[1].deviceType = INPUT_USE_GAMECONTROLLER;
mOptions->filter = FILTER_NEAREST;
mOptions->vSync = true;
}
// Crea los objetos
mInput = new Input(mFileList[53]);
//mInput2 = new Input(mOptions->input[1]);
//mInput[0] = new Input(INPUT_USE_KEYBOARD);
//mInput[1] = new Input(INPUT_USE_GAMECONTROLLER);
// Inicializa SDL
initSDL();
@@ -346,8 +343,8 @@ bool Director::loadConfigFile()
mOptions->windowSize = 3;
mOptions->language = en_UK;
mOptions->difficulty = DIFFICULTY_NORMAL;
mOptions->input[0] = INPUT_USE_KEYBOARD;
mOptions->input[1] = INPUT_USE_GAMECONTROLLER;
mOptions->input[0].deviceType = INPUT_USE_KEYBOARD;
mOptions->input[1].deviceType = INPUT_USE_GAMECONTROLLER;
mOptions->filter = FILTER_NEAREST;
mOptions->vSync = true;

View File

@@ -20,7 +20,7 @@
#include "game.h"
#include "input.h"
#include "fade.h"
#include <math.h>
//#include <math.h>
#ifndef DIRECTOR_H
#define DIRECTOR_H

View File

@@ -13,13 +13,13 @@ Game::Game(int numPlayers, SDL_Renderer *renderer, std::string *filelist, Lang *
mLang = lang;
mInput = input;
mOptions = options;
mOnePlayerControl = mOptions->input[0];
mOnePlayerControl = mOptions->input[0].deviceType;
// Pasa variables
mDemo.enabled = demo;
mNumPlayers = numPlayers;
if (mNumPlayers == 1)
mOptions->input[0] = INPUT_USE_ANY;
mOptions->input[0].deviceType = INPUT_USE_ANY;
mDifficulty = mOptions->difficulty;
// Crea los objetos
@@ -93,7 +93,7 @@ Game::~Game()
saveScoreFile();
saveDemoFile();
mOptions->input[0] = mOnePlayerControl;
mOptions->input[0].deviceType = mOnePlayerControl;
mRenderer = nullptr;
mFileList = nullptr;
@@ -2861,7 +2861,7 @@ void Game::checkGameInput()
if (mPlayer[i]->isAlive())
{
// Input a la izquierda
if (mInput->checkInput(INPUT_LEFT, REPEAT_TRUE, mOptions->input[i]))
if (mInput->checkInput(INPUT_LEFT, REPEAT_TRUE, mOptions->input[i].deviceType))
{
mPlayer[i]->setInput(INPUT_LEFT);
mDemo.keys.left = 1;
@@ -2869,7 +2869,7 @@ void Game::checkGameInput()
else
{
// Input a la derecha
if (mInput->checkInput(INPUT_RIGHT, REPEAT_TRUE, mOptions->input[i]))
if (mInput->checkInput(INPUT_RIGHT, REPEAT_TRUE, mOptions->input[i].deviceType))
{
mPlayer[i]->setInput(INPUT_RIGHT);
mDemo.keys.right = 1;
@@ -2882,7 +2882,7 @@ void Game::checkGameInput()
}
}
// Comprueba el input de disparar al centro
if (mInput->checkInput(INPUT_BUTTON_2, REPEAT_TRUE, mOptions->input[i]))
if (mInput->checkInput(INPUT_BUTTON_2, REPEAT_TRUE, mOptions->input[i].deviceType))
{
if (mPlayer[i]->canFire())
{
@@ -2898,7 +2898,7 @@ void Game::checkGameInput()
}
// Comprueba el input de disparar a la izquierda
if (mInput->checkInput(INPUT_BUTTON_1, REPEAT_TRUE, mOptions->input[i]))
if (mInput->checkInput(INPUT_BUTTON_1, REPEAT_TRUE, mOptions->input[i].deviceType))
{
if (mPlayer[i]->canFire())
{
@@ -2914,7 +2914,7 @@ void Game::checkGameInput()
}
// Comprueba el input de disparar a la derecha
if (mInput->checkInput(INPUT_BUTTON_3, REPEAT_TRUE, mOptions->input[i]))
if (mInput->checkInput(INPUT_BUTTON_3, REPEAT_TRUE, mOptions->input[i].deviceType))
{
if (mPlayer[i]->canFire())
{
@@ -2930,7 +2930,7 @@ void Game::checkGameInput()
}
// Comprueba el input de pausa
if (mInput->checkInput(INPUT_CANCEL, REPEAT_FALSE, mOptions->input[i]))
if (mInput->checkInput(INPUT_CANCEL, REPEAT_FALSE, mOptions->input[i].deviceType))
{
mSection.subsection = GAME_SECTION_PAUSE;

View File

@@ -1,7 +1,11 @@
#include "input.h"
//#include <stdio.h>
#include <iostream>
// Contestar cuantos joystics ha detectado
// Preguntarlepor los joystics que ha encontrado para ir poniendolos en la variable de opciones
// Constructor
Input::Input(std::string file)
{
@@ -24,9 +28,6 @@ Input::Input(std::string file)
// Destructor
Input::~Input()
{
//SDL_GameControllerClose(mGameController);
//if (mGameController)
//mGameController = nullptr;
for (int i = 0; i < mNumGamepads; i++)
mConnectedControllers[i] = nullptr;
}
@@ -49,6 +50,9 @@ bool Input::checkInput(Uint8 input, bool repeat, int device, int index)
bool successKeyboard = false;
bool successGameController = false;
if (device == INPUT_USE_ANY)
index = 0;
if ((device == INPUT_USE_KEYBOARD) || (device == INPUT_USE_ANY))
{
const Uint8 *mKeystates = SDL_GetKeyboardState(NULL);

View File

@@ -138,8 +138,8 @@ void Title::init(bool demo, Uint8 subsection)
if (!mInput->gameControllerFound())
{
mOptions->input[0] = INPUT_USE_KEYBOARD;
mOptions->input[1] = INPUT_USE_GAMECONTROLLER;
mOptions->input[0].deviceType = INPUT_USE_KEYBOARD;
mOptions->input[1].deviceType = INPUT_USE_GAMECONTROLLER;
}
// Inicializa el bitmap de Coffee
@@ -349,7 +349,7 @@ void Title::updateMenuLabels()
i++;
// PLAYER 1 CONTROLS - OPTIONS
switch (mOptions->input[0])
switch (mOptions->input[0].deviceType)
{
case INPUT_USE_KEYBOARD:
mMenu.options->setItemCaption(i, mLang->getText(69)); // KEYBOARD
@@ -378,7 +378,7 @@ void Title::updateMenuLabels()
i++;
// PLAYER 2 CONTROLS - OPTIONS
switch (mOptions->input[1])
switch (mOptions->input[1].deviceType)
{
case INPUT_USE_KEYBOARD:
mMenu.options->setItemCaption(i, mLang->getText(69)); // KEYBOARD
@@ -911,14 +911,14 @@ void Title::runDemoGame()
void Title::switchInputs(int value)
{
Uint8 temp;
temp = mOptions->input[0];
mOptions->input[0] = mOptions->input[1];
mOptions->input[1] = temp;
temp = mOptions->input[0].deviceType;
mOptions->input[0].deviceType = mOptions->input[1].deviceType;
mOptions->input[1].deviceType = temp;
if (!mInput->gameControllerFound())
{
mOptions->input[0] = INPUT_USE_KEYBOARD;
mOptions->input[1] = INPUT_USE_GAMECONTROLLER;
mOptions->input[0].deviceType = INPUT_USE_KEYBOARD;
mOptions->input[1].deviceType = INPUT_USE_GAMECONTROLLER;
}
}

View File

@@ -1,6 +1,7 @@
#pragma once
#include "ifdefs.h"
#include "ltexture.h"
#include <string>
#ifndef UTILS_H
#define UTILS_H
@@ -39,11 +40,19 @@ struct demoKeys_t
Uint8 fireRight;
};
// Estructura para albergar métodos de control
struct input_t
{
int id; // Identificador en el vector de mandos
std::string name; // Nombre del dispositivo
Uint8 deviceType; // Tipo de dispositivo (teclado o mando)
};
// Estructura con todas las opciones de configuración del programa
struct options_t
{
Uint8 difficulty; // Dificultad del juego
Uint8 input[2]; // Modo de control (teclado o mando)
input_t input[2]; // Modo de control (teclado o mando)
Uint8 language; // Idioma usado en el juego
Uint32 fullScreenMode; // Contiene el valor del modo de pantalla completa
Uint8 windowSize; // Contiene el valor del tamaño de la ventana