Skill-Kraken implemented. What do people think...?

This commit is contained in:
PlatinumSkink
2015-10-23 15:12:28 +02:00
parent e9a71a6ff7
commit fa5cb379ab
9 changed files with 155 additions and 92 deletions
+1 -1
View File
@@ -15,7 +15,7 @@ namespace Components
struct Kraken : Component { struct Kraken : Component {
int MaxHealth = 30; int MaxHealth = 18;
int Health = MaxHealth; int Health = MaxHealth;
int CurrentAction = 3; int CurrentAction = 3;
float RetreatSpeed = 0.2; float RetreatSpeed = 0.2;
+1
View File
@@ -20,6 +20,7 @@ struct BrickGenerating : Event
int TargetLine; int TargetLine;
int Set; int Set;
int SetCluster; int SetCluster;
int Speed = 6;
}; };
} }
+4
View File
@@ -67,6 +67,7 @@ private:
bool m_KrakenBattle = false; bool m_KrakenBattle = false;
bool m_KrakenHasArrived = false; bool m_KrakenHasArrived = false;
bool m_ReturnToIdle = false; bool m_ReturnToIdle = false;
bool m_RandomKraken = false;
EntityID m_KrakenTemplate; EntityID m_KrakenTemplate;
std::string m_Action = "Idle"; std::string m_Action = "Idle";
int m_NumberOfActions; int m_NumberOfActions;
@@ -76,6 +77,9 @@ private:
float m_KrakenCurrentSecondsToAction = 15; float m_KrakenCurrentSecondsToAction = 15;
const int Idle = 1; const int Idle = 1;
int m_Set = 0;
int m_SetCluster = 0;
std::array<int, 42> m_Bricks; std::array<int, 42> m_Bricks;
std::array<int, 42> m_Colors; std::array<int, 42> m_Colors;
+6 -2
View File
@@ -59,6 +59,7 @@
#include "Game/EKrakenAppear.h" #include "Game/EKrakenAppear.h"
#include "Game/EKrakenDefeated.h" #include "Game/EKrakenDefeated.h"
#include "Game/EBrickGenerating.h" #include "Game/EBrickGenerating.h"
#include "Game/EBreakAllBricks.h"
#include "Physics/CPhysics.h" #include "Physics/CPhysics.h"
#include "Physics/CCircleShape.h" #include "Physics/CCircleShape.h"
@@ -101,7 +102,7 @@ public:
void CreateBasicLevel(int, int, glm::vec2, float); void CreateBasicLevel(int, int, glm::vec2, float);
void CreateLevel(int); void CreateLevel(int);
EntityID 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 BrickHit(EntityID, EntityID, int, bool);
void OnEntityRemoved(EntityID entity); void OnEntityRemoved(EntityID entity);
@@ -145,7 +146,7 @@ private:
bool m_Pause = false; bool m_Pause = false;
int m_LooseBricks = 0; int m_LooseBricks = 0;
int m_CurrentCluster = 1; int m_CurrentCluster = 1;
int m_CurrentLevel = 1; int m_CurrentLevel = 6;
int m_MultiBalls = 0; int m_MultiBalls = 0;
int m_PowerUps = 0; int m_PowerUps = 0;
int m_Score = 0; int m_Score = 0;
@@ -180,6 +181,7 @@ private:
bool m_BrickGenerating = false; bool m_BrickGenerating = false;
dd::Events::BrickGenerating m_BrickGeneratingEvent; dd::Events::BrickGenerating m_BrickGeneratingEvent;
bool m_KrakenBattle = false;
bool m_BreakAllBricks = false; bool m_BreakAllBricks = false;
dd::EventRelay<LevelSystem, dd::Events::Contact> m_EContact; dd::EventRelay<LevelSystem, dd::Events::Contact> m_EContact;
@@ -194,6 +196,7 @@ private:
dd::EventRelay<LevelSystem, dd::Events::Resume> m_EResume; dd::EventRelay<LevelSystem, dd::Events::Resume> m_EResume;
dd::EventRelay<LevelSystem, dd::Events::HitPad> m_EHitPad; dd::EventRelay<LevelSystem, dd::Events::HitPad> m_EHitPad;
dd::EventRelay<LevelSystem, dd::Events::BrickGenerating> m_EBrickGenerating; dd::EventRelay<LevelSystem, dd::Events::BrickGenerating> m_EBrickGenerating;
dd::EventRelay<LevelSystem, dd::Events::BreakAllBricks> m_EBreakAllBricks;
dd::EventRelay<LevelSystem, dd::Events::KrakenDefeated> m_EKrakenDefeated; dd::EventRelay<LevelSystem, dd::Events::KrakenDefeated> m_EKrakenDefeated;
bool OnContact(const dd::Events::Contact &event); bool OnContact(const dd::Events::Contact &event);
@@ -209,6 +212,7 @@ private:
bool OnHitPad(const dd::Events::HitPad &event); bool OnHitPad(const dd::Events::HitPad &event);
bool OnBrickGenerating(const dd::Events::BrickGenerating &event); bool OnBrickGenerating(const dd::Events::BrickGenerating &event);
bool BrickGenerating(const dd::Events::BrickGenerating &event); bool BrickGenerating(const dd::Events::BrickGenerating &event);
bool OnBreakAllBricks(const dd::Events::BreakAllBricks &event);
void GetBrickSet(int Set, int SetCluster); void GetBrickSet(int Set, int SetCluster);
bool OnKrakenDefeated(const dd::Events::KrakenDefeated &event); bool OnKrakenDefeated(const dd::Events::KrakenDefeated &event);
+1
View File
@@ -54,6 +54,7 @@
#include "Rendering/CAnimation.h" #include "Rendering/CAnimation.h"
#include "Game/EBrickGenerating.h" #include "Game/EBrickGenerating.h"
#include "Game/EBreakAllBricks.h"
namespace dd namespace dd
+51 -20
View File
@@ -93,12 +93,14 @@ void dd::Systems::KrakenSystem::UpdateEntity(double dt, EntityID entity, EntityI
return; return;
} }
Events::KrakenAttack krakenAttack; Events::KrakenAttack krakenAttack;
switch (kraken->CurrentAction) switch (kraken->CurrentAction) {
{
case 1: // Idle case 1: // Idle
m_KrakenTimer += dt; if (m_RandomKraken) {
m_KrakenTimer += dt;
}
if (m_KrakenTimer > m_KrakenCurrentSecondsToAction) { if (m_KrakenTimer > m_KrakenCurrentSecondsToAction) {
m_KrakenTimer = 0; m_KrakenTimer = 0;
kraken->CurrentAction = 3;
if (m_NumberOfActions == 0) { if (m_NumberOfActions == 0) {
kraken->CurrentAction = 3; kraken->CurrentAction = 3;
} else { } else {
@@ -112,11 +114,12 @@ void dd::Systems::KrakenSystem::UpdateEntity(double dt, EntityID entity, EntityI
break; break;
case 2: // Grabbing case 2: // Grabbing
m_NumberOfActions++; m_NumberOfActions++;
kraken->CurrentAction = 5; kraken->CurrentAction = 3;
krakenAttack.ChargeUpdate = 0; /*krakenAttack.ChargeUpdate = 0;
krakenAttack.KrakenStrength = 0.1; krakenAttack.KrakenStrength = 0.1;
krakenAttack.PlayerStrength = 0.05; krakenAttack.PlayerStrength = 0.05;
EventBroker->Publish(krakenAttack); EventBroker->Publish(krakenAttack);*/
break; break;
case 3: // Brick Generating case 3: // Brick Generating
{ {
@@ -125,35 +128,60 @@ void dd::Systems::KrakenSystem::UpdateEntity(double dt, EntityID entity, EntityI
Events::BrickGenerating e; Events::BrickGenerating e;
e.Origin1 = glm::vec3(-5, 7, -10); e.Origin1 = glm::vec3(-5, 7, -10);
e.Origin2 = glm::vec3(5, 7, -10); e.Origin2 = glm::vec3(5, 7, -10);
if (kraken->Health > 20) { e.Speed = 10;
if (m_RandomKraken) {
if (kraken->Health > 20) {
e.SetCluster = 0; e.SetCluster = 0;
} else if (kraken->Health > 10) { } else if (kraken->Health > 10) {
e.SetCluster = 1; e.SetCluster = 1;
} else { } else {
e.SetCluster = 2; e.SetCluster = 2;
}
std::uniform_real_distribution<float> dist(1, 6.999f);
float random = dist(m_RandomGenerator);
e.Set = random;
} else {
e.Set = m_Set;
e.SetCluster = m_SetCluster;
m_Set++;
if (m_Set > 6) {
m_SetCluster++;
m_Set = 1;
}
} }
std::uniform_real_distribution<float> dist(1, 6.999f);
float random = dist(m_RandomGenerator);
e.Set = random;
EventBroker->Publish(e); EventBroker->Publish(e);
break; break;
} }
case 4: // Brick Generating second case case 4: // Brick Generating second case
{ {
m_NumberOfActions++;
kraken->CurrentAction = 1; kraken->CurrentAction = 1;
Events::BrickGenerating e; Events::BrickGenerating e;
e.Origin1 = glm::vec3(-5, 7, -10); e.Origin1 = glm::vec3(-5, 7, -10);
e.Origin2 = glm::vec3(5, 7, -10); e.Origin2 = glm::vec3(5, 7, -10);
if (kraken->Health > 20) { e.Speed = 10;
e.SetCluster = 0; if (m_RandomKraken) {
} else if (kraken->Health > 10) { if (kraken->Health > 20) {
e.SetCluster = 1; e.SetCluster = 0;
} else if (kraken->Health > 10) {
e.SetCluster = 1;
} else {
e.SetCluster = 2;
}
std::uniform_real_distribution<float> dist(1, 6.999f);
float random = dist(m_RandomGenerator);
e.Set = random;
} else { } else {
e.SetCluster = 2; e.Set = m_Set;
e.SetCluster = m_SetCluster;
m_Set++;
if (m_Set > 6) {
m_SetCluster++;
m_Set = 1;
}
} }
std::uniform_real_distribution<float> dist(1, 6.999f);
float random = dist(m_RandomGenerator);
e.Set = random;
EventBroker->Publish(e); EventBroker->Publish(e);
break; break;
} }
@@ -277,6 +305,7 @@ bool dd::Systems::KrakenSystem::OnKrakenHit(const dd::Events::KrakenHit &event)
auto kraken = m_World->GetComponent<Components::Kraken>(event.Kraken); auto kraken = m_World->GetComponent<Components::Kraken>(event.Kraken);
auto transform = m_World->GetComponent<Components::Transform>(event.Hitter); auto transform = m_World->GetComponent<Components::Transform>(event.Hitter);
kraken->Health--; kraken->Health--;
kraken->CurrentAction = 3;
//kraken->Health -= 15; //kraken->Health -= 15;
//kraken->Health = -1; //To defeat the kraken instantly. //kraken->Health = -1; //To defeat the kraken instantly.
@@ -345,6 +374,8 @@ bool dd::Systems::KrakenSystem::OnKrakenHit(const dd::Events::KrakenHit &event)
bool dd::Systems::KrakenSystem::OnKrakenDefeated(const dd::Events::KrakenDefeated &event) bool dd::Systems::KrakenSystem::OnKrakenDefeated(const dd::Events::KrakenDefeated &event)
{ {
m_KrakenBattle = false; m_KrakenBattle = false;
m_Set = 0;
m_SetCluster = 0;
auto kraken = m_World->GetComponent<Components::Kraken>(event.Kraken); auto kraken = m_World->GetComponent<Components::Kraken>(event.Kraken);
auto physicsComponent = m_World->GetComponent<Components::Physics>(event.Kraken); auto physicsComponent = m_World->GetComponent<Components::Physics>(event.Kraken);
+86 -68
View File
@@ -23,6 +23,7 @@ void dd::Systems::LevelSystem::Initialize()
EVENT_SUBSCRIBE_MEMBER(m_EResume, &LevelSystem::OnResume); EVENT_SUBSCRIBE_MEMBER(m_EResume, &LevelSystem::OnResume);
EVENT_SUBSCRIBE_MEMBER(m_EHitPad, &LevelSystem::OnHitPad); EVENT_SUBSCRIBE_MEMBER(m_EHitPad, &LevelSystem::OnHitPad);
EVENT_SUBSCRIBE_MEMBER(m_EBrickGenerating, &LevelSystem::OnBrickGenerating); EVENT_SUBSCRIBE_MEMBER(m_EBrickGenerating, &LevelSystem::OnBrickGenerating);
EVENT_SUBSCRIBE_MEMBER(m_EBreakAllBricks, &LevelSystem::OnBreakAllBricks);
EVENT_SUBSCRIBE_MEMBER(m_EKrakenDefeated, &LevelSystem::OnKrakenDefeated); EVENT_SUBSCRIBE_MEMBER(m_EKrakenDefeated, &LevelSystem::OnKrakenDefeated);
m_GodMode = ResourceManager::Load<ConfigFile>("Config.ini")->GetValue<bool>("Cheat.GodMode", false); m_GodMode = ResourceManager::Load<ConfigFile>("Config.ini")->GetValue<bool>("Cheat.GodMode", false);
@@ -279,12 +280,18 @@ void dd::Systems::LevelSystem::UpdateEntity(double dt, EntityID entity, EntityID
} }
} }
if (m_BreakAllBricks) {
if (m_LooseBricks == 1 && m_KrakenBattle) {
m_BreakAllBricks = false;
}
}
auto brick = m_World->GetComponent<Components::Brick>(entity); auto brick = m_World->GetComponent<Components::Brick>(entity);
if (brick != nullptr) { if (brick != nullptr) {
if (m_BreakAllBricks) { if (m_BreakAllBricks) {
if (!brick->Removed) { if (!brick->Removed) {
brick->Removed = true; brick->Removed = true;
BrickHit(entity, entity, 1); BrickHit(entity, entity, 0, false);
} }
} }
@@ -336,7 +343,7 @@ void dd::Systems::LevelSystem::UpdateEntity(double dt, EntityID entity, EntityID
auto ball = m_World->GetComponent<Components::Ball>(entity); auto ball = m_World->GetComponent<Components::Ball>(entity);
if (ball != nullptr) { if (ball != nullptr) {
if (m_BrickGenerating) { if (m_BrickGenerating && !m_BreakAllBricks) {
auto transform = m_World->GetComponent<Components::Transform>(entity); auto transform = m_World->GetComponent<Components::Transform>(entity);
if (transform->Position.y < 0 && transform->Velocity.y < 0) { if (transform->Position.y < 0 && transform->Velocity.y < 0) {
m_BrickGenerating = false; m_BrickGenerating = false;
@@ -477,6 +484,7 @@ EntityID dd::Systems::LevelSystem::CreateBrick(int row, int line, glm::vec2 spac
model->ModelFile = "Models/Brick/KrakenBrick.obj"; model->ModelFile = "Models/Brick/KrakenBrick.obj";
} else if (typeInt == Kraken) { } else if (typeInt == Kraken) {
m_KrakenBattle = true;
Events::KrakenAppear e; Events::KrakenAppear e;
e.Position = transform->Position; e.Position = transform->Position;
e.Health = 10; e.Health = 10;
@@ -491,6 +499,7 @@ EntityID dd::Systems::LevelSystem::CreateBrick(int row, int line, glm::vec2 spac
bool dd::Systems::LevelSystem::OnBrickGenerating(const dd::Events::BrickGenerating &event) bool dd::Systems::LevelSystem::OnBrickGenerating(const dd::Events::BrickGenerating &event)
{ {
m_BreakAllBricks = true;
m_BrickGenerating = true; m_BrickGenerating = true;
m_BrickGeneratingEvent = event; m_BrickGeneratingEvent = event;
return true; return true;
@@ -523,7 +532,7 @@ bool dd::Systems::LevelSystem::BrickGenerating(const dd::Events::BrickGenerating
} }
brick->GenerationGoal = e.GoalPosition; brick->GenerationGoal = e.GoalPosition;
e.Entity = ent; e.Entity = ent;
e.Speed = 6; e.Speed = event.Speed;
e.Queue = false; e.Queue = false;
EventBroker->Publish(e); EventBroker->Publish(e);
m_LooseBricks++; m_LooseBricks++;
@@ -536,6 +545,12 @@ bool dd::Systems::LevelSystem::BrickGenerating(const dd::Events::BrickGenerating
return true; return true;
} }
bool dd::Systems::LevelSystem::OnBreakAllBricks(const dd::Events::BreakAllBricks &event)
{
m_BreakAllBricks = true;
return true;
}
void dd::Systems::LevelSystem::GetBrickSet(int set, int setCluster) // These are sets the Kraken gets! void dd::Systems::LevelSystem::GetBrickSet(int set, int setCluster) // These are sets the Kraken gets!
{ {
std::array<int, 42> level; std::array<int, 42> level;
@@ -587,10 +602,10 @@ void dd::Systems::LevelSystem::GetBrickSet(int set, int setCluster) // These are
} else if (set == 2) { } else if (set == 2) {
level = // The Audience level = // The Audience
{0, 0, 0, 0, 0, 0, 0, {0, 0, 0, 0, 0, 0, 0,
4, 0, 0, 0, 0, 0, 1,
1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1,
1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1,
1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 6,
1, 0, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 0, 0 }; 0, 0, 0, 0, 0, 0, 0 };
color = color =
{y, y, y, y, y, y, y, {y, y, y, y, y, y, y,
@@ -604,8 +619,8 @@ void dd::Systems::LevelSystem::GetBrickSet(int set, int setCluster) // These are
{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, 0, 0, 0, 1, 0, 0, 3, 0, 0, 0, 1, 0,
1, 1, 1, 0, 1, 1, 1, 1, 1, 6, 0, 1, 1, 1,
0, 0, 0, 0, 0, 0, 0 }; 0, 0, 0, 0, 0, 0, 0 };
color = color =
{b, b, b, b, b, b, b, {b, b, b, b, b, b, b,
@@ -617,11 +632,11 @@ void dd::Systems::LevelSystem::GetBrickSet(int set, int setCluster) // These are
} else if (set == 4) { } else if (set == 4) {
level = // The Scales (right) level = // The Scales (right)
{1, 1, 1, 0, 0, 0, 0, {1, 1, 1, 0, 0, 0, 0,
1, 1, 1, 0, 0, 0, 0, 1, 1, 6, 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, 1, 1, 0, 0, 0, 0, 1, 1, 1,
0, 0, 0, 0, 1, 1, 1 }; 0, 0, 0, 0, 1, 4, 1 };
color = color =
{m, m, m, m, m, m, m, {m, m, m, m, m, m, m,
m, m, m, m, m, m, m, m, m, m, m, m, m, m,
@@ -632,11 +647,11 @@ void dd::Systems::LevelSystem::GetBrickSet(int set, int setCluster) // These are
} else if (set == 5) { } else if (set == 5) {
level = // The Scales (left) level = // The Scales (left)
{0, 0, 0, 0, 1, 1, 1, {0, 0, 0, 0, 1, 1, 1,
0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 3, 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,
1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0,
1, 1, 1, 0, 0, 0, 0 }; 1, 6, 1, 0, 0, 0, 0 };
color = color =
{g, g, g, g, g, g, g, {g, g, g, g, g, g, g,
g, g, g, g, g, g, g, g, g, g, g, g, g, g,
@@ -647,7 +662,7 @@ void dd::Systems::LevelSystem::GetBrickSet(int set, int setCluster) // These are
} else if (set == 6) { } else if (set == 6) {
level = // The Sword level = // The Sword
{0, 0, 0, 1, 0, 0, 0, {0, 0, 0, 1, 0, 0, 0,
0, 0, 1, 1, 1, 0, 0, 0, 0, 6, 2, 6, 0, 0,
0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
@@ -665,8 +680,8 @@ void dd::Systems::LevelSystem::GetBrickSet(int set, int setCluster) // These are
level = // The Wall level = // The Wall
{1, 0, 0, 0, 0, 0, 1, {1, 0, 0, 0, 0, 0, 1,
1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1,
1, 0, 0, 0, 0, 0, 1, 6, 0, 0, 0, 0, 0, 6,
1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
0, 0, 0, 0, 0, 0, 0 }; 0, 0, 0, 0, 0, 0, 0 };
color = color =
@@ -680,7 +695,7 @@ void dd::Systems::LevelSystem::GetBrickSet(int set, int setCluster) // These are
level = // The Checkerboard level = // The Checkerboard
{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,
3, 0, 1, 0, 1, 0, 1, 3, 0, 1, 0, 6, 0, 1,
0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0,
1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0 }; 0, 0, 0, 0, 0, 0, 0 };
@@ -695,7 +710,7 @@ void dd::Systems::LevelSystem::GetBrickSet(int set, int setCluster) // These are
level = // The Fighter Jet level = // The Fighter Jet
{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, 0, 1, 0, 1, 0, 1, 6, 0, 1, 0, 1, 0, 6,
0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0,
0, 0, 4, 1, 1, 0, 0, 0, 0, 4, 1, 1, 0, 0,
0, 0, 0, 1, 0, 0, 0 }; 0, 0, 0, 1, 0, 0, 0 };
@@ -709,9 +724,9 @@ void dd::Systems::LevelSystem::GetBrickSet(int set, int setCluster) // These are
} else if (set == 4) { } else if (set == 4) {
level = // The Formation level = // The Formation
{0, 0, 0, 0, 0, 0, 0, {0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 1, 3, 1, 1, 1, 4, 1, 1, 3, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 1, 1, 1, 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 };
color = color =
@@ -725,9 +740,9 @@ void dd::Systems::LevelSystem::GetBrickSet(int set, int setCluster) // These are
level = // The Pillars level = // The Pillars
{0, 0, 0, 0, 0, 0, 0, {0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0,
0, 1, 2, 0, 1, 1, 0, 0, 6, 1, 0, 1, 6, 0,
0, 1, 1, 0, 1, 1, 0,
0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0,
0, 1, 3, 0, 3, 1, 0,
0, 0, 0, 0, 0, 0, 0 }; 0, 0, 0, 0, 0, 0, 0 };
color = color =
{g, g, g, g, g, g, g, {g, g, g, g, g, g, g,
@@ -740,8 +755,8 @@ void dd::Systems::LevelSystem::GetBrickSet(int set, int setCluster) // These are
level = // The Treasure Chest level = // The Treasure Chest
{0, 0, 0, 1, 0, 0, 0, {0, 0, 0, 1, 0, 0, 0,
0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0,
0, 1, 1, 5, 1, 1, 0, 0, 1, 1, 2, 1, 1, 0,
0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 6, 1, 0, 0,
0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 }; 0, 0, 0, 0, 0, 0, 0 };
color = color =
@@ -755,11 +770,11 @@ void dd::Systems::LevelSystem::GetBrickSet(int set, int setCluster) // These are
} else if (setCluster == 2) { } else if (setCluster == 2) {
if (set == 1) { if (set == 1) {
level = // The Butterfly level = // The Butterfly
{1, 0, 0, 1, 0, 0, 1, {4, 0, 0, 1, 0, 0, 1,
1, 1, 0, 1, 0, 1, 1, 1, 6, 0, 1, 0, 6, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 1, 1, 1,
1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1,
1, 0, 0, 2, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1,
1, 0, 0, 1, 0, 0, 3 }; 1, 0, 0, 1, 0, 0, 3 };
color = color =
{r, r, r, r, r, r, r, {r, r, r, r, r, r, r,
@@ -771,7 +786,7 @@ void dd::Systems::LevelSystem::GetBrickSet(int set, int setCluster) // These are
} else if (set == 2) { } else if (set == 2) {
level = // The Cross level = // The Cross
{1, 1, 0, 0, 0, 1, 1, {1, 1, 0, 0, 0, 1, 1,
0, 4, 1, 0, 1, 1, 0, 0, 4, 1, 0, 1, 6, 0,
0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0,
0, 0, 1, 3, 1, 0, 0, 0, 0, 1, 3, 1, 0, 0,
0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0,
@@ -785,11 +800,11 @@ void dd::Systems::LevelSystem::GetBrickSet(int set, int setCluster) // These are
y, y, y, y, y, y, y }; y, y, y, y, y, y, y };
} else if (set == 3) { } else if (set == 3) {
level = // The Inverted Cross level = // The Inverted Cross
{0, 0, 1, 6, 1, 0, 0, {0, 0, 1, 1, 1, 0, 0,
1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 6, 0, 0, 1,
1, 1, 0, 0, 0, 1, 3, 4, 1, 0, 0, 0, 1, 3,
1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1,
1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 6, 0, 0, 1,
0, 0, 1, 1, 1, 0, 0 }; 0, 0, 1, 1, 1, 0, 0 };
color = color =
{b, b, b, b, b, b, b, {b, b, b, b, b, b, b,
@@ -801,11 +816,11 @@ void dd::Systems::LevelSystem::GetBrickSet(int set, int setCluster) // These are
} else if (set == 4) { } else if (set == 4) {
level = // The Great Wall level = // The Great Wall
{1, 1, 1, 1, 1, 1, 1, {1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 1, 1, 1, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 1, 5, 1, 1, 6, 1, 1, 1, 1, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 3, 1, 1, 1, 1, 1 }; 1, 3, 1, 1, 1, 1, 5 };
color = color =
{m, m, m, m, m, m, m, {m, m, m, m, m, m, m,
m, m, m, m, m, m, m, m, m, m, m, m, m, m,
@@ -816,10 +831,10 @@ void dd::Systems::LevelSystem::GetBrickSet(int set, int setCluster) // These are
} else if (set == 5) { } else if (set == 5) {
level = // The Champion level = // The Champion
{0, 0, 1, 1, 1, 0, 0, {0, 0, 1, 1, 1, 0, 0,
0, 0, 1, 1, 2, 0, 0, 0, 0, 1, 1, 1, 0, 0,
0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0,
1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1,
5, 1, 1, 0, 1, 1, 1, 3, 6, 1, 0, 1, 6, 1,
1, 1, 1, 0, 1, 1, 1 }; 1, 1, 1, 0, 1, 1, 1 };
color = color =
{g, g, g, g, g, g, g, {g, g, g, g, g, g, g,
@@ -830,10 +845,10 @@ void dd::Systems::LevelSystem::GetBrickSet(int set, int setCluster) // These are
g, g, g, g, g, g, g }; g, g, g, g, g, g, g };
} else if (set == 6) { } else if (set == 6) {
level = // The Dog. What, you can't see it? XD level = // The Dog. What, you can't see it? XD
{0, 1, 1, 1, 1, 1, 0, {0, 1, 1, 6, 1, 1, 0,
1, 1, 2, 1, 2, 1, 1, 1, 1, 4, 5, 4, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 0, 1, 1, 1, 0, 1, 6, 0, 1, 1, 1, 0, 6,
1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1,
0, 0, 0, 3, 0, 0, 0 }; 0, 0, 0, 3, 0, 0, 0 };
color = color =
@@ -912,7 +927,7 @@ bool dd::Systems::LevelSystem::OnContact(const dd::Events::Contact &event)
// For when a brick gets shot. // For when a brick gets shot.
brick->Removed = true; brick->Removed = true;
m_World->RemoveEntity(entityShot); m_World->RemoveEntity(entityShot);
BrickHit(entityShot, entityBrick, 1); BrickHit(entityShot, entityBrick, 1, true);
//ep.Radius = 0.05; //ep.Radius = 0.05;
return true; return true;
@@ -928,13 +943,13 @@ bool dd::Systems::LevelSystem::OnContact(const dd::Events::Contact &event)
ec.Ball = entityBall; ec.Ball = entityBall;
EventBroker->Publish(ec); EventBroker->Publish(ec);
BrickHit(entityBall, entityBrick, ball->Combo); BrickHit(entityBall, entityBrick, ball->Combo, true);
} }
return true; return true;
} }
void dd::Systems::LevelSystem::BrickHit(EntityID entityHitter, EntityID entityBrick, int combo) void dd::Systems::LevelSystem::BrickHit(EntityID entityHitter, EntityID entityBrick, int combo, bool activatePowerUps)
{ {
auto brick = m_World->GetComponent<Components::Brick>(entityBrick); auto brick = m_World->GetComponent<Components::Brick>(entityBrick);
auto physicsComponent = m_World->GetComponent<Components::Physics>(entityBrick); auto physicsComponent = m_World->GetComponent<Components::Physics>(entityBrick);
@@ -951,47 +966,49 @@ void dd::Systems::LevelSystem::BrickHit(EntityID entityHitter, EntityID entityBr
} }
// Check if the brick is any kind of special. // Check if the brick is any kind of special.
auto multi = m_World->GetComponent<Components::MultiBallBrick>(entityBrick); if (activatePowerUps) {
if (multi != nullptr) { auto multi = m_World->GetComponent<Components::MultiBallBrick>(entityBrick);
Events::MultiBall e; if (multi != nullptr) {
e.padTransform = transformComponentBrick; Events::MultiBall e;
EventBroker->Publish(e); e.padTransform = transformComponentBrick;
}
else {
auto buoy = m_World->GetComponent<Components::LifebuoyBrick>(entityBrick);
if (buoy != nullptr) {
Events::Lifebuoy e;
e.Transform = transformComponentBrick;
EventBroker->Publish(e); EventBroker->Publish(e);
} }
else { else {
auto sticky = m_World->GetComponent<Components::StickyBrick>(entityBrick); auto buoy = m_World->GetComponent<Components::LifebuoyBrick>(entityBrick);
if (sticky != nullptr) { if (buoy != nullptr) {
Events::StickyPad e; Events::Lifebuoy e;
e.Transform = transformComponentBrick; e.Transform = transformComponentBrick;
e.Times = 3;
EventBroker->Publish(e); EventBroker->Publish(e);
} }
else { else {
auto ink = m_World->GetComponent<Components::InkBlasterBrick>(entityBrick); auto sticky = m_World->GetComponent<Components::StickyBrick>(entityBrick);
if (ink != nullptr) { if (sticky != nullptr) {
Events::InkBlaster e; Events::StickyPad e;
e.Transform = transformComponentBrick; e.Transform = transformComponentBrick;
e.Shots = 5; e.Times = 3;
e.Speed = 7;
EventBroker->Publish(e); EventBroker->Publish(e);
} }
else { else {
auto kraken = m_World->GetComponent<Components::KrakenAttackBrick>(entityBrick); auto ink = m_World->GetComponent<Components::InkBlasterBrick>(entityBrick);
if (kraken != nullptr) { if (ink != nullptr) {
Events::KrakenAttack e; Events::InkBlaster e;
e.ChargeUpdate = 0; e.Transform = transformComponentBrick;
e.KrakenStrength = 0.1; e.Shots = 5;
e.PlayerStrength = 0.05; e.Speed = 7;
EventBroker->Publish(e); EventBroker->Publish(e);
} }
else { else {
auto kraken = m_World->GetComponent<Components::KrakenAttackBrick>(entityBrick);
if (kraken != nullptr) {
Events::KrakenAttack e;
e.ChargeUpdate = 0;
e.KrakenStrength = 0.1;
e.PlayerStrength = 0.05;
EventBroker->Publish(e);
}
else {
}
} }
} }
} }
@@ -1128,6 +1145,7 @@ bool dd::Systems::LevelSystem::OnPowerUpTaken(const dd::Events::PowerUpTaken &ev
bool dd::Systems::LevelSystem::OnKrakenDefeated(const dd::Events::KrakenDefeated &event) bool dd::Systems::LevelSystem::OnKrakenDefeated(const dd::Events::KrakenDefeated &event)
{ {
m_KrakenBattle = false;
m_BrickGenerating = false; m_BrickGenerating = false;
m_BreakAllBricks = true; m_BreakAllBricks = true;
SetNumberOfBricks(NumberOfBricks() - 1); SetNumberOfBricks(NumberOfBricks() - 1);
+4
View File
@@ -287,6 +287,10 @@ bool dd::Systems::PadSystem::OnKeyDown(const dd::Events::KeyDown &event) {
e.Origin1 = glm::vec3(-5, 7, -10); e.Origin1 = glm::vec3(-5, 7, -10);
e.Origin2 = glm::vec3(5, 7, -10); e.Origin2 = glm::vec3(5, 7, -10);
e.Set = 1; e.Set = 1;
e.SetCluster = 1;
EventBroker->Publish(e);
} else if (val == GLFW_KEY_C) {
Events::BreakAllBricks e;
EventBroker->Publish(e); EventBroker->Publish(e);
} else if (val == GLFW_KEY_L) { } else if (val == GLFW_KEY_L) {
Events::Lifebuoy e; Events::Lifebuoy e;
+1 -1
View File
@@ -57,7 +57,7 @@ void dd::Systems::WaterSystem::UpdateEntity(double dt, EntityID entity, EntityID
if (transform->Position.y < m_SubmergedHeight) { if (transform->Position.y < m_SubmergedHeight) {
brickPart->Submerged = true; brickPart->Submerged = true;
m_BrickPartCounters[brickPart->NumberOfPartsInBrick]++; m_BrickPartCounters[brickPart->NumberOfPartsInBrick]++;
std::cout << "Parts: " << m_BrickPartCounters[brickPart->NumberOfPartsInBrick] << " of " << brickPart->NumberOfPartsInBrick << std::endl; //std::cout << "Parts: " << m_BrickPartCounters[brickPart->NumberOfPartsInBrick] << " of " << brickPart->NumberOfPartsInBrick << std::endl;
if (m_BrickPartCounters[brickPart->NumberOfPartsInBrick] >= brickPart->NumberOfPartsInBrick) { if (m_BrickPartCounters[brickPart->NumberOfPartsInBrick] >= brickPart->NumberOfPartsInBrick) {
m_BrickPartCounters[brickPart->NumberOfPartsInBrick] = 0; m_BrickPartCounters[brickPart->NumberOfPartsInBrick] = 0;
Events::RaiseWater e; Events::RaiseWater e;