#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 void CreateScenes(); template void TransitionTo(); private: std::map SceneElements; CoreScene* CurrentScene; }; template inline void GameSceneManager::CreateScenes() { static_assert((std::is_base_of_v && ...), "반드시 CoreScene 클래스 이거나 상속받아야 함"); (SceneElements.emplace(typeid(Scenes).name(), new Scenes(this)),...); } template inline void GameSceneManager::TransitionTo() { static_assert((std::is_base_of_v), "반드시 CoreScene 클래스 이거나 상속받아야 함"); std::string ClassName = typeid(Scene).name(); auto Found = SceneElements.find(ClassName); if (Found != SceneElements.end()) { CurrentScene = Found->second; CurrentScene->Enter(); } }