/* Starshatter: The Open Source Project Copyright (c) 2021-2024, Starshatter: The Open Source Project Contributors Copyright (c) 2011-2012, Starshatter OpenSource Distribution Contributors Copyright (c) 1997-2006, Destroyer Studios LLC. AUTHOR: John DiCamillo */ #ifndef DataLoader_h #define DataLoader_h #include "DataSource.h" #include "Types.h" #include "List.h" #include "Text.h" // +--------------------------------------------------------------------+ class Bitmap; class Sound; // +--------------------------------------------------------------------+ class DataLoader { public: static constexpr int FAILED {-1}; static const char* TYPENAME() { return "DataLoader"; } DataLoader(); virtual ~DataLoader(); static DataLoader* GetLoader() { return loader; } static void Initialize(); static void Close(); const char* LastError() const; void UseFileSystem(bool use=true); void EnableMedia(bool enable=true); int MountDatafile(const char* name, int pos=-1); int UnmountSource(int src); void SetDataPath(const char* path); const char* GetDataPath() const { return datapath; } bool IsFileSystemEnabled() const { return work_directory_source != nullptr; } bool IsMediaLoadEnabled() const { return enable_media; } bool FindFile(const char* fname); int ListFiles(const char* filter, List& list, bool recurse=false); int ListArchiveFiles(int src, const char* filter, List& list); int LoadBuffer(const char* name, BYTE*& buf, bool null_terminate=false, bool optional=false); int LoadBitmap(const char* name, Bitmap& bmp, int type=0, bool optional=false); int CacheBitmap(const char* name, Bitmap*& bmp, int type=0, bool optional=false); int LoadTexture(const char* name, Bitmap*& bmp, int type=0, bool preload_cache=false, bool optional=false); int LoadSound(const char* fname, Sound*& snd, DWORD flags=0, bool optional=false); int LoadStream(const char* fname, Sound*& snd, bool optional=false); void ReleaseBuffer(BYTE*& buf); int fread(void* buffer, size_t size, size_t count, BYTE*& stream); private: int LoadIndexed(const char* name, Bitmap& bmp, int type); int LoadHiColor(const char* name, Bitmap& bmp, int type); int LoadAlpha( const char* name, Bitmap& bmp, int type); int LoadPartialFile(const char* fname, BYTE*& buf, int max_load, bool optional=false); int LoadOggStream(const char* fname, Sound*& snd); Text datapath; bool enable_media; Text last_error; List sources; DataSource* work_directory_source; static DataLoader* loader; }; // +--------------------------------------------------------------------+ #endif // DataLoader_h