#pragma once #include #include #include #include //The ResourceManager exists to... //Allow loading resources embedded into the executable like an actual file. //Allow embedded resources to be optionally remapped to actual files for further customization. struct ResourceData { const std::shared_ptr ptr; const size_t length; }; class ResourceManager; class IReloadable { public: virtual void unload(const ResourceManager& rm) = 0; virtual void reload(const ResourceManager& rm) = 0; }; class ResourceManager { public: void addReloadable(std::weak_ptr reloadable); void unloadAll(); void reloadAll(); const ResourceData getFileData(const std::string& path) const; bool fileExists(const std::string& path) const; private: ResourceData loadFile(const std::string& path) const; std::vector< std::weak_ptr > mReloadables; };