void SceneManager::ExecuteSceneManagement () { if (sceneMngParam == nullptr) { return; } Scene* scene; if (sceneMngParam->IsNext ()) { delete rootScene; rootScene = nullptr; currentScene = SceneFactory::CreateScene (sceneMngParam->GetSceneId ()); if (currentScene != nullptr) { currentScene->ProcessInitialize (); currentScene->ProcessBegin (); } rootScene = currentScene; } else if (sceneMngParam->IsAdd ()) { currentScene = SceneFactory::CreateScene (sceneMngParam->GetSceneId ()); currentScene->ProcessInitialize (); currentScene->ProcessBegin (); scene = rootScene; while (scene != nullptr && scene->GetChild () != nullptr) { scene = scene->GetChild (); } scene->SetChild (currentScene); } else if (sceneMngParam->IsReplace ()) { scene = rootScene->GetChild (); while (scene != nullptr && scene->GetChild () != currentScene) { scene = scene->GetChild (); } if (scene != nullptr) { delete currentScene; currentScene = nullptr; currentScene = SceneFactory::CreateScene (sceneMngParam->GetSceneId ()); currentScene->ProcessInitialize (); currentScene->ProcessBegin (); scene->SetChild (currentScene); } } else if (sceneMngParam->IsReturn ()) { if (rootScene != currentScene) { scene = rootScene->GetChild (); // 子のポインタがcurrentSceneのポインタと一致するまで while (scene != nullptr && scene != currentScene) { scene = scene->GetChild (); if (scene == nullptr) { break; } } if (scene != nullptr) { scene->DestroyChild (); currentScene = scene; scene->ProcessBegin (); } } } else if (sceneMngParam->IsReturnToRoot ()) { scene = rootScene->GetChild (); delete scene; // 子に関してはデストラクタで再帰 rootScene->ProcessBegin (); currentScene = rootScene; } delete sceneMngParam; sceneMngParam = nullptr; }