From 1934f790f73959cddfc15341bb0efdedb804ec4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Valor=20Mart=C3=ADnez?= Date: Thu, 27 Oct 2022 18:42:07 +0200 Subject: [PATCH] Animaciones precacheadas --- source/common/resource.cpp | 4 ---- source/director.cpp | 4 ++++ source/enemy.cpp | 3 ++- source/game.cpp | 5 +++-- source/player.cpp | 7 ++++--- source/player.h | 2 +- source/room.cpp | 1 + source/scoreboard.cpp | 7 ++++--- source/scoreboard.h | 2 +- 9 files changed, 20 insertions(+), 15 deletions(-) diff --git a/source/common/resource.cpp b/source/common/resource.cpp index eb6a5b8..fa56b09 100644 --- a/source/common/resource.cpp +++ b/source/common/resource.cpp @@ -12,7 +12,6 @@ Resource::Resource(SDL_Renderer *renderer, Asset *asset, options_t *options) // Carga las texturas de una lista void Resource::loadTextures(std::vector list) { - std::cout << "** LOAD TEXTURES" << std::endl; for (auto l : list) { texture_t t; @@ -20,13 +19,11 @@ void Resource::loadTextures(std::vector list) t.texture = new Texture(renderer, asset->get(t.name)); textures.push_back(t); } - std::cout << "** TEXTURES LOADED" << std::endl; } // Carga las animaciones desde una lista void Resource::loadAnimations(std::vector list) { - std::cout << "** LOAD ANIMATIONS" << std::endl; for (auto l : list) { animation_t as; @@ -34,7 +31,6 @@ void Resource::loadAnimations(std::vector list) as.animation = new animatedSprite_t(loadAnimationFromFile(getTexture(l+".png"), asset->get(l+".ani"))); animations.push_back(as); } - std::cout << "** ANIMATIONS LOADED" << std::endl; } // Recarga las texturas diff --git a/source/director.cpp b/source/director.cpp index ebb2067..aec301e 100644 --- a/source/director.cpp +++ b/source/director.cpp @@ -181,6 +181,8 @@ bool Director::saveConfig() // Carga los recursos void Director::loadResources(section_t section) { + std::cout << "** LOAD RESOURCES" << std::endl; + if (section.name == SECTION_PROG_LOGO) { std::vector textureList; @@ -339,6 +341,8 @@ void Director::loadResources(section_t section) resource->loadAnimations(animationList); } + + std::cout << "** RESOURCES LOADED" << std::endl; } // Asigna variables a partir de dos cadenas diff --git a/source/enemy.cpp b/source/enemy.cpp index 945218c..fe69773 100644 --- a/source/enemy.cpp +++ b/source/enemy.cpp @@ -12,7 +12,8 @@ Enemy::Enemy(enemy_t enemy) // Crea objetos texture = resource->getTexture(enemy.tileset); - sprite = new AnimatedSprite(texture, renderer, asset->get(enemy.animation)); + //sprite = new AnimatedSprite(texture, renderer, asset->get(enemy.animation)); + sprite = new AnimatedSprite(renderer, resource->getAnimation(enemy.animation)); // Obten el resto de valores x1 = enemy.x1; diff --git a/source/game.cpp b/source/game.cpp index b713fd3..238bc7e 100644 --- a/source/game.cpp +++ b/source/game.cpp @@ -1,4 +1,5 @@ #include "game.h" +#include // Constructor Game::Game(SDL_Renderer *renderer, Screen *screen, Resource *resource, Asset *asset, options_t *options, Input *input, Debug *debug) @@ -30,7 +31,7 @@ Game::Game(SDL_Renderer *renderer, Screen *screen, Resource *resource, Asset *as itemTracker = new ItemTracker(); roomTracker = new RoomTracker(); 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); + player = new Player(spawnPoint, "player.png", "player.ani", renderer, resource, asset, options, input, room, debug); eventHandler = new SDL_Event(); text = new Text("smb2.png", asset->get("smb2.txt"), resource, renderer); music = JA_LoadMusic(asset->get("game.ogg").c_str()); @@ -391,7 +392,7 @@ void Game::killPlayer() // Crea la nueva habitación y el nuevo jugador 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); + player = new Player(spawnPoint, "player.png", "player.ani", renderer, resource, asset, options, input, room, debug); room->pause(); player->pause(); diff --git a/source/player.cpp b/source/player.cpp index faad526..dd7d49d 100644 --- a/source/player.cpp +++ b/source/player.cpp @@ -15,8 +15,8 @@ Player::Player(player_t ini, std::string png, std::string animation, SDL_Rendere this->options = options; // Crea objetos - texture = resource->getTexture(png); - sprite = new AnimatedSprite(texture, renderer, animation); + //texture = resource->getTexture(png); + sprite = new AnimatedSprite(renderer, resource->getAnimation(animation)); // Inicializa variables color = stringToColor(options->palette, "white"); @@ -688,7 +688,8 @@ player_t Player::getSpawnParams() // Recarga la textura void Player::reLoadTexture() { - texture->reLoad(); + sprite->getTexture()->reLoad(); + //texture->reLoad(); } // Recarga la paleta diff --git a/source/player.h b/source/player.h index 119f375..6027bae 100644 --- a/source/player.h +++ b/source/player.h @@ -42,7 +42,7 @@ public: 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 + //Texture *texture; // Textura con los graficos del enemigo AnimatedSprite *sprite; // Sprite del enemigo Debug *debug; // Objeto para gestionar la información de debug options_t *options; // Puntero a las opciones del juego diff --git a/source/room.cpp b/source/room.cpp index 58144c4..57550ae 100644 --- a/source/room.cpp +++ b/source/room.cpp @@ -116,6 +116,7 @@ bool Room::loadMapFile(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()))) { diff --git a/source/scoreboard.cpp b/source/scoreboard.cpp index f04aa9c..cb2b39d 100644 --- a/source/scoreboard.cpp +++ b/source/scoreboard.cpp @@ -13,9 +13,9 @@ ScoreBoard::ScoreBoard(SDL_Renderer *renderer, Resource *resource, Asset *asset, this->options = options; // Reserva memoria para los objetos - playerTexture = resource->getTexture("player.png"); + //playerTexture = resource->getTexture("player.png"); itemTexture = resource->getTexture("items.png"); - sprite = new AnimatedSprite(playerTexture, renderer, asset->get("player.ani")); + sprite = new AnimatedSprite(renderer, resource->getAnimation("player.ani")); sprite->setCurrentAnimation("walk_menu"); text = new Text("smb2.png", asset->get("smb2.txt"), resource, renderer); @@ -117,7 +117,8 @@ ScoreBoard::clock_t ScoreBoard::getTime() // Recarga la textura void ScoreBoard::reLoadTexture() { - playerTexture->reLoad(); + sprite->getTexture()->reLoad(); + //playerTexture->reLoad(); itemTexture->reLoad(); text->reLoadTexture(); } diff --git a/source/scoreboard.h b/source/scoreboard.h index 604e300..f994cc8 100644 --- a/source/scoreboard.h +++ b/source/scoreboard.h @@ -34,7 +34,7 @@ private: }; // Objetos y punteros - Texture *playerTexture; // Textura con los graficos para las vidas + //Texture *playerTexture; // Textura con los graficos para las vidas AnimatedSprite *sprite; // Sprite para mostrar las vidas en el marcador SDL_Renderer *renderer; // El renderizador de la ventana Resource *resource; // Objeto con los recursos