// resource_loader.hpp // Singleton resource loader for managing pack and filesystem access #ifndef RESOURCE_LOADER_HPP #define RESOURCE_LOADER_HPP #include #include #include #include "resource_pack.hpp" namespace Jdd { // Singleton class for loading resources from pack or filesystem class ResourceLoader { public: // Get singleton instance static auto get() -> ResourceLoader&; // Initialize with a pack file (optional) auto initialize(const std::string& pack_file, bool enable_fallback = true) -> bool; // Load a resource (tries pack first, then filesystem if fallback enabled) auto loadResource(const std::string& filename) -> std::vector; // Check if a resource exists auto resourceExists(const std::string& filename) -> bool; // Check if pack is loaded [[nodiscard]] auto isPackLoaded() const -> bool; // Get pack statistics [[nodiscard]] auto getPackResourceCount() const -> size_t; // Validate pack integrity (checksum) [[nodiscard]] auto validatePack() const -> bool; // Load assets.txt from pack (for release builds) [[nodiscard]] auto loadAssetsConfig() const -> std::string; // Cleanup void shutdown(); // Disable copy/move ResourceLoader(const ResourceLoader&) = delete; auto operator=(const ResourceLoader&) -> ResourceLoader& = delete; ResourceLoader(ResourceLoader&&) = delete; auto operator=(ResourceLoader&&) -> ResourceLoader& = delete; private: ResourceLoader() = default; ~ResourceLoader() = default; // Load from filesystem static auto loadFromFilesystem(const std::string& filepath) -> std::vector; // Check if file exists on filesystem static auto fileExistsOnFilesystem(const std::string& filepath) -> bool; // Member data std::unique_ptr resource_pack_; bool fallback_to_files_{true}; bool initialized_{false}; }; } // namespace Jdd #endif // RESOURCE_LOADER_HPP