3434#include " CTemplate.h"
3535#include " Core/ConfigFile.h"
3636#include " Core/EventBroker.h"
37+ #include " Input/InputSystem.h"
3738#include " Rendering/CModel.h"
3839#include " Rendering/CSprite.h"
3940#include " Rendering/CPointLight.h"
41+ #include " Rendering/CCamera.h"
4042#include " Transform/TransformSystem.h"
4143#include " Sound/SoundSystem.h"
4244#include " Sound/CCollisionSound.h"
6769
6870#include " Game/BrickComponents.h"
6971
72+ #include " Game/ScreenShakeSystem.h"
7073#include " Game/EScreenShake.h"
7174
7275#include " Physics/PhysicsSystem.h"
@@ -147,6 +150,7 @@ class Engine
147150
148151 m_World->ComponentFactory .Register <Components::Sprite>();
149152
153+ m_World->ComponentFactory .Register <Components::Camera>();
150154 m_World->ComponentFactory .Register <Components::RectangleShape>();
151155 m_World->ComponentFactory .Register <Components::Physics>();
152156 m_World->ComponentFactory .Register <Components::Ball>();
@@ -173,6 +177,9 @@ class Engine
173177 m_World->ComponentFactory .Register <Components::InkBlasterBrick>();
174178 m_World->ComponentFactory .Register <Components::KrakenAttackBrick>();
175179
180+ // m_World->SystemFactory.Register<Systems::InputSystem>(
181+ // [this]() { return new Systems::InputSystem(m_World.get(), m_EventBroker); });
182+ // m_World->AddSystem<Systems::InputSystem>();
176183 m_World->SystemFactory .Register <Systems::LevelSystem>(
177184 [this ]() { return new Systems::LevelSystem (m_World.get (), m_EventBroker); });
178185 m_World->AddSystem <Systems::LevelSystem>();
@@ -209,6 +216,9 @@ class Engine
209216 m_World->SystemFactory .Register <Systems::LifeSystem>(
210217 [this ]() { return new Systems::LifeSystem (m_World.get (), m_EventBroker); });
211218 m_World->AddSystem <Systems::LifeSystem>();
219+ m_World->SystemFactory .Register <Systems::ScreenShakeSystem>(
220+ [this ]() { return new Systems::ScreenShakeSystem (m_World.get (), m_EventBroker); });
221+ m_World->AddSystem <Systems::ScreenShakeSystem>();
212222
213223 m_World->ComponentFactory .Register <Components::Model>();
214224 m_World->ComponentFactory .Register <Components::Template>();
@@ -251,9 +261,10 @@ class Engine
251261 m_LastTime = currentTime;
252262
253263 // Update input
264+ m_EventBroker->Swap ();
254265 m_InputManager->Update (dt);
255- // Swap event queues to get fresh input data in the read queue
256- // m_EventBroker->Swap();
266+ // m_EventBroker->Process<Systems::InputSystem>();
267+ m_EventBroker->Swap ();
257268
258269 // ResourceManager::Update();
259270 if (m_GameIsRunning) {
@@ -271,15 +282,14 @@ class Engine
271282 TEMPAddToRenderQueue ();
272283 }
273284
274- std::unique_ptr<dd::Camera> defaultCamera = nullptr ;
275-
276285 // Render scene
277286 // TODO send renderqueue to draw.
278287 m_Renderer->Draw (m_RendererQueue);
279288
280289 m_EventBroker->Process <Engine>();
281290 // Swap event queues
282291 m_EventBroker->Swap ();
292+ m_EventBroker->Clear ();
283293
284294 glfwPollEvents ();
285295 }
@@ -292,6 +302,20 @@ class Engine
292302 {
293303 if (!m_TransformSystem)
294304 m_TransformSystem = m_World->GetSystem <Systems::TransformSystem>();
305+
306+ // HACK: How do we handle multiple cameras? Maybe view and projection matrices in render queue...
307+ auto cameras = m_World->GetComponentsOfType <Components::Camera>();
308+ if (cameras != nullptr ) {
309+ for (auto & component : *cameras) {
310+ auto camera = static_cast <Components::Camera*>(component.get ());
311+ auto transform = m_World->GetComponent <Components::Transform>(camera->Entity );
312+ m_Renderer->Camera ()->SetPosition (transform->Position );
313+ m_Renderer->Camera ()->SetOrientation (transform->Orientation );
314+ m_Renderer->Camera ()->SetFOV (camera->FOV );
315+ m_Renderer->Camera ()->SetNearClip (camera->NearClip );
316+ m_Renderer->Camera ()->SetFarClip (camera->FarClip );
317+ }
318+ }
295319
296320 for (auto &pair : *m_World->GetEntities ())
297321 {
0 commit comments