diff --git a/source/game.cpp b/source/game.cpp index a926fa2..85aec77 100644 --- a/source/game.cpp +++ b/source/game.cpp @@ -11,7 +11,8 @@ Game::Game(SDL_Renderer *renderer, Screen *screen, Asset *asset, Input *input) // Reserva memoria para los objetos eventHandler = new SDL_Event(); - map = new Map(asset->get("01.map"), renderer, asset); + itemTracker = new Item_tracker(); + map = new Map(asset->get("01.map"), renderer, asset, itemTracker); player = new Player(renderer, asset, input, map); debugText = new Text(asset->get("debug.png"), asset->get("debug.txt"), renderer); music = JA_LoadMusic(asset->get("music_surface.ogg").c_str()); @@ -32,6 +33,7 @@ Game::Game(SDL_Renderer *renderer, Screen *screen, Asset *asset, Input *input) Game::~Game() { delete eventHandler; + delete itemTracker; delete map; delete player; delete debugText; @@ -124,7 +126,7 @@ void Game::checkInput() if (input->checkInput(INPUT_BUTTON_3, REPEAT_FALSE)) { delete map; - map = new Map(asset->get("01.map"), renderer, asset); + map = new Map(asset->get("01.map"), renderer, asset, itemTracker); delete player; player = new Player(renderer, asset, input, map); } @@ -216,7 +218,7 @@ bool Game::changeMap(std::string file) delete map; // Crea un objeto habitación nuevo a partir del fichero - map = new Map(asset->get(file), renderer, asset); + map = new Map(asset->get(file), renderer, asset, itemTracker); success = true; } diff --git a/source/game.h b/source/game.h index 8768d05..cd479f7 100644 --- a/source/game.h +++ b/source/game.h @@ -7,6 +7,7 @@ #include "input.h" #include "map.h" #include "player.h" +#include "item_tracker.h" #include "text.h" #ifndef GAME_H @@ -15,20 +16,21 @@ class Game { private: - SDL_Renderer *renderer; // El renderizador de la ventana - Asset *asset; // Objeto encargado de gestionar los ficheros de recursos - Screen *screen; // Objeto encargado de dibujar en pantalla - Input *input; // Objeto Input para gestionar las entradas - SDL_Event *eventHandler; // Manejador de eventos - JA_Music music; // Contiene la musica que se reproduce durante el juego - Text *debugText; // Objeto para escribir texto con información de debug - Map *map; // Objeto encargado de gestionar el mapeado del juego - Player *player; // Objeto para gestionar el jugador - section_t section; // Seccion actual dentro del programa - int ticks; // Contador de ticks para ajustar la velocidad del programa - int ticksSpeed; // Velocidad a la que se repiten los bucles del programa - bool debug; // Indica si esta activo el modo de depuración - bool musicEnabled; // Indica si la musica puede sonar o no + SDL_Renderer *renderer; // El renderizador de la ventana + Asset *asset; // Objeto encargado de gestionar los ficheros de recursos + Screen *screen; // Objeto encargado de dibujar en pantalla + Input *input; // Objeto Input para gestionar las entradas + SDL_Event *eventHandler; // Manejador de eventos + JA_Music music; // Contiene la musica que se reproduce durante el juego + Text *debugText; // Objeto para escribir texto con información de debug + Map *map; // Objeto encargado de gestionar el mapeado del juego + Player *player; // Objeto para gestionar el jugador + Item_tracker *itemTracker; // Objeto para gestionar los items recogidos + section_t section; // Seccion actual dentro del programa + int ticks; // Contador de ticks para ajustar la velocidad del programa + int ticksSpeed; // Velocidad a la que se repiten los bucles del programa + bool debug; // Indica si esta activo el modo de depuración + bool musicEnabled; // Indica si la musica puede sonar o no // Actualiza el juego, las variables, comprueba la entrada, etc. void update(); diff --git a/source/item_tracker.h b/source/item_tracker.h index 2072f09..8f80f58 100644 --- a/source/item_tracker.h +++ b/source/item_tracker.h @@ -1,5 +1,6 @@ #pragma once -#include "ifdefs.h" + +#include #include "utils.h" #include #include diff --git a/source/map.cpp b/source/map.cpp index 4d270da..289575d 100644 --- a/source/map.cpp +++ b/source/map.cpp @@ -1,17 +1,19 @@ #include "map.h" // Constructor -Map::Map(std::string file, SDL_Renderer *renderer, Asset *asset) +Map::Map(std::string file, SDL_Renderer *renderer, Asset *asset, Item_tracker *itemTracker) { // Inicializa variables tile_size = 8; map_width = 40; map_height = 26; tileset_width = 32; + name = file.substr(file.find_last_of("\\/") + 1); // Copia los punteros a objetos this->asset = asset; this->renderer = renderer; + this->itemTracker = itemTracker; // Crea los objetos texture_tile = new LTexture(); @@ -165,8 +167,12 @@ bool Map::load(std::string file_path) } while (line != "[/diamond]"); - printf("** actor diamond loaded\n\n"); - actors.push_back(new ActorDiamond(actor)); + // Comprueba si el actor no ha sido recogido previamente + if (!itemTracker->hasBeenPicked(name, {(int)actor.x, (int)actor.y})) + { + printf("** actor diamond loaded\n\n"); + actors.push_back(new ActorDiamond(actor)); + } } } while (line != "[/actors]"); @@ -578,4 +584,11 @@ bool Map::deleteActor(int index) actors.erase(actors.begin() + index); return success; +} + +// Coge un item +void Map::getItem(int index) +{ + const SDL_Rect r = getActorCollider(index); + itemTracker->addItem(name, {r.x, r.y}); } \ No newline at end of file diff --git a/source/map.h b/source/map.h index e4be016..2e39bce 100644 --- a/source/map.h +++ b/source/map.h @@ -4,6 +4,7 @@ #include "utils.h" #include "asset.h" #include "const.h" +#include "item_tracker.h" #include "actor_moving_platform.h" #include "actor_diamond.h" #include @@ -36,6 +37,7 @@ class Map private: Asset *asset; // Objeto con la ruta a todos los ficheros de recursos SDL_Renderer *renderer; // El renderizador de la ventana + std::string name; // Identificador de la habitación std::string room_up; // Identificador de la habitación que se encuentra arriba std::string room_down; // Identificador de la habitación que se encuentra abajp std::string room_left; // Identificador de la habitación que se encuentra a la izquierda @@ -47,6 +49,7 @@ private: std::vector actors; // Listado con los actores de la habitación color_t bgColor1; // Color superior del degradado de fondo color_t bgColor2; // Color inferior del degradado de fondo + Item_tracker *itemTracker; // Objeto que gestiona los items que ya se han recogido int tile_size; // Ancho del tile en pixels int map_width; // Ancho del mapa en tiles @@ -67,7 +70,7 @@ private: public: // Constructor - Map(std::string file, SDL_Renderer *renderer, Asset *asset); + Map(std::string file, SDL_Renderer *renderer, Asset *asset, Item_tracker *itemTracker); // Destructor ~Map(); @@ -110,6 +113,9 @@ public: // Elimina un actor bool deleteActor(int index); + + // Coge un item + void getItem(int index); }; #endif diff --git a/source/player.cpp b/source/player.cpp index 343134a..1e0dba2 100644 --- a/source/player.cpp +++ b/source/player.cpp @@ -448,6 +448,7 @@ int Player::checkActors() { diamonds++; JA_PlaySound(sound_coin); + map->getItem(index); map->deleteActor(index); }