MCPcopy Create free account
hub / github.com/deathkiller/jazz2-native / SaveEpisodeEnd

Method SaveEpisodeEnd

Sources/Main.cpp:2041–2082  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2039}
2040
2041void GameEventHandler::SaveEpisodeEnd(const LevelInitialization& levelInit)
2042{
2043 if (levelInit.LastEpisodeName.empty() || levelInit.LastEpisodeName == "unknown"_s) {
2044 return;
2045 }
2046
2047 const PlayerCarryOver* firstPlayer;
2048 std::size_t playerCount = levelInit.GetPlayerCount(&firstPlayer);
2049
2050 PreferencesCache::RemoveEpisodeContinue(levelInit.LastEpisodeName);
2051
2052 if (playerCount > 0) {
2053 auto* prevEnd = PreferencesCache::GetEpisodeEnd(levelInit.LastEpisodeName);
2054
2055 bool shouldSaveEpisodeEnd = (prevEnd == nullptr);
2056 if (!shouldSaveEpisodeEnd) {
2057 switch (PreferencesCache::OverwriteEpisodeEnd) {
2058 // Don't overwrite existing data in multiplayer/split-screen
2059 default: shouldSaveEpisodeEnd = (playerCount == 1); break;
2060 case EpisodeEndOverwriteMode::NoCheatsOnly: shouldSaveEpisodeEnd = (playerCount == 1 && !levelInit.CheatsUsed); break;
2061 case EpisodeEndOverwriteMode::HigherScoreOnly: shouldSaveEpisodeEnd = (playerCount == 1 && !levelInit.CheatsUsed && firstPlayer->Score >= prevEnd->Score); break;
2062 }
2063 }
2064
2065 if (shouldSaveEpisodeEnd) {
2066 auto* episodeEnd = PreferencesCache::GetEpisodeEnd(levelInit.LastEpisodeName, true);
2067 episodeEnd->Flags = EpisodeContinuationFlags::IsCompleted;
2068 if (levelInit.CheatsUsed) {
2069 episodeEnd->Flags |= EpisodeContinuationFlags::CheatsUsed;
2070 }
2071
2072 episodeEnd->Lives = firstPlayer->Lives;
2073 episodeEnd->Score = firstPlayer->Score;
2074 episodeEnd->ElapsedMilliseconds = levelInit.ElapsedMilliseconds;
2075 std::memcpy(episodeEnd->Gems, firstPlayer->Gems, sizeof(firstPlayer->Gems));
2076 std::memcpy(episodeEnd->Ammo, firstPlayer->Ammo, sizeof(firstPlayer->Ammo));
2077 std::memcpy(episodeEnd->WeaponUpgrades, firstPlayer->WeaponUpgrades, sizeof(firstPlayer->WeaponUpgrades));
2078 }
2079 }
2080
2081 PreferencesCache::Save();
2082}
2083
2084void GameEventHandler::SaveEpisodeContinue(const LevelInitialization& levelInit)
2085{

Callers

nothing calls this directly

Calls 2

GetPlayerCountMethod · 0.80
emptyMethod · 0.45

Tested by

no test coverage detected