Files
jaildoctors-dilemma/source/core/resources/resource_loader.hpp
T
2025-11-03 09:52:54 +01:00

70 lines
2.0 KiB
C++

// resource_loader.hpp
// Singleton resource loader for managing pack and filesystem access
#ifndef RESOURCE_LOADER_HPP
#define RESOURCE_LOADER_HPP
#include <memory>
#include <string>
#include <vector>
#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<uint8_t>;
// Check if a resource exists
auto resourceExists(const std::string& filename) -> bool;
// Check if pack is loaded
auto isPackLoaded() const -> bool;
// Get pack statistics
auto getPackResourceCount() const -> size_t;
// Validate pack integrity (checksum)
auto validatePack() const -> bool;
// Load assets.txt from pack (for release builds)
auto loadAssetsConfig() const -> std::string;
// Cleanup
void shutdown();
private:
ResourceLoader() = default;
~ResourceLoader() = default;
// Disable copy/move
ResourceLoader(const ResourceLoader&) = delete;
ResourceLoader& operator=(const ResourceLoader&) = delete;
ResourceLoader(ResourceLoader&&) = delete;
ResourceLoader& operator=(ResourceLoader&&) = delete;
// Load from filesystem
static auto loadFromFilesystem(const std::string& filepath) -> std::vector<uint8_t>;
// Check if file exists on filesystem
static auto fileExistsOnFilesystem(const std::string& filepath) -> bool;
// Member data
std::unique_ptr<ResourcePack> resource_pack_;
bool fallback_to_files_{true};
bool initialized_{false};
};
} // namespace Jdd
#endif // RESOURCE_LOADER_HPP