Trabajando en el marcador

This commit is contained in:
2022-08-31 13:56:17 +02:00
parent fff400be8f
commit c57fbf7bc3
11 changed files with 180 additions and 16 deletions

View File

@@ -14,4 +14,11 @@ name=walk
speed=8 speed=8
loop=0 loop=0
frames=0,1,2,3 frames=0,1,2,3
[/animation]
[animation]
name=walk_menu
speed=50
loop=0
frames=0,1,2,3
[/animation] [/animation]

View File

@@ -15,6 +15,7 @@ Game::Game(SDL_Renderer *renderer, Screen *screen, Asset *asset, Input *input)
this->input = input; this->input = input;
// Crea los objetos // Crea los objetos
scoreboard = new ScoreBoard(renderer, asset);
itemTracker = new ItemTracker(); itemTracker = new ItemTracker();
room = new Room(asset->get(currentRoom), renderer, asset, itemTracker); room = new Room(asset->get(currentRoom), renderer, asset, itemTracker);
player = new Player(spawnPoint, asset->get("player01.png"), asset->get("player01.ani"), renderer, asset, input, room); player = new Player(spawnPoint, asset->get("player01.png"), asset->get("player01.ani"), renderer, asset, input, room);
@@ -38,6 +39,9 @@ Game::~Game()
input = nullptr; input = nullptr;
// Libera la memoria de los objetos // Libera la memoria de los objetos
delete scoreboard;
scoreboard = nullptr;
delete itemTracker; delete itemTracker;
itemTracker = nullptr; itemTracker = nullptr;
@@ -118,7 +122,7 @@ void Game::update()
case SDL_SCANCODE_F4: case SDL_SCANCODE_F4:
screen->setWindowSize(4); screen->setWindowSize(4);
break; break;
default: default:
break; break;
} }
@@ -134,6 +138,7 @@ void Game::update()
checkPlayerOnFloor(); checkPlayerOnFloor();
checkPlayerAndItems(); checkPlayerAndItems();
checkPlayerAndEnemies(); checkPlayerAndEnemies();
scoreboard->update();
} }
} }
@@ -148,14 +153,8 @@ void Game::render()
room->renderEnemies(); room->renderEnemies();
room->renderItems(); room->renderItems();
player->render(); player->render();
renderRoomName();
// Texto en el centro de la pantalla scoreboard->render();
SDL_Rect rect = {0, 16 * 8, PLAY_AREA_RIGHT, 8};
color_t color = stringToColor("light_black");
SDL_SetRenderDrawColor(renderer, color.r, color.g, color.b, 0xFF);
SDL_RenderFillRect(renderer, &rect);
text->writeCentered(GAMECANVAS_CENTER_X, 16 * 8, room->getName());
// Debug info // Debug info
renderDebugInfo(); renderDebugInfo();
@@ -204,6 +203,18 @@ void Game::renderDebugInfo()
debugText->write(0, line += inc, text); debugText->write(0, line += inc, text);
} }
// Escribe el nombre de la pantalla
void Game::renderRoomName()
{
// Texto en el centro de la pantalla
SDL_Rect rect = {0, 16 * BLOCK, PLAY_AREA_WIDTH, BLOCK};
color_t color = stringToColor("light_black");
SDL_SetRenderDrawColor(renderer, color.r, color.g, color.b, 0xFF);
SDL_RenderFillRect(renderer, &rect);
text->writeCentered(GAMECANVAS_CENTER_X, 16 * 8, room->getName());
}
// Cambia de habitación // Cambia de habitación
bool Game::changeRoom(std::string file) bool Game::changeRoom(std::string file)
{ {

View File

@@ -3,7 +3,7 @@
#include "utils.h" #include "utils.h"
#include "sprite.h" #include "sprite.h"
#include "movingsprite.h" #include "animatedsprite.h"
#include "text.h" #include "text.h"
#include "menu.h" #include "menu.h"
#include "input.h" #include "input.h"
@@ -13,6 +13,7 @@
#include "item_tracker.h" #include "item_tracker.h"
#include "player.h" #include "player.h"
#include "jail_audio.h" #include "jail_audio.h"
#include "scoreboard.h"
#ifndef GAME_H #ifndef GAME_H
#define GAME_H #define GAME_H
@@ -31,6 +32,7 @@ private:
Input *input; // Objeto pata gestionar la entrada Input *input; // Objeto pata gestionar la entrada
Text *text; // Objeto para los textos del juego Text *text; // Objeto para los textos del juego
Text *debugText; // Objeto para los textos de debug del juego Text *debugText; // Objeto para los textos de debug del juego
ScoreBoard *scoreboard; // Objeto encargado de gestionar el marcador
int ticks; // Contador de ticks para ajustar la velocidad del programa int ticks; // Contador de ticks para ajustar la velocidad del programa
int ticksSpeed; // Velocidad a la que se repiten los bucles del programa int ticksSpeed; // Velocidad a la que se repiten los bucles del programa
section_t section; // Seccion actual dentro del juego section_t section; // Seccion actual dentro del juego
@@ -47,6 +49,9 @@ private:
// Pone la información de debug en pantalla // Pone la información de debug en pantalla
void renderDebugInfo(); void renderDebugInfo();
// Escribe el nombre de la pantalla
void renderRoomName();
// Cambia de habitación // Cambia de habitación
bool changeRoom(std::string file); bool changeRoom(std::string file);

View File

@@ -36,7 +36,7 @@ private:
std::vector<color_t> color; // Vector con los colores del objeto std::vector<color_t> color; // Vector con los colores del objeto
int counter; // Contador interno int counter; // Contador interno
SDL_Rect collider; // Rectangulo de colisión SDL_Rect collider; // Rectangulo de colisión
int colorChangeSpeed; // Cuanto mas alto, mas tarda en cambiar de color int colorChangeSpeed; // Cuanto mas alto, mas tarda en cambiar de color
public: public:
// Constructor // Constructor

View File

@@ -163,6 +163,8 @@ void MovingSprite::setPos(SDL_Rect rect)
{ {
x = (float)rect.x; x = (float)rect.x;
y = (float)rect.y; y = (float)rect.y;
w = rect.w;
h = rect.h;
} }
// Establece el valor de la variable // Establece el valor de la variable

View File

@@ -14,10 +14,8 @@ Player::Player(player_t ini, std::string tileset, std::string animation, SDL_Ren
// Crea objetos // Crea objetos
texture = new LTexture(); texture = new LTexture();
sprite = new AnimatedSprite(texture, renderer, animation);
// Carga la textura
loadTextureFromFile(texture, asset->get(tileset), renderer); loadTextureFromFile(texture, asset->get(tileset), renderer);
sprite = new AnimatedSprite(texture, renderer, animation);
// Inicializa variables // Inicializa variables
color = stringToColor("white"); color = stringToColor("white");
@@ -55,8 +53,10 @@ Player::~Player()
void Player::render() void Player::render()
{ {
sprite->getTexture()->setColor(color.r, color.g, color.b); sprite->getTexture()->setColor(color.r, color.g, color.b);
//sprite->getTexture()->setBlendMode(SDL_BLENDMODE_INVALID);
sprite->render(); sprite->render();
sprite->getTexture()->setColor(255, 255, 255); //sprite->getTexture()->setBlendMode(SDL_BLENDMODE_BLEND);
//sprite->getTexture()->setColor(255, 255, 255);
} }
// Actualiza las variables del objeto // Actualiza las variables del objeto

View File

@@ -211,30 +211,37 @@ bool Room::setVars(std::string var, std::string value)
{ {
name = value; name = value;
} }
else if (var == "bgColor") else if (var == "bgColor")
{ {
bgColor = stringToColor(value); bgColor = stringToColor(value);
} }
else if (var == "tileset") else if (var == "tileset")
{ {
tileset = value; tileset = value;
} }
else if (var == "roomUp") else if (var == "roomUp")
{ {
roomUp = value; roomUp = value;
} }
else if (var == "roomDown") else if (var == "roomDown")
{ {
roomDown = value; roomDown = value;
} }
else if (var == "roomLeft") else if (var == "roomLeft")
{ {
roomLeft = value; roomLeft = value;
} }
else if (var == "roomRight") else if (var == "roomRight")
{ {
roomRight = value; roomRight = value;
} }
else if (var == "tilemap") else if (var == "tilemap")
{ {
// Se introducen los valores separados por comas en un vector // Se introducen los valores separados por comas en un vector
@@ -245,9 +252,11 @@ bool Room::setVars(std::string var, std::string value)
tilemap.push_back(std::stoi(tmp)); tilemap.push_back(std::stoi(tmp));
} }
} }
else if (var == "") else if (var == "")
{ {
} }
else else
{ {
success = false; success = false;
@@ -350,7 +359,7 @@ bool Room::setItem(item_t *item, std::string var, std::string value)
item->tileset = value; item->tileset = value;
} }
if (var == "counter") else if (var == "counter")
{ {
item->counter = std::stoi(value); item->counter = std::stoi(value);
} }

82
source/scoreboard.cpp Normal file
View File

@@ -0,0 +1,82 @@
#include "scoreboard.h"
#include <fstream>
#include <sstream>
// Constructor
ScoreBoard::ScoreBoard(SDL_Renderer *renderer, Asset *asset)
{
// Obten punteros a objetos
this->asset = asset;
this->renderer = renderer;
// Reserva memoria para los objetos
texture = new LTexture();
loadTextureFromFile(texture, asset->get("player01.png"), renderer);
sprite = new AnimatedSprite(texture, renderer, asset->get("player01.ani"));
sprite->setCurrentAnimation("walk_menu");
// Inicializa las variables
counter = 0;
colorChangeSpeed = 4;
// Inicializa los colores
color_t c = stringToColor("blue");
color.push_back(c);
c = stringToColor("red");
color.push_back(c);
c = stringToColor("purple");
color.push_back(c);
c = stringToColor("green");
color.push_back(c);
c = stringToColor("cyan");
color.push_back(c);
c = stringToColor("yellow");
color.push_back(c);
}
// Destructor
ScoreBoard::~ScoreBoard()
{
texture->unload();
delete texture;
texture = nullptr;
delete sprite;
sprite = nullptr;
}
// Pinta el objeto en pantalla
void ScoreBoard::render()
{
const int num_lives = 9;
// Dibuja el fondo del marcador
const SDL_Rect rect = {0, 17 * BLOCK, PLAY_AREA_WIDTH, GAMECANVAS_HEIGHT - PLAY_AREA_HEIGHT};
SDL_SetRenderDrawColor(renderer, 0, 255, 0, 255);
SDL_RenderFillRect(renderer, &rect);
sprite->setPosY(18 * BLOCK);
int index;
int desp = (counter / 40) % 8;
for (int i = 0; i < num_lives; i++)
{
sprite->setPosX(8 + (16 * i) + desp);
index = i % color.size();
sprite->getTexture()->setColor(color[index].r, color[index].g, color[index].b);
sprite->render();
}
}
// Actualiza las variables del objeto
void ScoreBoard::update()
{
counter++;
sprite->update();
}

39
source/scoreboard.h Normal file
View File

@@ -0,0 +1,39 @@
#pragma once
#include <SDL2/SDL.h>
#include "utils.h"
#include "asset.h"
#include "animatedsprite.h"
#include "const.h"
#include <string>
#ifndef SCOREBOARD_H
#define SCOREBOARD_H
// Clase ScoreBoard
class ScoreBoard
{
private:
LTexture *texture; // Textura con los graficos para las vidas
AnimatedSprite *sprite; // Sprite para mostrar las vidas en el marcador
SDL_Renderer *renderer; // El renderizador de la ventana
Asset *asset; // Objeto con la ruta a todos los ficheros de recursos
std::vector<color_t> color; // Vector con los colores del objeto
int counter; // Contador interno
int colorChangeSpeed; // Cuanto mas alto, mas tarda en cambiar de color
public:
// Constructor
ScoreBoard(SDL_Renderer *renderer, Asset *asset);
// Destructor
~ScoreBoard();
// Pinta el objeto en pantalla
void render();
// Actualiza las variables del objeto
void update();
};
#endif

View File

@@ -165,4 +165,10 @@ void Screen::setWindowSize(int size)
void Screen::setBorderColor(color_t color) void Screen::setBorderColor(color_t color)
{ {
borderColor = color; borderColor = color;
}
// Cambia el tipo de mezcla
void Screen::setBlendMode(SDL_BlendMode blendMode)
{
SDL_SetRenderDrawBlendMode(renderer, blendMode);
} }

View File

@@ -60,6 +60,9 @@ public:
// Cambia el color del borde // Cambia el color del borde
void setBorderColor(color_t color); void setBorderColor(color_t color);
// Cambia el tipo de mezcla
void setBlendMode(SDL_BlendMode blendMode);
}; };
#endif #endif