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]
tileset=walking_eye.png
animation=walking_eye.ani
tileset=manzana.png
animation=manzana.ani
width=16
height=16
x=22
y=25
vx=0.4
vy=0
x1=22
x1=15
y1=25
x2=27
y2=25

View File

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

View File

@@ -1,13 +1,14 @@
#include "player.h"
// 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->renderer = renderer;
this->input = input;
this->map = map;
this->debug = debug;
this->diamonds = diamonds;
sound_jump = JA_LoadSound(asset->get("sound_player_jump.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;
state = s_standing;
living = l_alive;
jumpPressed = false;
key.insert(key.end(), {0, 0, 0, 0, 0, 0});
const SDL_Point p = {0, 0};
collider.insert(collider.end(), {p, p, p, p, p, p, p, p, p, p, p, p});
underFeet.insert(underFeet.end(), {p, p, p});
hookedOnMovingPlatform = -1;
diamonds = 0;
colliderBox = getRect();
}
@@ -75,7 +76,6 @@ void Player::update()
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("hookedOn = " + std::to_string(hookedOnMovingPlatform));
debug->add("DIAMONDS = " + std::to_string(diamonds));
}
// Dibuja el objeto
@@ -495,7 +495,7 @@ int Player::checkActors()
if (name == a_diamond)
{
diamonds++;
*diamonds = *diamonds + 1;
JA_PlaySound(sound_coin);
map->getItem(index);
map->deleteActor(index);
@@ -521,3 +521,8 @@ SDL_Rect &Player::getCollider()
{
return colliderBox;
}
// Comprueba los estados de vida
void Player::checkLivingState()
{
}

View File

@@ -20,6 +20,13 @@ enum e_state
s_falling
};
enum e_living
{
l_alive,
l_dying,
l_dead
};
enum e_floor
{
f_none,
@@ -47,6 +54,7 @@ private:
int h; // ALto del jugador
e_state state; // Estado actual del 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
int hookedOnMovingPlatform; // Índice de la plataforma movil a la que está enganchado
e_floor isOn; // Indica sobre que tipo de suelo se encuentra
@@ -60,7 +68,7 @@ private:
float maxVX; // Velocidad mazima de desplazamiento horizontal
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<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
@@ -71,6 +79,9 @@ private:
// Comprueba las entradas y modifica variables
void checkInput();
// Comprueba los estados de vida
void checkLivingState();
// Aplica la gravedad
void addGravity();
@@ -100,7 +111,7 @@ private:
public:
// 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
~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_horn.png", bitmap);
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
asset->add("/data/actors/moving_platform.png", bitmap);

View File

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

View File

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