Clase item creada. Ya dibuja items en pantalla

This commit is contained in:
2022-07-12 18:39:00 +02:00
parent ae841a45ee
commit f8db0e3a90
9 changed files with 117 additions and 44 deletions

View File

@@ -38,7 +38,14 @@ color=yellow
[item] [item]
tileset=items.png tileset=items.png
tile=1 tile=0
x=10 x=1
y=10 y=7
[item-end]
[item]
tileset=items.png
tile=0
x=17
y=8
[item-end] [item-end]

View File

@@ -3,22 +3,22 @@
<tileset firstgid="1" source="../../resources/tilesets/room1.tsx"/> <tileset firstgid="1" source="../../resources/tilesets/room1.tsx"/>
<layer id="1" name="Capa de patrones 1" width="32" height="16"> <layer id="1" name="Capa de patrones 1" width="32" height="16">
<data encoding="csv"> <data encoding="csv">
108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
108,0,0,0,0,108,108,108,108,108,108,108,108,108,108,108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 21,0,0,0,0,21,21,21,21,21,21,21,21,21,21,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
108,0,0,108,108,108,0,0,0,0,0,0,0,0,0,0,0,211,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 21,0,0,21,21,21,0,0,0,0,0,0,0,0,0,0,0,211,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,108,108,0,0,0,0,0,0,0,0,0,0,0,0,0, 21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21,21,0,0,0,0,0,0,0,0,0,0,0,0,0,
108,108,108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,108,108,108,108,0,0,0,0,0,108,108,108,108,108, 21,21,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21,21,21,21,0,0,0,0,0,21,21,21,21,21,
108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,211,0,0,0,0,0,0,0, 21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,211,0,0,0,0,0,0,0,
108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
108,0,0,0,0,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,0,0,0,0,0,0,0, 21,0,0,0,0,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,0,0,0,0,0,0,0,
108,0,0,0,0,0,0,0,0,211,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 21,0,0,0,0,0,0,0,0,211,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27, 21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,
27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27 21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21
</data> </data>
</layer> </layer>
</map> </map>

BIN
media/items/items.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 127 B

View File

@@ -203,6 +203,7 @@ void Director::setFileList()
mAsset->add("/media/tilesets/room1.png", bitmap); mAsset->add("/media/tilesets/room1.png", bitmap);
mAsset->add("/media/enemies/enemy01.png", bitmap); mAsset->add("/media/enemies/enemy01.png", bitmap);
mAsset->add("/media/player/player01.png", bitmap); mAsset->add("/media/player/player01.png", bitmap);
mAsset->add("/media/items/items.png", bitmap);
} }
// Carga el fichero de configuración // Carga el fichero de configuración

View File

@@ -144,6 +144,7 @@ void Game::draw()
mRoom->drawMap(); mRoom->drawMap();
mRoom->drawEnemies(); mRoom->drawEnemies();
mRoom->drawItems();
mPlayer->draw(); mPlayer->draw();
// Texto en el centro de la pantalla // Texto en el centro de la pantalla

View File

