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
|
// Crea los objetos
|
||||||
mScreen = new Screen(window, renderer);
|
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);
|
mPlayer = new Player(mSpawnPoint, mAsset->get("player01.png"), mRenderer, mAsset, mInput, mRoom);
|
||||||
mEventHandler = new SDL_Event();
|
mEventHandler = new SDL_Event();
|
||||||
mTextureText = new LTexture();
|
mTextureText = new LTexture();
|
||||||
@@ -33,6 +34,18 @@ Game::~Game()
|
|||||||
mInput = nullptr;
|
mInput = nullptr;
|
||||||
|
|
||||||
// Libera la memoria de los objetos
|
// Libera la memoria de los objetos
|
||||||
|
delete mScreen;
|
||||||
|
mScreen = nullptr;
|
||||||
|
|
||||||
|
delete mItemTracker;
|
||||||
|
mItemTracker = nullptr;
|
||||||
|
|
||||||
|
delete mRoom;
|
||||||
|
mRoom = nullptr;
|
||||||
|
|
||||||
|
delete mPlayer;
|
||||||
|
mPlayer = nullptr;
|
||||||
|
|
||||||
delete mEventHandler;
|
delete mEventHandler;
|
||||||
mEventHandler = nullptr;
|
mEventHandler = nullptr;
|
||||||
|
|
||||||
@@ -40,15 +53,6 @@ Game::~Game()
|
|||||||
delete mTextureText;
|
delete mTextureText;
|
||||||
mTextureText = nullptr;
|
mTextureText = nullptr;
|
||||||
|
|
||||||
delete mScreen;
|
|
||||||
mScreen = nullptr;
|
|
||||||
|
|
||||||
delete mRoom;
|
|
||||||
mRoom = nullptr;
|
|
||||||
|
|
||||||
delete mRoom;
|
|
||||||
mRoom = nullptr;
|
|
||||||
|
|
||||||
delete mText;
|
delete mText;
|
||||||
mText = nullptr;
|
mText = nullptr;
|
||||||
|
|
||||||
@@ -131,7 +135,7 @@ void Game::update()
|
|||||||
delete mPlayer;
|
delete mPlayer;
|
||||||
|
|
||||||
// Crea la nueva habitación y el nuevo jugador
|
// 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);
|
mPlayer = new Player(mSpawnPoint, mAsset->get("player01.png"), mRenderer, mAsset, mInput, mRoom);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -220,7 +224,7 @@ bool Game::changeRoom(std::string file)
|
|||||||
mRoom = nullptr;
|
mRoom = nullptr;
|
||||||
|
|
||||||
// Crea un objeto habitación nuevo a partir del fichero
|
// 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;
|
success = true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,6 +13,7 @@
|
|||||||
#include "screen.h"
|
#include "screen.h"
|
||||||
#include "asset.h"
|
#include "asset.h"
|
||||||
#include "room.h"
|
#include "room.h"
|
||||||
|
#include "item_tracker.h"
|
||||||
#include "player.h"
|
#include "player.h"
|
||||||
#include "jail_audio.h"
|
#include "jail_audio.h"
|
||||||
|
|
||||||
@@ -23,23 +24,24 @@
|
|||||||
class Game
|
class Game
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
SDL_Renderer *mRenderer; // El renderizador de la ventana
|
SDL_Renderer *mRenderer; // El renderizador de la ventana
|
||||||
SDL_Event *mEventHandler; // Manejador de eventos
|
SDL_Event *mEventHandler; // Manejador de eventos
|
||||||
Screen *mScreen; // Objeto encargado de manejar el renderizador
|
Screen *mScreen; // Objeto encargado de manejar el renderizador
|
||||||
Room *mRoom; // Objeto encargado de gestionar cada habitación del juego
|
Room *mRoom; // Objeto encargado de gestionar cada habitación del juego
|
||||||
Player *mPlayer; // Objeto con el jugador
|
Player *mPlayer; // Objeto con el jugador
|
||||||
Asset *mAsset; // Objeto con la ruta a todos los ficheros de recursos
|
Item_tracker *mItemTracker; // Lleva el control de los objetos recogidos
|
||||||
Lang *mLang; // Objeto para gestionar los textos en diferentes idiomas
|
Asset *mAsset; // Objeto con la ruta a todos los ficheros de recursos
|
||||||
Input *mInput; // Objeto pata gestionar la entrada
|
Lang *mLang; // Objeto para gestionar los textos en diferentes idiomas
|
||||||
Text *mText; // Objeto para los textos del juego
|
Input *mInput; // Objeto pata gestionar la entrada
|
||||||
Fade *mFade; // Objeto para renderizar fades
|
Text *mText; // Objeto para los textos del juego
|
||||||
LTexture *mTextureText; // Textura para la fuente de texto
|
Fade *mFade; // Objeto para renderizar fades
|
||||||
Uint32 mTicks; // Contador de ticks para ajustar la velocidad del programa
|
LTexture *mTextureText; // Textura para la fuente de texto
|
||||||
Uint8 mTicksSpeed; // Velocidad a la que se repiten los bucles del programa
|
Uint32 mTicks; // Contador de ticks para ajustar la velocidad del programa
|
||||||
section_t mSection; // Seccion actual dentro del juego
|
Uint8 mTicksSpeed; // Velocidad a la que se repiten los bucles del programa
|
||||||
std::string mCurrentRoom; // Fichero de la habitación actual
|
section_t mSection; // Seccion actual dentro del juego
|
||||||
player_t mSpawnPoint; // Lugar de la habitación donde aparece el jugador
|
std::string mCurrentRoom; // Fichero de la habitación actual
|
||||||
bool mDebug; // Indica si el modo debug está activo
|
player_t mSpawnPoint; // Lugar de la habitación donde aparece el jugador
|
||||||
|
bool mDebug; // Indica si el modo debug está activo
|
||||||
|
|
||||||
// Inicializa las variables
|
// Inicializa las variables
|
||||||
void init();
|
void init();
|
||||||
|
|||||||
@@ -8,29 +8,49 @@ Item_tracker::Item_tracker()
|
|||||||
// Destructor
|
// Destructor
|
||||||
Item_tracker::~Item_tracker()
|
Item_tracker::~Item_tracker()
|
||||||
{
|
{
|
||||||
|
list.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Comprueba si el objeto ya ha sido cogido
|
// Comprueba si el objeto ya ha sido cogido
|
||||||
bool Item_tracker::hasBeenPicked(std::string name, SDL_Point pos)
|
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
|
// Añade el objeto a la lista de objetos cogidos
|
||||||
void Item_tracker::addItem(std::string name, SDL_Point pos)
|
void Item_tracker::addItem(std::string name, SDL_Point pos)
|
||||||
{
|
{
|
||||||
// Primero busca si ya hay una entrada con ese nombre
|
// Comprueba si el objeto no ha sido recogido con anterioridad
|
||||||
const int index = findByName(name);
|
if (!hasBeenPicked(name, pos))
|
||||||
if (index != -1)
|
|
||||||
{
|
{
|
||||||
}
|
// 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
|
// En caso contrario crea la entrada
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
item_tracker_t item;
|
item_tracker_t item;
|
||||||
item.name = name;
|
item.name = name;
|
||||||
item.pos.push_back(pos);
|
item.pos.push_back(pos);
|
||||||
list.push_back(item);
|
list.push_back(item);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,11 +4,15 @@
|
|||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
|
||||||
// Constructor
|
// 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;
|
asset = _asset;
|
||||||
renderer = _renderer;
|
renderer = _renderer;
|
||||||
|
item_tracker = _item_tracker;
|
||||||
|
|
||||||
|
// Crea los objetos
|
||||||
|
texture = new LTexture();
|
||||||
load(_file_path);
|
load(_file_path);
|
||||||
loadTextureFromFile(texture, asset->get(tileset), renderer);
|
loadTextureFromFile(texture, asset->get(tileset), renderer);
|
||||||
|
|
||||||
@@ -161,7 +165,11 @@ bool Room::load(std::string _file_path)
|
|||||||
} while (line != "[item-end]");
|
} while (line != "[item-end]");
|
||||||
|
|
||||||
// Añade el item al vector de items
|
// Añade el item al vector de items
|
||||||
item_list.push_back(new Item(item));
|
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
|
// En caso contrario se parsea el fichero para buscar las variables y los valores
|
||||||
@@ -479,17 +487,18 @@ bool Room::enemyCollision(SDL_Rect &rect)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Indica si hay colision con un objeto a partir de un rectangulo
|
// 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)
|
for (auto item : item_list)
|
||||||
{
|
{
|
||||||
if (checkCollision(rect, item->getCollider()))
|
if (checkCollision(rect, item->getCollider()))
|
||||||
{
|
{
|
||||||
item->pick();
|
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 "asset.h"
|
||||||
#include "enemy.h"
|
#include "enemy.h"
|
||||||
#include "item.h"
|
#include "item.h"
|
||||||
|
#include "item_tracker.h"
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
@@ -45,6 +46,7 @@ private:
|
|||||||
std::vector<Item *> 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
|
||||||
|
Item_tracker *item_tracker; // Lleva el control de los objetos recogidos
|
||||||
SDL_Renderer *renderer; // El renderizador de la ventana
|
SDL_Renderer *renderer; // El renderizador de la ventana
|
||||||
SDL_Texture *map_texture; // Textura para dibujar el mapa de la habitación
|
SDL_Texture *map_texture; // Textura para dibujar el mapa de la habitación
|
||||||
|
|
||||||
@@ -65,7 +67,7 @@ private:
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
// Constructor
|
// 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
|
// Destructor
|
||||||
~Room();
|
~Room();
|
||||||
@@ -98,7 +100,7 @@ public:
|
|||||||
bool enemyCollision(SDL_Rect &rect);
|
bool enemyCollision(SDL_Rect &rect);
|
||||||
|
|
||||||
// Indica si hay colision con un objeto a partir de un rectangulo
|
// Indica si hay colision con un objeto a partir de un rectangulo
|
||||||
SDL_Point itemCollision(SDL_Rect &rect);
|
bool itemCollision(SDL_Rect &rect);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user