diff --git a/include/Core/Engine.h b/include/Core/Engine.h index 905eea4..910f121 100755 --- a/include/Core/Engine.h +++ b/include/Core/Engine.h @@ -47,6 +47,8 @@ #include "Game/CLifebuoy.h" #include "Game/CProjectile.h" #include "Game/CBrick.h" +#include "Game/CWall.h" +#include "Game/CBackground.h" #include "Game/CStickyAim.h" #include "Game/BallSystem.h" #include "Game/HitLagSystem.h" @@ -120,6 +122,8 @@ public: 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(); @@ -168,206 +172,9 @@ public: m_World->ComponentFactory.Register(); m_World->Initialize(); - //PointLightTest - { - auto t_Light = m_World->CreateEntity(); - auto transform = m_World->AddComponent(t_Light); - transform->Position = glm::vec3(-3.f, 6.f, -5.f); - transform->Sticky = true; - auto pl = m_World->AddComponent(t_Light); - pl->Radius = 20.f; - pl->Diffuse = glm::vec3(0.8f, 0.7f, 0.05f); - auto model = m_World->AddComponent(t_Light); - model->ModelFile = "Models/Core/UnitSphere.obj"; - m_World->CommitEntity(t_Light); - } - { - auto t_Light = m_World->CreateEntity(); - auto transform = m_World->AddComponent(t_Light); - transform->Position = glm::vec3(3.f, -5.f, -5.f); - transform->Sticky = true; - auto pl = m_World->AddComponent(t_Light); - pl->Radius = 15.f; - pl->Diffuse = glm::vec3(0.1f, 0.5f, 0.8f); - auto model = m_World->AddComponent(t_Light); - model->ModelFile = "Models/Core/UnitSphere.obj"; - m_World->CommitEntity(t_Light); - } - - //Halfpipe background test model. - { - auto t_halfPipe = m_World->CreateEntity(); - auto transform = m_World->AddComponent(t_halfPipe); - transform->Position = glm::vec3(0.f, 0.f, -15.f); - transform->Scale = glm::vec3(6.f, 6.f, 10.f); - transform->Sticky = false; - auto model = m_World->AddComponent(t_halfPipe); - model->ModelFile = "Models/Test/halfpipe/Halfpipe.obj"; - model->Color = glm::vec4(0.8f, 0.8f, 0.8f, 0.3f); - m_World->CommitEntity(t_halfPipe); - } - { - auto t_halfPipe = m_World->CreateEntity(); - auto transform = m_World->AddComponent(t_halfPipe); - transform->Position = glm::vec3(0.f, 34.6f, -15.f); - transform->Scale = glm::vec3(6.f, 6.f, 10.f); - transform->Sticky = false; - auto model = m_World->AddComponent(t_halfPipe); - model->ModelFile = "Models/Test/halfpipe/Halfpipe.obj"; - model->Color = glm::vec4(0.8f, 0.8f, 0.8f, 0.3f); - m_World->CommitEntity(t_halfPipe); - } - - //Background - - { - auto background = m_World->CreateEntity(); - auto transform = m_World->AddComponent(background); - transform->Position = glm::vec3(0.f, 0.f, -30.f); - transform->Scale = glm::vec3(2681.f / 50.f, 1080.f / 50.f, 1.f); - auto sprite = m_World->AddComponent(background); - sprite->SpriteFile = "Textures/Background.png"; - m_World->CommitEntity(background); - } - -// auto particleEmitter= m_World->AddComponent(Pe); - //Water test - { - auto t_waterBody = m_World->CreateEntity(); - auto transform = m_World->AddComponent(t_waterBody); - transform->Position = glm::vec3(0.f, -3.5f, -10.f); - transform->Scale = glm::vec3(7.0f, 1.5f, 1.f); - transform->Sticky = true; - auto water = m_World->AddComponent(t_waterBody); - auto body = m_World->AddComponent(t_waterBody); - m_World->CommitEntity(t_waterBody); - } - - //ParticleTest - - - /*{ - auto Pe = m_World->CreateEntity(); - auto transform = m_World->AddComponent(Pe); - auto particleEmitter= m_World->AddComponent(Pe); - auto emitteSprite = m_World->AddComponent(Pe); - - transform->Position = glm::vec3(0.f, 0.f, -10.f); - emitteSprite->SpriteFile = "Textures/Test/Brick_Normal.png"; - particleEmitter->GravityScale = 0.0f; - particleEmitter->SpawnRate = 1.f; - particleEmitter->NumberOfTicks = 2; - particleEmitter->Speed = 1.f; - particleEmitter->ParticlesPerTick = 5; - particleEmitter->Spread = glm::pi()*2; - particleEmitter->EmittingAngle = glm::pi(); - particleEmitter->LifeTime = 50; - - { - auto Pt = m_World->CreateEntity(Pe); - auto PtTransform = m_World->AddComponent(Pt); - auto PtSprite = m_World->AddComponent(Pt); - auto PtParticle = m_World->AddComponent(Pt); - auto PtTemplate = m_World->AddComponent(Pt); - - //PtTransform->Velocity = glm::vec3(1.0f, 0.f, 0.f); - PtTransform->Position = transform->Position; - PtSprite->SpriteFile = "Textures/Background.png"; - PtParticle->LifeTime = 3.f; - PtParticle->Flags = static_cast(ParticleFlags::Type::Powder | ParticleFlags::Type::ParticleContactFilter | ParticleFlags::Type::FixtureContactFilter); - } - m_World->CommitEntity(Pe); - }*/ - - //TODO: Why does the ball not collide with these bricks? - //BottomBox - { - auto BottomWall = m_World->CreateEntity(); - auto transform = m_World->AddComponent(BottomWall); - transform->Position = glm::vec3(0.f, -6.f, -10.f); - transform->Scale = glm::vec3(20.f, 0.5f, 1.f); - //std::shared_ptr sprite = m_World->AddComponent(BottomWall); - //sprite->SpriteFile = "Textures/Core/ErrorTexture.png"; - std::shared_ptr rectangleShape = m_World->AddComponent(BottomWall); - rectangleShape->Dimensions = glm::vec2(20.f, 0.5f); - std::shared_ptr physics = m_World->AddComponent(BottomWall); - physics->CollisionType = CollisionType::Type::Static; - physics->Category = CollisionLayer::Wall; - physics->Mask = static_cast(CollisionLayer::LifeBuoy); - transform->Sticky = true; - m_World->CommitEntity(BottomWall); - } - - { - auto topWall = m_World->CreateEntity(); - std::shared_ptr transform = m_World->AddComponent(topWall); - transform->Position = glm::vec3(0.f, 6.f, -10.f); - transform->Scale = glm::vec3(20.f, 0.5f, 1.f); - - //std::shared_ptr sprite = m_World->AddComponent(topWall); - //sprite->SpriteFile = "Textures/Core/ErrorTexture.png"; - - std::shared_ptr rectangleShape = m_World->AddComponent(topWall); - rectangleShape->Dimensions = glm::vec2(20.f, 0.5f); - - std::shared_ptr physics = m_World->AddComponent(topWall); - physics->CollisionType = CollisionType::Type::Static; - physics->Category = CollisionLayer::Wall; - physics->Mask = static_cast(CollisionLayer::Ball | CollisionLayer::Brick); - transform->Sticky = true; - - m_World->CommitEntity(topWall); - } - - { - auto leftWall = m_World->CreateEntity(); - std::shared_ptr transform = m_World->AddComponent( - leftWall); - transform->Position = glm::vec3(-4.f, 1.f, -10.f); - transform->Scale = glm::vec3(0.5f, 20.f, 1.f); - - //std::shared_ptr sprite = m_World->AddComponent(leftWall); - //sprite->SpriteFile = "Textures/Core/ErrorTexture.png"; - - std::shared_ptr rectangleShape = m_World->AddComponent(leftWall); - rectangleShape->Dimensions = glm::vec2(0.5f, 20.f); - - std::shared_ptr physics = m_World->AddComponent(leftWall); - physics->CollisionType = CollisionType::Type::Static; - physics->Category = CollisionLayer::Wall; - physics->Mask = static_cast(CollisionLayer::Ball | CollisionLayer::Brick); - transform->Sticky = true; - - m_World->CommitEntity(leftWall); - } - - { - auto rightWall = m_World->CreateEntity(); - std::shared_ptr transform = m_World->AddComponent( - rightWall); - transform->Position = glm::vec3(4.f, 1.f, -10.f); - transform->Scale = glm::vec3(0.5f, 20.f, 1.f); - - //std::shared_ptr sprite = m_World->AddComponent(rightWall); - //sprite->SpriteFile = "Textures/Core/ErrorTexture.png"; - - std::shared_ptr rectangleShape = m_World->AddComponent(rightWall); - rectangleShape->Dimensions = glm::vec2(0.5f, 20.f); - - std::shared_ptr physics = m_World->AddComponent(rightWall); - physics->CollisionType = CollisionType::Type::Static; - physics->Category = CollisionLayer::Wall; - physics->Mask = static_cast(CollisionLayer::Ball | CollisionLayer::Brick); - transform->Sticky = true; - - m_World->CommitEntity(rightWall); - } - //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_EScreenShake = decltype(m_EScreenShake)(std::bind(&Engine::OnScreenShake, this, std::placeholders::_1)); - m_EventBroker->Subscribe(m_EScreenShake); m_LastTime = glfwGetTime(); } @@ -388,9 +195,6 @@ public: //ResourceManager::Update(); if (m_GameIsRunning) { m_World->Update(dt); - - // I apologize about this. - ScreenShakeUpdate(dt); } m_EventBroker->Process(); m_FrameStack->UpdateLayered(dt); @@ -563,36 +367,6 @@ public: m_RendererQueue.Forward.Add(job); } - void ScreenShakeUpdate(double dt) - { - if (m_ScreenShake) { - m_ShakeTimer += dt; - if (m_ShakeTimer >= m_ShakeEndTime) { - //std::cout << "Used: " << m_ShakeIntensity << " True: " << m_ShakeRepresentativeIntensity << std::endl; - m_ShakeRepresentativeIntensity -= m_ShakeRepresentativeIntensity * m_CoolerMultiplier * dt; - m_ShakeIntensity = m_ShakeRepresentativeIntensity; - if (m_ShakeIntensity <= 0) { - m_ScreenShake = false; - m_Renderer->PlaceCamera(glm::vec3(0, 0, 0)); - return; - } - } else { - //std::cout << "Timer: " << m_ShakeTimer << " End: " << m_ShakeEndTime << std::endl; - } - float randomX = (rand() % m_ShakeIntensity); - float randomY = (rand() % m_ShakeIntensity); - - float half = m_ShakeIntensity / 2; - - randomX = (randomX - half) / 20; - randomY = (randomY - half) / 20; - - //std::cout << "X: " << randomX << " Y: " << randomY << std::endl; - - m_Renderer->PlaceCamera(glm::vec3(randomX, randomY, 0)); - } - } - private: std::shared_ptr m_EventBroker; GUI::Frame* m_FrameStack = nullptr; @@ -625,27 +399,6 @@ private: return true; }; - - //TODO: Extreme Redo. - bool m_ScreenShake = false; - int m_ShakeIntensity = 0; - float m_ShakeRepresentativeIntensity = 0; - float m_ShakeTimer = 0; - float m_ShakeEndTime = 0; - float m_TimeTakenToCoolDown = 0; - float m_CoolerMultiplier = 0; - dd::EventRelay m_EScreenShake; - bool OnScreenShake(const dd::Events::ScreenShake &event) - { - m_ScreenShake = true; - m_ShakeIntensity = event.Intensity; - m_ShakeRepresentativeIntensity = event.Intensity; - m_ShakeEndTime = event.Time; - m_ShakeTimer = 0; - m_TimeTakenToCoolDown = event.TimeTakenToCoolDown; - m_CoolerMultiplier = m_ShakeIntensity / m_TimeTakenToCoolDown; - return true; - } double m_LastTime; }; diff --git a/include/Game/LevelSystem.h b/include/Game/LevelSystem.h index ee73742..9e29fb6 100755 --- a/include/Game/LevelSystem.h +++ b/include/Game/LevelSystem.h @@ -16,10 +16,13 @@ #include "Core/World.h" #include "Rendering/CSprite.h" #include "Rendering/CModel.h" +#include "Rendering/CPointLight.h" #include "Game/CBrick.h" #include "Game/CBall.h" #include "Game/CLife.h" +#include "Game/CWall.h" +#include "Game/CBackground.h" #include "Game/CProjectile.h" #include "Game/CPowerUp.h" @@ -46,6 +49,7 @@ #include "Physics/CPhysics.h" #include "Physics/CCircleShape.h" #include "Physics/CRectangleShape.h" +#include "Physics/CWaterVolume.h" #include "Physics/ESetImpulse.h" #include "Physics/EContact.h" #include "Sound/CCollisionSound.h" diff --git a/include/Game/PadSystem.h b/include/Game/PadSystem.h index 789e1e0..6091f39 100755 --- a/include/Game/PadSystem.h +++ b/include/Game/PadSystem.h @@ -16,6 +16,7 @@ #include "Input/EBindKey.h" #include "Physics/EContact.h" #include "Physics/CRectangleShape.h" +#include "Physics/CWaterVolume.h" #include "Physics/CPhysics.h" #include "Physics/CCircleShape.h" #include "Physics/ESetImpulse.h" @@ -26,7 +27,10 @@ #include "Game/CPowerUp.h" #include "Game/CStickyAim.h" #include "Game/EResetBall.h" +#include "Game/EResetAll.h" +#include "Game/ERaiseWater.h" #include "Game/EMultiBall.h" +#include "Game/ELifebuoy.h" #include "Game/EStickyPad.h" #include "Game/EStickyAttachedToPad.h" #include "Game/EInkBlaster.h" @@ -102,6 +106,8 @@ private: dd::EventRelay m_EContactPowerUp; dd::EventRelay m_EStageCleared; dd::EventRelay m_EResetBall; + dd::EventRelay m_EResetAll; + dd::EventRelay m_ERaiseWater; dd::EventRelay m_EPause; dd::EventRelay m_EKrakenAttack; dd::EventRelay m_EStickyPad; @@ -114,6 +120,8 @@ private: bool OnContactPowerUp(const dd::Events::Contact &event); bool OnStageCleared(const dd::Events::StageCleared &event); bool OnResetBall(const dd::Events::ResetBall &event); + bool OnResetAll(const dd::Events::ResetAll &event); + bool OnRaiseWater(const dd::Events::RaiseWater &event); bool OnPause(const dd::Events::Pause &event); bool OnKrakenAttack(const dd::Events::KrakenAttack &event); bool OnStickyPad(const dd::Events::StickyPad &event); diff --git a/include/Game/ScreenShakeSystem.h b/include/Game/ScreenShakeSystem.h index 52d3174..4755fbb 100644 --- a/include/Game/ScreenShakeSystem.h +++ b/include/Game/ScreenShakeSystem.h @@ -30,7 +30,7 @@ public: { } void Initialize() override; - void InitializeObjects() override; + void InitializeObjects(); void UpdateEntity(double dt, EntityID entity, EntityID parent) override; void FlipPause(); diff --git a/src/game/Game/LevelSystem.cpp b/src/game/Game/LevelSystem.cpp index 476e334..00f1f2c 100755 --- a/src/game/Game/LevelSystem.cpp +++ b/src/game/Game/LevelSystem.cpp @@ -21,6 +21,201 @@ void dd::Systems::LevelSystem::Initialize() EVENT_SUBSCRIBE_MEMBER(m_EPause, &LevelSystem::OnPause); EVENT_SUBSCRIBE_MEMBER(m_EHitPad, &LevelSystem::OnHitPad); + //PointLightTest + { + auto t_Light = m_World->CreateEntity(); + auto transform = m_World->AddComponent(t_Light); + transform->Position = glm::vec3(-3.f, 6.f, -5.f); + transform->Sticky = true; + auto pl = m_World->AddComponent(t_Light); + pl->Radius = 20.f; + pl->Diffuse = glm::vec3(0.8f, 0.7f, 0.05f); + auto model = m_World->AddComponent(t_Light); + model->ModelFile = "Models/Core/UnitSphere.obj"; + m_World->CommitEntity(t_Light); + } + { + auto t_Light = m_World->CreateEntity(); + auto transform = m_World->AddComponent(t_Light); + transform->Position = glm::vec3(3.f, -5.f, -5.f); + transform->Sticky = true; + auto pl = m_World->AddComponent(t_Light); + pl->Radius = 15.f; + pl->Diffuse = glm::vec3(0.1f, 0.5f, 0.8f); + auto model = m_World->AddComponent(t_Light); + model->ModelFile = "Models/Core/UnitSphere.obj"; + m_World->CommitEntity(t_Light); + } + + //Halfpipe background test model. + { + auto t_halfPipe = m_World->CreateEntity(); + auto transform = m_World->AddComponent(t_halfPipe); + transform->Position = glm::vec3(0.f, 0.f, -15.f); + transform->Scale = glm::vec3(6.f, 6.f, 10.f); + transform->Sticky = false; + auto model = m_World->AddComponent(t_halfPipe); + model->ModelFile = "Models/Test/halfpipe/Halfpipe.obj"; + model->Color = glm::vec4(0.8f, 0.8f, 0.8f, 0.3f); + m_World->CommitEntity(t_halfPipe); + } + { + auto t_halfPipe = m_World->CreateEntity(); + auto transform = m_World->AddComponent(t_halfPipe); + transform->Position = glm::vec3(0.f, 34.6f, -15.f); + transform->Scale = glm::vec3(6.f, 6.f, 10.f); + transform->Sticky = false; + auto model = m_World->AddComponent(t_halfPipe); + model->ModelFile = "Models/Test/halfpipe/Halfpipe.obj"; + model->Color = glm::vec4(0.8f, 0.8f, 0.8f, 0.3f); + m_World->CommitEntity(t_halfPipe); + } + + //Background + + { + auto background = m_World->CreateEntity(); + auto transform = m_World->AddComponent(background); + transform->Position = glm::vec3(0.f, 0.f, -30.f); + transform->Scale = glm::vec3(2681.f / 50.f, 1080.f / 50.f, 1.f); + auto sprite = m_World->AddComponent(background); + sprite->SpriteFile = "Textures/Background.png"; + m_World->CommitEntity(background); + } + + // auto particleEmitter= m_World->AddComponent(Pe); + //Water test + { + auto t_waterBody = m_World->CreateEntity(); + auto transform = m_World->AddComponent(t_waterBody); + transform->Position = glm::vec3(0.f, -3.5f, -10.f); + transform->Scale = glm::vec3(7.0f, 1.5f, 1.f); + transform->Sticky = true; + auto water = m_World->AddComponent(t_waterBody); + auto body = m_World->AddComponent(t_waterBody); + m_World->CommitEntity(t_waterBody); + } + + //ParticleTest + + + /*{ + auto Pe = m_World->CreateEntity(); + auto transform = m_World->AddComponent(Pe); + auto particleEmitter= m_World->AddComponent(Pe); + auto emitteSprite = m_World->AddComponent(Pe); + + transform->Position = glm::vec3(0.f, 0.f, -10.f); + emitteSprite->SpriteFile = "Textures/Test/Brick_Normal.png"; + particleEmitter->GravityScale = 0.0f; + particleEmitter->SpawnRate = 1.f; + particleEmitter->NumberOfTicks = 2; + particleEmitter->Speed = 1.f; + particleEmitter->ParticlesPerTick = 5; + particleEmitter->Spread = glm::pi()*2; + particleEmitter->EmittingAngle = glm::pi(); + particleEmitter->LifeTime = 50; + + { + auto Pt = m_World->CreateEntity(Pe); + auto PtTransform = m_World->AddComponent(Pt); + auto PtSprite = m_World->AddComponent(Pt); + auto PtParticle = m_World->AddComponent(Pt); + auto PtTemplate = m_World->AddComponent(Pt); + + //PtTransform->Velocity = glm::vec3(1.0f, 0.f, 0.f); + PtTransform->Position = transform->Position; + PtSprite->SpriteFile = "Textures/Background.png"; + PtParticle->LifeTime = 3.f; + PtParticle->Flags = static_cast(ParticleFlags::Type::Powder | ParticleFlags::Type::ParticleContactFilter | ParticleFlags::Type::FixtureContactFilter); + } + m_World->CommitEntity(Pe); + }*/ + + //TODO: Why does the ball not collide with these bricks? + //BottomBox + { + auto BottomWall = m_World->CreateEntity(); + auto transform = m_World->AddComponent(BottomWall); + transform->Position = glm::vec3(0.f, -6.f, -10.f); + transform->Scale = glm::vec3(20.f, 0.5f, 1.f); + //std::shared_ptr sprite = m_World->AddComponent(BottomWall); + //sprite->SpriteFile = "Textures/Core/ErrorTexture.png"; + std::shared_ptr rectangleShape = m_World->AddComponent(BottomWall); + rectangleShape->Dimensions = glm::vec2(20.f, 0.5f); + std::shared_ptr physics = m_World->AddComponent(BottomWall); + physics->CollisionType = CollisionType::Type::Static; + physics->Category = CollisionLayer::Wall; + physics->Mask = static_cast(CollisionLayer::LifeBuoy); + transform->Sticky = true; + m_World->CommitEntity(BottomWall); + } + + { + auto topWall = m_World->CreateEntity(); + std::shared_ptr transform = m_World->AddComponent(topWall); + transform->Position = glm::vec3(0.f, 6.f, -10.f); + transform->Scale = glm::vec3(20.f, 0.5f, 1.f); + + //std::shared_ptr sprite = m_World->AddComponent(topWall); + //sprite->SpriteFile = "Textures/Core/ErrorTexture.png"; + + std::shared_ptr rectangleShape = m_World->AddComponent(topWall); + rectangleShape->Dimensions = glm::vec2(20.f, 0.5f); + + std::shared_ptr physics = m_World->AddComponent(topWall); + physics->CollisionType = CollisionType::Type::Static; + physics->Category = CollisionLayer::Wall; + physics->Mask = static_cast(CollisionLayer::Ball | CollisionLayer::Brick); + transform->Sticky = true; + + m_World->CommitEntity(topWall); + } + + { + auto leftWall = m_World->CreateEntity(); + std::shared_ptr transform = m_World->AddComponent( + leftWall); + transform->Position = glm::vec3(-4.f, 1.f, -10.f); + transform->Scale = glm::vec3(0.5f, 20.f, 1.f); + + //std::shared_ptr sprite = m_World->AddComponent(leftWall); + //sprite->SpriteFile = "Textures/Core/ErrorTexture.png"; + + std::shared_ptr rectangleShape = m_World->AddComponent(leftWall); + rectangleShape->Dimensions = glm::vec2(0.5f, 20.f); + + std::shared_ptr physics = m_World->AddComponent(leftWall); + physics->CollisionType = CollisionType::Type::Static; + physics->Category = CollisionLayer::Wall; + physics->Mask = static_cast(CollisionLayer::Ball | CollisionLayer::Brick); + transform->Sticky = true; + + m_World->CommitEntity(leftWall); + } + + { + auto rightWall = m_World->CreateEntity(); + std::shared_ptr transform = m_World->AddComponent( + rightWall); + transform->Position = glm::vec3(4.f, 1.f, -10.f); + transform->Scale = glm::vec3(0.5f, 20.f, 1.f); + + //std::shared_ptr sprite = m_World->AddComponent(rightWall); + //sprite->SpriteFile = "Textures/Core/ErrorTexture.png"; + + std::shared_ptr rectangleShape = m_World->AddComponent(rightWall); + rectangleShape->Dimensions = glm::vec2(0.5f, 20.f); + + std::shared_ptr physics = m_World->AddComponent(rightWall); + physics->CollisionType = CollisionType::Type::Static; + physics->Category = CollisionLayer::Wall; + physics->Mask = static_cast(CollisionLayer::Ball | CollisionLayer::Brick); + transform->Sticky = true; + + m_World->CommitEntity(rightWall); + } + m_BrickTemplate = m_World->CreateEntity(); std::shared_ptr transform = m_World->AddComponent(m_BrickTemplate); auto model = m_World->AddComponent(m_BrickTemplate); diff --git a/src/game/Game/PadSystem.cpp b/src/game/Game/PadSystem.cpp index 7431746..7a47d8f 100755 --- a/src/game/Game/PadSystem.cpp +++ b/src/game/Game/PadSystem.cpp @@ -28,6 +28,8 @@ void dd::Systems::PadSystem::Initialize() EVENT_SUBSCRIBE_MEMBER(m_EContactPowerUp, &PadSystem::OnContactPowerUp); EVENT_SUBSCRIBE_MEMBER(m_EStageCleared, &PadSystem::OnStageCleared); EVENT_SUBSCRIBE_MEMBER(m_EResetBall, &PadSystem::OnResetBall); + EVENT_SUBSCRIBE_MEMBER(m_EResetAll, &PadSystem::OnResetAll); + EVENT_SUBSCRIBE_MEMBER(m_ERaiseWater, &PadSystem::OnRaiseWater); EVENT_SUBSCRIBE_MEMBER(m_EPause, &PadSystem::OnPause); EVENT_SUBSCRIBE_MEMBER(m_EKrakenAttack, &PadSystem::OnKrakenAttack); EVENT_SUBSCRIBE_MEMBER(m_EStickyPad, &PadSystem::OnStickyPad); @@ -204,7 +206,14 @@ bool dd::Systems::PadSystem::OnKeyDown(const dd::Events::KeyDown &event) { } else if (val == GLFW_KEY_R) { Events::ResetBall e; EventBroker->Publish(e); - } else if (val == GLFW_KEY_M) { + } else if (val == GLFW_KEY_W) { + Events::RaiseWater e; + e.Amount = 0.2; + EventBroker->Publish(e); + } else if (val == GLFW_KEY_A) { + Events::ResetAll e; + EventBroker->Publish(e); + } else if (val == GLFW_KEY_M) { Events::MultiBall e; e.padTransform = Transform(); EventBroker->Publish(e); @@ -226,22 +235,23 @@ bool dd::Systems::PadSystem::OnKeyDown(const dd::Events::KeyDown &event) { e.Time = 3; e.TimeTakenToCoolDown = 10; EventBroker->Publish(e); + } else if (val == GLFW_KEY_L) { + Events::Lifebuoy e; + e.Transform = Transform(); + EventBroker->Publish(e); } else if (val == GLFW_KEY_Y) { Events::StickyPad e; EventBroker->Publish(e); - } - else if (val == GLFW_KEY_I) { + } else if (val == GLFW_KEY_I) { Events::InkBlaster e; EventBroker->Publish(e); - } - else if (val == GLFW_KEY_K) { + } else if (val == GLFW_KEY_K) { Events::KrakenAttack e; e.ChargeUpdate = 0; e.KrakenStrength = 0.1; e.PlayerStrength = 0.05; EventBroker->Publish(e); - } - else if (val == GLFW_KEY_SPACE) { + } else if (val == GLFW_KEY_SPACE) { Events::ActionButton e; e.Position = Transform()->Position; EventBroker->Publish(e); @@ -369,6 +379,32 @@ bool dd::Systems::PadSystem::OnResetBall(const dd::Events::ResetBall &event) return true; } +bool dd::Systems::PadSystem::OnResetAll(const dd::Events::ResetAll &event) +{ + + return true; +} + +bool dd::Systems::PadSystem::OnRaiseWater(const dd::Events::RaiseWater &event) +{ + auto transform = Transform(); + glm::vec3 raise = glm::vec3(0, event.Amount, 0); + transform->Position += raise; + + { + auto t_waterBody = m_World->CreateEntity(); + auto transform = m_World->AddComponent(t_waterBody); + transform->Position = glm::vec3(0.f, -3.5f, -10.f); + transform->Scale = glm::vec3(7.0f, event.Amount * 1.6f, 1.f); + transform->Sticky = true; + auto water = m_World->AddComponent(t_waterBody); + auto body = m_World->AddComponent(t_waterBody); + m_World->CommitEntity(t_waterBody); + } + + return true; +} + bool dd::Systems::PadSystem::OnKrakenAttack(const dd::Events::KrakenAttack &event) { if (!m_KrakenAttack) {