diff --git a/source/common/resource.cpp b/source/common/resource.cpp new file mode 100644 index 0000000..8e3194f --- /dev/null +++ b/source/common/resource.cpp @@ -0,0 +1,53 @@ +#include "resource.h" +#include + +// Constructor +Resource::Resource(SDL_Renderer *renderer, Asset *asset, options_t *options) +{ + this->renderer = renderer; + this->asset = asset; + this->options = options; +} + +// Carga todos los recursos necesarios +void Resource::loadTextures(std::vector list) +{ + for (auto l : list) + { + texture_t t; + t.name = l; + t.texture = new Texture(renderer, asset->get(t.name)); + textures.push_back(t); + } +} + +// Libera los recursos +void Resource::freeTextures() +{ + // Libera las texturas + for (auto texture : textures) + { + texture.texture->unload(); + delete texture.texture; + } + textures.clear(); +} + +// Obtiene una textura +Texture *Resource::getTexture(std::string name) +{ + //std::cout << "BUSCANDO TEXTURA" << std::endl; + for (auto texture : textures) + { + //std::cout << "COMPROBANDO: " << texture.name << " - " << name << std::endl; + + if (texture.name.find(name) != std::string::npos) + { + std::cout << "CACHE: " << name << std::endl; + return texture.texture; + } + } + std::cout << "NO ENCONTRADA: " << name << std::endl; + + return nullptr; +} \ No newline at end of file diff --git a/source/common/resource.h b/source/common/resource.h new file mode 100644 index 0000000..c30777b --- /dev/null +++ b/source/common/resource.h @@ -0,0 +1,44 @@ +#pragma once + +#include +#include "asset.h" +#include "texture.h" +#include "utils.h" +#include +#include + +#ifndef RESOURCE_H +#define RESOURCE_H + +struct texture_t +{ + std::string name; // Nombre de la textura + Texture *texture; // La textura +}; + +class Resource +{ +private: + // Objetos y punteros + SDL_Renderer *renderer; // El renderizador de la ventana + Asset *asset; // Objeto con la ruta a todos los ficheros de recursos + options_t *options; // Puntero a las opciones del juego + + // Variables + std::vector textures; + +public: + // Constructor + Resource(SDL_Renderer *renderer, Asset *asset, options_t *options); + + // Carga todos los recursos necesarios + void loadTextures(std::vector textureList); + + // Libera los recursos + void freeTextures(); + + // Obtiene una textura + Texture* getTexture(std::string name); +}; + +#endif diff --git a/source/demo.cpp b/source/demo.cpp index ffb66e1..f762ee2 100644 --- a/source/demo.cpp +++ b/source/demo.cpp @@ -1,7 +1,7 @@ #include "demo.h" // Constructor -Demo::Demo(SDL_Renderer *renderer, Screen *screen, Asset *asset, options_t *options, Debug *debug) +Demo::Demo(SDL_Renderer *renderer, Screen *screen, Resource *resource, Asset *asset, options_t *options, Debug *debug) { // Inicia algunas variables board.iniClock = SDL_GetTicks(); @@ -15,16 +15,20 @@ Demo::Demo(SDL_Renderer *renderer, Screen *screen, Asset *asset, options_t *opti currentRoom = rooms.at(roomIndex); // Copia los punteros + this->resource = resource; this->renderer = renderer; this->asset = asset; this->screen = screen; this->debug = debug; this->options = options; + // Carga los recursos + loadResources(); + // Crea los objetos itemTracker = new ItemTracker(); scoreboard = new ScoreBoard(renderer, asset, options, &board); - room = new Room(asset->get(currentRoom), renderer, screen, asset, options, itemTracker, &board.items, debug); + room = new Room(asset->get(currentRoom), renderer, screen, resource, asset, options, itemTracker, &board.items, debug); eventHandler = new SDL_Event(); text = new Text(asset->get("smb2.png"), asset->get("smb2.txt"), renderer); @@ -47,6 +51,8 @@ Demo::Demo(SDL_Renderer *renderer, Screen *screen, Asset *asset, options_t *opti Demo::~Demo() { // Libera la memoria de los objetos + resource->freeTextures(); + //delete resource; delete itemTracker; delete scoreboard; delete room; @@ -192,7 +198,7 @@ bool Demo::changeRoom(std::string file) room = nullptr; // Crea un objeto habitación nuevo a partir del fichero - room = new Room(asset->get(file), renderer, screen, asset, options, itemTracker, &board.items, debug); + room = new Room(asset->get(file), renderer, screen, resource, asset, options, itemTracker, &board.items, debug); // Actualiza el marcador const color_t c = room->getBorderColor(); // Pone el color del marcador @@ -222,4 +228,68 @@ void Demo::checkRoomChange() changeRoom(rooms.at(roomIndex)); } } +} + +// Carga los recursos +void Demo::loadResources() +{ + std::vector textureList; + + // Jugador + textureList.push_back("player.png"); + + // Tilesets + textureList.push_back("standard.png"); + textureList.push_back("standard_zxarne.png"); + + // Enemigos + textureList.push_back("paco.png"); + textureList.push_back("chip.png"); + textureList.push_back("wave.png"); + textureList.push_back("wave_v.png"); + textureList.push_back("sigmasua.png"); + textureList.push_back("diskette.png"); + textureList.push_back("bird.png"); + textureList.push_back("bin.png"); + textureList.push_back("qvoid.png"); + textureList.push_back("batman.png"); + textureList.push_back("tuno.png"); + textureList.push_back("matatunos.png"); + textureList.push_back("abad.png"); + textureList.push_back("jailbattle_human.png"); + textureList.push_back("jailbattle_alien.png"); + textureList.push_back("jailer.png"); + textureList.push_back("jailer2.png"); + textureList.push_back("jailer3.png"); + textureList.push_back("printer.png"); + textureList.push_back("code.png"); + textureList.push_back("demon.png"); + textureList.push_back("dimallas.png"); + textureList.push_back("dimallas_v.png"); + textureList.push_back("heavy.png"); + textureList.push_back("spider.png"); + textureList.push_back("macaronni_ted.png"); + textureList.push_back("mummy.png"); + textureList.push_back("sam.png"); + textureList.push_back("amstrad_character_set.png"); + textureList.push_back("breakout.png"); + textureList.push_back("lamp.png"); + textureList.push_back("bry.png"); + textureList.push_back("tv.png"); + textureList.push_back("tv_panel.png"); + textureList.push_back("arounders_door.png"); + textureList.push_back("arounders_machine.png"); + textureList.push_back("arounder_walk.png"); + textureList.push_back("arounder_stop.png"); + textureList.push_back("arounder_fly.png"); + textureList.push_back("bat.png"); + + // Items + textureList.push_back("items.png"); + + // Texto + textureList.push_back("smb2.png"); + textureList.push_back("debug.png"); + + resource->loadTextures(textureList); } \ No newline at end of file diff --git a/source/demo.h b/source/demo.h index 8e3058b..ab0bb1c 100644 --- a/source/demo.h +++ b/source/demo.h @@ -5,6 +5,7 @@ #include "common/asset.h" #include "common/debug.h" #include "common/input.h" +#include "common/resource.h" #include "common/screen.h" #include "common/sprite.h" #include "common/text.h" @@ -26,6 +27,7 @@ private: SDL_Event *eventHandler; // Manejador de eventos Screen *screen; // Objeto encargado de manejar el renderizador Room *room; // Objeto encargado de gestionar cada habitación del juego + Resource *resource; // Objeto con los recursos Asset *asset; // Objeto con la ruta a todos los ficheros de recursos Text *text; // Objeto para los textos del juego ScoreBoard *scoreboard; // Objeto encargado de gestionar el marcador @@ -64,9 +66,12 @@ private: // Comprueba si se ha de cambiar de habitación void checkRoomChange(); + // Carga los recursos + void loadResources(); + public: // Constructor - Demo(SDL_Renderer *renderer, Screen *screen, Asset *asset, options_t *options, Debug *debug); + Demo(SDL_Renderer *renderer, Screen *screen, Resource *resource, Asset *asset, options_t *options, Debug *debug); // Destructor ~Demo(); diff --git a/source/director.cpp b/source/director.cpp index c66fe17..0481fd5 100644 --- a/source/director.cpp +++ b/source/director.cpp @@ -35,6 +35,7 @@ Director::Director(std::string path) screen = new Screen(window, renderer, options, GAMECANVAS_WIDTH, GAMECANVAS_HEIGHT); screen->setBorderColor(borderColor); screen->setVideoMode(options->fullScreenMode); + resource = new Resource(renderer, asset, options); debug = new Debug(renderer, screen, asset); music = JA_LoadMusic(asset->get("title.ogg").c_str()); } @@ -707,7 +708,7 @@ void Director::runCredits() // Ejecuta la seccion de la demo, donde se ven pantallas del juego void Director::runDemo() { - demo = new Demo(renderer, screen, asset, options, debug); + demo = new Demo(renderer, screen, resource, asset, options, debug); setSection(demo->run()); delete demo; } @@ -716,7 +717,7 @@ void Director::runDemo() void Director::runGame() { JA_StopMusic(); - game = new Game(renderer, screen, asset, options, input, debug); + game = new Game(renderer, screen, resource, asset, options, input, debug); setSection(game->run()); delete game; } diff --git a/source/director.h b/source/director.h index 13301f3..ff134a3 100644 --- a/source/director.h +++ b/source/director.h @@ -5,6 +5,7 @@ #include "common/input.h" #include "common/jail_audio.h" #include "common/movingsprite.h" +#include "common/resource.h" #include "common/sprite.h" #include "common/text.h" #include "common/utils.h" @@ -33,6 +34,7 @@ private: Intro *intro; // Objeto para gestionar la introducción del juego Credits *credits; // Objeto para gestionar los creditos del juego Demo *demo; // Objeto para gestionar el modo demo, en el que se ven pantallas del juego + Resource *resource; // Objeto con los recursos Asset *asset; // Objeto que gestiona todos los ficheros de recursos Debug *debug; // Objeto para getsionar la información de debug diff --git a/source/enemy.cpp b/source/enemy.cpp index 24320af..2c85659 100644 --- a/source/enemy.cpp +++ b/source/enemy.cpp @@ -6,11 +6,13 @@ Enemy::Enemy(enemy_t enemy) { // Obten punteros a objetos + resource = enemy.resource; asset = enemy.asset; renderer = enemy.renderer; // Crea objetos - texture = new Texture(renderer, asset->get(enemy.tileset)); + //texture = new Texture(renderer, asset->get(enemy.tileset)); + texture = resource->getTexture(enemy.tileset); sprite = new AnimatedSprite(texture, renderer, asset->get(enemy.animation)); // Obten el resto de valores @@ -45,7 +47,7 @@ Enemy::Enemy(enemy_t enemy) // Destructor Enemy::~Enemy() { - delete texture; + //delete texture; delete sprite; } diff --git a/source/enemy.h b/source/enemy.h index 4149dc7..ec1d76e 100644 --- a/source/enemy.h +++ b/source/enemy.h @@ -2,6 +2,7 @@ #include #include "common/animatedsprite.h" #include "common/asset.h" +#include "common/resource.h" #include "common/utils.h" #include @@ -12,6 +13,7 @@ struct enemy_t { SDL_Renderer *renderer; // El renderizador de la ventana + Resource *resource; // Objeto con los recursos Asset *asset; // Objeto con la ruta a todos los ficheros de recursos std::string tileset; // Fichero con los graficos del enemigo std::string animation; // Fichero con las animaciones del enemigo @@ -34,15 +36,16 @@ class Enemy { private: // Objetos y punteros + SDL_Renderer *renderer; // El renderizador de la ventana + Resource *resource; // Objeto con los recursos + Asset *asset; // Objeto con la ruta a todos los ficheros de recursos Texture *texture; // Textura con los graficos del enemigo AnimatedSprite *sprite; // Sprite del enemigo - SDL_Renderer *renderer; // El renderizador de la ventana - Asset *asset; // Objeto con la ruta a todos los ficheros de recursos // Variables color_t color; // Color del enemigo std::string colorString; // Color del enemigo en formato texto - palette_e palette; // Paleta de colores + palette_e palette; // Paleta de colores int x1; // Limite izquierdo de la ruta en el eje X int x2; // Limite derecho de la ruta en el eje X int y1; // Limite superior de la ruta en el eje Y diff --git a/source/game.cpp b/source/game.cpp index fc9456c..36410cf 100644 --- a/source/game.cpp +++ b/source/game.cpp @@ -1,7 +1,7 @@ #include "game.h" // Constructor -Game::Game(SDL_Renderer *renderer, Screen *screen, Asset *asset, options_t *options, Input *input, Debug *debug) +Game::Game(SDL_Renderer *renderer, Screen *screen, Resource *resource, Asset *asset, options_t *options, Input *input, Debug *debug) { // Inicia algunas variables board.iniClock = SDL_GetTicks(); @@ -9,6 +9,7 @@ Game::Game(SDL_Renderer *renderer, Screen *screen, Asset *asset, options_t *opti spawnPoint = {15, 96, 0, 0, 0, s_standing, SDL_FLIP_NONE}; // Copia los punteros + this->resource = resource; this->renderer = renderer; this->asset = asset; this->screen = screen; @@ -24,15 +25,13 @@ Game::Game(SDL_Renderer *renderer, Screen *screen, Asset *asset, options_t *opti spawnPoint = {x * 8, y * 8, 0, 0, 0, s_standing, SDL_FLIP_HORIZONTAL}; // **** - // Crea la cache de recursos - cacheResources(); - // Crea los objetos + loadResources(); scoreboard = new ScoreBoard(renderer, asset, options, &board); itemTracker = new ItemTracker(); roomTracker = new RoomTracker(); - room = new Room(asset->get(currentRoom), renderer, screen, asset, options, itemTracker, &board.items, debug); - player = new Player(spawnPoint, asset->get("player.png"), asset->get("player.ani"), renderer, asset, options, input, room, debug); + room = new Room(asset->get(currentRoom), renderer, screen, resource, asset, options, itemTracker, &board.items, debug); + player = new Player(spawnPoint, "player.png", asset->get("player.ani"), renderer, resource, asset, options, input, room, debug); eventHandler = new SDL_Event(); text = new Text(asset->get("smb2.png"), asset->get("smb2.txt"), renderer); music = JA_LoadMusic(asset->get("game.ogg").c_str()); @@ -61,10 +60,10 @@ Game::Game(SDL_Renderer *renderer, Screen *screen, Asset *asset, options_t *opti Game::~Game() { - // Libera los recursos - freeCache(); - // Libera la memoria de los objetos + resource->freeTextures(); + //delete resource; + delete scoreboard; delete itemTracker; delete roomTracker; @@ -305,7 +304,7 @@ bool Game::changeRoom(std::string file) room = nullptr; // Crea un objeto habitación nuevo a partir del fichero - room = new Room(asset->get(file), renderer, screen, asset, options, itemTracker, &board.items, debug); + room = new Room(asset->get(file), renderer, screen, resource, asset, options, itemTracker, &board.items, debug); // Actualiza el marcador const color_t c = room->getBorderColor(); // Pone el color del marcador @@ -394,8 +393,8 @@ void Game::killPlayer() setBlackScreen(); // Crea la nueva habitación y el nuevo jugador - room = new Room(asset->get(currentRoom), renderer, screen, asset, options, itemTracker, &board.items, debug); - player = new Player(spawnPoint, asset->get("player.png"), asset->get("player.ani"), renderer, asset, options, input, room, debug); + room = new Room(asset->get(currentRoom), renderer, screen, resource, asset, options, itemTracker, &board.items, debug); + player = new Player(spawnPoint, "player.png", asset->get("player.ani"), renderer, resource, asset, options, input, room, debug); room->pause(); player->pause(); @@ -461,85 +460,66 @@ void Game::renderBlackScreen() } } -// Carga todos los recursos necesarios -void Game::cacheResources() +// Carga los recursos +void Game::loadResources() { - // Carga las texturas std::vector textureList; - + // Jugador - textureList.push_back("player.png"); + textureList.push_back("player.png"); - // Tilesets - textureList.push_back("standard.png"); - textureList.push_back("standard_zxarne.png"); + // Tilesets + textureList.push_back("standard.png"); + textureList.push_back("standard_zxarne.png"); - // Enemigos - textureList.push_back("paco.png"); - textureList.push_back("chip.png"); - textureList.push_back("wave.png"); - textureList.push_back("wave_v.png"); - textureList.push_back("sigmasua.png"); - textureList.push_back("diskette.png"); - textureList.push_back("bird.png"); - textureList.push_back("bin.png"); - textureList.push_back("qvoid.png"); - textureList.push_back("batman.png"); - textureList.push_back("tuno.png"); - textureList.push_back("matatunos.png"); - textureList.push_back("abad.png"); - textureList.push_back("jailbattle_human.png"); - textureList.push_back("jailbattle_alien.png"); - textureList.push_back("jailer.png"); - textureList.push_back("jailer2.png"); - textureList.push_back("jailer3.png"); - textureList.push_back("printer.png"); - textureList.push_back("code.png"); - textureList.push_back("demon.png"); - textureList.push_back("dimallas.png"); - textureList.push_back("dimallas_v.png"); - textureList.push_back("heavy.png"); - textureList.push_back("spider.png"); - textureList.push_back("macaronni_ted.png"); - textureList.push_back("mummy.png"); - textureList.push_back("sam.png"); - textureList.push_back("amstrad_character_set.png"); - textureList.push_back("breakout.png"); - textureList.push_back("lamp.png"); - textureList.push_back("bry.png"); - textureList.push_back("tv.png"); - textureList.push_back("tv_panel.png"); - textureList.push_back("arounders_door.png"); - textureList.push_back("arounders_machine.png"); - textureList.push_back("arounder_walk.png"); - textureList.push_back("arounder_stop.png"); - textureList.push_back("arounder_fly.png"); - textureList.push_back("bat.png"); + // Enemigos + textureList.push_back("paco.png"); + textureList.push_back("chip.png"); + textureList.push_back("wave.png"); + textureList.push_back("wave_v.png"); + textureList.push_back("sigmasua.png"); + textureList.push_back("diskette.png"); + textureList.push_back("bird.png"); + textureList.push_back("bin.png"); + textureList.push_back("qvoid.png"); + textureList.push_back("batman.png"); + textureList.push_back("tuno.png"); + textureList.push_back("matatunos.png"); + textureList.push_back("abad.png"); + textureList.push_back("jailbattle_human.png"); + textureList.push_back("jailbattle_alien.png"); + textureList.push_back("jailer.png"); + textureList.push_back("jailer2.png"); + textureList.push_back("jailer3.png"); + textureList.push_back("printer.png"); + textureList.push_back("code.png"); + textureList.push_back("demon.png"); + textureList.push_back("dimallas.png"); + textureList.push_back("dimallas_v.png"); + textureList.push_back("heavy.png"); + textureList.push_back("spider.png"); + textureList.push_back("macaronni_ted.png"); + textureList.push_back("mummy.png"); + textureList.push_back("sam.png"); + textureList.push_back("amstrad_character_set.png"); + textureList.push_back("breakout.png"); + textureList.push_back("lamp.png"); + textureList.push_back("bry.png"); + textureList.push_back("tv.png"); + textureList.push_back("tv_panel.png"); + textureList.push_back("arounders_door.png"); + textureList.push_back("arounders_machine.png"); + textureList.push_back("arounder_walk.png"); + textureList.push_back("arounder_stop.png"); + textureList.push_back("arounder_fly.png"); + textureList.push_back("bat.png"); - // Items - textureList.push_back("items.png"); + // Items + textureList.push_back("items.png"); - // Texto - textureList.push_back("smb2.png"); - textureList.push_back("debug.png"); + // Texto + textureList.push_back("smb2.png"); + textureList.push_back("debug.png"); - for (auto list : textureList) - { - texture_t t; - t.name = list; - t.texture = new Texture(renderer, asset->get(t.name)); - textures.push_back(t); - } -} - -// Libera los recursos -void Game::freeCache() -{ - // Libera las texturas - for (auto texture : textures) - { - texture.texture->unload(); - delete texture.texture; - } - textures.clear(); + resource->loadTextures(textureList); } \ No newline at end of file diff --git a/source/game.h b/source/game.h index 21f3b6c..3e70ebd 100644 --- a/source/game.h +++ b/source/game.h @@ -6,6 +6,7 @@ #include "common/debug.h" #include "common/input.h" #include "common/jail_audio.h" +#include "common/resource.h" #include "common/screen.h" #include "common/sprite.h" #include "common/text.h" @@ -24,12 +25,6 @@ class Game { private: - struct texture_t - { - std::string name; // Nombre de la textura - Texture *texture; // La textura - }; - // Objetos y punteros SDL_Renderer *renderer; // El renderizador de la ventana SDL_Event *eventHandler; // Manejador de eventos @@ -42,12 +37,11 @@ private: Input *input; // Objeto pata gestionar la entrada Text *text; // Objeto para los textos del juego ScoreBoard *scoreboard; // Objeto encargado de gestionar el marcador + Resource *resource; // Objeto con los recursos Debug *debug; // Objeto para gestionar la información de debug options_t *options; // Puntero a las opciones del juego Test *test; - std::vector textures; - // Variables JA_Music music; // Musica que suena durante el juego Uint32 ticks; // Contador de ticks para ajustar la velocidad del programa @@ -115,15 +109,12 @@ private: // Dibuja la pantalla negra void renderBlackScreen(); - // Carga todos los recursos necesarios - void cacheResources(); - - // Libera los recursos - void freeCache(); + // Carga los recursos + void loadResources(); public: // Constructor - Game(SDL_Renderer *renderer, Screen *screen, Asset *asset, options_t *options, Input *input, Debug *debug); + Game(SDL_Renderer *renderer, Screen *screen, Resource *resource, Asset *asset, options_t *options, Input *input, Debug *debug); // Destructor ~Game(); diff --git a/source/item.cpp b/source/item.cpp index 6b824e5..4eea441 100644 --- a/source/item.cpp +++ b/source/item.cpp @@ -8,11 +8,13 @@ Item::Item(item_t item) const int itemSize = 8; // Obten punteros a objetos + resource = item.resource; asset = item.asset; renderer = item.renderer; // Crea objetos - texture = new Texture(renderer, asset->get(item.tileset)); + //texture = new Texture(renderer, asset->get(item.tileset)); + texture = resource->getTexture(item.tileset); sprite = new Sprite(item.x, item.y, itemSize, itemSize, texture, renderer); // Inicia variables @@ -34,7 +36,7 @@ Item::Item(item_t item) // Destructor Item::~Item() { - delete texture; + //delete texture; delete sprite; } diff --git a/source/item.h b/source/item.h index b193f0b..cc195bf 100644 --- a/source/item.h +++ b/source/item.h @@ -2,6 +2,7 @@ #include #include "common/asset.h" +#include "common/resource.h" #include "common/sprite.h" #include "common/utils.h" #include @@ -12,6 +13,7 @@ struct item_t { SDL_Renderer *renderer; // El renderizador de la ventana + Resource *resource; // Objeto con los recursos 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 @@ -26,10 +28,11 @@ class Item { private: // Objetos y punteros + SDL_Renderer *renderer; // El renderizador de la ventana + Resource *resource; // Objeto con los recursos + Asset *asset; // Objeto con la ruta a todos los ficheros de recursos Texture *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 // Variables std::vector color; // Vector con los colores del objeto diff --git a/source/player.cpp b/source/player.cpp index 9fbe072..faad526 100644 --- a/source/player.cpp +++ b/source/player.cpp @@ -3,9 +3,10 @@ #include // Constructor -Player::Player(player_t ini, std::string tileset, std::string animation, SDL_Renderer *renderer, Asset *asset, options_t *options, Input *input, Room *room, Debug *debug) +Player::Player(player_t ini, std::string png, std::string animation, SDL_Renderer *renderer, Resource *resource, Asset *asset, options_t *options, Input *input, Room *room, Debug *debug) { // Obten punteros a objetos + this->resource = resource; this->asset = asset; this->renderer = renderer; this->input = input; @@ -14,7 +15,7 @@ Player::Player(player_t ini, std::string tileset, std::string animation, SDL_Ren this->options = options; // Crea objetos - texture = new Texture(renderer, asset->get(tileset)); + texture = resource->getTexture(png); sprite = new AnimatedSprite(texture, renderer, animation); // Inicializa variables @@ -102,7 +103,6 @@ Player::Player(player_t ini, std::string tileset, std::string animation, SDL_Ren // Destructor Player::~Player() { - delete texture; delete sprite; for (auto s : jumpSound) diff --git a/source/player.h b/source/player.h index 2223d05..119f375 100644 --- a/source/player.h +++ b/source/player.h @@ -5,6 +5,7 @@ #include "common/asset.h" #include "common/debug.h" #include "common/input.h" +#include "common/resource.h" #include "common/utils.h" #include "const.h" #include "room.h" @@ -38,6 +39,7 @@ public: // Objetos y punteros SDL_Renderer *renderer; // El renderizador de la ventana Input *input; // Objeto para gestionar la entrada + Resource *resource; // Objeto con los recursos Asset *asset; // Objeto con la ruta a todos los ficheros de recursos Room *room; // Objeto encargado de gestionar cada habitación del juego Texture *texture; // Textura con los graficos del enemigo @@ -128,7 +130,7 @@ public: public: // Constructor - Player(player_t ini, std::string tileset, std::string animation, SDL_Renderer *renderer, Asset *asset, options_t *options, Input *input, Room *room, Debug *debug); + Player(player_t ini, std::string png, std::string animation, SDL_Renderer *renderer, Resource *resource, Asset *asset, options_t *options, Input *input, Room *room, Debug *debug); // Destructor ~Player(); diff --git a/source/room.cpp b/source/room.cpp index 2ba34cb..877613e 100644 --- a/source/room.cpp +++ b/source/room.cpp @@ -4,9 +4,10 @@ #include // Constructor -Room::Room(std::string file, SDL_Renderer *renderer, Screen *screen, Asset *asset, options_t *options, ItemTracker *itemTracker, int *items, Debug *debug) +Room::Room(std::string file, SDL_Renderer *renderer, Screen *screen, Resource *resource, Asset *asset, options_t *options, ItemTracker *itemTracker, int *items, Debug *debug) { // Copia los punteros a objetos + this->resource = resource; this->renderer = renderer; this->asset = asset; this->screen = screen; @@ -27,7 +28,8 @@ Room::Room(std::string file, SDL_Renderer *renderer, Screen *screen, Asset *asse // Crea los objetos loadMapFile(file); - texture = new Texture(renderer, asset->get(tileset)); + //texture = new Texture(renderer, asset->get(tileset)); + texture = resource->getTexture(tileset); tilesetWidth = texture->getWidth() / tileSize; itemSound = JA_LoadSound(asset->get("item.wav").c_str()); @@ -64,7 +66,7 @@ Room::Room(std::string file, SDL_Renderer *renderer, Screen *screen, Asset *asse Room::~Room() { // Reclama la memoria utilizada por los objetos - delete texture; + //delete texture; JA_DeleteSound(itemSound); SDL_DestroyTexture(mapTexture); @@ -102,6 +104,7 @@ bool Room::loadMapFile(std::string file_path) if (line == "[enemy]") { enemy_t enemy; + enemy.resource = resource; enemy.asset = asset; enemy.renderer = renderer; enemy.flip = false; @@ -128,6 +131,7 @@ bool Room::loadMapFile(std::string file_path) else if (line == "[item]") { item_t item; + item.resource = resource; item.asset = asset; item.renderer = renderer; item.counter = 0; diff --git a/source/room.h b/source/room.h index 97ae445..ea9bd34 100644 --- a/source/room.h +++ b/source/room.h @@ -4,6 +4,7 @@ #include "common/asset.h" #include "common/debug.h" #include "common/jail_audio.h" +#include "common/resource.h" #include "common/screen.h" #include "common/sprite.h" #include "common/utils.h" @@ -41,6 +42,7 @@ private: std::vector enemies; // Listado con los enemigos de la habitación std::vector items; // Listado con los items que hay en la habitación Texture *texture; // Textura con los graficos de la habitación + Resource *resource; // Objeto con los recursos Asset *asset; // Objeto con la ruta a todos los ficheros de recursos Screen *screen; // Objeto encargado de dibujar en pantalla ItemTracker *itemTracker; // Lleva el control de los objetos recogidos @@ -133,7 +135,7 @@ private: public: // Constructor - Room(std::string file, SDL_Renderer *renderer, Screen *screen, Asset *asset, options_t *options, ItemTracker *item_tracker, int *items, Debug *debug); + Room(std::string file, SDL_Renderer *renderer, Screen *screen, Resource *resource, Asset *asset, options_t *options, ItemTracker *item_tracker, int *items, Debug *debug); // Destructor ~Room();