Merge branch 'master' of github.com:teamfisk/AgileBreakOut

This commit is contained in:
viktorljung
2015-10-23 15:36:33 +02:00
10 changed files with 191 additions and 94 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;
}; };
} }
+3 -3
View File
@@ -15,9 +15,9 @@ namespace Events
struct ScreenShake : Event struct ScreenShake : Event
{ {
float Time; float Time = 1.f;
int Intensity; float Intensity = 1.f;
float TimeTakenToCoolDown; float TimeTakenToCoolDown = 1.f;
}; };
} }
+5
View File
@@ -33,6 +33,7 @@
#include "Game/CKraken.h" #include "Game/CKraken.h"
#include "Game/CBall.h" #include "Game/CBall.h"
#include "Game/CProjectile.h" #include "Game/CProjectile.h"
#include "Game/EScreenShake.h"
#include "Sound/CCollisionSound.h" #include "Sound/CCollisionSound.h"
#include "Rendering/CAnimation.h" #include "Rendering/CAnimation.h"
#include "Rendering/CSprite.h" #include "Rendering/CSprite.h"
@@ -67,6 +68,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 +78,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;
+5 -1
View File
@@ -60,6 +60,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"
@@ -102,7 +103,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);
@@ -181,6 +182,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;
@@ -195,6 +197,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);
@@ -210,6 +213,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
+72 -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;
} }
@@ -261,6 +289,13 @@ bool dd::Systems::KrakenSystem::OnKrakenAppear(const dd::Events::KrakenAppear &e
transform->Position = event.Position; transform->Position = event.Position;
transform->Position.y += 3.f; transform->Position.y += 3.f;
m_KrakenBattle = true; m_KrakenBattle = true;
Events::ScreenShake e;
e.Intensity = 10;
e.Time = 2;
e.TimeTakenToCoolDown = 6;
EventBroker->Publish(e);
return true; return true;
} }
@@ -269,6 +304,13 @@ bool dd::Systems::KrakenSystem::OnKrakenAttack(const dd::Events::KrakenAttack &e
if (event.ChargeUpdate >= 1) { if (event.ChargeUpdate >= 1) {
m_ReturnToIdle = true; m_ReturnToIdle = true;
} }
Events::ScreenShake e;
e.Intensity = 2;
e.Time = 0.5f;
e.TimeTakenToCoolDown = 3.f;
EventBroker->Publish(e);
return true; return true;
} }
@@ -277,6 +319,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.
@@ -339,12 +382,21 @@ bool dd::Systems::KrakenSystem::OnKrakenHit(const dd::Events::KrakenHit &event)
e.Hitter = event.Hitter; e.Hitter = event.Hitter;
EventBroker->Publish(e); EventBroker->Publish(e);
} }
Events::ScreenShake e;
e.Intensity = 2;
e.Time = 0.2f;
e.TimeTakenToCoolDown = 1.5f;
EventBroker->Publish(e);
return false; return false;
} }
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);
+98 -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);
@@ -77,8 +78,20 @@ void dd::Systems::LevelSystem::Initialize()
auto t_halfPipe2 = m_World->CloneEntity(t_halfPipe); auto t_halfPipe2 = m_World->CloneEntity(t_halfPipe);
auto transform2 = m_World->GetComponent<Components::Transform>(t_halfPipe); auto transform2 = m_World->GetComponent<Components::Transform>(t_halfPipe);
transform2->Position = glm::vec3(0.f, 34.6f, -15.f); //Halfpipe Value transform2->Position = glm::vec3(0.f, 34.6f, -15.f); //Halfpipe Value
// Added to prevent white borders around screen shake
{
auto halfPipeBackground = m_World->CreateEntity();
auto transform = m_World->AddComponent<Components::Transform>(halfPipeBackground);
transform->Position = glm::vec3(0.f, 0.f, -15.f);
transform->Scale = glm::vec3(6.f, 6.f, 10.f) * 2.f;
auto model = m_World->AddComponent<Components::Model>(halfPipeBackground);
model->ModelFile = "Models/Halfpipe.obj";
m_World->CommitEntity(halfPipeBackground);
}
} }
//Background //Background
/*{ /*{
@@ -288,12 +301,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);
} }
} }
@@ -345,7 +364,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;
@@ -486,6 +505,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;
@@ -500,6 +520,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;
@@ -532,7 +553,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++;
@@ -545,6 +566,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;
@@ -596,10 +623,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,
@@ -613,8 +640,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,
@@ -626,11 +653,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,
@@ -641,11 +668,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,
@@ -656,7 +683,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,
@@ -674,8 +701,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 =
@@ -689,7 +716,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 };
@@ -704,7 +731,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 };
@@ -718,9 +745,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 =
@@ -734,9 +761,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,
@@ -749,8 +776,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 =
@@ -764,11 +791,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,
@@ -780,7 +807,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,
@@ -794,11 +821,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,
@@ -810,11 +837,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,
@@ -825,10 +852,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,
@@ -839,10 +866,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 =
@@ -921,7 +948,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;
@@ -937,13 +964,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);
@@ -960,47 +987,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 {
}
} }
} }
} }
@@ -1137,6 +1166,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
@@ -292,6 +292,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;