#pragma once #include #include #include #include #include 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); static void destroy(); static auto get() -> Resource *; auto getTexture(const std::string &name) -> Texture *; auto getSound(const std::string &name) -> JA_Sound_t *; auto getMusic(const std::string &name) -> JA_Music_t *; auto getAnimationLines(const std::string &name) -> std::vector &; auto getText(const std::string &name) -> Text *; // name sin extensión: "smb2", "nokia2", ... auto getMenu(const std::string &name) -> Menu *; // name sin extensión: "title", "options", ... auto getDemoBytes() const -> const std::vector & { return demoBytes_; } private: explicit Resource(SDL_Renderer *renderer); ~Resource(); void preloadAll(); SDL_Renderer *renderer_; 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_; };