Añadido input al scoreboard

This commit is contained in:
2022-09-23 20:43:31 +02:00
parent 48f84d28bd
commit 4cf09d1535
9 changed files with 62 additions and 27 deletions

View File

@@ -0,0 +1,9 @@
frame_width=16
frame_height=16
[animation]
name=default
speed=8
loop=0
frames=0,1,2,3,4,5,6,7,8,9,10,11
[/animation]

Binary file not shown.

After

Width:  |  Height:  |  Size: 992 B

View File

@@ -1,13 +1,13 @@
[path] [path]
tileset=walking_eye.png tileset=manzana.png
animation=walking_eye.ani animation=manzana.ani
width=16 width=16
height=16 height=16
x=22 x=22
y=25 y=25
vx=0.4 vx=0.4
vy=0 vy=0
x1=22 x1=15
y1=25 y1=25
x2=27 x2=27
y2=25 y2=25

View File

@@ -12,11 +12,11 @@ Game::Game(SDL_Renderer *renderer, Screen *screen, Asset *asset, Input *input, D
this->debug->setEnabled(true); this->debug->setEnabled(true);
// Reserva memoria para los objetos // Reserva memoria para los objetos
scoreboard = new ScoreBoard(renderer, asset, &board); scoreboard = new ScoreBoard(renderer, asset, input, &board);
eventHandler = new SDL_Event(); eventHandler = new SDL_Event();
itemTracker = new ItemTracker(); itemTracker = new ItemTracker();
map = new Map(asset->get("01.map"), renderer, asset, itemTracker); map = new Map(asset->get("01.map"), renderer, asset, itemTracker);
player = new Player(renderer, asset, input, map, debug); player = new Player(renderer, asset, input, map, debug, &board.diamonds);
enemyEngine = new EnemyEngine(renderer, asset, player, map, asset->get(map->getEnemyFile())); enemyEngine = new EnemyEngine(renderer, asset, player, map, asset->get(map->getEnemyFile()));
music = JA_LoadMusic(asset->get("music_surface.ogg").c_str()); music = JA_LoadMusic(asset->get("music_surface.ogg").c_str());
@@ -89,10 +89,6 @@ void Game::update()
// Comprueba los eventos de la cola // Comprueba los eventos de la cola
checkEventHandler(); checkEventHandler();
// Comprueba si se ha pulsado alguna tecla
if (input->checkAnyInput())
scoreboard->reset();
// Actualiza los objetos // Actualiza los objetos
debug->clear(); debug->clear();
scoreboard->update(); scoreboard->update();
@@ -200,7 +196,7 @@ void Game::checkEventHandler()
delete map; delete map;
map = new Map(asset->get("01.map"), renderer, asset, itemTracker); map = new Map(asset->get("01.map"), renderer, asset, itemTracker);
delete player; delete player;
player = new Player(renderer, asset, input, map, debug); player = new Player(renderer, asset, input, map, debug, &board.diamonds);
break; break;
case SDL_SCANCODE_F: case SDL_SCANCODE_F:

View File

@@ -1,13 +1,14 @@
#include "player.h" #include "player.h"
// Constructor // Constructor
Player::Player(SDL_Renderer *renderer, Asset *asset, Input *input, Map *map, Debug *debug) Player::Player(SDL_Renderer *renderer, Asset *asset, Input *input, Map *map, Debug *debug, int *diamonds)
{ {
this->asset = asset; this->asset = asset;
this->renderer = renderer; this->renderer = renderer;
this->input = input; this->input = input;
this->map = map; this->map = map;
this->debug = debug; this->debug = debug;
this->diamonds = diamonds;
sound_jump = JA_LoadSound(asset->get("sound_player_jump.wav").c_str()); sound_jump = JA_LoadSound(asset->get("sound_player_jump.wav").c_str());
sound_death = JA_LoadSound(asset->get("sound_player_death.wav").c_str()); sound_death = JA_LoadSound(asset->get("sound_player_death.wav").c_str());
@@ -34,13 +35,13 @@ Player::Player(SDL_Renderer *renderer, Asset *asset, Input *input, Map *map, Deb
maxVY = 4.0f; maxVY = 4.0f;
state = s_standing; state = s_standing;
living = l_alive;
jumpPressed = false; jumpPressed = false;
key.insert(key.end(), {0, 0, 0, 0, 0, 0}); key.insert(key.end(), {0, 0, 0, 0, 0, 0});
const SDL_Point p = {0, 0}; const SDL_Point p = {0, 0};
collider.insert(collider.end(), {p, p, p, p, p, p, p, p, p, p, p, p}); collider.insert(collider.end(), {p, p, p, p, p, p, p, p, p, p, p, p});
underFeet.insert(underFeet.end(), {p, p, p}); underFeet.insert(underFeet.end(), {p, p, p});
hookedOnMovingPlatform = -1; hookedOnMovingPlatform = -1;
diamonds = 0;
colliderBox = getRect(); colliderBox = getRect();
} }
@@ -75,7 +76,6 @@ void Player::update()
debug->add("state " + std::to_string(state)); debug->add("state " + std::to_string(state));
debug->add(map->getName() + " (" + map->getRoomFileName(b_top) + ", " + map->getRoomFileName(b_right) + ", " + map->getRoomFileName(b_bottom) + ", " + map->getRoomFileName(b_left) + ")"); debug->add(map->getName() + " (" + map->getRoomFileName(b_top) + ", " + map->getRoomFileName(b_right) + ", " + map->getRoomFileName(b_bottom) + ", " + map->getRoomFileName(b_left) + ")");
debug->add("hookedOn = " + std::to_string(hookedOnMovingPlatform)); debug->add("hookedOn = " + std::to_string(hookedOnMovingPlatform));
debug->add("DIAMONDS = " + std::to_string(diamonds));
} }
// Dibuja el objeto // Dibuja el objeto
@@ -424,19 +424,19 @@ bool Player::isOnScreenBorder()
border = b_left; border = b_left;
return true; return true;
} }
else if (x > map->getPlayArea(b_right) - w) else if (x > map->getPlayArea(b_right) - w)
{ {
border = b_right; border = b_right;
return true; return true;
} }
else if (y < map->getPlayArea(b_top)) else if (y < map->getPlayArea(b_top))
{ {
border = b_top; border = b_top;
return true; return true;
} }
else if (y > map->getPlayArea(b_bottom) - h) else if (y > map->getPlayArea(b_bottom) - h)
{ {
border = b_bottom; border = b_bottom;
@@ -495,7 +495,7 @@ int Player::checkActors()
if (name == a_diamond) if (name == a_diamond)
{ {
diamonds++; *diamonds = *diamonds + 1;
JA_PlaySound(sound_coin); JA_PlaySound(sound_coin);
map->getItem(index); map->getItem(index);
map->deleteActor(index); map->deleteActor(index);
@@ -520,4 +520,9 @@ SDL_Rect Player::getRect()
SDL_Rect &Player::getCollider() SDL_Rect &Player::getCollider()
{ {
return colliderBox; return colliderBox;
}
// Comprueba los estados de vida
void Player::checkLivingState()
{
} }

View File

@@ -20,6 +20,13 @@ enum e_state
s_falling s_falling
}; };
enum e_living
{
l_alive,
l_dying,
l_dead
};
enum e_floor enum e_floor
{ {
f_none, f_none,
@@ -37,7 +44,7 @@ private:
AnimatedSprite *sprite; // Objeto con los graficos, animaciones y posición del jugador AnimatedSprite *sprite; // Objeto con los graficos, animaciones y posición del jugador
LTexture *texture; // Textura con los graficos del jugador LTexture *texture; // Textura con los graficos del jugador
Map *map; // Objeto con el mapa Map *map; // Objeto con el mapa
Debug *debug; // Objeto para gestionar la información de debug Debug *debug; // Objeto para gestionar la información de debug
float x; // Posición del jugador en el eje X float x; // Posición del jugador en el eje X
float y; // Posición del jugador en el eje Y float y; // Posición del jugador en el eje Y
@@ -47,6 +54,7 @@ private:
int h; // ALto del jugador int h; // ALto del jugador
e_state state; // Estado actual del jugador e_state state; // Estado actual del jugador
e_border border; // Indica en qué borde de la pantalla está el jugador e_border border; // Indica en qué borde de la pantalla está el jugador
e_living living; // Indica en que estado de la vida se encuentra el jugador
SDL_Point lastPosition; // Posición anterior SDL_Point lastPosition; // Posición anterior
int hookedOnMovingPlatform; // Índice de la plataforma movil a la que está enganchado int hookedOnMovingPlatform; // Índice de la plataforma movil a la que está enganchado
e_floor isOn; // Indica sobre que tipo de suelo se encuentra e_floor isOn; // Indica sobre que tipo de suelo se encuentra
@@ -60,7 +68,7 @@ private:
float maxVX; // Velocidad mazima de desplazamiento horizontal float maxVX; // Velocidad mazima de desplazamiento horizontal
float maxVY; // Velocidad mazima de desplazamiento vertical float maxVY; // Velocidad mazima de desplazamiento vertical
int diamonds; // Cantidad de diamantes recogidos por el jugador int *diamonds; // Puntero a la cantidad de diamantes recogidos y que lleva la cuenta el juego
std::vector<bool> key; // Indica las llaves que posee el jugador std::vector<bool> key; // Indica las llaves que posee el jugador
std::vector<SDL_Point> collider; // Contiene los puntos de colisión del jugador con el mapa std::vector<SDL_Point> collider; // Contiene los puntos de colisión del jugador con el mapa
std::vector<SDL_Point> underFeet; // Contiene los puntos que hay bajo cada pie del jugador std::vector<SDL_Point> underFeet; // Contiene los puntos que hay bajo cada pie del jugador
@@ -71,6 +79,9 @@ private:
// Comprueba las entradas y modifica variables // Comprueba las entradas y modifica variables
void checkInput(); void checkInput();
// Comprueba los estados de vida
void checkLivingState();
// Aplica la gravedad // Aplica la gravedad
void addGravity(); void addGravity();
@@ -100,7 +111,7 @@ private:
public: public:
// Constructor // Constructor
Player(SDL_Renderer *renderer, Asset *asset, Input *input, Map *map, Debug *debug); Player(SDL_Renderer *renderer, Asset *asset, Input *input, Map *map, Debug *debug, int *diamonds);
// Destructor // Destructor
~Player(); ~Player();

View File

@@ -417,6 +417,8 @@ bool Prog::setFileList()
asset->add("/data/actors/enemies/flying_eye.ani", data); asset->add("/data/actors/enemies/flying_eye.ani", data);
asset->add("/data/actors/enemies/flying_eye_horn.png", bitmap); asset->add("/data/actors/enemies/flying_eye_horn.png", bitmap);
asset->add("/data/actors/enemies/flying_eye_horn.ani", data); asset->add("/data/actors/enemies/flying_eye_horn.ani", data);
asset->add("/data/actors/enemies/manzana.png", bitmap);
asset->add("/data/actors/enemies/manzana.ani", data);
// Ficheros de actores // Ficheros de actores
asset->add("/data/actors/moving_platform.png", bitmap); asset->add("/data/actors/moving_platform.png", bitmap);

View File

@@ -3,12 +3,13 @@
#include <sstream> #include <sstream>
// Constructor // Constructor
ScoreBoard::ScoreBoard(SDL_Renderer *renderer, Asset *asset, board_t *board) ScoreBoard::ScoreBoard(SDL_Renderer *renderer, Asset *asset, Input *input, board_t *board)
{ {
// Obten punteros a objetos // Obten punteros a objetos
this->asset = asset; this->asset = asset;
this->renderer = renderer; this->renderer = renderer;
this->board = board; this->board = board;
this->input = input;
// Reserva memoria para los objetos // Reserva memoria para los objetos
texture = new LTexture(renderer, asset->get("player.png")); texture = new LTexture(renderer, asset->get("player.png"));
@@ -26,6 +27,7 @@ ScoreBoard::ScoreBoard(SDL_Renderer *renderer, Asset *asset, board_t *board)
counter = 0; counter = 0;
fadingCounter = 0; fadingCounter = 0;
state = sb_hide; state = sb_hide;
waitTime = 100;
} }
// Destructor // Destructor
@@ -88,10 +90,17 @@ void ScoreBoard::render()
// Actualiza las variables del objeto // Actualiza las variables del objeto
void ScoreBoard::update() void ScoreBoard::update()
{ {
// Comprueba si se ha pulsado alguna tecla
if (input->checkAnyInput())
{
reset();
}
// Comprueba los estados
if (state == sb_hide) if (state == sb_hide)
{ {
counter++; counter++;
if (counter == 200) if (counter == waitTime)
{ {
state = sb_showing; state = sb_showing;
rect.y = SCOREBOARD_Y - SCOREBOARD_HEIGHT; rect.y = SCOREBOARD_Y - SCOREBOARD_HEIGHT;
@@ -107,7 +116,7 @@ void ScoreBoard::update()
rect.y++; rect.y++;
SDL_SetTextureAlphaMod(layer, alpha); SDL_SetTextureAlphaMod(layer, alpha);
if (rect.y == SCOREBOARD_Y) if (rect.y == SCOREBOARD_Y)
{ {
state = sb_show; state = sb_show;

View File

@@ -6,6 +6,7 @@
#include "asset.h" #include "asset.h"
#include "sprite.h" #include "sprite.h"
#include "const.h" #include "const.h"
#include "input.h"
#include <string> #include <string>
#ifndef SCOREBOARD_H #ifndef SCOREBOARD_H
@@ -35,15 +36,20 @@ private:
SDL_Texture *layer; // Textura donde dibujar el marcador SDL_Texture *layer; // Textura donde dibujar el marcador
Asset *asset; // Objeto con la ruta a todos los ficheros de recursos Asset *asset; // Objeto con la ruta a todos los ficheros de recursos
Text *text; // Objeto para escribir texto Text *text; // Objeto para escribir texto
Input *input; // Objeto Input para gestionar las entradas
int counter; // Contador interno int counter; // Contador interno
int fadingCounter; // Contador para el desvanecimiento del marcador int fadingCounter; // Contador para el desvanecimiento del marcador
board_t *board; // Contiene las variables a mostrar en el marcador board_t *board; // Contiene las variables a mostrar en el marcador
sb_state_e state; // Estado en el que se encuentra el marcador sb_state_e state; // Estado en el que se encuentra el marcador
SDL_Rect rect; // Posición del marcador SDL_Rect rect; // Posición del marcador
int waitTime; // Tiempo de espera para mostrar el marcador
// Resetea el tiempo de aparición del marcador
void reset();
public: public:
// Constructor // Constructor
ScoreBoard(SDL_Renderer *renderer, Asset *asset, board_t *board); ScoreBoard(SDL_Renderer *renderer, Asset *asset, Input *input, board_t *board);
// Destructor // Destructor
~ScoreBoard(); ~ScoreBoard();
@@ -60,9 +66,6 @@ public:
// Recarga la textura // Recarga la textura
void reLoadTexture(); void reLoadTexture();
// Resetea el tiempo de aparición del marcador
void reset();
// Devuelve el rectangulo con la posición del marcador // Devuelve el rectangulo con la posición del marcador
SDL_Rect getRect(); SDL_Rect getRect();
}; };