diff --git a/source/common/animatedsprite.cpp b/source/common/animatedsprite.cpp index 95bc29f..30890fb 100644 --- a/source/common/animatedsprite.cpp +++ b/source/common/animatedsprite.cpp @@ -1,7 +1,7 @@ #include "animatedsprite.h" // Carga la animación desde un fichero -animatedSprite_t loadFromFile(Texture *texture, std::string filePath) +animatedSprite_t loadAnimationFromFile(Texture *texture, std::string filePath) { // Inicializa variables animatedSprite_t as; @@ -80,7 +80,6 @@ animatedSprite_t loadFromFile(Texture *texture, std::string filePath) // Añade la animación al vector de animaciones as.animations.push_back(buffer); - // animation.push_back(buffer); } // En caso contrario se parsea el fichero para buscar las variables y los valores @@ -173,19 +172,19 @@ AnimatedSprite::AnimatedSprite(Texture *texture, SDL_Renderer *renderer, std::st } // Constructor -AnimatedSprite::AnimatedSprite(SDL_Renderer *renderer, animatedSprite_t as) +AnimatedSprite::AnimatedSprite(SDL_Renderer *renderer, animatedSprite_t *animation) { // Copia los punteros - setTexture(as.texture); + setTexture(animation->texture); setRenderer(renderer); // Inicializa variables currentAnimation = 0; // Copia los datos de las animaciones - for (auto animation : as.animations) + for (auto a : animation->animations) { - this->animation.push_back(animation); + this->animation.push_back(a); } } diff --git a/source/common/animatedsprite.h b/source/common/animatedsprite.h index b558877..58d9117 100644 --- a/source/common/animatedsprite.h +++ b/source/common/animatedsprite.h @@ -29,7 +29,7 @@ struct animatedSprite_t }; // Carga la animación desde un fichero -animatedSprite_t loadFromFile(Texture *texture, std::string filePath); +animatedSprite_t loadAnimationFromFile(Texture *texture, std::string filePath); class AnimatedSprite : public MovingSprite { @@ -41,7 +41,7 @@ private: public: // Constructor AnimatedSprite(Texture *texture = nullptr, SDL_Renderer *renderer = nullptr, std::string file = "", std::vector *buffer = nullptr); - AnimatedSprite(SDL_Renderer *renderer, animatedSprite_t as); + AnimatedSprite(SDL_Renderer *renderer, animatedSprite_t *animation); // Destructor ~AnimatedSprite(); diff --git a/source/common/resource.cpp b/source/common/resource.cpp index d24d413..eb6a5b8 100644 --- a/source/common/resource.cpp +++ b/source/common/resource.cpp @@ -9,10 +9,10 @@ Resource::Resource(SDL_Renderer *renderer, Asset *asset, options_t *options) this->options = options; } -// Carga todos los recursos necesarios +// Carga las texturas de una lista void Resource::loadTextures(std::vector list) { - std::cout << "** LOAD RESOURCES" << std::endl; + std::cout << "** LOAD TEXTURES" << std::endl; for (auto l : list) { texture_t t; @@ -20,7 +20,21 @@ void Resource::loadTextures(std::vector list) t.texture = new Texture(renderer, asset->get(t.name)); textures.push_back(t); } - std::cout << "** RESOURCES LOADED" << std::endl; + 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; + as.name = l+".ani"; + 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 @@ -54,6 +68,22 @@ Texture *Resource::getTexture(std::string name) } } + std::cout << "NOT FOUND: " << name << std::endl; + return nullptr; +} + +// Obtiene una animación +animatedSprite_t *Resource::getAnimation(std::string name) +{ + for (auto animation : animations) + { + if (animation.name.find(name) != std::string::npos) + { + std::cout << "CACHE: " << name << std::endl; + return animation.animation; + } + } + std::cout << "NOT FOUND: " << name << std::endl; return nullptr; } \ No newline at end of file diff --git a/source/common/resource.h b/source/common/resource.h index b965787..5e6679e 100644 --- a/source/common/resource.h +++ b/source/common/resource.h @@ -1,6 +1,7 @@ #pragma once #include +#include "animatedsprite.h" #include "asset.h" #include "texture.h" #include "utils.h" @@ -16,6 +17,12 @@ struct texture_t Texture *texture; // La textura }; +struct animation_t +{ + std::string name; // Nombre de la textura + animatedSprite_t *animation; // La animación +}; + class Resource { private: @@ -26,13 +33,17 @@ private: // Variables std::vector textures; + std::vector animations; public: // Constructor Resource(SDL_Renderer *renderer, Asset *asset, options_t *options); - // Carga todos los recursos necesarios - void loadTextures(std::vector textureList); + // Carga las texturas de una lista + void loadTextures(std::vector list); + + // Carga las animaciones desde una lista + void loadAnimations(std::vector list); // Recarga las texturas void reLoadTextures(); @@ -41,7 +52,10 @@ public: void freeTextures(); // Obtiene una textura - Texture* getTexture(std::string name); + Texture *getTexture(std::string name); + + // Obtiene una animación + animatedSprite_t *getAnimation(std::string name); }; #endif diff --git a/source/credits.cpp b/source/credits.cpp index 236eaaa..3782762 100644 --- a/source/credits.cpp +++ b/source/credits.cpp @@ -14,7 +14,7 @@ Credits::Credits(SDL_Renderer *renderer, Screen *screen, Resource *resource, Ass eventHandler = new SDL_Event(); text = new Text("smb2.png", asset->get("smb2.txt"), resource, renderer); texture = resource->getTexture("shine.png"); - sprite = new AnimatedSprite(texture, renderer, asset->get("shine.ani")); + sprite = new AnimatedSprite(renderer, resource->getAnimation("shine.ani")); // Inicializa variables counter = 0; diff --git a/source/director.cpp b/source/director.cpp index 780a39d..ebb2067 100644 --- a/source/director.cpp +++ b/source/director.cpp @@ -221,13 +221,14 @@ void Director::loadResources(section_t section) resource->loadTextures(textureList); std::vector animationList; - animationList.push_back("shine.ani"); + animationList.push_back("shine"); resource->loadAnimations(animationList); } else if (section.name == SECTION_PROG_GAME || section.name == SECTION_PROG_DEMO) { + // Texturas std::vector textureList; // Jugador @@ -287,6 +288,56 @@ void Director::loadResources(section_t section) textureList.push_back("debug.png"); resource->loadTextures(textureList); + + // Animaciones + std::vector animationList; + + // Jugador + animationList.push_back("player"); + + // Enemigos + animationList.push_back("paco"); + animationList.push_back("chip"); + animationList.push_back("wave"); + animationList.push_back("wave_v"); + animationList.push_back("sigmasua"); + animationList.push_back("diskette"); + animationList.push_back("bird"); + animationList.push_back("bin"); + animationList.push_back("qvoid"); + animationList.push_back("batman"); + animationList.push_back("tuno"); + animationList.push_back("matatunos"); + animationList.push_back("abad"); + animationList.push_back("jailbattle_human"); + animationList.push_back("jailbattle_alien"); + animationList.push_back("jailer"); + animationList.push_back("jailer2"); + animationList.push_back("jailer3"); + animationList.push_back("printer"); + animationList.push_back("code"); + animationList.push_back("demon"); + animationList.push_back("dimallas"); + animationList.push_back("dimallas_v"); + animationList.push_back("heavy"); + animationList.push_back("spider"); + animationList.push_back("macaronni_ted"); + animationList.push_back("mummy"); + animationList.push_back("sam"); + animationList.push_back("amstrad_character_set"); + animationList.push_back("breakout"); + animationList.push_back("lamp"); + animationList.push_back("bry"); + animationList.push_back("tv"); + animationList.push_back("tv_panel"); + animationList.push_back("arounders_door"); + animationList.push_back("arounders_machine"); + animationList.push_back("arounder_walk"); + animationList.push_back("arounder_stop"); + animationList.push_back("arounder_fly"); + animationList.push_back("bat"); + + resource->loadAnimations(animationList); } }