From 650c7ec47cbb70d1e45854bed2e569809208a1b3 Mon Sep 17 00:00:00 2001 From: Stiffly Date: Fri, 25 Sep 2015 02:43:34 +0200 Subject: [PATCH] EStartGame up and running. Moved BGM-play from soundsystem init to EGameStart. --- assets/Models/Submarine.obj | 2 - include/Core/Engine.h | 95 +++++++++++++++++++++++----------- include/Game/EGameStart.h | 25 +++++++++ src/game/Sound/SoundSystem.cpp | 27 +--------- 4 files changed, 90 insertions(+), 59 deletions(-) create mode 100644 include/Game/EGameStart.h diff --git a/assets/Models/Submarine.obj b/assets/Models/Submarine.obj index 28e65c8..14569fc 100644 --- a/assets/Models/Submarine.obj +++ b/assets/Models/Submarine.obj @@ -1879,5 +1879,3 @@ f 166/13/239 259/24/24 401/34/255 f 161/12/240 166/13/239 400/32/253 f 163/27/245 161/12/240 399/29/251 f 256/19/19 163/27/245 398/30/30 -l 300 301 -l 299 298 diff --git a/include/Core/Engine.h b/include/Core/Engine.h index a45467f..0fca853 100644 --- a/include/Core/Engine.h +++ b/include/Core/Engine.h @@ -52,6 +52,9 @@ #include "Physics/CBoxShape.h" #include "Physics/ESetImpulse.h" +#include "Game/EGameStart.h" +#include "Sound/EPlaySound.h" + namespace dd { @@ -72,13 +75,11 @@ public: m_World = std::make_shared(m_EventBroker); - - - //TODO: Move this out of engine.h - m_World->ComponentFactory.Register(); - m_World->SystemFactory.Register( - [this]() { return new Systems::TransformSystem(m_World.get(), m_EventBroker); }); - m_World->AddSystem(); + //TODO: Move this out of engine.h + m_World->ComponentFactory.Register(); + m_World->SystemFactory.Register( + [this]() { return new Systems::TransformSystem(m_World.get(), m_EventBroker); }); + m_World->AddSystem(); m_World->ComponentFactory.Register(); m_World->ComponentFactory.Register(); @@ -86,10 +87,10 @@ public: m_World->SystemFactory.Register([this]() { return new Systems::SoundSystem(m_World.get(), m_EventBroker); }); m_World->AddSystem(); - m_World->ComponentFactory.Register(); + m_World->ComponentFactory.Register(); - m_World->ComponentFactory.Register(); - m_World->ComponentFactory.Register(); + m_World->ComponentFactory.Register(); + m_World->ComponentFactory.Register(); m_World->ComponentFactory.Register(); m_World->ComponentFactory.Register(); m_World->ComponentFactory.Register(); @@ -98,9 +99,9 @@ public: m_World->ComponentFactory.Register(); m_World->ComponentFactory.Register(); - m_World->SystemFactory.Register( - [this]() { return new Systems::PhysicsSystem(m_World.get(), m_EventBroker); }); - m_World->AddSystem(); + m_World->SystemFactory.Register( + [this]() { return new Systems::PhysicsSystem(m_World.get(), m_EventBroker); }); + m_World->AddSystem(); m_World->SystemFactory.Register([this]() { return new Systems::LevelSystem(m_World.get(), m_EventBroker); }); m_World->AddSystem(); @@ -109,10 +110,10 @@ public: m_World->SystemFactory.Register([this]() { return new Systems::BallSystem(m_World.get(), m_EventBroker); }); m_World->AddSystem(); - m_World->ComponentFactory.Register(); - m_World->ComponentFactory.Register(); + m_World->ComponentFactory.Register(); + m_World->ComponentFactory.Register(); m_World->ComponentFactory.Register(); - m_World->Initialize(); + m_World->Initialize(); //TODO: Remove tobias light-test code. @@ -120,29 +121,29 @@ public: }*/ //OctoBall - { - auto ent = m_World->CreateEntity(); - std::shared_ptr transform = m_World->AddComponent(ent); - transform->Position = glm::vec3(-0.f, 0.26f, -10.f); + { + auto ent = m_World->CreateEntity(); + std::shared_ptr transform = m_World->AddComponent(ent); + transform->Position = glm::vec3(-0.f, 0.26f, -10.f); transform->Scale = glm::vec3(0.5f, 0.5f, 0.5f); transform->Velocity = glm::vec3(0.0f, -10.f, 0.f); - auto model = m_World->AddComponent(ent); + auto model = m_World->AddComponent(ent); model->ModelFile = "Models/Test/Ball/Ballopus.obj"; - std::shared_ptr circleShape = m_World->AddComponent(ent); + std::shared_ptr circleShape = m_World->AddComponent(ent); std::shared_ptr ball = m_World->AddComponent(ent); ball->Speed = 5.f; - std::shared_ptr physics = m_World->AddComponent(ent); - physics->Static = false; + std::shared_ptr physics = m_World->AddComponent(ent); + physics->Static = false; auto plight = m_World->AddComponent(ent); plight->Radius = 2.f; - m_World->CommitEntity(ent); + m_World->CommitEntity(ent); - } + } //PointLightTest { @@ -227,6 +228,11 @@ public: m_World->CommitEntity(ent); } + + //EVENT_SUBSCRIBE_MEMBER(m_EGameStart, &Engine::OnGameStart); + m_EGameStart = decltype(m_EGameStart)(std::bind(&Engine::OnGameStart, this, std::placeholders::_1)); + m_EventBroker->Subscribe(m_EGameStart); + m_LastTime = glfwGetTime(); } @@ -243,9 +249,14 @@ public: // Update input m_InputManager->Update(dt); - m_World->Update(dt); - + if (m_GameIsRunning) { + m_World->Update(dt); + } + if (glfwGetKey(m_Renderer->Window(), GLFW_KEY_ENTER)) { + Events::GameStart e; + m_EventBroker->Publish(e); + } // // if (glfwGetKey(m_Renderer->Window(), GLFW_KEY_R)) { // ResourceManager::Reload("Shaders/Deferred/3/Fragment.glsl"); @@ -263,12 +274,15 @@ public: } //TODO Fill up the renderQueue with models (Temp fix) - TEMPAddToRenderQueue(); + if (m_GameIsRunning) { + TEMPAddToRenderQueue(); + } // Render scene //TODO send renderqueue to draw. m_Renderer->Draw(m_RendererQueue); + m_EventBroker->Process(); // Swap event queues m_EventBroker->Clear(); @@ -355,7 +369,6 @@ public: } } - m_RendererQueue.Sort(); } //TODO: Get this out of engine.h @@ -416,7 +429,27 @@ private: std::shared_ptr m_InputManager; std::shared_ptr m_World; - + //TODO: Redo + bool m_GameIsRunning = false; + dd::EventRelay m_EGameStart; + bool OnGameStart(const dd::Events::GameStart &event) + { + m_GameIsRunning = true; + //Todo: Move this + { + dd::Events::PlaySound e; + e.path = "Sounds/BGM/under-the-sea-instrumental.wav"; + e.isAmbient = true; + m_EventBroker->Publish(e); + } + { + dd::Events::PlaySound e; + e.path = "Sounds/BGM/water-flowing.wav"; + e.volume = 0.3f; + e.isAmbient = true; + m_EventBroker->Publish(e); + } + }; double m_LastTime; }; diff --git a/include/Game/EGameStart.h b/include/Game/EGameStart.h new file mode 100644 index 0000000..bfee0fd --- /dev/null +++ b/include/Game/EGameStart.h @@ -0,0 +1,25 @@ +// +// Created by Adam on 2015-09-25. +// + +#ifndef EVENTS_EGAMESTART_H__ +#define EVENTS_EGAMESTART_H__ + +#include "Core/EventBroker.h" + +namespace dd +{ + +namespace Events +{ + +struct GameStart : public Event +{ + +}; + +} + +} + +#endif diff --git a/src/game/Sound/SoundSystem.cpp b/src/game/Sound/SoundSystem.cpp index 8594d92..90939a1 100644 --- a/src/game/Sound/SoundSystem.cpp +++ b/src/game/Sound/SoundSystem.cpp @@ -36,26 +36,7 @@ void dd::Systems::SoundSystem::Initialize() EVENT_SUBSCRIBE_MEMBER(m_EMasterVolume, &SoundSystem::OnMasterVolume); - //Todo: Move this - { - dd::Events::PlaySound e; - e.path = "Sounds/BGM/under-the-sea-instrumental.wav"; - e.isAmbient = true; - EventBroker->Publish(e); - } - { - dd::Events::PlaySound e; - e.path = "Sounds/BGM/water-flowing.wav"; - e.volume = 0.3f; - e.isAmbient = true; - EventBroker->Publish(e); - } - { - dd::Events::MasterVolume e; - e.isAmbient = true; - e.gain = 1.f; - EventBroker->Publish(e); - } + } void dd::Systems::SoundSystem::Update(double dt) @@ -182,12 +163,6 @@ bool dd::Systems::SoundSystem::OnContact(const dd::Events::Contact &event) } } - { - dd::Events::StopSound e; - e.path = "Sounds/BGM/water-flowing.wav"; - EventBroker->Publish(e); - } - //Send play-sound event dd::Events::PlaySound e; e.path = collisionSound->filePath;