Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 7 additions & 4 deletions src/data/context/GameAssets.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,8 @@ void GameAssets::ReloadAssets(const std::vector<ra::data::models::AssetModelBase
return;
}

auto* pMemoryRegions = FindMemoryRegions();

std::vector<ra::data::models::AssetModelBase*> vRemainingAssetsToReload(vAssetsToReload);
const bool bReloadAll = vAssetsToReload.empty();
if (bReloadAll)
Expand Down Expand Up @@ -180,11 +182,12 @@ void GameAssets::ReloadAssets(const std::vector<ra::data::models::AssetModelBase
vRemainingAssetsToReload.push_back(&pAsset);
}
}
}

auto* pMemoryRegions = FindMemoryRegions();
if (pMemoryRegions)
pMemoryRegions->ResetCustomRegions();
// memory regions are only refreshed when reloading all.
// to prevent duplicate entries, clear out the existing ones.
if (pMemoryRegions)
pMemoryRegions->ResetCustomRegions();
}

std::string sLine;
pData->GetLine(sLine); // version used to create the file
Expand Down
71 changes: 71 additions & 0 deletions tests/data/context/GameAssets_Tests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -178,6 +178,19 @@ TEST_CLASS(GameAssets_Tests)
{
return *(dynamic_cast<ra::data::models::RichPresenceModel*>(FindAsset(ra::data::models::AssetType::RichPresence, 0)));
}

void AddMemoryRegionsModel()
{
auto pMemoryRegions = std::make_unique<ra::data::models::MemoryRegionsModel>();
pMemoryRegions->CreateServerCheckpoint();
pMemoryRegions->CreateLocalCheckpoint();
Append(std::move(pMemoryRegions));
}

ra::data::models::MemoryRegionsModel& GetMemoryRegions()
{
return *(dynamic_cast<ra::data::models::MemoryRegionsModel*>(FindAsset(ra::data::models::AssetType::MemoryRegions, 0)));
}
};

TEST_METHOD(TestSaveLocalEmpty)
Expand Down Expand Up @@ -673,6 +686,64 @@ TEST_CLASS(GameAssets_Tests)
Assert::IsNull(gameAssets.FindAchievement(GameAssets::FirstLocalId));
}

TEST_METHOD(TestReloadIgnoresMemoryRegions)
{
GameAssetsHarness gameAssets;
gameAssets.AddThreeAchievements();
gameAssets.AddMemoryRegionsModel();

auto& pMemoryRegions = gameAssets.GetMemoryRegions();
pMemoryRegions.AddCustomRegion(0x1000, 0x10FF, L"Custom");
Assert::AreEqual({ 1U }, pMemoryRegions.CustomRegions().size());

gameAssets.MockUserFileContents(
"1:\"0xH1234=0\":Test:::::User:0:0:0:::00000\n"
"3:\"0xH2345=0\":Test2:::::User:0:0:0:::00000\n"
);

gameAssets.ReloadAsset(AssetType::Achievement, 1);

// item 1 should have been updated from file
const auto* pAsset = gameAssets.FindAchievement({ 1U });
Assert::IsNotNull(pAsset);
Ensures(pAsset != nullptr);
Assert::AreEqual(std::string("0xH1234=0"), pAsset->GetTrigger());
Assert::AreEqual(AssetCategory::Core, pAsset->GetCategory());
Assert::AreEqual(AssetChanges::Unpublished, pAsset->GetChanges());

// memory regions should not have been modified
Assert::AreEqual({ 1U }, pMemoryRegions.CustomRegions().size());
}

TEST_METHOD(TestReloadAllPicksUpMemoryRegions)
{
GameAssetsHarness gameAssets;
gameAssets.AddThreeAchievements();
gameAssets.AddMemoryRegionsModel();

const auto& pMemoryRegions = gameAssets.GetMemoryRegions();
Assert::AreEqual({ 0U }, pMemoryRegions.CustomRegions().size());

gameAssets.MockUserFileContents(
"1:\"0xH1234=0\":Test:::::User:0:0:0:::00000\n"
"3:\"0xH2345=0\":Test2:::::User:0:0:0:::00000\n"
"M0:0x1000-0x10FF:\"Custom\"\n"
);

gameAssets.ReloadAllAssets();

// item 1 should have been updated from file
const auto* pAsset = gameAssets.FindAchievement({ 1U });
Assert::IsNotNull(pAsset);
Ensures(pAsset != nullptr);
Assert::AreEqual(std::string("0xH1234=0"), pAsset->GetTrigger());
Assert::AreEqual(AssetCategory::Core, pAsset->GetCategory());
Assert::AreEqual(AssetChanges::Unpublished, pAsset->GetChanges());

// memory regions should have been modified
Assert::AreEqual({ 1U }, pMemoryRegions.CustomRegions().size());
}

TEST_METHOD(TestSaveLocalLeaderboard)
{
GameAssetsHarness gameAssets;
Expand Down
Loading