59 lines
1.4 KiB
C++
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;
|
|
} |