From f0b36c6f1276aca079ba30eea390e67769a4d179 Mon Sep 17 00:00:00 2001 From: PlatinumSkink Date: Wed, 21 Oct 2015 15:12:50 +0200 Subject: [PATCH 1/8] Fixed Kraken battle. I think. Made it so you do not shoot projectiles or squids when struggling with Kraken. --- include/Game/BallSystem.h | 8 ++++ include/Game/EKrakenAttackEnd.h | 25 +++++++++++++ include/Game/KrakenSystem.h | 1 + include/Game/LevelSystem.h | 2 +- include/Game/PadSystem.h | 3 ++ include/Game/ProjectileSystem.h | 7 ++++ src/game/Game/BallSystem.cpp | 27 ++++++++++++-- src/game/Game/KrakenSystem.cpp | 7 ++++ src/game/Game/PadSystem.cpp | 15 ++++++-- src/game/Game/ProjectileSystem.cpp | 60 +++++++++++++++++++----------- 10 files changed, 126 insertions(+), 29 deletions(-) create mode 100644 include/Game/EKrakenAttackEnd.h diff --git a/include/Game/BallSystem.h b/include/Game/BallSystem.h index 235c882..f6d2da1 100644 --- a/include/Game/BallSystem.h +++ b/include/Game/BallSystem.h @@ -30,6 +30,8 @@ #include "Game/EStickyAttachedToPad.h" #include "Game/EInkBlaster.h" #include "Game/EInkBlasterOver.h" +#include "Game/EKrakenAttack.h" +#include "Game/EKrakenAttackEnd.h" #include "Game/EStageCleared.h" #include "Game/EArrivedAtNewStage.h" #include "Game/EGameOver.h" @@ -109,6 +111,8 @@ private: bool m_InkBlaster = false; bool m_InkAttached = false; bool m_InkBlockedWaiting = false; + bool m_KrakenAttack = false; + double m_KrakenCharge = 0; bool m_Restarting = false; int m_StickyCounter = 3; bool m_GodMode = false; @@ -130,6 +134,8 @@ private: dd::EventRelay m_EStickyPad; dd::EventRelay m_EInkBlaster; dd::EventRelay m_EInkBlasterOver; + dd::EventRelay m_EKrakenAttack; + dd::EventRelay m_EKrakenAttackEnd; dd::EventRelay m_EPause; dd::EventRelay m_EResume; dd::EventRelay m_Contact; @@ -145,6 +151,8 @@ private: bool OnStickyPad(const dd::Events::StickyPad &event); bool OnInkBlaster(const dd::Events::InkBlaster &event); bool OnInkBlasterOver(const dd::Events::InkBlasterOver &event); + bool OnKrakenAttack(const dd::Events::KrakenAttack &event); + bool OnKrakenAttackEnd(const dd::Events::KrakenAttackEnd &event); bool OnPause(const dd::Events::Pause &event); bool OnResume(const dd::Events::Resume &event); bool OnActionButton(const dd::Events::ActionButton &event); diff --git a/include/Game/EKrakenAttackEnd.h b/include/Game/EKrakenAttackEnd.h new file mode 100644 index 0000000..eee5889 --- /dev/null +++ b/include/Game/EKrakenAttackEnd.h @@ -0,0 +1,25 @@ +// +// Created by Adniklastrator on 2015-10-21. +// + +#ifndef DAYDREAM_EKRAKENATTACKEND_H +#define DAYDREAM_EKRAKENATTACKEND_H + +#include "Core/EventBroker.h" + +namespace dd +{ + +namespace Events +{ + +struct KrakenAttackEnd : Event +{ + +}; + +} + +} + +#endif //DAYDREAM_EKRAKENATTACKEND_H diff --git a/include/Game/KrakenSystem.h b/include/Game/KrakenSystem.h index 3f32cf7..960f14c 100644 --- a/include/Game/KrakenSystem.h +++ b/include/Game/KrakenSystem.h @@ -21,6 +21,7 @@ #include "Physics/ECreateParticleSequence.h" #include "Game/EPause.h" #include "Game/EResume.h" +#include "Game/EComboEvent.h" #include "Game/EKrakenAppear.h" #include "Game/EKrakenAttack.h" #include "Game/EKrakenHit.h" diff --git a/include/Game/LevelSystem.h b/include/Game/LevelSystem.h index b93fc7b..0907e75 100755 --- a/include/Game/LevelSystem.h +++ b/include/Game/LevelSystem.h @@ -143,7 +143,7 @@ private: bool m_Initialized = false; bool m_Pause = false; int m_LooseBricks = 0; - int m_CurrentCluster = 1; + int m_CurrentCluster = 0; int m_CurrentLevel = 1; int m_MultiBalls = 0; int m_PowerUps = 0; diff --git a/include/Game/PadSystem.h b/include/Game/PadSystem.h index 204b56f..7547e81 100755 --- a/include/Game/PadSystem.h +++ b/include/Game/PadSystem.h @@ -43,6 +43,7 @@ #include "Game/EStickyAttachedToPad.h" #include "Game/EInkBlaster.h" #include "Game/EKrakenAttack.h" +#include "Game/EKrakenAttackEnd.h" #include "Game/EPowerUpTaken.h" #include "Game/EStageCleared.h" #include "Game/EPause.h" @@ -123,6 +124,7 @@ private: dd::EventRelay m_EPause; dd::EventRelay m_EResume; dd::EventRelay m_EKrakenAttack; + dd::EventRelay m_EKrakenAttackEnd; dd::EventRelay m_EStickyPad; dd::EventRelay m_EStickyAttachedToPad; dd::EventRelay m_EActionButton; @@ -140,6 +142,7 @@ private: bool OnPause(const dd::Events::Pause &event); bool OnResume(const dd::Events::Resume &event); bool OnKrakenAttack(const dd::Events::KrakenAttack &event); + bool OnKrakenAttackEnd(const dd::Events::KrakenAttackEnd &event); bool OnStickyPad(const dd::Events::StickyPad &event); bool OnStickyAttachedToPad(const dd::Events::StickyAttachedToPad &event); bool OnActionButton(const dd::Events::ActionButton &event); diff --git a/include/Game/ProjectileSystem.h b/include/Game/ProjectileSystem.h index 9491113..41e1900 100644 --- a/include/Game/ProjectileSystem.h +++ b/include/Game/ProjectileSystem.h @@ -19,6 +19,8 @@ #include "Game/EResume.h" #include "Game/EInkBlaster.h" #include "Game/EInkBlasterOver.h" +#include "Game/EKrakenAttack.h" +#include "Game/EKrakenAttackEnd.h" #include "Game/EActionButton.h" #include "Game/EHitPad.h" #include "Game/CProjectile.h" @@ -52,6 +54,7 @@ private: bool m_Pause = false; bool m_InkBlaster = false; bool m_SquidLoaded = false; + bool m_KrakenAttack = false; int m_Shots = 0; float m_InkBlasterSpeed = 5; EntityID m_InkBlastTemplate; @@ -61,6 +64,8 @@ private: dd::EventRelay m_EPause; dd::EventRelay m_EResume; dd::EventRelay m_EInkBlaster; + dd::EventRelay m_EKrakenAttack; + dd::EventRelay m_EKrakenAttackEnd; dd::EventRelay m_EHitPad; dd::EventRelay m_EActionButton; @@ -68,6 +73,8 @@ private: bool OnPause(const dd::Events::Pause &event); bool OnResume(const dd::Events::Resume &event); bool OnInkBlaster(const dd::Events::InkBlaster &event); + bool OnKrakenAttack(const dd::Events::KrakenAttack &event); + bool OnKrakenAttackEnd(const dd::Events::KrakenAttackEnd &event); bool OnHitPad(const dd::Events::HitPad &event); bool OnActionButton(const dd::Events::ActionButton &event); }; diff --git a/src/game/Game/BallSystem.cpp b/src/game/Game/BallSystem.cpp index ad75c92..98ccea0 100644 --- a/src/game/Game/BallSystem.cpp +++ b/src/game/Game/BallSystem.cpp @@ -21,6 +21,8 @@ void dd::Systems::BallSystem::Initialize() EVENT_SUBSCRIBE_MEMBER(m_EStickyPad, &BallSystem::OnStickyPad); EVENT_SUBSCRIBE_MEMBER(m_EInkBlaster, &BallSystem::OnInkBlaster); EVENT_SUBSCRIBE_MEMBER(m_EInkBlasterOver, &BallSystem::OnInkBlasterOver); + EVENT_SUBSCRIBE_MEMBER(m_EKrakenAttack, &BallSystem::OnKrakenAttack); + EVENT_SUBSCRIBE_MEMBER(m_EKrakenAttackEnd, &BallSystem::OnKrakenAttackEnd); EVENT_SUBSCRIBE_MEMBER(m_EPause, &BallSystem::OnPause); EVENT_SUBSCRIBE_MEMBER(m_EResume, &BallSystem::OnResume); EVENT_SUBSCRIBE_MEMBER(m_EActionButton, &BallSystem::OnActionButton); @@ -72,6 +74,11 @@ void dd::Systems::BallSystem::Update(double dt) { if (Lives() == 0) { + if (m_KrakenAttack) { + Events::KrakenAttackEnd e; + EventBroker->Publish(e); + } + Events::GameOver e; EventBroker->Publish(e); @@ -526,11 +533,25 @@ bool dd::Systems::BallSystem::OnInkBlasterOver(const dd::Events::InkBlasterOver return true; } +bool dd::Systems::BallSystem::OnKrakenAttack(const dd::Events::KrakenAttack &event) +{ + m_KrakenAttack = true; + return true; +} + +bool dd::Systems::BallSystem::OnKrakenAttackEnd(const dd::Events::KrakenAttackEnd &event) +{ + m_KrakenAttack = false; + return true; +} + bool dd::Systems::BallSystem::OnActionButton(const dd::Events::ActionButton &event) { - if (!m_StageBlockedWaiting) { - if (!m_InkBlockedWaiting) { - m_Waiting = false; + if (!m_KrakenAttack) { + if (!m_StageBlockedWaiting) { + if (!m_InkBlockedWaiting) { + m_Waiting = false; + } } } return true; diff --git a/src/game/Game/KrakenSystem.cpp b/src/game/Game/KrakenSystem.cpp index 56a1dae..5b391bb 100644 --- a/src/game/Game/KrakenSystem.cpp +++ b/src/game/Game/KrakenSystem.cpp @@ -95,6 +95,7 @@ void dd::Systems::KrakenSystem::UpdateEntity(double dt, EntityID entity, EntityI } break; case 2: // Grabbing + m_NumberOfActions++; kraken->CurrentAction = 5; krakenAttack.ChargeUpdate = 0; krakenAttack.KrakenStrength = 0.1; @@ -103,6 +104,7 @@ void dd::Systems::KrakenSystem::UpdateEntity(double dt, EntityID entity, EntityI break; case 3: // Brick Generating { + m_NumberOfActions++; kraken->CurrentAction = 1; Events::BrickGenerating e; e.Origin1 = glm::vec3(-5, 7, -10); @@ -187,6 +189,11 @@ bool dd::Systems::KrakenSystem::OnContact(const dd::Events::Contact &event) auto ball = m_World->GetComponent(otherEntitiy); if (ball != nullptr) { + ball->Combo += 1; + Events::ComboEvent ec; + ec.Combo = ball->Combo; + ec.Ball = otherEntitiy; + EventBroker->Publish(ec); Events::KrakenHit e; e.Kraken = krakenEntity; e.Hitter = otherEntitiy; diff --git a/src/game/Game/PadSystem.cpp b/src/game/Game/PadSystem.cpp index 3992565..ce25452 100755 --- a/src/game/Game/PadSystem.cpp +++ b/src/game/Game/PadSystem.cpp @@ -34,6 +34,7 @@ void dd::Systems::PadSystem::Initialize() EVENT_SUBSCRIBE_MEMBER(m_EPause, &PadSystem::OnPause); EVENT_SUBSCRIBE_MEMBER(m_EResume, &PadSystem::OnResume); EVENT_SUBSCRIBE_MEMBER(m_EKrakenAttack, &PadSystem::OnKrakenAttack); + EVENT_SUBSCRIBE_MEMBER(m_EKrakenAttackEnd, &PadSystem::OnKrakenAttackEnd); EVENT_SUBSCRIBE_MEMBER(m_EStickyPad, &PadSystem::OnStickyPad); EVENT_SUBSCRIBE_MEMBER(m_EStickyAttachedToPad, &PadSystem::OnStickyAttachedToPad); EVENT_SUBSCRIBE_MEMBER(m_EActionButton, &PadSystem::OnActionButton); @@ -479,13 +480,21 @@ bool dd::Systems::PadSystem::OnKrakenAttack(const dd::Events::KrakenAttack &even SetAcceleration(acceleration); } else if (m_KrakenCharge >= 1) { m_KrakenAttack = false; - m_KrakenCharge = 0; - m_KrakenStrength = 0; - m_PlayerStrength = 0; + Events::KrakenAttackEnd e; + EventBroker->Publish(e); } return true; } +bool dd::Systems::PadSystem::OnKrakenAttackEnd(const dd::Events::KrakenAttackEnd &event) +{ + m_KrakenAttack = false; + m_KrakenCharge = 0; + m_KrakenStrength = 0; + m_PlayerStrength = 0; + return true; +} + bool dd::Systems::PadSystem::OnStickyPad(const dd::Events::StickyPad &event) { return true; diff --git a/src/game/Game/ProjectileSystem.cpp b/src/game/Game/ProjectileSystem.cpp index eba7b43..05266e1 100644 --- a/src/game/Game/ProjectileSystem.cpp +++ b/src/game/Game/ProjectileSystem.cpp @@ -13,6 +13,8 @@ void dd::Systems::ProjectileSystem::Initialize() EVENT_SUBSCRIBE_MEMBER(m_EPause, &ProjectileSystem::OnPause); EVENT_SUBSCRIBE_MEMBER(m_EResume, &ProjectileSystem::OnResume); EVENT_SUBSCRIBE_MEMBER(m_EInkBlaster, &ProjectileSystem::OnInkBlaster); + EVENT_SUBSCRIBE_MEMBER(m_EKrakenAttack, &ProjectileSystem::OnKrakenAttack); + EVENT_SUBSCRIBE_MEMBER(m_EKrakenAttackEnd, &ProjectileSystem::OnKrakenAttackEnd); EVENT_SUBSCRIBE_MEMBER(m_EHitPad, &ProjectileSystem::OnHitPad); EVENT_SUBSCRIBE_MEMBER(m_EActionButton, &ProjectileSystem::OnActionButton); @@ -113,34 +115,48 @@ bool dd::Systems::ProjectileSystem::OnHitPad(const dd::Events::HitPad &event) return true; } +bool dd::Systems::ProjectileSystem::OnKrakenAttack(const dd::Events::KrakenAttack &event) +{ + m_KrakenAttack = true; + return true; +} + +bool dd::Systems::ProjectileSystem::OnKrakenAttackEnd(const dd::Events::KrakenAttackEnd &event) +{ + m_KrakenAttack = false; + return true; +} + bool dd::Systems::ProjectileSystem::OnActionButton(const dd::Events::ActionButton &event) { - if (m_InkBlaster && m_SquidLoaded) { - auto ent = m_World->CloneEntity(m_InkBlastTemplate); - m_World->RemoveComponent(ent); - auto projectile = m_World->GetComponent(ent); - projectile->Speed = m_InkBlasterSpeed; - auto transform = m_World->GetComponent(ent); - transform->Position = event.Position; - transform->Velocity = glm::vec3(0, projectile->Speed, 0); - m_Shots--; - if (m_Shots <= 0) { - auto ball = m_World->GetComponent(m_AttachedSquid); - m_InkBlaster = false; - m_SquidLoaded = false; - ball->InkBlaster = false; - ball->Sticky = false; - ball->Waiting = true; - - { - Events::InkBlasterOver e; - e.Ball = m_AttachedSquid; - EventBroker->Publish(e); - } + if (!m_KrakenAttack) { + if (m_InkBlaster && m_SquidLoaded) { + auto ent = m_World->CloneEntity(m_InkBlastTemplate); + m_World->RemoveComponent(ent); + auto projectile = m_World->GetComponent(ent); + projectile->Speed = m_InkBlasterSpeed; + auto transform = m_World->GetComponent(ent); + transform->Position = event.Position; + transform->Velocity = glm::vec3(0, projectile->Speed, 0); + m_Shots--; + if (m_Shots <= 0) { + auto ball = m_World->GetComponent(m_AttachedSquid); + m_InkBlaster = false; + m_SquidLoaded = false; + ball->InkBlaster = false; + ball->Sticky = false; + ball->Waiting = true; + + { + Events::InkBlasterOver e; + e.Ball = m_AttachedSquid; + EventBroker->Publish(e); + } { Events::ActionButton e; EventBroker->Publish(e); } + } } } return true; From df264fb732a231d05d0ef0bd700346b3b147fda4 Mon Sep 17 00:00:00 2001 From: tleety Date: Wed, 21 Oct 2015 15:16:34 +0200 Subject: [PATCH 2/8] Added a ink brick texture --- assets/Models/Brick/InkBrick.png | Bin 0 -> 39404 bytes src/game/Game/LevelSystem.cpp | 1 + 2 files changed, 1 insertion(+) create mode 100755 assets/Models/Brick/InkBrick.png diff --git a/assets/Models/Brick/InkBrick.png b/assets/Models/Brick/InkBrick.png new file mode 100755 index 0000000000000000000000000000000000000000..459f7e21c0ff7d8e3cc06516a03318d8d8568d85 GIT binary patch literal 39404 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 PpV_*3`;So@O@8?=CUNW+ literal 0 HcmV?d00001 diff --git a/src/game/Game/LevelSystem.cpp b/src/game/Game/LevelSystem.cpp index 15f0e4d..546ab7d 100755 --- a/src/game/Game/LevelSystem.cpp +++ b/src/game/Game/LevelSystem.cpp @@ -439,6 +439,7 @@ EntityID dd::Systems::LevelSystem::CreateBrick(int row, int line, glm::vec2 spac } else if (typeInt == InkBlasterBrick) { cBrick->Type = InkBlasterBrick; auto type = m_World->AddComponent(brick); + //model->ModelFile = "Models/Brick/InkBrick.obj"; model->Color = glm::vec4(0.1f, 0.1f, 0.1f, 1.0f); } else if (typeInt == KrakenAttackBrick) { cBrick->Type = KrakenAttackBrick; From 1a6f18da94d70354c11697fba4aea3765451b27d Mon Sep 17 00:00:00 2001 From: PlatinumSkink Date: Wed, 21 Oct 2015 16:53:04 +0200 Subject: [PATCH 3/8] Random direction upon ResetBall, turn in direction. --- include/Game/BallSystem.h | 6 ++++++ include/Game/LevelSystem.h | 2 +- src/game/Game/BallSystem.cpp | 22 +++++++++++++++++----- 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/include/Game/BallSystem.h b/include/Game/BallSystem.h index ddee3fd..46e50ef 100644 --- a/include/Game/BallSystem.h +++ b/include/Game/BallSystem.h @@ -1,6 +1,8 @@ #ifndef DAYDREAM_BALLSYSTEM_H #define DAYDREAM_BALLSYSTEM_H +#include + #include "Core/System.h" #include "Core/World.h" #include "Core/EventBroker.h" @@ -99,6 +101,8 @@ public: void SetPause(const bool& pause) { m_Pause = pause; } private: + std::mt19937 m_RandomGenerator; + float m_XMovementMultiplier = 2.f; float m_EdgeX = 3.4f; //Actually 3.2, but anyways. float m_EdgeY = 5.2f; @@ -118,6 +122,8 @@ private: int m_StickyCounter = 3; bool m_GodMode = false; + bool m_First = true; + bool m_StageBlockedWaiting = false; glm::vec3 m_SavedSpeed; diff --git a/include/Game/LevelSystem.h b/include/Game/LevelSystem.h index cc5d75c..95a3397 100755 --- a/include/Game/LevelSystem.h +++ b/include/Game/LevelSystem.h @@ -144,7 +144,7 @@ private: bool m_Initialized = false; bool m_Pause = false; int m_LooseBricks = 0; - int m_CurrentCluster = 1; + int m_CurrentCluster = 0; int m_CurrentLevel = 1; int m_MultiBalls = 0; int m_PowerUps = 0; diff --git a/src/game/Game/BallSystem.cpp b/src/game/Game/BallSystem.cpp index a6c509e..31377f1 100644 --- a/src/game/Game/BallSystem.cpp +++ b/src/game/Game/BallSystem.cpp @@ -12,7 +12,8 @@ void dd::Systems::BallSystem::RegisterComponents(ComponentFactory *cf) void dd::Systems::BallSystem::Initialize() { - + std::random_device rd; + m_RandomGenerator = std::mt19937(rd()); EVENT_SUBSCRIBE_MEMBER(m_Contact, &BallSystem::Contact); EVENT_SUBSCRIBE_MEMBER(m_ELifeLost, &BallSystem::OnLifeLost); EVENT_SUBSCRIBE_MEMBER(m_EMultiBallLost, &BallSystem::OnMultiBallLost); @@ -37,6 +38,7 @@ void dd::Systems::BallSystem::Initialize() transform->Position = glm::vec3(-20.f, 0.26f, -10.f); transform->Scale = glm::vec3(0.3f, 0.3f, 0.3f); transform->Velocity = glm::vec3(0.f, 0.f, 0.f); + transform->Orientation = glm::quat(); auto model = m_World->AddComponent(ent); model->ModelFile = "Models/Sid/Sid.dae"; auto animation = m_World->AddComponent(ent); @@ -69,13 +71,14 @@ void dd::Systems::BallSystem::Initialize() CreateLife(i); } + SetReplaceBall(true); + m_GodMode = ResourceManager::Load("Config.ini")->GetValue("Cheat.GodMode", false); } void dd::Systems::BallSystem::Update(double dt) { - if (Lives() == 0) - { + if (Lives() == 0) { if (m_KrakenAttack) { Events::KrakenAttackEnd e; EventBroker->Publish(e); @@ -133,7 +136,11 @@ void dd::Systems::BallSystem::UpdateEntity(double dt, EntityID entity, EntityID if (ReplaceBall()) { SetReplaceBall(false); m_Waiting = true; + std::uniform_real_distribution dist(-0.5f, 0.5f); + float random = dist(m_RandomGenerator); + ballComponent->SavedSpeed = glm::vec3(random, 1, 0.f); ballComponent->Waiting = true; + auto transform = m_World->GetComponent(entity); } if (ballComponent->Waiting) { @@ -141,12 +148,17 @@ void dd::Systems::BallSystem::UpdateEntity(double dt, EntityID entity, EntityID m_Restarting = false; ballComponent->Waiting = false; auto transform = m_World->GetComponent(entity); - transform->Velocity = glm::normalize(glm::vec3(0.5f, 1, 0.f)) * ballComponent->Speed; + /*std::uniform_real_distribution dist(-0.5f, 0.5f); + float random = dist(m_RandomGenerator);*/ + transform->Velocity = glm::normalize(ballComponent->SavedSpeed) * ballComponent->Speed; } else if (!ballComponent->Sticky) { auto transform = m_World->GetComponent(entity); transform->Velocity = glm::vec3(0.f, 0.f, 0.f); //transform->Position = glm::vec3(0.0f, -3.f, -10.f); - transform->Orientation = glm::quat(); + if (m_First) { + transform->Orientation = glm::quat(); + m_First = false; + } return; } } From 59c23026d2684ab66ae927777da821825fcbf939 Mon Sep 17 00:00:00 2001 From: PlatinumSkink Date: Thu, 22 Oct 2015 10:34:22 +0200 Subject: [PATCH 4/8] Put all LifeStuff into a new LifeSystem. Appears to be working. --- include/Core/Engine.h | 4 ++ include/Game/BallSystem.h | 14 ++--- include/Game/LevelSystem.h | 2 +- include/Game/LifeSystem.h | 75 ++++++++++++++++++++++++++ src/game/Game/BallSystem.cpp | 60 +-------------------- src/game/Game/LifeSystem.cpp | 101 +++++++++++++++++++++++++++++++++++ 6 files changed, 186 insertions(+), 70 deletions(-) create mode 100644 include/Game/LifeSystem.h create mode 100644 src/game/Game/LifeSystem.cpp diff --git a/include/Core/Engine.h b/include/Core/Engine.h index 1e90272..807fccd 100755 --- a/include/Core/Engine.h +++ b/include/Core/Engine.h @@ -55,6 +55,7 @@ #include "Game/CTravels.h" #include "Game/CStickyAim.h" #include "Game/BallSystem.h" +#include "Game/LifeSystem.h" #include "Game/HitLagSystem.h" #include "Game/TravellingSystem.h" #include "Game/LifebuoySystem.h" @@ -199,6 +200,9 @@ public: m_World->SystemFactory.Register( [this]() { return new Systems::WaterSystem(m_World.get(), m_EventBroker); }); m_World->AddSystem(); + m_World->SystemFactory.Register( + [this]() { return new Systems::LifeSystem(m_World.get(), m_EventBroker); }); + m_World->AddSystem(); m_World->ComponentFactory.Register(); m_World->ComponentFactory.Register(); diff --git a/include/Game/BallSystem.h b/include/Game/BallSystem.h index 46e50ef..eb159db 100644 --- a/include/Game/BallSystem.h +++ b/include/Game/BallSystem.h @@ -10,14 +10,17 @@ #include "Core/CTemplate.h" #include "Core/ResourceManager.h" #include "Core/ConfigFile.h" + #include "Physics/CPhysics.h" #include "Physics/CCircleShape.h" #include "Physics/CRectangleShape.h" #include "Physics/EContact.h" + #include "Rendering/CModel.h" #include "Rendering/CSprite.h" #include "Rendering/CPointLight.h" #include "Rendering/CAnimation.h" + #include "Game/CBall.h" #include "Game/CPowerUp.h" #include "Game/CLife.h" @@ -43,6 +46,7 @@ #include "Game/EHitLag.h" #include "Game/EActionButton.h" #include "Game/ELifebuoyHit.h" + #include "Physics/ECreateParticleSequence.h" #include "Sound/CCollisionSound.h" @@ -79,7 +83,6 @@ public: void OnEntityRemoved(EntityID entity) override; EntityID CreateBall(); - void CreateLife(int); EntityID Ball() { return m_Ball; }; void SetBall(const EntityID& ball) { m_Ball = ball; } @@ -91,10 +94,6 @@ public: void SetEdgeY(const float& edgeY) { m_EdgeY = edgeY; } int& MultiBalls() { return m_MultiBalls; } void SetMultiBalls(const int& multiBalls) { m_MultiBalls = multiBalls; } - int& Lives() { return m_Lives; } - void SetLives(const int& lives) { m_Lives = lives; } - int& PastLives() { return m_PastLives; } - void SetPastLives(const int& pastLives) { m_PastLives = pastLives; } bool ReplaceBall() const { return m_ReplaceBall; } void SetReplaceBall(const bool& replaceBall) { m_ReplaceBall = replaceBall; } bool IsPaused() const { return m_Pause; } @@ -107,8 +106,6 @@ private: float m_EdgeX = 3.4f; //Actually 3.2, but anyways. float m_EdgeY = 5.2f; int m_MultiBalls = 0; - int m_Lives = 3; - int m_PastLives = 3; bool m_ReplaceBall = false; bool m_Pause = false; bool m_Waiting = true; @@ -120,7 +117,6 @@ private: double m_KrakenCharge = 0; bool m_Restarting = false; int m_StickyCounter = 3; - bool m_GodMode = false; bool m_First = true; @@ -134,7 +130,6 @@ private: std::unordered_map> m_Contacts; void ResolveContacts(); - dd::EventRelay m_ELifeLost; dd::EventRelay m_EMultiBallLost; dd::EventRelay m_EResetBall; dd::EventRelay m_EMultiBall; @@ -151,7 +146,6 @@ private: dd::EventRelay m_EArrivedAtNewStage; bool Contact(const Events::Contact &event); - bool OnLifeLost(const dd::Events::LifeLost &event); bool OnMultiBallLost(const dd::Events::MultiBallLost &event); bool OnResetBall(const dd::Events::ResetBall &event); bool OnMultiBall(const dd::Events::MultiBall &event); diff --git a/include/Game/LevelSystem.h b/include/Game/LevelSystem.h index 95a3397..cc5d75c 100755 --- a/include/Game/LevelSystem.h +++ b/include/Game/LevelSystem.h @@ -144,7 +144,7 @@ private: bool m_Initialized = false; bool m_Pause = false; int m_LooseBricks = 0; - int m_CurrentCluster = 0; + int m_CurrentCluster = 1; int m_CurrentLevel = 1; int m_MultiBalls = 0; int m_PowerUps = 0; diff --git a/include/Game/LifeSystem.h b/include/Game/LifeSystem.h new file mode 100644 index 0000000..249e9ee --- /dev/null +++ b/include/Game/LifeSystem.h @@ -0,0 +1,75 @@ +// +// Created by Adniklastrator on 2015-10-22. +// + +#ifndef DAYDREAM_LIFESYSTEM_H +#define DAYDREAM_LIFESYSTEM_H + + +#include "Core/System.h" +#include "Core/CTransform.h" +#include "Core/CTemplate.h" +#include "Core/EventBroker.h" +#include "Core/World.h" + +#include "Core/ConfigFile.h" + +#include "Transform/EMove.h" +#include "Rendering/CModel.h" + +#include "Game/CLife.h" +#include "Game/EPause.h" +#include "Game/EResume.h" +#include "Game/ELifeLost.h" +#include "Game/EGameOver.h" +#include "Game/EKrakenAttackEnd.h" + + +namespace dd +{ + +namespace Systems +{ + +class LifeSystem : public System +{ +public: + LifeSystem(World* world, std::shared_ptr eventBroker) + : System(world, eventBroker) + { } + + + void Initialize() override; + void Update(double dt) override; + void UpdateEntity(double dt, EntityID entity, EntityID parent) override; + + bool IsPaused() const { return m_Pause; } + void SetPause(const bool& pause) { m_Pause = pause; } + int& Lives() { return m_Lives; } + void SetLives(const int& lives) { m_Lives = lives; } + int& PastLives() { return m_PastLives; } + void SetPastLives(const int& pastLives) { m_PastLives = pastLives; } + +private: + bool m_Pause = false; + int m_Lives = 3; + int m_PastLives = 3; + + bool m_GodMode = false; + + void CreateLife(int); + + dd::EventRelay m_EPause; + dd::EventRelay m_EResume; + dd::EventRelay m_ELifeLost; + + bool OnPause(const dd::Events::Pause &event); + bool OnResume(const dd::Events::Resume &event); + bool OnLifeLost(const dd::Events::LifeLost &event); +}; + +} + +} + +#endif //DAYDREAM_LIFESYSTEM_H diff --git a/src/game/Game/BallSystem.cpp b/src/game/Game/BallSystem.cpp index 31377f1..786962b 100644 --- a/src/game/Game/BallSystem.cpp +++ b/src/game/Game/BallSystem.cpp @@ -15,7 +15,6 @@ void dd::Systems::BallSystem::Initialize() std::random_device rd; m_RandomGenerator = std::mt19937(rd()); EVENT_SUBSCRIBE_MEMBER(m_Contact, &BallSystem::Contact); - EVENT_SUBSCRIBE_MEMBER(m_ELifeLost, &BallSystem::OnLifeLost); EVENT_SUBSCRIBE_MEMBER(m_EMultiBallLost, &BallSystem::OnMultiBallLost); EVENT_SUBSCRIBE_MEMBER(m_EResetBall, &BallSystem::OnResetBall); EVENT_SUBSCRIBE_MEMBER(m_EMultiBall, &BallSystem::OnMultiBall); @@ -67,33 +66,11 @@ void dd::Systems::BallSystem::Initialize() transform2->Velocity = glm::vec3(0.0f, -10.f, 0.f); } - for (int i = 0; i < Lives(); i++) { - CreateLife(i); - } - SetReplaceBall(true); - - m_GodMode = ResourceManager::Load("Config.ini")->GetValue("Cheat.GodMode", false); } void dd::Systems::BallSystem::Update(double dt) { - if (Lives() == 0) { - if (m_KrakenAttack) { - Events::KrakenAttackEnd e; - EventBroker->Publish(e); - } - - Events::GameOver e; - EventBroker->Publish(e); - - Events::Pause p; - p.Type = "All"; - EventBroker->Publish(p); - - //TODO: Make this not so ugly - SetLives(-1); - } ResolveContacts(); } @@ -189,7 +166,7 @@ void dd::Systems::BallSystem::UpdateEntity(double dt, EntityID entity, EntityID m_World->RemoveEntity(entity); Events::MultiBallLost e; EventBroker->Publish(e); - } else if (Lives() == PastLives() && !m_Restarting) { + } else if (!m_Restarting) { //If we lose lives when we shouldn't, look here. Events::ResetBall be; EventBroker->Publish(be); Events::LifeLost e; @@ -216,16 +193,6 @@ void dd::Systems::BallSystem::UpdateEntity(double dt, EntityID entity, EntityID }*/ } - if (Lives() != PastLives()) { - auto life = m_World->GetComponent(entity); - if (life != nullptr) { - if (life->Number + 1 == PastLives()) { - m_World->RemoveEntity(entity); - SetPastLives(Lives()); - } - } - } - if (ballComponent != nullptr) { if (!ballComponent->Sticky) { @@ -452,31 +419,6 @@ EntityID dd::Systems::BallSystem::CreateBall() return ent; } -void dd::Systems::BallSystem::CreateLife(int number) -{ - auto life = m_World->CreateEntity(); - std::shared_ptr transform = m_World->AddComponent(life); - transform->Position = glm::vec3(-1.5f + number * 0.15f, -2.f, -5.f); - transform->Scale = glm::vec3(0.1f, 0.1f, 0.1f); - - std::shared_ptr lifeNr = m_World->AddComponent(life); - lifeNr->Number = number; - - auto model = m_World->AddComponent(life); - model->ModelFile = "Models/Sid/Sid.dae"; - - - m_World->CommitEntity(life); -} - -bool dd::Systems::BallSystem::OnLifeLost(const dd::Events::LifeLost &event) -{ - if (!m_GodMode){ - SetLives(Lives() - 1); - } - return true; -} - bool dd::Systems::BallSystem::OnMultiBallLost(const dd::Events::MultiBallLost &event) { SetMultiBalls(MultiBalls() - 1); diff --git a/src/game/Game/LifeSystem.cpp b/src/game/Game/LifeSystem.cpp new file mode 100644 index 0000000..968ed17 --- /dev/null +++ b/src/game/Game/LifeSystem.cpp @@ -0,0 +1,101 @@ +// +// Created by Adniklastrator on 2015-10-13. +// + +#include "PrecompiledHeader.h" +#include "Game/LifeSystem.h" + +void dd::Systems::LifeSystem::Initialize() +{ + EVENT_SUBSCRIBE_MEMBER(m_EPause, &LifeSystem::OnPause); + EVENT_SUBSCRIBE_MEMBER(m_EResume, &LifeSystem::OnResume); + EVENT_SUBSCRIBE_MEMBER(m_ELifeLost, &LifeSystem::OnLifeLost); + + for (int i = 0; i < Lives(); i++) { + CreateLife(i); + } + + m_GodMode = ResourceManager::Load("Config.ini")->GetValue("Cheat.GodMode", false); +} + +void dd::Systems::LifeSystem::Update(double dt) +{ + if (m_Pause) { + return; + } + if (Lives() < 0) { + Events::KrakenAttackEnd ek; + EventBroker->Publish(ek); + + Events::GameOver e; + EventBroker->Publish(e); + + Events::Pause p; + p.Type = "All"; + EventBroker->Publish(p); + + //TODO: Make this not so ugly + SetLives(3); + } +} + +void dd::Systems::LifeSystem::UpdateEntity(double dt, EntityID entity, EntityID parent) +{ + if (m_Pause) { + return; + } + + auto templateCheck = m_World->GetComponent(entity); + if (templateCheck != nullptr){ return; } + + if (Lives() != PastLives()) { + auto life = m_World->GetComponent(entity); + if (life != nullptr) { + if (life->Number + 1 == PastLives()) { + m_World->RemoveEntity(entity); + SetPastLives(Lives()); + } + } + } +} + +void dd::Systems::LifeSystem::CreateLife(int number) +{ + auto life = m_World->CreateEntity(); + std::shared_ptr transform = m_World->AddComponent(life); + transform->Position = glm::vec3(-1.5f + number * 0.15f, -2.f, -5.f); + transform->Scale = glm::vec3(0.1f, 0.1f, 0.1f); + + std::shared_ptr lifeNr = m_World->AddComponent(life); + lifeNr->Number = number; + + auto model = m_World->AddComponent(life); + model->ModelFile = "Models/Sid/Sid.dae"; + + m_World->CommitEntity(life); +} + +bool dd::Systems::LifeSystem::OnLifeLost(const dd::Events::LifeLost &event) +{ + if (!m_GodMode){ + SetLives(Lives() - 1); + } + return true; +} + +bool dd::Systems::LifeSystem::OnPause(const dd::Events::Pause &event) +{ + /*if (event.Type != "LifeSystem" && event.Type != "All") { + return false; + }*/ + m_Pause = true; + return true; +} +bool dd::Systems::LifeSystem::OnResume(const dd::Events::Resume &event) +{ + /*if (event.Type != "LifeSystem" && event.Type != "All") { + return false; + }*/ + m_Pause = false; + return true; +} \ No newline at end of file From de8209bdda1c72fa03ac6dd4ecd6dd8e3e27ee08 Mon Sep 17 00:00:00 2001 From: tleety Date: Thu, 22 Oct 2015 11:12:11 +0200 Subject: [PATCH 5/8] Kraken arm now splashes around when it arrives --- include/Game/PadSystem.h | 3 ++- src/game/Game/LevelSystem.cpp | 4 ++-- src/game/Game/PadSystem.cpp | 29 +++++++++++++++++++++++++---- src/game/Physics/PhysicsSystem.cpp | 1 + 4 files changed, 30 insertions(+), 7 deletions(-) diff --git a/include/Game/PadSystem.h b/include/Game/PadSystem.h index e799045..981bda5 100755 --- a/include/Game/PadSystem.h +++ b/include/Game/PadSystem.h @@ -104,7 +104,8 @@ private: double m_KrakenStrength = 0; double m_PlayerStrength = 0; float m_Edge = 2.8f; - EntityID m_KrakenArm; + EntityID m_KrakenArm = NULL; + EntityID m_KrakenArmHitbox = NULL; Components::Transform* m_Transform = nullptr; Components::Pad* m_Pad = nullptr; std::shared_ptr m_StickTransform; diff --git a/src/game/Game/LevelSystem.cpp b/src/game/Game/LevelSystem.cpp index 546ab7d..718d2e9 100755 --- a/src/game/Game/LevelSystem.cpp +++ b/src/game/Game/LevelSystem.cpp @@ -437,7 +437,7 @@ EntityID dd::Systems::LevelSystem::CreateBrick(int row, int line, glm::vec2 spac auto type = m_World->AddComponent(brick); model->ModelFile = "Models/Brick/StickyBrick.obj"; } else if (typeInt == InkBlasterBrick) { - cBrick->Type = InkBlasterBrick; + cBrick->Type = InkBlasterBrick; auto type = m_World->AddComponent(brick); //model->ModelFile = "Models/Brick/InkBrick.obj"; model->Color = glm::vec4(0.1f, 0.1f, 0.1f, 1.0f); @@ -1098,7 +1098,7 @@ void dd::Systems::LevelSystem::GetNextLevel() 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 2, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0}; color = {w, w, w, w, w, w, w, diff --git a/src/game/Game/PadSystem.cpp b/src/game/Game/PadSystem.cpp index 1d365e1..5814179 100755 --- a/src/game/Game/PadSystem.cpp +++ b/src/game/Game/PadSystem.cpp @@ -473,16 +473,35 @@ bool dd::Systems::PadSystem::OnKrakenAttack(const dd::Events::KrakenAttack &even transform->Velocity = glm::vec3(0, 0, 0); acceleration = glm::vec3(0, 0, 0); - + LOG_INFO("Kraken arm duuude"); if (!m_KrakenArm){ + LOG_INFO("InKrakenArmDuuude"); m_KrakenArm = m_World->CreateEntity(Entity()); auto transform = m_World->AddComponent(m_KrakenArm); transform->Position = glm::vec3(1.f, -3.0f, 0.f); auto model = m_World->AddComponent(m_KrakenArm); - model->ModelFile = "Models/kraken/Arm.dae"; - auto animation = m_World->AddComponent(m_KrakenArm); - animation->Speed = 1.0f; + model->ModelFile = "Models/Kraken/Arm.dae"; + auto animation = m_World->AddComponent(m_KrakenArm); + animation->Speed = 1.0f; m_World->CommitEntity(m_KrakenArm); + + m_KrakenArmHitbox = m_World->CreateEntity(); + auto hb_transform = m_World->AddComponent(m_KrakenArmHitbox); + hb_transform->Position = transform->Position + glm::vec3(-1.f, -5.0f, -10.f); + //hb_transform->Position = glm::vec3(-2.f, -8.0f, -10.f); + hb_transform->Scale = glm::vec3(2.5f, 2.5f, 1.f); + hb_transform->Velocity = glm::vec3(0.f, 10.f, 0.f); + //auto hb_sprite = m_World->AddComponent(m_KrakenArmHitbox); + //hb_sprite->SpriteFile = "Textures/Core/ErrorTexture.png"; + auto hb_physics = m_World->AddComponent(m_KrakenArmHitbox); + hb_physics->Calculate = true; + hb_physics->CollisionType = CollisionType::Type::Static; + hb_physics->Category = CollisionLayer::Type::Other; + hb_physics->Mask = CollisionLayer::Type::Water; + hb_physics->GravityScale = 0.f; + auto hb_HitBox = m_World->AddComponent(m_KrakenArmHitbox); + hb_HitBox->Radius = 1.25f; + m_World->CommitEntity(m_KrakenArmHitbox); } SetTransform(transform); @@ -494,7 +513,9 @@ bool dd::Systems::PadSystem::OnKrakenAttack(const dd::Events::KrakenAttack &even m_PlayerStrength = 0; m_World->RemoveEntity(m_KrakenArm); + m_World->RemoveEntity(m_KrakenArmHitbox); m_KrakenArm = NULL; + m_KrakenArmHitbox = NULL; } return true; diff --git a/src/game/Physics/PhysicsSystem.cpp b/src/game/Physics/PhysicsSystem.cpp index ce67687..794302c 100755 --- a/src/game/Physics/PhysicsSystem.cpp +++ b/src/game/Physics/PhysicsSystem.cpp @@ -37,6 +37,7 @@ void dd::Systems::PhysicsSystem::InitializeWater() m_ParticleSystemDef.radius = radius; m_ParticleSystemDef.gravityScale = gravityScale; m_ParticleSystemDef.density = 4.f; + m_ParticleSystemDef.surfaceTensionNormalStrength = 0.07; m_WaterParticleSystem = m_PhysicsWorld->CreateParticleSystem(&m_ParticleSystemDef); } From 6b5c153c5d174f8d10d605e9ae660d8f73303f00 Mon Sep 17 00:00:00 2001 From: tleety Date: Thu, 22 Oct 2015 11:53:36 +0200 Subject: [PATCH 6/8] Stopped kraken arm from looping, now it dissapears instead --- src/game/Game/PadSystem.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/game/Game/PadSystem.cpp b/src/game/Game/PadSystem.cpp index 4b75394..4b1665b 100755 --- a/src/game/Game/PadSystem.cpp +++ b/src/game/Game/PadSystem.cpp @@ -484,6 +484,7 @@ bool dd::Systems::PadSystem::OnKrakenAttack(const dd::Events::KrakenAttack &even model->ModelFile = "Models/Kraken/Arm.dae"; auto animation = m_World->AddComponent(m_KrakenArm); animation->Speed = 1.0f; + animation->Loop = false; m_World->CommitEntity(m_KrakenArm); m_KrakenArmHitbox = m_World->CreateEntity(); From 54f8fcd1853d28568094c92be0c6edc5cc2a059a Mon Sep 17 00:00:00 2001 From: PlatinumSkink Date: Thu, 22 Oct 2015 14:04:36 +0200 Subject: [PATCH 7/8] RaiseWater implemented. Set Debug RaiseWater to true to activate it. And fixed second stage crashing. --- include/Core/Engine.h | 2 ++ include/Game/CBall.h | 2 +- include/Game/CBrickPart.h | 3 +- include/Game/CNewWaterVolume.h | 25 ++++++++++++++ include/Game/LevelSystem.h | 2 +- include/Game/PadSystem.h | 3 ++ include/Game/TravellingSystem.h | 1 + include/Game/WaterSystem.h | 11 +++++++ src/game/Game/BallSystem.cpp | 25 ++------------ src/game/Game/KrakenSystem.cpp | 14 ++++---- src/game/Game/LevelSystem.cpp | 42 ++++++++++++------------ src/game/Game/LifeSystem.cpp | 3 +- src/game/Game/PadSystem.cpp | 20 +++++++----- src/game/Game/WaterSystem.cpp | 58 ++++++++++++++++++++++++++++++--- 14 files changed, 143 insertions(+), 68 deletions(-) create mode 100644 include/Game/CNewWaterVolume.h diff --git a/include/Core/Engine.h b/include/Core/Engine.h index 807fccd..2dc5bf7 100755 --- a/include/Core/Engine.h +++ b/include/Core/Engine.h @@ -51,6 +51,7 @@ #include "Game/CBrickPart.h" #include "Game/CWall.h" #include "Game/CKraken.h" +#include "Game/CNewWaterVolume.h" #include "Game/CBackground.h" #include "Game/CTravels.h" #include "Game/CStickyAim.h" @@ -149,6 +150,7 @@ 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(); diff --git a/include/Game/CBall.h b/include/Game/CBall.h index 738616d..9a7933f 100644 --- a/include/Game/CBall.h +++ b/include/Game/CBall.h @@ -23,7 +23,7 @@ struct Ball : Component bool InkBlaster = false; bool Sticky = false; glm::vec3 StickyPlacement = glm::vec3(0, 0, 0); - glm::vec3 SavedSpeed = glm::vec3(0, 0, 0); + glm::vec3 SavedSpeed = glm::vec3(0, 1, 0); }; } diff --git a/include/Game/CBrickPart.h b/include/Game/CBrickPart.h index ff7a532..914d998 100644 --- a/include/Game/CBrickPart.h +++ b/include/Game/CBrickPart.h @@ -15,7 +15,8 @@ namespace Components struct BrickPart : Component { - + bool Submerged = false; + int NumberOfPartsInBrick; }; } diff --git a/include/Game/CNewWaterVolume.h b/include/Game/CNewWaterVolume.h new file mode 100644 index 0000000..fc3031f --- /dev/null +++ b/include/Game/CNewWaterVolume.h @@ -0,0 +1,25 @@ +// +// Created by Adniklastrator on 2015-10-22. +// + +#ifndef CNEWWATERVOLUME_H +#define CNEWWATERVOLUME_H + +#include "Core/Component.h" + +namespace dd +{ + +namespace Components +{ + +struct NewWaterVolume : public Component +{ + +}; + +} + +} + +#endif //DAYDREAM_NEWWATERVOLUME_H \ No newline at end of file diff --git a/include/Game/LevelSystem.h b/include/Game/LevelSystem.h index cc5d75c..b236df4 100755 --- a/include/Game/LevelSystem.h +++ b/include/Game/LevelSystem.h @@ -212,7 +212,7 @@ private: void GetNextLevel(); void SetBrokenModel(EntityID entity); - void CreateBrokenModelPart(EntityID Parent, std::string ModelPath, glm::vec3 RelativePosition, glm::vec2 Hitbox); + void CreateBrokenModelPart(EntityID Parent, std::string ModelPath, glm::vec3 RelativePosition, glm::vec2 Hitbox, int NumberOfParts); }; } diff --git a/include/Game/PadSystem.h b/include/Game/PadSystem.h index 656532f..e21229e 100755 --- a/include/Game/PadSystem.h +++ b/include/Game/PadSystem.h @@ -105,6 +105,9 @@ private: double m_KrakenStrength = 0; double m_PlayerStrength = 0; float m_Edge = 2.8f; + float m_PadOriginalHeight = -4.8; + float m_PadHeight = m_PadOriginalHeight; + float m_PadRiseSpeed = 0.2; EntityID m_KrakenArm; Components::Transform* m_Transform = nullptr; Components::Pad* m_Pad = nullptr; diff --git a/include/Game/TravellingSystem.h b/include/Game/TravellingSystem.h index 6f9f2ce..7095050 100644 --- a/include/Game/TravellingSystem.h +++ b/include/Game/TravellingSystem.h @@ -18,6 +18,7 @@ #include "Game/EStageCleared.h" #include "Game/CTravels.h" #include "Game/CBackground.h" +#include "Game/CNewWaterVolume.h" namespace dd diff --git a/include/Game/WaterSystem.h b/include/Game/WaterSystem.h index 91fe459..3807a12 100644 --- a/include/Game/WaterSystem.h +++ b/include/Game/WaterSystem.h @@ -11,9 +11,13 @@ #include "Core/CTemplate.h" #include "Core/EventBroker.h" #include "Core/World.h" +#include "Core/ConfigFile.h" #include "Transform/EMove.h" +#include "Physics/CPhysics.h" #include "Physics/CWaterVolume.h" #include "Physics/CRectangleShape.h" +#include "Game/CBrickPart.h" +#include "Game/CNewWaterVolume.h" #include "Game/EPause.h" #include "Game/EResume.h" #include "Game/ERelevantObjectCreated.h" @@ -47,6 +51,13 @@ public: private: bool m_Pause = false; EntityID m_BottomWall = 0; + float m_SubmergedOriginalHeight = -4.5; + float m_SubmergedHeight = m_SubmergedOriginalHeight; + + bool m_RaiseWater = true; + bool m_RemoveWater = false; + + std::array m_BrickPartCounters; dd::EventRelay m_EPause; dd::EventRelay m_EResume; diff --git a/src/game/Game/BallSystem.cpp b/src/game/Game/BallSystem.cpp index 786962b..016c2ab 100644 --- a/src/game/Game/BallSystem.cpp +++ b/src/game/Game/BallSystem.cpp @@ -83,39 +83,19 @@ void dd::Systems::BallSystem::UpdateEntity(double dt, EntityID entity, EntityID } auto ballComponent = m_World->GetComponent(entity); - - /*if (IsPaused()) { - if (ballComponent != nullptr) { - auto transform = m_World->GetComponent(entity); - - if (!ballComponent->Paused) { - ballComponent->Paused = true; - ballComponent->SavedSpeed = transform->Velocity; - transform->Velocity = glm::vec3(0, 0, 0); - } - } - return; - } else { - if (ballComponent != nullptr) { - auto transform = m_World->GetComponent(entity); - - if (ballComponent->Paused) { - transform->Velocity = ballComponent->SavedSpeed; - ballComponent->Paused = false; - } - } - }*/ auto templateCheck = m_World->GetComponent(entity); if (templateCheck != nullptr){ return; } if (ballComponent != nullptr) { if (ReplaceBall()) { + m_First = true; SetReplaceBall(false); m_Waiting = true; std::uniform_real_distribution dist(-0.5f, 0.5f); float random = dist(m_RandomGenerator); ballComponent->SavedSpeed = glm::vec3(random, 1, 0.f); + //ballComponent->SavedSpeed = glm::vec3(0.f, 1, 0.f); ballComponent->Waiting = true; auto transform = m_World->GetComponent(entity); } @@ -128,6 +108,7 @@ void dd::Systems::BallSystem::UpdateEntity(double dt, EntityID entity, EntityID /*std::uniform_real_distribution dist(-0.5f, 0.5f); float random = dist(m_RandomGenerator);*/ transform->Velocity = glm::normalize(ballComponent->SavedSpeed) * ballComponent->Speed; + //transform->Velocity = glm::normalize(glm::vec3(0, 1, 0)) * ballComponent->Speed; } else if (!ballComponent->Sticky) { auto transform = m_World->GetComponent(entity); transform->Velocity = glm::vec3(0.f, 0.f, 0.f); diff --git a/src/game/Game/KrakenSystem.cpp b/src/game/Game/KrakenSystem.cpp index b15499e..77134b6 100644 --- a/src/game/Game/KrakenSystem.cpp +++ b/src/game/Game/KrakenSystem.cpp @@ -82,16 +82,16 @@ void dd::Systems::KrakenSystem::UpdateEntity(double dt, EntityID entity, EntityI case 1: // Idle m_KrakenTimer += dt; if (m_KrakenTimer > m_KrakenSecondsToAction) { + m_KrakenTimer = 0; if (m_NumberOfActions == 0) { kraken->CurrentAction = 3; - break; + } else { + std::uniform_real_distribution dist(1, 4.999f); + float random = dist(m_RandomGenerator); + //std::cout << random << std::endl; + kraken->CurrentAction = random; + //std::cout << kraken->CurrentAction << std::endl; } - m_KrakenTimer = 0; - std::uniform_real_distribution dist(1, 4.999f); - float random = dist(m_RandomGenerator); - //std::cout << random << std::endl; - kraken->CurrentAction = random; - //std::cout << kraken->CurrentAction << std::endl; } break; case 2: // Grabbing diff --git a/src/game/Game/LevelSystem.cpp b/src/game/Game/LevelSystem.cpp index 0b59b5d..ba06fcc 100755 --- a/src/game/Game/LevelSystem.cpp +++ b/src/game/Game/LevelSystem.cpp @@ -25,7 +25,7 @@ void dd::Systems::LevelSystem::Initialize() EVENT_SUBSCRIBE_MEMBER(m_EBrickGenerating, &LevelSystem::OnBrickGenerating); EVENT_SUBSCRIBE_MEMBER(m_EKrakenDefeated, &LevelSystem::OnKrakenDefeated); - m_GodMode = ResourceManager::Load("Config.ini")->GetValue("Cheat.GodMode", false); + m_GodMode = ResourceManager::Load("Config.ini")->GetValue("Cheat.GodMode", false); //PointLightTest { @@ -240,6 +240,7 @@ void dd::Systems::LevelSystem::Initialize() auto collisionSound = m_World->AddComponent(m_BrickTemplate); collisionSound->FilePath = "Sounds/Brick/shortbrickbreak.wav"; m_World->CommitEntity(m_BrickTemplate); + return; } @@ -278,15 +279,6 @@ void dd::Systems::LevelSystem::UpdateEntity(double dt, EntityID entity, EntityID } } - auto brickPart = m_World->GetComponent(entity); - if (brickPart != nullptr) { - auto transform = m_World->GetComponent(entity); - if (transform->Position.y < -10) { - m_World->RemoveEntity(entity); - return; - } - } - auto brick = m_World->GetComponent(entity); if (brick != nullptr) { auto transform = m_World->GetComponent(entity); @@ -1217,40 +1209,45 @@ void dd::Systems::LevelSystem::SetBrokenModel(EntityID entity) std::uniform_int_distribution dist(0, 2); int index = dist(m_RandomGenerator); + int parts = 0; + switch (index) { case 0: - CreateBrokenModelPart(entity, "Models/Brick/BrickBreak/1/WhiteBrickBreak1.obj", glm::vec3(-0.29912f, 0.0082f, 0.f), glm::vec2(0.281f, 0.351f)); - CreateBrokenModelPart(entity, "Models/Brick/BrickBreak/1/WhiteBrickBreak2.obj", glm::vec3(0.07597f, -0.02899f, 0.f), glm::vec2(0.559f, 0.351f)); - CreateBrokenModelPart(entity, "Models/Brick/BrickBreak/1/WhiteBrickBreak3.obj", glm::vec3(0.3227f, 0.05632, 0.f), glm::vec2(0.25f, 0.25f)); + CreateBrokenModelPart(entity, "Models/Brick/BrickBreak/1/WhiteBrickBreak1.obj", glm::vec3(-0.29912f, 0.0082f, 0.f), glm::vec2(0.281f, 0.351f), 3); + CreateBrokenModelPart(entity, "Models/Brick/BrickBreak/1/WhiteBrickBreak2.obj", glm::vec3(0.07597f, -0.02899f, 0.f), glm::vec2(0.559f, 0.351f), 3); + CreateBrokenModelPart(entity, "Models/Brick/BrickBreak/1/WhiteBrickBreak3.obj", glm::vec3(0.3227f, 0.05632, 0.f), glm::vec2(0.25f, 0.25f), 3); break; case 1: - CreateBrokenModelPart(entity, "Models/Brick/BrickBreak/2/WhiteBrickBreak1.obj", glm::vec3(-0.3236f, 0.0159f, 0.f), glm::vec2(0.237f, 0.327f)); - CreateBrokenModelPart(entity, "Models/Brick/BrickBreak/2/WhiteBrickBreak2.obj", glm::vec3(0.07645f, 0.03131f, 0.f), glm::vec2(0.594f, 0.211f)); - CreateBrokenModelPart(entity, "Models/Brick/BrickBreak/2/WhiteBrickBreak3.obj", glm::vec3(0.09468f, -0.11792f, 0.f), glm::vec2(0.692f, 0.112f)); - CreateBrokenModelPart(entity, "Models/Brick/BrickBreak/2/WhiteBrickBreak4.obj", glm::vec3(0.33957f, 0.13079f, 0.f), glm::vec2(0.208f, 0.085f)); + CreateBrokenModelPart(entity, "Models/Brick/BrickBreak/2/WhiteBrickBreak1.obj", glm::vec3(-0.3236f, 0.0159f, 0.f), glm::vec2(0.237f, 0.327f), 4); + CreateBrokenModelPart(entity, "Models/Brick/BrickBreak/2/WhiteBrickBreak2.obj", glm::vec3(0.07645f, 0.03131f, 0.f), glm::vec2(0.594f, 0.211f), 4); + CreateBrokenModelPart(entity, "Models/Brick/BrickBreak/2/WhiteBrickBreak3.obj", glm::vec3(0.09468f, -0.11792f, 0.f), glm::vec2(0.692f, 0.112f), 4); + CreateBrokenModelPart(entity, "Models/Brick/BrickBreak/2/WhiteBrickBreak4.obj", glm::vec3(0.33957f, 0.13079f, 0.f), glm::vec2(0.208f, 0.085f), 4); break; case 2: - CreateBrokenModelPart(entity, "Models/Brick/BrickBreak/3/WhiteBrickBreak1.obj", glm::vec3(-0.34882f, 0.0564f, 0.f), glm::vec2(0.175f, 0.228f)); - CreateBrokenModelPart(entity, "Models/Brick/BrickBreak/3/WhiteBrickBreak2.obj", glm::vec3(0.0678f, 0.07679f, 0.f), glm::vec2(0.699f, 0.183f)); - CreateBrokenModelPart(entity, "Models/Brick/BrickBreak/3/WhiteBrickBreak3.obj", glm::vec3(-0.11862f, -0.10342, 0.f), glm::vec2(0.563f, 0.164f)); - CreateBrokenModelPart(entity, "Models/Brick/BrickBreak/3/WhiteBrickBreak4.obj", glm::vec3(0.31479f, -0.06351f, 0.f), glm::vec2(0.261f, 0.21f)); + CreateBrokenModelPart(entity, "Models/Brick/BrickBreak/3/WhiteBrickBreak1.obj", glm::vec3(-0.34882f, 0.0564f, 0.f), glm::vec2(0.175f, 0.228f), 4); + CreateBrokenModelPart(entity, "Models/Brick/BrickBreak/3/WhiteBrickBreak2.obj", glm::vec3(0.0678f, 0.07679f, 0.f), glm::vec2(0.699f, 0.183f), 4); + CreateBrokenModelPart(entity, "Models/Brick/BrickBreak/3/WhiteBrickBreak3.obj", glm::vec3(-0.11862f, -0.10342, 0.f), glm::vec2(0.563f, 0.164f), 4); + CreateBrokenModelPart(entity, "Models/Brick/BrickBreak/3/WhiteBrickBreak4.obj", glm::vec3(0.31479f, -0.06351f, 0.f), glm::vec2(0.261f, 0.21f), 4); break; default: LOG_INFO("Something went wrong with the random generator in SetBrokenModel"); break; } + + return; } -void dd::Systems::LevelSystem::CreateBrokenModelPart(EntityID Parent, std::string ModelPath, glm::vec3 RelativePosition, glm::vec2 Hitbox) +void dd::Systems::LevelSystem::CreateBrokenModelPart(EntityID Parent, std::string ModelPath, glm::vec3 RelativePosition, glm::vec2 Hitbox, int NumberOfParts) { auto ent = m_World->CreateEntity(Parent); auto cTemplate = m_World->AddComponent(ent); auto cTransform = m_World->AddComponent(ent); auto cBrickPart = m_World->AddComponent(ent); + cBrickPart->NumberOfPartsInBrick = NumberOfParts; cTransform->Position = RelativePosition; @@ -1263,6 +1260,7 @@ void dd::Systems::LevelSystem::CreateBrokenModelPart(EntityID Parent, std::strin auto cPhys = m_World->AddComponent(ent); cPhys->CollisionType = CollisionType::Type::Dynamic; cPhys->GravityScale = 1.f; + cPhys->Density = 30; cPhys->Category = CollisionLayer::Type::Brick; cPhys->Mask = static_cast(CollisionLayer::Type::Wall); } diff --git a/src/game/Game/LifeSystem.cpp b/src/game/Game/LifeSystem.cpp index 968ed17..944ed1c 100644 --- a/src/game/Game/LifeSystem.cpp +++ b/src/game/Game/LifeSystem.cpp @@ -79,8 +79,9 @@ bool dd::Systems::LifeSystem::OnLifeLost(const dd::Events::LifeLost &event) { if (!m_GodMode){ SetLives(Lives() - 1); + return true; } - return true; + return false; } bool dd::Systems::LifeSystem::OnPause(const dd::Events::Pause &event) diff --git a/src/game/Game/PadSystem.cpp b/src/game/Game/PadSystem.cpp index b2ca20e..b88cbae 100755 --- a/src/game/Game/PadSystem.cpp +++ b/src/game/Game/PadSystem.cpp @@ -44,7 +44,7 @@ void dd::Systems::PadSystem::Initialize() auto ent = m_World->CreateEntity(); m_World->SetProperty(ent, "Name", "Pad"); auto ctransform = m_World->AddComponent(ent); - ctransform->Position = glm::vec3(0.f, -4.8f, -10.f); + ctransform->Position = glm::vec3(0.f, m_PadHeight, -10.f); auto rectangleShape = m_World->AddComponent(ent); rectangleShape->Dimensions = glm::vec2(1.f, 0.1f); auto physics = m_World->AddComponent(ent); @@ -159,6 +159,13 @@ void dd::Systems::PadSystem::Update(double dt) auto pad = Pad(); auto acceleration = Acceleration(); + if (glm::abs(transform->Position.y - m_PadHeight) > m_PadRiseSpeed) { + if (transform->Position.y < m_PadHeight) { + transform->Position.y += m_PadRiseSpeed * (float)dt; + } else if (transform->Position.y > m_PadHeight) { + transform->Position.y -= m_PadRiseSpeed * 5 * (float)dt; + } + } if (transform->Velocity.x < -pad->MaxSpeed) { transform->Velocity.x = -pad->MaxSpeed; } @@ -420,6 +427,7 @@ bool dd::Systems::PadSystem::OnStageCleared(const dd::Events::StageCleared &even { //auto entity = CreateBall(); m_StickyAim->Aiming = false; + m_PadHeight = m_PadOriginalHeight; return true; } @@ -451,14 +459,8 @@ bool dd::Systems::PadSystem::OnRaiseWaterWall(const dd::Events::RaiseWaterWall & bool dd::Systems::PadSystem::RaisePad(float amount, float speed) { - auto transform = Transform(); - glm::vec3 raise = glm::vec3(0, amount, 0); - Events::Move e; - e.Entity = m_Entity; - e.GoalPosition = transform->Position + raise; - e.Speed = speed; - e.Queue = true; - EventBroker->Publish(e); + m_PadHeight += amount; + m_PadRiseSpeed = speed; return true; } diff --git a/src/game/Game/WaterSystem.cpp b/src/game/Game/WaterSystem.cpp index 39a5b8c..3e77f45 100644 --- a/src/game/Game/WaterSystem.cpp +++ b/src/game/Game/WaterSystem.cpp @@ -14,6 +14,8 @@ void dd::Systems::WaterSystem::Initialize() EVENT_SUBSCRIBE_MEMBER(m_ERaiseWater, &WaterSystem::OnRaiseWater); EVENT_SUBSCRIBE_MEMBER(m_ERaiseWaterWall, &WaterSystem::OnRaiseWaterWall); + m_RaiseWater = ResourceManager::Load("Config.ini")->GetValue("Debug.RaiseWater", false); + //Water test { auto t_waterBody = m_World->CreateEntity(); @@ -24,6 +26,10 @@ void dd::Systems::WaterSystem::Initialize() auto body = m_World->AddComponent(t_waterBody); m_World->CommitEntity(t_waterBody); } + + m_BrickPartCounters = + {0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 }; } void dd::Systems::WaterSystem::Update(double dt) @@ -43,6 +49,31 @@ void dd::Systems::WaterSystem::UpdateEntity(double dt, EntityID entity, EntityID auto templateCheck = m_World->GetComponent(entity); if (templateCheck != nullptr){ return; } + auto brickPart = m_World->GetComponent(entity); + if (brickPart != nullptr) { + auto transform = m_World->GetComponent(entity); + if (m_RaiseWater) { + if (!brickPart->Submerged) { + if (transform->Position.y < m_SubmergedHeight) { + brickPart->Submerged = true; + m_BrickPartCounters[brickPart->NumberOfPartsInBrick]++; + std::cout << "Parts: " << m_BrickPartCounters[brickPart->NumberOfPartsInBrick] << " of " << brickPart->NumberOfPartsInBrick << std::endl; + if (m_BrickPartCounters[brickPart->NumberOfPartsInBrick] >= brickPart->NumberOfPartsInBrick) { + m_BrickPartCounters[brickPart->NumberOfPartsInBrick] = 0; + Events::RaiseWater e; + e.Amount = 0.2; + e.Speed = 0.2; + EventBroker->Publish(e); + } + } + } + } + if (transform->Position.y < -10) { + m_World->RemoveEntity(entity); + return; + } + } + if (m_BottomWall == 0) { for (auto it = m_World->GetEntities()->begin(); it != m_World->GetEntities()->end(); it++) { if (m_World->GetProperty(it->first, "Name") == "BottomWall") { @@ -51,6 +82,21 @@ void dd::Systems::WaterSystem::UpdateEntity(double dt, EntityID entity, EntityID } } } + + auto newWater = m_World->GetComponent(entity); + if (newWater != nullptr) { + if (m_RemoveWater) { + //m_World->RemoveComponent(entity); + //m_World->RemoveComponent(entity); + //m_World->RemoveComponent(entity); + //m_World->RemoveEntity(entity); + //m_World->RemoveComponent(); + } + /*auto transform = m_World->AddComponent(entity); + if (transform->Position.y < -10) { + m_World->RemoveEntity(entity); + }*/ + } } bool dd::Systems::WaterSystem::OnPause(const dd::Events::Pause &event) @@ -80,13 +126,14 @@ bool dd::Systems::WaterSystem::OnRelevantObjectCreated(const dd::Events::Relevan bool dd::Systems::WaterSystem::OnStageCleared(const dd::Events::StageCleared &event) { - + m_SubmergedHeight = m_SubmergedOriginalHeight; + m_RemoveWater = true; return true; } bool dd::Systems::WaterSystem::OnArrivedAtNewStage(const dd::Events::ArrivedAtNewStage &event) { - + m_RemoveWater = false; return true; } @@ -95,13 +142,16 @@ bool dd::Systems::WaterSystem::OnRaiseWater(const dd::Events::RaiseWater &event) { 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->Position = glm::vec3(0.f, m_SubmergedHeight, -10.f); + transform->Scale = glm::vec3(7.0f, event.Amount * 1.4f, 1.f); auto water = m_World->AddComponent(t_waterBody); + auto newWater = m_World->AddComponent(t_waterBody); //Meaning it isn't the original water we had. auto body = m_World->AddComponent(t_waterBody); m_World->CommitEntity(t_waterBody); } + m_SubmergedHeight += event.Amount; + return true; } From fde2ddeafb387f5665689682a22c9a0529ae5825 Mon Sep 17 00:00:00 2001 From: PlatinumSkink Date: Thu, 22 Oct 2015 14:05:23 +0200 Subject: [PATCH 8/8] Failed to stage it all. --- include/Game/WaterSystem.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/Game/WaterSystem.h b/include/Game/WaterSystem.h index 3807a12..7bd50a8 100644 --- a/include/Game/WaterSystem.h +++ b/include/Game/WaterSystem.h @@ -54,7 +54,7 @@ private: float m_SubmergedOriginalHeight = -4.5; float m_SubmergedHeight = m_SubmergedOriginalHeight; - bool m_RaiseWater = true; + bool m_RaiseWater = false; bool m_RemoveWater = false; std::array m_BrickPartCounters;