Working on tutorial refactoring

This commit is contained in:
Vladislav Khorev committed 2026-10-23 22:03:55 +06:00
1 parent ea8f64c940
commit 9fa120d4ad
82 files changed
+1877 -7563

No files matched your search

+27 -8
View File
@@ -5,6 +5,27 @@
namespace FRG {
// Saves made before the tutorial rework kept the dorm and the university tutorials
// as two state machines (tutorialStep 0..6 + uniIntTutorialState 0..4); map them
// onto the single TutorialStep sequence.
static TutorialStep migrateLegacyTutorialStep(int dormStep, int uniIntState)
{
if (dormStep <= 4) return static_cast<TutorialStep>(dormStep); // Step0..Step4 kept their values
switch (uniIntState) {
case 2: return TutorialStep::DarklandsHealth; // DarklandsActive
case 3: return TutorialStep::DarklandsAttack; // DarklandsStep13
case 4: return TutorialStep::Completed; // DarklandsFull
default: return TutorialStep::EnterDarklands; // Step10 / Step11
}
}
bool GameState::completeTutorialStep(TutorialStep step)
{
if (tutorialStep != step || step == TutorialStep::Completed) return false;
tutorialStep = static_cast<TutorialStep>(static_cast<int>(step) + 1);
return true;
}
void GameState::save(nlohmann::json& out) const
{
// Timestamp
@@ -35,10 +56,7 @@ void GameState::save(nlohmann::json& out) const
out["globalFloats"] = std::move(gf);
// --- Tutorial ---
out["tutorialStep"] = static_cast<int>(tutorialStep);
out["uniIntTutorialState"] = static_cast<int>(uniIntTutorialState);
out["tutorialPhonePickedUp"] = tutorialPhonePickedUp;
out["tutorialJournalPickedUp"] = tutorialJournalPickedUp;
out["tutorialStep"] = static_cast<int>(tutorialStep);
out["tutorialPhoneChatScreenOpened"] = tutorialPhoneChatScreenOpened;
out["tutorialJournalScreenOpened"] = tutorialJournalScreenOpened;
out["tutorialNeedOpenTaxiScreen"] = tutorialNeedOpenTaxiScreen;
@@ -118,10 +136,11 @@ void GameState::load(const nlohmann::json& in)
//logger() << "GameState::load step 5" << std::endl;
// --- Tutorial ---
tutorialStep = static_cast<TutorialStep>(in.value("tutorialStep", static_cast<int>(tutorialStep)));
uniIntTutorialState = static_cast<UniIntTutorialState>(in.value("uniIntTutorialState", static_cast<int>(uniIntTutorialState)));
tutorialPhonePickedUp = in.value("tutorialPhonePickedUp", tutorialPhonePickedUp);
tutorialJournalPickedUp = in.value("tutorialJournalPickedUp", tutorialJournalPickedUp);
if (in.contains("uniIntTutorialState")) {
tutorialStep = migrateLegacyTutorialStep(in.value("tutorialStep", 0), in["uniIntTutorialState"].get<int>());
} else {
tutorialStep = static_cast<TutorialStep>(in.value("tutorialStep", static_cast<int>(tutorialStep)));
}
tutorialPhoneChatScreenOpened = in.value("tutorialPhoneChatScreenOpened", tutorialPhoneChatScreenOpened);
tutorialJournalScreenOpened = in.value("tutorialJournalScreenOpened", tutorialJournalScreenOpened);
tutorialNeedOpenTaxiScreen = in.value("tutorialNeedOpenTaxiScreen", tutorialNeedOpenTaxiScreen);