Nuevo: deshabilita input por un periodo de tiempo

This commit is contained in:
2022-11-02 18:04:32 +01:00
parent 5302e16064
commit bb992b7d90
7 changed files with 59 additions and 4 deletions

View File

@@ -22,6 +22,7 @@ y1=1
x2=29 x2=29
y2=1 y2=1
color=white color=white
flip=true
[/enemy] [/enemy]
[enemy] [enemy]
@@ -38,6 +39,7 @@ y1=1
x2=29 x2=29
y2=1 y2=1
color=red color=red
flip=true
[/enemy] [/enemy]
[enemy] [enemy]
@@ -54,6 +56,7 @@ y1=7
x2=27 x2=27
y2=7 y2=7
color=green color=green
flip=true
[/enemy] [/enemy]
[item] [item]

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.5 KiB

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.0 KiB

After

Width:  |  Height:  |  Size: 9.1 KiB

View File

@@ -21,6 +21,15 @@ Input::Input(std::string file)
verbose = true; verbose = true;
} }
// Actualiza el estado del objeto
void Input::update()
{
if (disabledUntil == d_keyPressed && !checkAnyInput())
{
enable();
}
}
// Asigna inputs a teclas // Asigna inputs a teclas
void Input::bindKey(Uint8 input, SDL_Scancode code) void Input::bindKey(Uint8 input, SDL_Scancode code)
{ {
@@ -36,6 +45,11 @@ void Input::bindGameControllerButton(Uint8 input, SDL_GameControllerButton butto
// Comprueba si un input esta activo // Comprueba si un input esta activo
bool Input::checkInput(Uint8 input, bool repeat, int device, int index) bool Input::checkInput(Uint8 input, bool repeat, int device, int index)
{ {
if (!enabled)
{
return false;
}
bool successKeyboard = false; bool successKeyboard = false;
bool successGameController = false; bool successGameController = false;
@@ -280,4 +294,18 @@ int Input::getNumControllers()
void Input::setVerbose(bool value) void Input::setVerbose(bool value)
{ {
verbose = value; verbose = value;
}
// Deshabilita las entradas durante un periodo de tiempo
void Input::disableUntil(i_disable_e value)
{
disabledUntil = value;
enabled = false;
}
// Hablita las entradas
void Input::enable()
{
enabled = true;
disabledUntil = d_notDisabled;
} }

View File

@@ -32,7 +32,13 @@
#define INPUT_USE_GAMECONTROLLER 1 #define INPUT_USE_GAMECONTROLLER 1
#define INPUT_USE_ANY 2 #define INPUT_USE_ANY 2
// Clase Input enum i_disable_e
{
d_notDisabled,
d_forever,
d_keyPressed
};
class Input class Input
{ {
private: private:
@@ -58,11 +64,16 @@ private:
int numGamepads; // Numero de mandos conectados int numGamepads; // Numero de mandos conectados
std::string dbPath; // Ruta al archivo gamecontrollerdb.txt std::string dbPath; // Ruta al archivo gamecontrollerdb.txt
bool verbose; // Indica si ha de mostrar mensajes bool verbose; // Indica si ha de mostrar mensajes
i_disable_e disabledUntil; // Tiempo que esta deshabilitado
bool enabled; // Indica si está habilitado
public: public:
// Constructor // Constructor
Input(std::string file); Input(std::string file);
// Actualiza el estado del objeto
void update();
// Asigna inputs a teclas // Asigna inputs a teclas
void bindKey(Uint8 input, SDL_Scancode code); void bindKey(Uint8 input, SDL_Scancode code);
@@ -73,7 +84,7 @@ public:
bool checkInput(Uint8 input, bool repeat, int device = INPUT_USE_ANY, int index = 0); bool checkInput(Uint8 input, bool repeat, int device = INPUT_USE_ANY, int index = 0);
// Comprueba si hay almenos un input activo // Comprueba si hay almenos un input activo
bool checkAnyInput(int device, int index); bool checkAnyInput(int device = INPUT_USE_ANY, int index = 0);
// Busca si hay un mando conectado // Busca si hay un mando conectado
bool discoverGameController(); bool discoverGameController();
@@ -89,6 +100,12 @@ public:
// Establece si ha de mostrar mensajes // Establece si ha de mostrar mensajes
void setVerbose(bool value); void setVerbose(bool value);
// Deshabilita las entradas durante un periodo de tiempo
void disableUntil(i_disable_e value);
// Hablita las entradas
void enable();
}; };
#endif #endif

View File

@@ -214,6 +214,7 @@ void Game::update()
checkIfPlayerIsAlive(); checkIfPlayerIsAlive();
checkEndGame(); checkEndGame();
scoreboard->update(); scoreboard->update();
input->update();
updateDebugInfo(); updateDebugInfo();
updateBlackScreen(); updateBlackScreen();
@@ -400,6 +401,7 @@ void Game::killPlayer()
// Sonido // Sonido
JA_PlaySound(deathSound); JA_PlaySound(deathSound);
// Pone la pantalla en negro un tiempo
setBlackScreen(); setBlackScreen();
// Crea la nueva habitación y el nuevo jugador // Crea la nueva habitación y el nuevo jugador
@@ -407,8 +409,12 @@ void Game::killPlayer()
const player_t player = {spawnPoint, "player.png", "player.ani", renderer, resource, asset, options, input, room, debug}; const player_t player = {spawnPoint, "player.png", "player.ani", renderer, resource, asset, options, input, room, debug};
this->player = new Player(player); this->player = new Player(player);
// Pone los objetos en pausa mientras esta la habitación en negro
room->pause(); room->pause();
this->player->pause(); this->player->pause();
// Deshabilita las entradas hasta que no haya ninguna activa
input->disableUntil(d_keyPressed);
} }
// Recarga todas las texturas // Recarga todas las texturas

View File

@@ -54,8 +54,9 @@ x (B) Así como no necesitar lo de frames per row
x (C) Que no cree la ventana y luego añada el borde x (C) Que no cree la ventana y luego añada el borde
x (A) Las vidas del marcador no estan animadas. No cambian de frame x (A) Las vidas del marcador no estan animadas. No cambian de frame
(A) Mejorar las cintas. no permitir saltar hacia atras (A) Mejorar las cintas. no permitir saltar hacia atras
(A) Cambio de paleta en caliente x (A) Cambio de paleta en caliente
(A) Precargar todos los recursos del juego x (A) Precargar todos los recursos del juego
(A) Deshabilitar el input hasta que se suelten todas las teclas
## TEMAS ## TEMAS