From d18276d25520c7b1e90197eb255bad19556ac318 Mon Sep 17 00:00:00 2001 From: Sanae Date: Wed, 10 Aug 2022 15:10:28 -0600 Subject: [PATCH] Fix switching modes between scenes --- source/server/gamemode/GameModeManager.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/source/server/gamemode/GameModeManager.cpp b/source/server/gamemode/GameModeManager.cpp index 39a1721..2bb341b 100644 --- a/source/server/gamemode/GameModeManager.cpp +++ b/source/server/gamemode/GameModeManager.cpp @@ -58,8 +58,9 @@ void GameModeManager::update() { void GameModeManager::initScene(const GameModeInitInfo& info) { sead::ScopedCurrentHeapSetter heapSetter(mHeap); - if (mCurModeBase != nullptr) { + if (mCurModeBase != nullptr && mWasSetMode) { delete mCurModeBase; + mCurModeBase = nullptr; } if (mLastInitInfo != nullptr) { @@ -68,19 +69,17 @@ void GameModeManager::initScene(const GameModeInitInfo& info) { if (mCurMode == GameMode::NONE) { mCurModeBase = nullptr; + delete mModeInfo; mModeInfo = nullptr; return; } mLastInitInfo = new GameModeInitInfo(info); - if (!mCurModeBase && mWasSetMode) { + if (mWasSetMode) { GameModeFactory factory("GameModeFactory"); const char* name = factory.getModeString(mCurMode); mCurModeBase = factory.getCreator(name)(name); - if (mLastInitInfo) { // check if there's a previously used init info - mCurModeBase->init(*mLastInitInfo); - } mWasSetMode = false; }