diff --git a/data/room/01.room b/data/room/01.room
index b9b643c..9566b00 100644
--- a/data/room/01.room
+++ b/data/room/01.room
@@ -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]
\ No newline at end of file
diff --git a/data/room/room1.tmx b/data/room/room1.tmx
index 91215be..bc91374 100644
--- a/data/room/room1.tmx
+++ b/data/room/room1.tmx
@@ -3,22 +3,22 @@
-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
diff --git a/media/items/items.png b/media/items/items.png
new file mode 100644
index 0000000..5899a71
Binary files /dev/null and b/media/items/items.png differ
diff --git a/source/director.cpp b/source/director.cpp
index a621b2d..3db0cc9 100644
--- a/source/director.cpp
+++ b/source/director.cpp
@@ -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
diff --git a/source/game.cpp b/source/game.cpp
index c82fa4c..42fee61 100644
--- a/source/game.cpp
+++ b/source/game.cpp
@@ -144,6 +144,7 @@ void Game::draw()
mRoom->drawMap();
mRoom->drawEnemies();
+ mRoom->drawItems();
mPlayer->draw();
// Texto en el centro de la pantalla
diff --git a/source/item.cpp b/source/item.cpp
index 028bf06..10e634c 100644
--- a/source/item.cpp
+++ b/source/item.cpp
@@ -3,22 +3,22 @@
#include
// 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()
{
-
}
diff --git a/source/item.h b/source/item.h
index 9271538..d77911e 100644
--- a/source/item.h
+++ b/source/item.h
@@ -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; // 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();
diff --git a/source/room.cpp b/source/room.cpp
index a9ef9a4..a207869 100644
--- a/source/room.cpp
+++ b/source/room.cpp
@@ -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;
}
\ No newline at end of file
diff --git a/source/room.h b/source/room.h
index aa614cd..d3114a3 100644
--- a/source/room.h
+++ b/source/room.h
@@ -4,6 +4,7 @@
#include "utils.h"
#include "asset.h"
#include "enemy.h"
+#include "item.h"
#include
#include
@@ -41,7 +42,7 @@ private:
std::string tileset; // Imagen con los graficos para la habitación
std::vector tilemap; // Indice de los tiles a dibujar en la habitación
std::vector enemy_list; // Listado con los enemigos de la habitación
- std::vector item_list; // Listado con los items que hay en la habitación
+ std::vector- 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();