[AssetHandler] Optimize bypass state handling

This commit is contained in:
momo5502 2017-05-04 12:30:22 +02:00
parent e5bca7654b
commit 66bf02ba43
2 changed files with 15 additions and 9 deletions

View File

@ -55,7 +55,7 @@ namespace Components
if (filename) if (filename)
{ {
// Allow call DB_FindXAssetHeader within the hook // Allow call DB_FindXAssetHeader within the hook
++AssetHandler::BypassState; AssetHandler::SetBypassState(true);
if (AssetHandler::TypeCallbacks.find(type) != AssetHandler::TypeCallbacks.end()) if (AssetHandler::TypeCallbacks.find(type) != AssetHandler::TypeCallbacks.end())
{ {
@ -63,7 +63,7 @@ namespace Components
} }
// Disallow calling DB_FindXAssetHeader ;) // Disallow calling DB_FindXAssetHeader ;)
--AssetHandler::BypassState; AssetHandler::SetBypassState(false);
} }
return header; return header;
@ -74,6 +74,16 @@ namespace Components
return AssetHandler::BypassState > 0; return AssetHandler::BypassState > 0;
} }
void AssetHandler::SetBypassState(bool value)
{
AssetHandler::BypassState += (value ? 1 : -1);
if (AssetHandler::BypassState < 0)
{
AssetHandler::BypassState = 0;
Logger::Error("Bypass state is below 0!");
}
}
void AssetHandler::ResetBypassState() void AssetHandler::ResetBypassState()
{ {
if(AssetHandler::HasThreadBypass()) if(AssetHandler::HasThreadBypass())
@ -354,14 +364,9 @@ namespace Components
Game::XAssetHeader AssetHandler::FindOriginalAsset(Game::XAssetType type, const char* filename) Game::XAssetHeader AssetHandler::FindOriginalAsset(Game::XAssetType type, const char* filename)
{ {
++AssetHandler::BypassState; AssetHandler::SetBypassState(true);
Game::XAssetHeader header = Game::DB_FindXAssetHeader(type, filename); Game::XAssetHeader header = Game::DB_FindXAssetHeader(type, filename);
--AssetHandler::BypassState; AssetHandler::SetBypassState(false);
if(AssetHandler::BypassState < 0)
{
Logger::Error("DB_FindXAssetHeader bypass state reached level below 0, what the fuck????");
}
return header; return header;
} }

View File

@ -71,6 +71,7 @@ namespace Components
static void ModifyAsset(Game::XAssetType type, Game::XAssetHeader asset, std::string name); static void ModifyAsset(Game::XAssetType type, Game::XAssetHeader asset, std::string name);
static int HasThreadBypass(); static int HasThreadBypass();
static void SetBypassState(bool value);
}; };
} }