@@ -3,22 +3,22 @@
#include <sstream> #include <sstream>
// Constructor // Constructor
Item::Item(SDL_Rect _rect, std::string _tileset, SDL_Renderer *_renderer, Asset *_asset) Item::Item(item_t item)
{ {
// Obten punteros a objetos // Obten punteros a objetos
asset = _asset; asset = item.asset;
renderer = _renderer; renderer = item.renderer;
// Crea objetos // Crea objetos
texture = new LTexture(); texture = new LTexture();
sprite = new Sprite(_rect, texture, renderer); sprite = new Sprite(item.x, item.y, 8, 8, texture, renderer);
// Carga la textura // Carga la textura
loadTextureFromFile(texture, asset->get(_tileset), renderer); loadTextureFromFile(texture, asset->get(item.tileset), renderer);
// Inicia variables // Inicia variables
sprite->setSpriteClip(0,0,8,8); sprite->setSpriteClip(item.tile * 8, 0, 8, 8);
// Inicializa los colores // Inicializa los colores
color_t c = stringToColor("blue"); color_t c = stringToColor("blue");
color.push_back(c); color.push_back(c);
@@ -53,11 +53,10 @@ Item::~Item()
// Pinta el enemigo en pantalla // Pinta el enemigo en pantalla
void Item::draw() void Item::draw()
{ {
sprite->render();
} }
// Actualiza las variables del objeto // Actualiza las variables del objeto
void Item::update() void Item::update()
{ {
} }

View File

@@ -14,6 +14,16 @@ POSICION INICIAL
PNG ASOCIADO PNG ASOCIADO
*/ */
struct item_t
{
SDL_Renderer *renderer; // El renderizador de la ventana
Asset *asset; // Objeto con la ruta a todos los ficheros de recursos
std::string tileset; // Fichero con los graficos del item
int x; // Posicion del item en pantalla
int y; // Posicion del item en pantalla
int tile; // Numero de tile dentro de la textura
};
// Clase Item // Clase Item
class Item class Item
{ {
@@ -21,8 +31,8 @@ private:
LTexture *texture; // Textura con los graficos del objeto LTexture *texture; // Textura con los graficos del objeto
Sprite *sprite; // Sprite del objeto Sprite *sprite; // Sprite del objeto
SDL_Renderer *renderer; // El renderizador de la ventana SDL_Renderer *renderer; // El renderizador de la ventana
Asset *asset; // Objeto con la ruta a todos los ficheros de recursos Asset *asset; // Objeto con la ruta a todos los ficheros de recursos
std::vector<color_t> color; // Vector con los colores del objeto std::vector<color_t> color; // Vector con los colores del objeto
// Comprueba si ha llegado al limite del recorrido para darse media vuelta // Comprueba si ha llegado al limite del recorrido para darse media vuelta
@@ -30,7 +40,7 @@ private:
public: public:
// Constructor // Constructor
Item(SDL_Rect _rect, std::string _tileset, SDL_Renderer *_renderer, Asset *_asset); Item(item_t item);
// Destructor // Destructor
~Item(); ~Item();

View File

@@ -37,6 +37,12 @@ Room::~Room()
delete enemy; delete enemy;
} }
enemy_list.clear(); enemy_list.clear();
for (auto item : item_list)
{
delete item;
}
item_list.clear();
} }
// Carga las variables desde un fichero // Carga las variables desde un fichero
@@ -136,9 +142,9 @@ bool Room::load(std::string _file_path)
// Si la linea contiene el texto [item] se realiza el proceso de carga de un item // Si la linea contiene el texto [item] se realiza el proceso de carga de un item
else if (line == "[item]") else if (line == "[item]")
{ {
// enemy_t enemy; item_t item;
// enemy.asset = asset; item.asset = asset;
// enemy.renderer = renderer; item.renderer = renderer;
do do
{ {
@@ -147,15 +153,15 @@ bool Room::load(std::string _file_path)
// Encuentra la posición del caracter '=' // Encuentra la posición del caracter '='
int pos = line.find("="); int pos = line.find("=");
// Procesa las dos subcadenas // Procesa las dos subcadenas
// if (!setEnemy(&enemy, line.substr(0, pos), line.substr(pos + 1, line.length()))) if (!setItem(&item, line.substr(0, pos), line.substr(pos + 1, line.length())))
//{ {
// printf("Warning: file %s\n, unknown parameter \"%s\"\n", filename.c_str(), line.substr(0, pos).c_str()); printf("Warning: file %s\n, unknown parameter \"%s\"\n", filename.c_str(), line.substr(0, pos).c_str());
// success = false; success = false;
//} }
} while (line != "[item-end]"); } while (line != "[item-end]");
// Añade el enemigo al vector de enemigos // Añade el item al vector de items
// enemy_list.push_back(new Enemy(enemy)); item_list.push_back(new Item(item));
} }
// En caso contrario se parsea el fichero para buscar las variables y los valores // En caso contrario se parsea el fichero para buscar las variables y los valores
@@ -298,6 +304,39 @@ bool Room::setEnemy(enemy_t *enemy, std::string _var, std::string _value)
return success; return success;
} }
// Asigna variables a una estructura item_t
bool Room::setItem(item_t *item, std::string _var, std::string _value)
{
// Indicador de éxito en la asignación
bool success = true;
if (_var == "tileset")
{
item->tileset = _value;
}
else if (_var == "x")
{
item->x = std::stof(_value) * BLOCK;
}
else if (_var == "y")
{
item->y = std::stof(_value) * BLOCK;
}
else if (_var == "tile")
{
item->tile = std::stof(_value);
}
else if (_var == "[item-end]")
{
}
else
{
success = false;
}
return success;
}
// Devuelve el nombre de la habitación // Devuelve el nombre de la habitación
std::string Room::getName() std::string Room::getName()
{ {
@@ -352,6 +391,15 @@ void Room::drawEnemies()
} }
} }
// Dibuja los objetos en pantalla
void Room::drawItems()
{
for (auto item : item_list)
{
item->draw();
}
}
// Actualiza las variables y objetos de la habitación // Actualiza las variables y objetos de la habitación
void Room::update() void Room::update()
{ {
@@ -416,11 +464,11 @@ int Room::getTile(SDL_Point point)
bool Room::enemyCollision(SDL_Rect &rect) bool Room::enemyCollision(SDL_Rect &rect)
{ {
bool collision = false; bool collision = false;
for (auto enemy : enemy_list) for (auto enemy : enemy_list)
{ {
collision |= checkCollision(rect, enemy->getCollider()); collision |= checkCollision(rect, enemy->getCollider());
} }
return collision; return collision;
} }

View File

@@ -4,6 +4,7 @@
#include "utils.h" #include "utils.h"
#include "asset.h" #include "asset.h"
#include "enemy.h" #include "enemy.h"
#include "item.h"
#include <string> #include <string>
#include <vector> #include <vector>
@@ -41,7 +42,7 @@ private:
std::string tileset; // Imagen con los graficos para la habitación std::string tileset; // Imagen con los graficos para la habitación
std::vector<int> tilemap; // Indice de los tiles a dibujar en la habitación std::vector<int> tilemap; // Indice de los tiles a dibujar en la habitación
std::vector<Enemy *> enemy_list; // Listado con los enemigos de la habitación std::vector<Enemy *> enemy_list; // Listado con los enemigos de la habitación
std::vector<int> item_list; // Listado con los items que hay en la habitación std::vector<Item *> item_list; // Listado con los items que hay en la habitación
LTexture *texture; // Textura con los graficos de la habitación LTexture *texture; // Textura con los graficos de la habitación
Asset *asset; // Objeto con la ruta a todos los ficheros de recursos Asset *asset; // Objeto con la ruta a todos los ficheros de recursos
SDL_Renderer *renderer; // El renderizador de la ventana SDL_Renderer *renderer; // El renderizador de la ventana
@@ -56,6 +57,9 @@ private:
// Asigna variables a una estructura enemy_t // Asigna variables a una estructura enemy_t
bool setEnemy(enemy_t *enemy, std::string _var, std::string _value); bool setEnemy(enemy_t *enemy, std::string _var, std::string _value);
// Asigna variables a una estructura item_t
bool setItem(item_t *item, std::string _var, std::string _value);
// Pinta el mapa de la habitación en la textura // Pinta el mapa de la habitación en la textura
void fillMapTexture(); void fillMapTexture();
@@ -78,6 +82,9 @@ public:
// Dibuja los enemigos en pantalla // Dibuja los enemigos en pantalla
void drawEnemies(); void drawEnemies();
// Dibuja los objetos en pantalla
void drawItems();
// Actualiza las variables y objetos de la habitación // Actualiza las variables y objetos de la habitación
void update(); void update();