forked from jaildesigner-jailgames/jaildoctors_dilemma
Trabajando en el marcador
This commit is contained in:
@@ -15,3 +15,10 @@ speed=8
|
||||
loop=0
|
||||
frames=0,1,2,3
|
||||
[/animation]
|
||||
|
||||
[animation]
|
||||
name=walk_menu
|
||||
speed=50
|
||||
loop=0
|
||||
frames=0,1,2,3
|
||||
[/animation]
|
||||
@@ -15,6 +15,7 @@ Game::Game(SDL_Renderer *renderer, Screen *screen, Asset *asset, Input *input)
|
||||
this->input = input;
|
||||
|
||||
// Crea los objetos
|
||||
scoreboard = new ScoreBoard(renderer, asset);
|
||||
itemTracker = new 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);
|
||||
@@ -38,6 +39,9 @@ Game::~Game()
|
||||
input = nullptr;
|
||||
|
||||
// Libera la memoria de los objetos
|
||||
delete scoreboard;
|
||||
scoreboard = nullptr;
|
||||
|
||||
delete itemTracker;
|
||||
itemTracker = nullptr;
|
||||
|
||||
@@ -134,6 +138,7 @@ void Game::update()
|
||||
checkPlayerOnFloor();
|
||||
checkPlayerAndItems();
|
||||
checkPlayerAndEnemies();
|
||||
scoreboard->update();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -148,14 +153,8 @@ void Game::render()
|
||||
room->renderEnemies();
|
||||
room->renderItems();
|
||||
player->render();
|
||||
|
||||
// Texto en el centro de la pantalla
|
||||
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());
|
||||
renderRoomName();
|
||||
scoreboard->render();
|
||||
|
||||
// Debug info
|
||||
renderDebugInfo();
|
||||
@@ -204,6 +203,18 @@ void Game::renderDebugInfo()
|
||||
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
|
||||
bool Game::changeRoom(std::string file)
|
||||
{
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
#include "utils.h"
|
||||
#include "sprite.h"
|
||||
#include "movingsprite.h"
|
||||
#include "animatedsprite.h"
|
||||
#include "text.h"
|
||||
#include "menu.h"
|
||||
#include "input.h"
|
||||
@@ -13,6 +13,7 @@
|
||||
#include "item_tracker.h"
|
||||
#include "player.h"
|
||||
#include "jail_audio.h"
|
||||
#include "scoreboard.h"
|
||||
|
||||
#ifndef GAME_H
|
||||
#define GAME_H
|
||||
@@ -31,6 +32,7 @@ private:
|
||||
Input *input; // Objeto pata gestionar la entrada
|
||||
Text *text; // Objeto para los textos 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 ticksSpeed; // Velocidad a la que se repiten los bucles del programa
|
||||
section_t section; // Seccion actual dentro del juego
|
||||
@@ -47,6 +49,9 @@ private:
|
||||
// Pone la información de debug en pantalla
|
||||
void renderDebugInfo();
|
||||
|
||||
// Escribe el nombre de la pantalla
|
||||
void renderRoomName();
|
||||
|
||||
// Cambia de habitación
|
||||
bool changeRoom(std::string file);
|
||||
|
||||
|
||||
@@ -36,7 +36,7 @@ private:
|
||||
std::vector<color_t> color; // Vector con los colores del objeto
|
||||
int counter; // Contador interno
|
||||
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:
|
||||
// Constructor
|
||||
|
||||
@@ -163,6 +163,8 @@ void MovingSprite::setPos(SDL_Rect rect)
|
||||
{
|
||||
x = (float)rect.x;
|
||||
y = (float)rect.y;
|
||||
w = rect.w;
|
||||
h = rect.h;
|
||||
}
|
||||
|
||||
// Establece el valor de la variable
|
||||
|
||||
@@ -14,10 +14,8 @@ Player::Player(player_t ini, std::string tileset, std::string animation, SDL_Ren
|
||||
|
||||
// Crea objetos
|
||||
texture = new LTexture();
|
||||
sprite = new AnimatedSprite(texture, renderer, animation);
|
||||
|
||||
// Carga la textura
|
||||
loadTextureFromFile(texture, asset->get(tileset), renderer);
|
||||
sprite = new AnimatedSprite(texture, renderer, animation);
|
||||
|
||||
// Inicializa variables
|
||||
color = stringToColor("white");
|
||||
@@ -55,8 +53,10 @@ Player::~Player()
|
||||
void Player::render()
|
||||
{
|
||||
sprite->getTexture()->setColor(color.r, color.g, color.b);
|
||||
//sprite->getTexture()->setBlendMode(SDL_BLENDMODE_INVALID);
|
||||
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
|
||||
|
||||
@@ -211,30 +211,37 @@ bool Room::setVars(std::string var, std::string value)
|
||||
{
|
||||
name = value;
|
||||
}
|
||||
|
||||
else if (var == "bgColor")
|
||||
{
|
||||
bgColor = stringToColor(value);
|
||||
}
|
||||
|
||||
else if (var == "tileset")
|
||||
{
|
||||
tileset = value;
|
||||
}
|
||||
|
||||
else if (var == "roomUp")
|
||||
{
|
||||
roomUp = value;
|
||||
}
|
||||
|
||||
else if (var == "roomDown")
|
||||
{
|
||||
roomDown = value;
|
||||
}
|
||||
|
||||
else if (var == "roomLeft")
|
||||
{
|
||||
roomLeft = value;
|
||||
}
|
||||
|
||||
else if (var == "roomRight")
|
||||
{
|
||||
roomRight = value;
|
||||
}
|
||||
|
||||
else if (var == "tilemap")
|
||||
{
|
||||
// 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));
|
||||
}
|
||||
}
|
||||
|
||||
else if (var == "")
|
||||
{
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
success = false;
|
||||
@@ -350,7 +359,7 @@ bool Room::setItem(item_t *item, std::string var, std::string value)
|
||||
item->tileset = value;
|
||||
}
|
||||
|
||||
if (var == "counter")
|
||||
else if (var == "counter")
|
||||
{
|
||||
item->counter = std::stoi(value);
|
||||
}
|
||||
|
||||
82
source/scoreboard.cpp
Normal file
82
source/scoreboard.cpp
Normal 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
39
source/scoreboard.h
Normal 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
|
||||
@@ -166,3 +166,9 @@ void Screen::setBorderColor(color_t color)
|
||||
{
|
||||
borderColor = color;
|
||||
}
|
||||
|
||||
// Cambia el tipo de mezcla
|
||||
void Screen::setBlendMode(SDL_BlendMode blendMode)
|
||||
{
|
||||
SDL_SetRenderDrawBlendMode(renderer, blendMode);
|
||||
}
|
||||
@@ -60,6 +60,9 @@ public:
|
||||
|
||||
// Cambia el color del borde
|
||||
void setBorderColor(color_t color);
|
||||
|
||||
// Cambia el tipo de mezcla
|
||||
void setBlendMode(SDL_BlendMode blendMode);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user