r5sdk/r5dev/engine/cmodel_bsp.cpp

65 lines
1.8 KiB
C++
Raw Normal View History

//=============================================================================//
//
// Purpose:
//
// $NoKeywords: $
//=============================================================================//
#include "core/stdafx.h"
#include "engine/host_cmd.h"
#include "engine/host_state.h"
#include "engine/sys_utils.h"
#include "engine/cmodel_bsp.h"
#include "rtech/rtech_game.h"
//-----------------------------------------------------------------------------
// Purpose: loads required pakfile assets for specified BSP
2022-03-07 11:32:12 +01:00
// Input : svSetFile -
//-----------------------------------------------------------------------------
2022-04-09 06:05:47 +02:00
void MOD_PreloadPak(const string& svSetFile)
{
2022-04-09 06:05:47 +02:00
ostringstream ostream;
ostream << "platform\\scripts\\levels\\settings\\" << g_pHostState->m_levelName << ".json";
2022-04-09 06:05:47 +02:00
fs::path fsPath = std::filesystem::current_path() /= ostream.str();
if (FileExists(fsPath.string().c_str()))
{
nlohmann::json jsIn;
try
{
2022-04-09 06:05:47 +02:00
ifstream iPakLoadDefFile(fsPath, std::ios::binary); // Parse prerequisites file.
iPakLoadDefFile >> jsIn;
iPakLoadDefFile.close();
if (!jsIn.is_null())
{
if (!jsIn["rpak"].is_null())
{
for (auto it = jsIn["rpak"].begin(); it != jsIn["rpak"].end(); ++it)
{
if (it.value().is_string())
{
2022-04-09 06:05:47 +02:00
string svToLoad = it.value().get<string>() + ".rpak";
uint32_t nPakId = RTech_AsyncLoad((void*)svToLoad.c_str(), g_pMallocPool.GetPtr(), 4, 0);
if (nPakId == -1)
{
2022-03-07 11:32:12 +01:00
Error(eDLL_T::RTECH, "RTech_AsyncLoad: failed read '%s' results '%u'\n", fsPath.string().c_str(), nPakId);
}
else
{
g_nLoadedPakFileId.push_back(nPakId);
}
}
}
}
}
}
catch (const std::exception& ex)
{
2022-03-07 11:32:12 +01:00
Warning(eDLL_T::RTECH, "Exception while parsing RPak load list: '%s'\n", ex.what());
return;
}
}
}