2
0
mirror of https://github.com/Laupetin/OpenAssetTools.git synced 2025-06-27 06:41:58 +00:00
Files
OpenAssetTools/src/ZoneLoading/ZoneLoading.cpp

46 lines
1.1 KiB
C++

#include "ZoneLoading.h"
#include "Utils/PathUtils.h"
#include "Game/IW4/ZoneLoaderFactoryIW4.h"
#include "Game/T6/ZoneLoaderFactoryT6.h"
IZoneLoaderFactory* ZoneLoaderFactories[]
{
new IW4::ZoneLoaderFactory(),
new T6::ZoneLoaderFactory()
};
Zone* ZoneLoading::LoadZone(const std::string& path)
{
std::string zoneName = utils::Path::GetFilenameWithoutExtension(path);
FileAPI::File file = FileAPI::Open(path, FileAPI::Mode::MODE_READ);
if(!file.IsOpen())
{
printf("Could not open file '%s'.\n", path.c_str());
return nullptr;
}
ZoneHeader header{};
file.Read(&header, sizeof(ZoneHeader), 1);
ZoneLoader* zoneLoader = nullptr;
for(auto* factory : ZoneLoaderFactories)
{
zoneLoader = factory->CreateLoaderForHeader(header, zoneName);
if(zoneLoader != nullptr)
break;
}
if(zoneLoader == nullptr)
{
printf("Could not create factory for zone '%s'.\n", zoneName.c_str());
return nullptr;
}
Zone* loadedZone = zoneLoader->LoadZone(&file);
file.Close();
return loadedZone;
}