#pragma once #include #include #include #include #include class Asset; class Input; class Menu; class Text; class Texture; struct JA_Music_t; struct JA_Sound_t; // Precarga y posee todos los recursos del juego durante toda la vida de la app. // Singleton inicializado desde Director; las escenas consultan handles via get*(). class Resource { public: static void init(SDL_Renderer *renderer, Asset *asset, Input *input); static void destroy(); static Resource *get(); Texture *getTexture(const std::string &name); JA_Sound_t *getSound(const std::string &name); JA_Music_t *getMusic(const std::string &name); std::vector &getAnimationLines(const std::string &name); Text *getText(const std::string &name); // name sin extensión: "smb2", "nokia2", ... Menu *getMenu(const std::string &name); // name sin extensión: "title", "options", ... const std::vector &getDemoBytes() const { return demoBytes_; } private: Resource(SDL_Renderer *renderer, Asset *asset, Input *input); ~Resource(); void preloadAll(); SDL_Renderer *renderer_; Asset *asset_; Input *input_; std::unordered_map textures_; std::unordered_map sounds_; std::unordered_map musics_; std::unordered_map> animationLines_; std::unordered_map texts_; std::unordered_map menus_; std::vector demoBytes_; static Resource *instance_; };