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]
tileset=items.png
tile=1
x=10
y=10
tile=0
x=1
y=7
[item-end]
[item]
tileset=items.png
tile=0
x=17
y=8
[item-end]

View File

@@ -3,22 +3,22 @@
<tileset firstgid="1" source="../../resources/tilesets/room1.tsx"/>
<layer id="1" name="Capa de patrones 1" width="32" height="16">
<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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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>
</layer>
</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/enemies/enemy01.png", bitmap);
mAsset->add("/media/player/player01.png", bitmap);
mAsset->add("/media/items/items.png", bitmap);
}
// Carga el fichero de configuración

View File

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

View File

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

View File

@@ -14,6 +14,16 @@ POSICION INICIAL
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
class Item
{
@@ -21,8 +31,8 @@ private:
LTexture *texture; // Textura con los graficos del objeto
Sprite *sprite; // Sprite del objeto
SDL_Renderer *renderer; // El renderizador de la ventana
Asset *asset; // Objeto con la ruta a todos los ficheros de recursos
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
// Comprueba si ha llegado al limite del recorrido para darse media vuelta
@@ -30,7 +40,7 @@ private:
public:
// Constructor
Item(SDL_Rect _rect, std::string _tileset, SDL_Renderer *_renderer, Asset *_asset);
Item(item_t item);
// Destructor
~Item();

View File

@@ -37,6 +37,12 @@ Room::~Room()
delete enemy;
}
enemy_list.clear();
for (auto item : item_list)
{
delete item;
}
item_list.clear();
}
// 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
else if (line == "[item]")
{
// enemy_t enemy;
// enemy.asset = asset;
// enemy.renderer = renderer;
item_t item;
item.asset = asset;
item.renderer = renderer;
do
{
@@ -147,15 +153,15 @@ bool Room::load(std::string _file_path)
// Encuentra la posición del caracter '='
int pos = line.find("=");
// Procesa las dos subcadenas
// if (!setEnemy(&enemy, 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());
// success = false;
//}
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());
success = false;
}
} while (line != "[item-end]");
// Añade el enemigo al vector de enemigos
// enemy_list.push_back(new Enemy(enemy));
// Añade el item al vector de items
item_list.push_back(new Item(item));
}
// 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;
}
// 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
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
void Room::update()
{
@@ -416,11 +464,11 @@ int Room::getTile(SDL_Point point)
bool Room::enemyCollision(SDL_Rect &rect)
{
bool collision = false;
for (auto enemy : enemy_list)
{
collision |= checkCollision(rect, enemy->getCollider());
}
return collision;
}

View File

@@ -4,6 +4,7 @@
#include "utils.h"
#include "asset.h"
#include "enemy.h"
#include "item.h"
#include <string>
#include <vector>
@@ -41,7 +42,7 @@ private:
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<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
Asset *asset; // Objeto con la ruta a todos los ficheros de recursos
SDL_Renderer *renderer; // El renderizador de la ventana
@@ -56,6 +57,9 @@ private:
// Asigna variables a una estructura enemy_t
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
void fillMapTexture();
@@ -78,6 +82,9 @@ public:
// Dibuja los enemigos en pantalla
void drawEnemies();
// Dibuja los objetos en pantalla
void drawItems();
// Actualiza las variables y objetos de la habitación
void update();