[FileSystem] Abstract file interfaces and rawfile interface

This commit is contained in:
momo5502 2016-12-16 22:41:56 +01:00
parent 7d64cae095
commit dc6d78187c
4 changed files with 45 additions and 1 deletions

View File

@ -19,6 +19,16 @@ namespace Components
}
}
void FileSystem::RawFile::read()
{
this->buffer.clear();
Game::RawFile* rawfile = Game::DB_FindXAssetHeader(Game::XAssetType::ASSET_TYPE_RAWFILE, this->filePath.data()).rawfile;
if (!rawfile || Game::DB_IsXAssetDefault(Game::XAssetType::ASSET_TYPE_RAWFILE, this->filePath.data())) return;
this->buffer.resize(Game::DB_GetRawFileLen(rawfile));
Game::DB_GetRawBuffer(rawfile, const_cast<char*>(this->buffer.data()), this->buffer.size());
}
FileSystem::FileReader::FileReader(std::string file) : name(file), handle(0)
{

View File

@ -3,8 +3,17 @@ namespace Components
class FileSystem : public Component
{
public:
class AbstractFile
{
public:
virtual ~AbstractFile() {};
class File
virtual bool exists() = 0;
virtual std::string getName() = 0;
virtual std::string& getBuffer() = 0;
};
class File : public AbstractFile
{
public:
File() {};
@ -21,6 +30,23 @@ namespace Components
void read();
};
class RawFile : public AbstractFile
{
public:
RawFile() {};
RawFile(std::string file) : filePath(file) { this->read(); };
bool exists() { return !this->buffer.empty(); };
std::string getName() { return this->filePath; };
std::string& getBuffer() { return this->buffer; };
private:
std::string filePath;
std::string buffer;
void read();
};
class FileReader
{
public:

View File

@ -45,6 +45,8 @@ namespace Game
DB_EnumXAssets_t DB_EnumXAssets = (DB_EnumXAssets_t)0x4B76D0;
DB_EnumXAssets_Internal_t DB_EnumXAssets_Internal = (DB_EnumXAssets_Internal_t)0x5BB0A0;
DB_FindXAssetHeader_t DB_FindXAssetHeader = (DB_FindXAssetHeader_t)0x407930;
DB_GetRawBuffer_t DB_GetRawBuffer = (DB_GetRawBuffer_t)0x4CDC50;
DB_GetRawFileLen_t DB_GetRawFileLen = (DB_GetRawFileLen_t)0x4DAA80;
DB_GetLoadedFraction_t DB_GetLoadedFraction = (DB_GetLoadedFraction_t)0x468380;
DB_GetXAssetNameHandler_t* DB_GetXAssetNameHandlers = (DB_GetXAssetNameHandler_t*)0x799328;
DB_GetXAssetSizeHandler_t* DB_GetXAssetSizeHandlers = (DB_GetXAssetSizeHandler_t*)0x799488;

View File

@ -117,6 +117,12 @@ namespace Game
typedef const char *(__cdecl * DB_IsXAssetDefault_t)(XAssetType type, const char* name);
extern DB_IsXAssetDefault_t DB_IsXAssetDefault;
typedef void(__cdecl * DB_GetRawBuffer_t)(RawFile* rawfile, char* buffer, int size);
extern DB_GetRawBuffer_t DB_GetRawBuffer;
typedef int(__cdecl * DB_GetRawFileLen_t)(RawFile* rawfile);
extern DB_GetRawFileLen_t DB_GetRawFileLen;
typedef void(*DB_LoadXAssets_t)(XZoneInfo *zoneInfo, unsigned int zoneCount, int sync);
extern DB_LoadXAssets_t DB_LoadXAssets;