47 lines
1.0 KiB
C++
47 lines
1.0 KiB
C++
#pragma once
|
|
|
|
#include "Core/Scene/CoreScene.h"
|
|
|
|
#define CLASS_TO_NAME(Type) #Type
|
|
|
|
class GameSceneManager
|
|
{
|
|
public:
|
|
GameSceneManager();
|
|
virtual ~GameSceneManager();
|
|
|
|
void Initialize();
|
|
void Update();
|
|
void Release();
|
|
|
|
template<typename... Scenes>
|
|
void CreateScenes();
|
|
|
|
template<typename Scene>
|
|
void TransitionTo();
|
|
|
|
private:
|
|
std::map<std::string, CoreScene*> SceneElements;
|
|
CoreScene* CurrentScene;
|
|
};
|
|
|
|
template<typename ...Scenes>
|
|
inline void GameSceneManager::CreateScenes()
|
|
{
|
|
static_assert((std::is_base_of_v<CoreScene, Scenes> && ...), "반드시 CoreScene 클래스 이거나 상속받아야 함");
|
|
(SceneElements.emplace(typeid(Scenes).name(), new Scenes(this)),...);
|
|
}
|
|
|
|
template<typename Scene>
|
|
inline void GameSceneManager::TransitionTo()
|
|
{
|
|
static_assert((std::is_base_of_v<CoreScene, Scene>), "반드시 CoreScene 클래스 이거나 상속받아야 함");
|
|
|
|
std::string ClassName = typeid(Scene).name();
|
|
auto Found = SceneElements.find(ClassName);
|
|
if (Found != SceneElements.end())
|
|
{
|
|
CurrentScene = Found->second;
|
|
CurrentScene->Enter();
|
|
}
|
|
} |