15 #include <ThirdParty/cereal/include/cereal/archives/json.hpp> 20 eastl::shared_ptr<Engine> Engine::instance;
23 eastl::weak_ptr<Window> Engine::GetWindow() noexcept
25 return instance->window;
28 eastl::weak_ptr<Window> Engine::CreateAndReturnWindow(
int width,
int height,
const char* title) noexcept
30 if (instance->window ==
nullptr)
32 instance->window = eastl::shared_ptr<OpenGLWindow>(
new OpenGLWindow(width, height, title));
35 instance->window = eastl::shared_ptr<VulkanWindow>(
new VulkanWindow(width, height, title));
37 return instance->window;
40 eastl::weak_ptr<InputManager> Engine::GetInputManager() noexcept
42 if (instance->inputManager ==
nullptr)
43 instance->inputManager = eastl::shared_ptr<InputManager>(
new InputManager());
44 return instance->inputManager;
47 eastl::weak_ptr<Random> Engine::GetRandom()
49 if (instance->random ==
nullptr)
50 instance->random = eastl::shared_ptr<Random>(
new Random());
51 return instance->random;
54 eastl::weak_ptr<Renderer> Engine::GetRenderer() noexcept
56 if (instance->renderer ==
nullptr)
59 instance->renderer = eastl::shared_ptr<OpenGLRenderer>(
new OpenGLRenderer(
"Basic3D.vsh",
"Basic3D.fsh"));
62 instance->renderer = eastl::shared_ptr<VulkanRenderer>(
new VulkanRenderer());
63 GetRenderer<VulkanRenderer>().lock()->InitializeRenderer();
66 return instance->renderer;
69 eastl::weak_ptr<Camera> Engine::GetCamera() noexcept
71 if (instance->camera ==
nullptr)
72 instance->camera = eastl::shared_ptr<Camera>(
new Camera(
73 glm::vec3(0.f, 100.f, 150.f),
74 glm::vec3(0.f, -1.f, 0.f),
76 float(GetWindow().lock()->GetHeight()) /
float(GetWindow().lock()->GetHeight()),
79 return instance->camera;
84 if (instance->time ==
nullptr)
85 instance->time = eastl::shared_ptr<Time>(
new Time());
86 return instance->time;
89 eastl::weak_ptr<EntitySystem> Engine::GetEntitySystem() const noexcept
91 if (instance->entitySystem ==
nullptr)
92 instance->entitySystem = eastl::shared_ptr<EntitySystem>(
new EntitySystem());
93 return instance->entitySystem;
96 eastl::weak_ptr<ResourceManager> Engine::GetResourceManager() const noexcept
98 if (instance->resourceManager ==
nullptr)
99 instance->resourceManager = eastl::shared_ptr<ResourceManager>(
new ResourceManager());
100 return instance->resourceManager;
103 eastl::weak_ptr<CollisionSystem> Engine::GetCollisionSystem() const noexcept
105 if (instance->collisionSystem ==
nullptr)
106 instance->collisionSystem = eastl::shared_ptr<CollisionSystem>(
new CollisionSystem());
107 return instance->collisionSystem;
110 eastl::weak_ptr<Engine> Engine::InitializeEngine(
bool isPlaying) noexcept
112 if (instance !=
nullptr)
115 instance = eastl::shared_ptr<Engine>(
new Engine());
116 instance->isPlaying = isPlaying;
120 instance->CreateAndReturnWindow(
124 instance->GetRenderer();
125 instance->GetInputManager();
126 engineImGui = eastl::shared_ptr<EngineImGui>(
new EngineImGui());
130 eastl::weak_ptr<Engine> Engine::GetEngine() noexcept
132 if (instance ==
nullptr)
133 return InitializeEngine();
137 void Engine::Update() noexcept
139 GetTime().lock()->OnUpdateBegin();
141 if (instance->isPlaying)
143 if (instance->entitySystem !=
nullptr)
144 instance->entitySystem->Update();
146 if (instance->collisionSystem !=
nullptr)
147 if (instance->collisionSystem->IsRunning() ==
false)
148 instance->collisionSystem->Start();
150 if (instance->collisionSystem !=
nullptr)
151 instance->collisionSystem->Update();
155 if (instance->inputManager !=
nullptr)
156 instance->inputManager->Update();
159 GetTime().lock()->OnUpdateEnd();
162 void Engine::Destroy() noexcept
164 SaveEngineSettings();
167 instance->time.reset();
168 instance->camera.reset();
169 instance->inputManager.reset();
170 instance->resourceManager.reset();
171 instance->collisionSystem.reset();
172 instance->entitySystem.reset();
173 instance->renderer.reset();
174 instance->window.reset();
175 instance->random.reset();
179 void Engine::SetIsPlaying(
bool isPlaying)
181 instance->isPlaying = isPlaying;
184 bool Engine::GetIsPlaying()
186 return instance->isPlaying;
192 std::ifstream inputStream(
"Resources/Engine/engineInitializationData.json");
193 if (inputStream.good())
195 cereal::JSONInputArchive archive(inputStream);
196 archive(initializationData);
199 return initializationData;
202 void Engine::SaveEngineSettings()
204 std::ofstream outputStream(
"Resources/Engine/engineInitializationData.json");
205 cereal::JSONOutputArchive archive(outputStream);
208 instance->window->GetWidth(),
209 instance->window->GetHeight(),
210 std::string(instance->window->GetTitle().c_str())
213 archive(CEREAL_NVP(engineInitializationData));
218 if (instance->window !=
nullptr)
219 instance->window->Update();
221 if (instance->renderer !=
nullptr)
223 instance->renderer->RendererBegin(
224 GetCamera().lock()->GetView(),
225 GetCamera().lock()->GetProjection());
226 instance->renderer->OnRender();
228 instance->renderer->RendererEnd();
std::string windowTitle
Window Title defines the title of the engine window. Default is "".
This class is used to create models, load in meshes and textures. NOTE: Only the Engine is allowed to...
This class is used for the creation of a camera.
int windowHeight
WindowHeight defines the height of the engine window. Default is 480.
This object keeps track of all available entities. NOTE: only the Engine class is allowed to create t...
IMGUI_API float GetTime()
This object is used to retrieve information regarding the time. NOTE: This object can only be created...
The Collision System handles and stores run-time collision data using the Box2D library ...
This class provides random nummber generation of ints and floats withing the passed boundaries ...
eastl::shared_ptr< EngineImGui > engineImGui
int windowWidth
WindowWidth defines the width of the engine window. Default is 640.