forked from jaildesigner-jailgames/jaildoctors_dilemma
Ya lleva la cuenta de los objetos recogidos
This commit is contained in:
@@ -16,7 +16,8 @@ Game::Game(SDL_Window *window, SDL_Renderer *renderer, Asset *asset, Lang *lang,
|
||||
|
||||
// Crea los objetos
|
||||
mScreen = new Screen(window, renderer);
|
||||
mRoom = new Room(mAsset->get(mCurrentRoom), mRenderer, mAsset);
|
||||
mItemTracker = new Item_tracker();
|
||||
mRoom = new Room(mAsset->get(mCurrentRoom), mRenderer, mAsset, mItemTracker);
|
||||
mPlayer = new Player(mSpawnPoint, mAsset->get("player01.png"), mRenderer, mAsset, mInput, mRoom);
|
||||
mEventHandler = new SDL_Event();
|
||||
mTextureText = new LTexture();
|
||||
@@ -33,6 +34,18 @@ Game::~Game()
|
||||
mInput = nullptr;
|
||||
|
||||
// Libera la memoria de los objetos
|
||||
delete mScreen;
|
||||
mScreen = nullptr;
|
||||
|
||||
delete mItemTracker;
|
||||
mItemTracker = nullptr;
|
||||
|
||||
delete mRoom;
|
||||
mRoom = nullptr;
|
||||
|
||||
delete mPlayer;
|
||||
mPlayer = nullptr;
|
||||
|
||||
delete mEventHandler;
|
||||
mEventHandler = nullptr;
|
||||
|
||||
@@ -40,15 +53,6 @@ Game::~Game()
|
||||
delete mTextureText;
|
||||
mTextureText = nullptr;
|
||||
|
||||
delete mScreen;
|
||||
mScreen = nullptr;
|
||||
|
||||
delete mRoom;
|
||||
mRoom = nullptr;
|
||||
|
||||
delete mRoom;
|
||||
mRoom = nullptr;
|
||||
|
||||
delete mText;
|
||||
mText = nullptr;
|
||||
|
||||
@@ -131,7 +135,7 @@ void Game::update()
|
||||
delete mPlayer;
|
||||
|
||||
// Crea la nueva habitación y el nuevo jugador
|
||||
mRoom = new Room(mAsset->get(mCurrentRoom), mRenderer, mAsset);
|
||||
mRoom = new Room(mAsset->get(mCurrentRoom), mRenderer, mAsset, mItemTracker);
|
||||
mPlayer = new Player(mSpawnPoint, mAsset->get("player01.png"), mRenderer, mAsset, mInput, mRoom);
|
||||
}
|
||||
|
||||
@@ -220,7 +224,7 @@ bool Game::changeRoom(std::string file)
|
||||
mRoom = nullptr;
|
||||
|
||||
// Crea un objeto habitación nuevo a partir del fichero
|
||||
mRoom = new Room(mAsset->get(file), mRenderer, mAsset);
|
||||
mRoom = new Room(mAsset->get(file), mRenderer, mAsset, mItemTracker);
|
||||
|
||||
success = true;
|
||||
}
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
#include "screen.h"
|
||||
#include "asset.h"
|
||||
#include "room.h"
|
||||
#include "item_tracker.h"
|
||||
#include "player.h"
|
||||
#include "jail_audio.h"
|
||||
|
||||
@@ -28,6 +29,7 @@ private:
|
||||
Screen *mScreen; // Objeto encargado de manejar el renderizador
|
||||
Room *mRoom; // Objeto encargado de gestionar cada habitación del juego
|
||||
Player *mPlayer; // Objeto con el jugador
|
||||
Item_tracker *mItemTracker; // Lleva el control de los objetos recogidos
|
||||
Asset *mAsset; // Objeto con la ruta a todos los ficheros de recursos
|
||||
Lang *mLang; // Objeto para gestionar los textos en diferentes idiomas
|
||||
Input *mInput; // Objeto pata gestionar la entrada
|
||||
|
||||
@@ -8,20 +8,39 @@ Item_tracker::Item_tracker()
|
||||
// Destructor
|
||||
Item_tracker::~Item_tracker()
|
||||
{
|
||||
list.clear();
|
||||
}
|
||||
|
||||
// Comprueba si el objeto ya ha sido cogido
|
||||
bool Item_tracker::hasBeenPicked(std::string name, SDL_Point pos)
|
||||
{
|
||||
bool success = false;
|
||||
|
||||
// Primero busca si ya hay una entrada con ese nombre
|
||||
const int index = findByName(name);
|
||||
if (index != -1)
|
||||
{
|
||||
// Luego busca si existe ya una entrada con esa posición
|
||||
if (findByPos(index, pos) != -1)
|
||||
{
|
||||
success = true;
|
||||
}
|
||||
}
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
// Añade el objeto a la lista de objetos cogidos
|
||||
void Item_tracker::addItem(std::string name, SDL_Point pos)
|
||||
{
|
||||
// Comprueba si el objeto no ha sido recogido con anterioridad
|
||||
if (!hasBeenPicked(name, pos))
|
||||
{
|
||||
// Primero busca si ya hay una entrada con ese nombre
|
||||
const int index = findByName(name);
|
||||
if (index != -1)
|
||||
{
|
||||
list[index].pos.push_back(pos);
|
||||
}
|
||||
|
||||
// En caso contrario crea la entrada
|
||||
@@ -33,6 +52,7 @@ void Item_tracker::addItem(std::string name, SDL_Point pos)
|
||||
list.push_back(item);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Busca una entrada en la lista por nombre
|
||||
int Item_tracker::findByName(std::string name)
|
||||
|
||||
@@ -4,11 +4,15 @@
|
||||
#include <sstream>
|
||||
|
||||
// Constructor
|
||||
Room::Room(std::string _file_path, SDL_Renderer *_renderer, Asset *_asset)
|
||||
Room::Room(std::string _file_path, SDL_Renderer *_renderer, Asset *_asset, Item_tracker *_item_tracker)
|
||||
{
|
||||
texture = new LTexture();
|
||||
// Copia los punteros a objetos
|
||||
asset = _asset;
|
||||
renderer = _renderer;
|
||||
item_tracker = _item_tracker;
|
||||
|
||||
// Crea los objetos
|
||||
texture = new LTexture();
|
||||
load(_file_path);
|
||||
loadTextureFromFile(texture, asset->get(tileset), renderer);
|
||||
|
||||
@@ -161,8 +165,12 @@ bool Room::load(std::string _file_path)
|
||||
} while (line != "[item-end]");
|
||||
|
||||
// Añade el item al vector de items
|
||||
const SDL_Point itemPos = {item.x, item.y};
|
||||
if (!item_tracker->hasBeenPicked(name, itemPos))
|
||||
{
|
||||
item_list.push_back(new Item(item));
|
||||
}
|
||||
}
|
||||
|
||||
// En caso contrario se parsea el fichero para buscar las variables y los valores
|
||||
else
|
||||
@@ -479,17 +487,18 @@ bool Room::enemyCollision(SDL_Rect &rect)
|
||||
}
|
||||
|
||||
// Indica si hay colision con un objeto a partir de un rectangulo
|
||||
SDL_Point Room::itemCollision(SDL_Rect &rect)
|
||||
bool Room::itemCollision(SDL_Rect &rect)
|
||||
{
|
||||
SDL_Point p = {-1, -1};
|
||||
bool collision = false;
|
||||
for (auto item : item_list)
|
||||
{
|
||||
if (checkCollision(rect, item->getCollider()))
|
||||
{
|
||||
item->pick();
|
||||
p = item->getPos();
|
||||
item_tracker->addItem(name, item->getPos());
|
||||
collision = true;
|
||||
}
|
||||
}
|
||||
|
||||
return p;
|
||||
return collision;
|
||||
}
|
||||
@@ -5,6 +5,7 @@
|
||||
#include "asset.h"
|
||||
#include "enemy.h"
|
||||
#include "item.h"
|
||||
#include "item_tracker.h"
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
@@ -45,6 +46,7 @@ private:
|
||||
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
|
||||
Item_tracker *item_tracker; // Lleva el control de los objetos recogidos
|
||||
SDL_Renderer *renderer; // El renderizador de la ventana
|
||||
SDL_Texture *map_texture; // Textura para dibujar el mapa de la habitación
|
||||
|
||||
@@ -65,7 +67,7 @@ private:
|
||||
|
||||
public:
|
||||
// Constructor
|
||||
Room(std::string _file_path, SDL_Renderer *_renderer, Asset *_asset);
|
||||
Room(std::string _file_path, SDL_Renderer *_renderer, Asset *_asset, Item_tracker *_item_tracker);
|
||||
|
||||
// Destructor
|
||||
~Room();
|
||||
@@ -98,7 +100,7 @@ public:
|
||||
bool enemyCollision(SDL_Rect &rect);
|
||||
|
||||
// Indica si hay colision con un objeto a partir de un rectangulo
|
||||
SDL_Point itemCollision(SDL_Rect &rect);
|
||||
bool itemCollision(SDL_Rect &rect);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user