From c5d88301ad2aba6ba0dcc6248d5207fdc092e3bc Mon Sep 17 00:00:00 2001 From: PlatinumSkink Date: Mon, 19 Oct 2015 13:31:38 +0200 Subject: [PATCH] Implemented a Kraken State Machine that can grab the player, and the Generating Bricks option. --- assets/Sounds/Brick/LTTP_Boss_Hit.wav | Bin 0 -> 18860 bytes include/Game/CBrick.h | 1 + include/Game/CKraken.h | 9 +- include/Game/EBrickGenerating.h | 27 +++++ include/Game/KrakenSystem.h | 20 ++++ include/Game/LevelSystem.h | 11 ++- include/Game/PadSystem.h | 2 + include/Game/ScreenShakeSystem.h | 3 + src/game/Game/BallSystem.cpp | 2 +- src/game/Game/KrakenSystem.cpp | 71 +++++++++++++- src/game/Game/LevelSystem.cpp | 136 ++++++++++++++++++++++++-- src/game/Game/PadSystem.cpp | 5 + src/game/Game/ScreenShakeSystem.cpp | 18 +++- 13 files changed, 282 insertions(+), 23 deletions(-) create mode 100644 assets/Sounds/Brick/LTTP_Boss_Hit.wav create mode 100644 include/Game/EBrickGenerating.h diff --git a/assets/Sounds/Brick/LTTP_Boss_Hit.wav b/assets/Sounds/Brick/LTTP_Boss_Hit.wav new file mode 100644 index 0000000000000000000000000000000000000000..b8d4f01125c9a6e47a176cc9510127a6fd552e62 GIT binary patch literal 18860 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 S+y86af2-*KfBb))1OEdd@)`&L literal 0 HcmV?d00001 diff --git a/include/Game/CBrick.h b/include/Game/CBrick.h index a264125..e120fdb 100644 --- a/include/Game/CBrick.h +++ b/include/Game/CBrick.h @@ -19,6 +19,7 @@ struct Brick : Component //0 = empty, 1 = normal, 2 = multi-brick, 3 = lifebuoy, 4 = sticky, 5 = blaster, 6 = kraken int Type = 0; bool Removed = false; + int Number = 0; // For the Kraken to keep track of which bricks needs replacing. //What number of types each is. const int EmptyBrickSpace = 0; diff --git a/include/Game/CKraken.h b/include/Game/CKraken.h index 48ac112..41c831d 100644 --- a/include/Game/CKraken.h +++ b/include/Game/CKraken.h @@ -16,7 +16,14 @@ namespace Components struct Kraken : Component { int Health = 10; - + int CurrentAction = 1; + + const int Idle = 1; + const int Grabbing = 2; + const int Taunting = 3; + const int Moving = 4; + const int BrickGenerating = 5; + // Idle. Generating bricks. Taunting. No idea. }; } diff --git a/include/Game/EBrickGenerating.h b/include/Game/EBrickGenerating.h new file mode 100644 index 0000000..6debb0b --- /dev/null +++ b/include/Game/EBrickGenerating.h @@ -0,0 +1,27 @@ +// +// Created by Adniklastrator on 2015-10-16. +// + +#ifndef DAYDREAM_EBRICKGENERATING_H +#define DAYDREAM_EBRICKGENERATING_H + +#include "Core/EventBroker.h" + +namespace dd +{ + +namespace Events +{ + +struct BrickGenerating : Event +{ + glm::vec3 Origin; + int TargetLine; + int Set; +}; + +} + +} + +#endif //DAYDREAM_EBRICKGENERATING_H diff --git a/include/Game/KrakenSystem.h b/include/Game/KrakenSystem.h index a94aa38..63eca64 100644 --- a/include/Game/KrakenSystem.h +++ b/include/Game/KrakenSystem.h @@ -5,6 +5,7 @@ #ifndef DAYDREAM_KRAKENSYSTEM_H #define DAYDREAM_KRAKENSYSTEM_H +#include #include "Core/System.h" #include "Core/CTransform.h" @@ -15,9 +16,11 @@ #include "Physics/CRectangleShape.h" #include "Physics/CCircleShape.h" #include "Physics/CPhysics.h" +#include "Physics/EContact.h" #include "Game/EPause.h" #include "Game/EKrakenAppear.h" #include "Game/EKrakenAttack.h" +#include "Game/EBrickGenerating.h" #include "Game/CTravels.h" #include "Game/CKraken.h" #include "Sound/CCollisionSound.h" @@ -40,20 +43,37 @@ public: void Initialize() override; void InitializeObjects(); + 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; } private: + std::mt19937 m_RandomGenerator; + bool m_Pause = false; + bool m_KrakenBattle = false; + bool m_ReturnToIdle = false; EntityID m_KrakenTemplate; + std::string m_Action = "Idle"; + float m_KrakenTimer = 0; + float m_KrakenSecondsToAction = 1; + const int Idle = 1; + + std::array m_Bricks; + std::array m_Colors; dd::EventRelay m_EPause; + dd::EventRelay m_EContact; dd::EventRelay m_EKrakenAppear; dd::EventRelay m_EKrakenAttack; + dd::EventRelay m_EBrickGenerating; bool OnPause(const dd::Events::Pause &event); + bool OnContact(const dd::Events::Contact &event); bool OnKrakenAppear(const dd::Events::KrakenAppear &event); bool OnKrakenAttack(const dd::Events::KrakenAttack &event); + bool OnBrickGenerating(const dd::Events::BrickGenerating &event); + void GetBrickSet(); }; } diff --git a/include/Game/LevelSystem.h b/include/Game/LevelSystem.h index 08a8aca..56eb49f 100755 --- a/include/Game/LevelSystem.h +++ b/include/Game/LevelSystem.h @@ -50,6 +50,7 @@ #include "Game/EPowerUpTaken.h" #include "Game/EKrakenAppear.h" +#include "Game/EBrickGenerating.h" #include "Physics/CPhysics.h" #include "Physics/CCircleShape.h" @@ -91,7 +92,7 @@ public: void CreateBasicLevel(int, int, glm::vec2, float); void CreateLevel(int); - void CreateBrick(int, int, glm::vec2, float, int, int, int, glm::vec4); + EntityID CreateBrick(int, int, glm::vec2, float, int, int, int, glm::vec4); void BrickHit(EntityID, EntityID, int); void OnEntityRemoved(EntityID entity); @@ -135,7 +136,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; @@ -162,6 +163,9 @@ private: std::array m_Bricks; std::array m_Colors; + std::array m_BrickSet; + std::array m_ColorSet; + dd::EventRelay m_EContact; dd::EventRelay m_EScoreEvent; dd::EventRelay m_EMultiBall; @@ -171,6 +175,7 @@ private: dd::EventRelay m_EStageCleared; dd::EventRelay m_EPause; dd::EventRelay m_EHitPad; + dd::EventRelay m_EBrickGenerating; bool OnContact(const dd::Events::Contact &event); bool OnScoreEvent(const dd::Events::ScoreEvent &event); @@ -181,6 +186,8 @@ private: bool OnStageCleared(const dd::Events::StageCleared &event); bool OnPause(const dd::Events::Pause &event); bool OnHitPad(const dd::Events::HitPad &event); + bool OnBrickGenerating(const dd::Events::BrickGenerating &event); + void GetBrickSet(int Set); void GetNextLevel(); void SetBrokenModel(EntityID entity); diff --git a/include/Game/PadSystem.h b/include/Game/PadSystem.h index b1cd6ce..28ace94 100755 --- a/include/Game/PadSystem.h +++ b/include/Game/PadSystem.h @@ -49,6 +49,8 @@ #include "Game/EScreenShake.h" #include "Game/EActionButton.h" +#include "Game/EBrickGenerating.h" + namespace dd { diff --git a/include/Game/ScreenShakeSystem.h b/include/Game/ScreenShakeSystem.h index 4755fbb..2f8b15f 100644 --- a/include/Game/ScreenShakeSystem.h +++ b/include/Game/ScreenShakeSystem.h @@ -5,6 +5,7 @@ #ifndef DAYDREAM_SCREENSHAKESYSTEM_H #define DAYDREAM_SCREENSHAKESYSTEM_H +#include #include "Core/System.h" #include "Core/CTransform.h" @@ -38,6 +39,8 @@ public: bool IsPaused() const { return m_Pause; } void SetPause(const bool& pause) { m_Pause = pause; } private: + std::mt19937 m_RandomGenerator; + bool m_Pause; bool m_ScreenShake; int m_ShakeIntensity; diff --git a/src/game/Game/BallSystem.cpp b/src/game/Game/BallSystem.cpp index 1d90cc5..462084e 100644 --- a/src/game/Game/BallSystem.cpp +++ b/src/game/Game/BallSystem.cpp @@ -31,7 +31,7 @@ void dd::Systems::BallSystem::Initialize() { auto ent = m_World->CreateEntity(); std::shared_ptr transform = m_World->AddComponent(ent); - transform->Position = glm::vec3(0.f, 0.26f, -10.f); + 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); auto model = m_World->AddComponent(ent); diff --git a/src/game/Game/KrakenSystem.cpp b/src/game/Game/KrakenSystem.cpp index 0fe0614..5c8aad8 100644 --- a/src/game/Game/KrakenSystem.cpp +++ b/src/game/Game/KrakenSystem.cpp @@ -7,15 +7,20 @@ void dd::Systems::KrakenSystem::Initialize() { + std::random_device rd; + m_RandomGenerator = std::mt19937(rd()); EVENT_SUBSCRIBE_MEMBER(m_EPause, &KrakenSystem::OnPause); EVENT_SUBSCRIBE_MEMBER(m_EKrakenAppear, &KrakenSystem::OnKrakenAppear); EVENT_SUBSCRIBE_MEMBER(m_EKrakenAttack, &KrakenSystem::OnKrakenAttack); + EVENT_SUBSCRIBE_MEMBER(m_EBrickGenerating, &KrakenSystem::OnBrickGenerating); EntityID ent = m_World->CreateEntity(); auto transform = m_World->AddComponent(ent); auto model = m_World->AddComponent(ent); - std::shared_ptr cCircle = m_World->AddComponent(ent); - cCircle->Radius = 2; + auto kraken = m_World->AddComponent(ent); + std::shared_ptr cCircle = m_World->AddComponent(ent); + cCircle->Dimensions = glm::vec2(2, 4); + //cCircle->Radius = 2; std::shared_ptr cPhys = m_World->AddComponent(ent); std::shared_ptr cTemplate = m_World->AddComponent(ent); @@ -31,7 +36,7 @@ void dd::Systems::KrakenSystem::Initialize() transform->Position = glm::vec3(50, 50, -10); //sound auto collisionSound = m_World->AddComponent(ent); - collisionSound->FilePath = "Sounds/Brick/shortbrickbreak.wav"; + collisionSound->FilePath = "Sounds/Brick/LTTP_Boss_Hit.wav"; m_World->CommitEntity(ent); m_KrakenTemplate = ent; @@ -44,16 +49,66 @@ void dd::Systems::KrakenSystem::InitializeObjects() } +void dd::Systems::KrakenSystem::Update(double dt) +{ + +} + void dd::Systems::KrakenSystem::UpdateEntity(double dt, EntityID entity, EntityID parent) { if (IsPaused()) { return; } + auto templateCheck = m_World->GetComponent(entity); + if (templateCheck != nullptr){ return; } + + auto kraken = m_World->GetComponent(entity); + if (kraken != nullptr) { + Events::KrakenAttack krakenAttack; + switch (kraken->CurrentAction) + { + case 1: // Idle + //m_KrakenTimer += dt; + if (m_KrakenTimer > m_KrakenSecondsToAction) { + m_KrakenTimer = 0; + std::uniform_real_distribution dist(1, 2.999f); + float random = dist(m_RandomGenerator); + std::cout << random << std::endl; + kraken->CurrentAction = random; + std::cout << kraken->CurrentAction << std::endl; + } + break; + case 2: // Grabbing + kraken->CurrentAction = 5; + krakenAttack.ChargeUpdate = 0; + krakenAttack.KrakenStrength = 0.1; + krakenAttack.PlayerStrength = 0.05; + EventBroker->Publish(krakenAttack); + break; + case 3: // Brick Generating + break; + case 4: // Moving + break; + case 5: // Taunting + if (m_ReturnToIdle) { + m_ReturnToIdle = false; + kraken->CurrentAction = Idle; + } + break; + default: + //LOG_INFO("Something's probably off about the random number generator."); + break; + } + } } bool dd::Systems::KrakenSystem::OnPause(const dd::Events::Pause &event) { + if (event.Type != "KrakenSystem" && event.Type != "All") { + return false; + } + if (IsPaused()) { SetPause(false); } else { @@ -68,11 +123,19 @@ bool dd::Systems::KrakenSystem::OnKrakenAppear(const dd::Events::KrakenAppear &e m_World->RemoveComponent(ent); auto transform = m_World->GetComponent(ent); transform->Position = event.Position; + m_KrakenBattle = true; return true; } bool dd::Systems::KrakenSystem::OnKrakenAttack(const dd::Events::KrakenAttack &event) { - + if (event.ChargeUpdate >= 1) { + m_ReturnToIdle = true; + } return true; } + +bool dd::Systems::KrakenSystem::OnBrickGenerating(const dd::Events::BrickGenerating &event) +{ + return true; +} \ No newline at end of file diff --git a/src/game/Game/LevelSystem.cpp b/src/game/Game/LevelSystem.cpp index 9f93bfa..000a9d3 100755 --- a/src/game/Game/LevelSystem.cpp +++ b/src/game/Game/LevelSystem.cpp @@ -20,6 +20,7 @@ void dd::Systems::LevelSystem::Initialize() EVENT_SUBSCRIBE_MEMBER(m_EStageCleared, &LevelSystem::OnStageCleared); EVENT_SUBSCRIBE_MEMBER(m_EPause, &LevelSystem::OnPause); EVENT_SUBSCRIBE_MEMBER(m_EHitPad, &LevelSystem::OnHitPad); + EVENT_SUBSCRIBE_MEMBER(m_EBrickGenerating, &LevelSystem::OnBrickGenerating); //PointLightTest { @@ -389,11 +390,11 @@ void dd::Systems::LevelSystem::CreateLevel(int aboveBasicLevel) SetRestarting(false); } -void dd::Systems::LevelSystem::CreateBrick(int row, int line, glm::vec2 spacesBetweenBricks, float spaceToEdge, int aboveLevel, int num, int typeInt, glm::vec4 colorVec) +EntityID dd::Systems::LevelSystem::CreateBrick(int row, int line, glm::vec2 spacesBetweenBricks, float spaceToEdge, int aboveLevel, int num, int typeInt, glm::vec4 colorVec) { if (typeInt == EmptyBrickSpace) { SetNumberOfBricks(NumberOfBricks() - 1); - return; + return NULL; } auto brick = m_World->CloneEntity(m_BrickTemplate); m_World->RemoveComponent(brick); @@ -436,13 +437,128 @@ void dd::Systems::LevelSystem::CreateBrick(int row, int line, glm::vec2 spacesBe e.Health = 10; EventBroker->Publish(e); m_World->RemoveEntity(brick); - return; + return brick; } cBrick->Score = 10 * num; - return; + return brick; } +bool dd::Systems::LevelSystem::OnBrickGenerating(const dd::Events::BrickGenerating &event) +{ + GetBrickSet(event.Set); + LOG_DEBUG("This is happening."); + + int rows = 2; + int lines = 7; + int getter = 0; + for (int i = 0; i < rows; i++) { + for (int j = 0; j < lines; j++) { + auto ent = CreateBrick(i, j, SpaceBetweenBricks(), SpaceToEdge(), -4, 1, m_BrickSet[getter], m_ColorSet[getter]); + if (ent != NULL) { + auto transform = m_World->GetComponent(ent); + Events::Move e; + e.GoalPosition = transform->Position; + transform->Position = event.Origin; + e.Entity = ent; + e.Speed = 6; + e.Queue = false; + EventBroker->Publish(e); + m_LooseBricks++; + SetNumberOfBricks(NumberOfBricks() + 1); + } + getter++; + } + } + return true; +} + +void dd::Systems::LevelSystem::GetBrickSet(int set) +{ + std::array level; + std::array color; + // Level array indicates type of brick. + // 0 is empty space. + // 1 is standard brick. + // 2 is multiball brick. + // 3 is lifebuoy brick. + // 4 is sticky brick. + // 5 is ink blaster brick. + // 6 is kraken attack brick. + + // color array determines the color of standard bricks. + // w is white. + // r is red. + // g is green. + // b is blue. + // y is yellow. + // c is cyan. + // m is magenta. + // d is dark. + // Feel free to make your own. + glm::vec4 w = glm::vec4(1, 1, 1, 0); + glm::vec4 r = glm::vec4(1, 0, 0, 0); + glm::vec4 g = glm::vec4(0, 1, 0, 0); + glm::vec4 b = glm::vec4(0, 0, 1, 0); + glm::vec4 y = glm::vec4(1, 1, 0, 0); + glm::vec4 c = glm::vec4(0, 1, 1, 0); + glm::vec4 m = glm::vec4(1, 0, 1, 0); + glm::vec4 d = glm::vec4(0, 0, 0, 0); + + if (set == 1) { + level = + {1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1 }; + color = + {r, r, r, r, r, r, r, + r, r, r, r, r, r, r }; + } + else if (set == 2) { + level = + {2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2 }; + color = + {w, w, w, w, w, w, w, + w, w, w, w, w, w, w }; + } + else if (set == 3) { + level = + {0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 }; + color = + {w, w, w, w, w, w, w, + w, w, w, w, w, w, w }; + } + else if (set == 4) { + level = + {0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 }; + color = + {w, w, w, w, w, w, w, + w, w, w, w, w, w, w }; + } + else if (set == 5) { + level = + {0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 }; + color = + {w, w, w, w, w, w, w, + w, w, w, w, w, w, w }; + } + else if (set == 6) { + level = + {0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0 }; + color = + {w, w, w, w, w, w, w, + w, w, w, w, w, w, w }; + } + + std::copy(std::begin(level), std::end(level), std::begin(m_BrickSet)); + std::copy(std::begin(color), std::end(color), std::begin(m_ColorSet)); +} + + void dd::Systems::LevelSystem::OnEntityRemoved(EntityID entity) { @@ -710,7 +826,7 @@ void dd::Systems::LevelSystem::GetNextLevel() // 100 is KRAKEN! - // wolor array determines the color of standard bricks. + // color array determines the color of standard bricks. // w is white. // r is red. // g is green. @@ -746,12 +862,12 @@ void dd::Systems::LevelSystem::GetNextLevel() if (m_CurrentCluster == 0) { if (m_CurrentLevel == 1) { level = - {1, 0, 0, 0, 0, 0, 0, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0}; + 0, 0, 0, 0, 0, 0, 1}; color = {w, w, w, w, w, w, w, w, w, w, w, w, w, w, @@ -761,9 +877,9 @@ void dd::Systems::LevelSystem::GetNextLevel() w, w, w, w, w, w, w}; } else if (m_CurrentLevel == 2) { level = - {0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, 0, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; @@ -808,7 +924,7 @@ void dd::Systems::LevelSystem::GetNextLevel() level = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 100, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; diff --git a/src/game/Game/PadSystem.cpp b/src/game/Game/PadSystem.cpp index bc58553..97fb384 100755 --- a/src/game/Game/PadSystem.cpp +++ b/src/game/Game/PadSystem.cpp @@ -234,6 +234,11 @@ bool dd::Systems::PadSystem::OnKeyDown(const dd::Events::KeyDown &event) { e.Time = 3; e.TimeTakenToCoolDown = 10; EventBroker->Publish(e); + } else if (val == GLFW_KEY_G) { + Events::BrickGenerating e; + e.Origin = glm::vec3(-5, 7, -10); + e.Set = 1; + EventBroker->Publish(e); } else if (val == GLFW_KEY_L) { Events::Lifebuoy e; e.Transform = Transform(); diff --git a/src/game/Game/ScreenShakeSystem.cpp b/src/game/Game/ScreenShakeSystem.cpp index e5166fa..ec322da 100644 --- a/src/game/Game/ScreenShakeSystem.cpp +++ b/src/game/Game/ScreenShakeSystem.cpp @@ -7,6 +7,8 @@ void dd::Systems::ScreenShakeSystem::Initialize() { + std::random_device rd; + m_RandomGenerator = std::mt19937(rd()); EVENT_SUBSCRIBE_MEMBER(m_EPause, &ScreenShakeSystem::OnPause); EVENT_SUBSCRIBE_MEMBER(m_EScreenShake, &ScreenShakeSystem::OnScreenShake); @@ -55,13 +57,15 @@ void dd::Systems::ScreenShakeSystem::UpdateEntity(double dt, EntityID entity, En else { //std::cout << "Timer: " << m_ShakeTimer << " End: " << m_ShakeEndTime << std::endl; } - m_Random.x = (rand() % m_ShakeIntensity); - m_Random.y = (rand() % m_ShakeIntensity); + std::uniform_real_distribution dist(-m_ShakeIntensity, m_ShakeIntensity); + //float impulseStrength = dist(m_RandomGenerator); + m_Random.x = dist(m_RandomGenerator) / 20; + m_Random.y = dist(m_RandomGenerator) / 20; - float half = m_ShakeIntensity / 2; + //float half = m_ShakeIntensity / 2; - m_Random.x = (m_Random.x - half) / 20; - m_Random.y = (m_Random.y - half) / 20; + //m_Random.x = (m_Random.x - half) / 20; + //m_Random.y = (m_Random.y - half) / 20; //std::cout << "X: " << randomX << " Y: " << randomY << std::endl; transform->Position = glm::vec3(m_Random); @@ -73,6 +77,10 @@ void dd::Systems::ScreenShakeSystem::UpdateEntity(double dt, EntityID entity, En bool dd::Systems::ScreenShakeSystem::OnPause(const dd::Events::Pause &event) { + if (event.Type != "ScreenShakeSystem" && event.Type != "All") { + return false; + } + if (IsPaused()) { SetPause(false); } else {