ProjectTextRPG/TextRPG/Source/GameInstance.h

59 lines
1.4 KiB
C++

#pragma once
#include "Core/Object/GameObject.h"
class GameSceneManager;
class GameDataManager;
class GameInputSystem;
class GameObject;
class Player;
class GameInstance
{
public:
GameInstance();
~GameInstance();
void Run();
void Quit();
template<typename T, typename... Arguments>
GameObject* SpawnCharacter(Arguments&&... Args);
void PushObject(GameObject* Object) { GameObjects.push_back(Object); }
void SetLocalPlayer(Player* NewPlayer) { LocalPlayer = NewPlayer; }
GameInputSystem* GetInput() { return GameInput; }
GameDataManager* GetGameDataManager() { return DataManager; }
Player* GetLocalPlayer() { return LocalPlayer; }
private:
void GameLoop();
void PrepareSceneManager();
void PrepareCreateDataManager();
void PrepareGameInput();
void Initialize();
void PostInitialize();
void Update();
void Release();
private:
GameInputSystem* GameInput;
GameSceneManager* SceneManager;
GameDataManager* DataManager;
Player* LocalPlayer;
std::vector<GameObject*> GameObjects;
bool bIsRunning;
bool bInitalized;
};
template<typename T, typename... Arguments>
inline GameObject* GameInstance::SpawnCharacter(Arguments&&... Args)
{
static_assert(std::is_base_of_v<GameObject, T>, "반드시 Character 클래스 이거나 상속받아야 함");
GameObject* NewCharacter = new T(std::forward<Args>(Args)...);
GameObjects.push_back(NewCharacter);
return NewCharacter;
}