Kraken Battle Implemented. Feel free to comment.

To get to battle faster, change CurrentCluster to 0.
This commit is contained in:
PlatinumSkink
2015-10-20 15:57:06 +02:00
parent b4f098c80d
commit e26156c093
6 changed files with 168 additions and 56 deletions
+2 -1
View File
@@ -15,7 +15,8 @@ namespace Events
struct BrickGenerating : Event
{
glm::vec3 Origin;
glm::vec3 Origin1;
glm::vec3 Origin2;
int TargetLine;
int Set;
};
+4 -3
View File
@@ -62,12 +62,13 @@ private:
bool m_ReturnToIdle = false;
EntityID m_KrakenTemplate;
std::string m_Action = "Idle";
int m_NumberOfActions;
float m_KrakenTimer = 0;
float m_KrakenSecondsToAction = 1;
float m_KrakenSecondsToAction = 10;
const int Idle = 1;
std::array<int, 14> m_Bricks;
std::array<int, 14> m_Colors;
std::array<int, 42> m_Bricks;
std::array<int, 42> m_Colors;
dd::EventRelay<KrakenSystem, dd::Events::Pause> m_EPause;
dd::EventRelay<KrakenSystem, dd::Events::Resume> m_EResume;
+7 -2
View File
@@ -172,8 +172,12 @@ private:
std::array<int, 42> m_Bricks;
std::array<glm::vec4, 42> m_Colors;
std::array<int, 14> m_BrickSet;
std::array<glm::vec4, 14> m_ColorSet;
std::array<int, 42> m_BrickSet;
std::array<glm::vec4, 42> m_ColorSet;
std::array<bool, 42> m_KrakenBricks;
bool m_BrickGenerating = false;
dd::Events::BrickGenerating m_BrickGeneratingEvent;
dd::EventRelay<LevelSystem, dd::Events::Contact> m_EContact;
dd::EventRelay<LevelSystem, dd::Events::ScoreEvent> m_EScoreEvent;
@@ -201,6 +205,7 @@ private:
bool OnResume(const dd::Events::Resume &event);
bool OnHitPad(const dd::Events::HitPad &event);
bool OnBrickGenerating(const dd::Events::BrickGenerating &event);
bool BrickGenerating(const dd::Events::BrickGenerating &event);
void GetBrickSet(int Set);
bool OnKrakenDefeated(const dd::Events::KrakenDefeated &event);
+34 -7
View File
@@ -80,10 +80,14 @@ void dd::Systems::KrakenSystem::UpdateEntity(double dt, EntityID entity, EntityI
switch (kraken->CurrentAction)
{
case 1: // Idle
//m_KrakenTimer += dt;
m_KrakenTimer += dt;
if (m_KrakenTimer > m_KrakenSecondsToAction) {
if (m_NumberOfActions == 0) {
kraken->CurrentAction = 3;
break;
}
m_KrakenTimer = 0;
std::uniform_real_distribution<float> dist(1, 2.999f);
std::uniform_real_distribution<float> dist(1, 4.999f);
float random = dist(m_RandomGenerator);
//std::cout << random << std::endl;
kraken->CurrentAction = random;
@@ -98,9 +102,29 @@ void dd::Systems::KrakenSystem::UpdateEntity(double dt, EntityID entity, EntityI
EventBroker->Publish(krakenAttack);
break;
case 3: // Brick Generating
{
kraken->CurrentAction = 1;
Events::BrickGenerating e;
e.Origin1 = glm::vec3(-5, 7, -10);
e.Origin2 = glm::vec3(5, 7, -10);
std::uniform_real_distribution<float> dist(1, 5.999f);
float random = dist(m_RandomGenerator);
e.Set = random;
EventBroker->Publish(e);
break;
case 4: // Moving
}
case 4: // Brick Generating second case
{
kraken->CurrentAction = 1;
Events::BrickGenerating e;
e.Origin1 = glm::vec3(-5, 7, -10);
e.Origin2 = glm::vec3(5, 7, -10);
std::uniform_real_distribution<float> dist(1, 5.999f);
float random = dist(m_RandomGenerator);
e.Set = random;
EventBroker->Publish(e);
break;
}
case 5: // Taunting
if (m_ReturnToIdle) {
m_ReturnToIdle = false;
@@ -166,6 +190,9 @@ bool dd::Systems::KrakenSystem::OnContact(const dd::Events::Contact &event)
Events::KrakenHit e;
e.Kraken = krakenEntity;
e.Hitter = otherEntitiy;
e.MaxHealth = kraken->MaxHealth;
e.CurrentHealth = kraken->Health;
e.NewHealth = kraken->Health - 1;
EventBroker->Publish(e);
}
}
@@ -191,9 +218,9 @@ bool dd::Systems::KrakenSystem::OnKrakenAttack(const dd::Events::KrakenAttack &e
bool dd::Systems::KrakenSystem::OnKrakenHit(const dd::Events::KrakenHit &event)
{
auto kraken = m_World->GetComponent<Components::Kraken>(event.Kraken);
//kraken->Health--;
kraken->Health--;
//std::cout << kraken->Health << std::endl;
kraken->Health = -1;
//kraken->Health = -1;
if (kraken->Health < 0) {
Events::KrakenDefeated e;
e.Kraken = event.Kraken;
@@ -210,9 +237,9 @@ bool dd::Systems::KrakenSystem::OnKrakenDefeated(const dd::Events::KrakenDefeate
auto kraken = m_World->GetComponent<Components::Kraken>(event.Kraken);
auto physicsComponent = m_World->GetComponent<Components::Physics>(event.Kraken);
/*physicsComponent->CollisionType = CollisionType::Type::Dynamic;
physicsComponent->GravityScale = 1.f;
physicsComponent->GravityScale = 1.f;*/
physicsComponent->Mask = static_cast<CollisionLayer::Type>(CollisionLayer::Water | CollisionLayer::Wall);
physicsComponent->Calculate = false;*/
/*physicsComponent->Calculate = false;*/
auto transformComponentBrick = m_World->GetComponent<Components::Transform>(event.Kraken);
auto transformComponentHitter = m_World->GetComponent<Components::Transform>(event.Hitter);
+107 -30
View File
@@ -248,6 +248,9 @@ void dd::Systems::LevelSystem::Update(double dt)
if (!m_Initialized) {
GetNextLevel();
CreateLevel(0);
for (int i = 0; i < m_KrakenBricks.size(); i++) {
m_KrakenBricks[i] = false;
}
m_Initialized = true;
}
}
@@ -456,20 +459,34 @@ EntityID dd::Systems::LevelSystem::CreateBrick(int row, int line, glm::vec2 spac
bool dd::Systems::LevelSystem::OnBrickGenerating(const dd::Events::BrickGenerating &event)
{
GetBrickSet(event.Set);
LOG_DEBUG("This is happening.");
m_BrickGenerating = true;
m_BrickGeneratingEvent = event;
return true;
}
int rows = 2;
bool dd::Systems::LevelSystem::BrickGenerating(const dd::Events::BrickGenerating &event)
{
GetBrickSet(event.Set);
int rows = 6;
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 (!m_KrakenBricks[getter]) {
auto ent = CreateBrick(i, j, SpaceBetweenBricks(), SpaceToEdge(), -3.2, 1, m_BrickSet[getter], m_ColorSet[getter]);
if (ent != NULL) {
auto brick = m_World->GetComponent<Components::Brick>(ent);
brick->Number = getter;
m_KrakenBricks[getter] = true;
auto transform = m_World->GetComponent<Components::Transform>(ent);
Events::Move e;
e.GoalPosition = transform->Position;
transform->Position = event.Origin;
if (j < 4) {
transform->Position = event.Origin1;
} else {
transform->Position = event.Origin2;
}
e.Entity = ent;
e.Speed = 6;
e.Queue = false;
@@ -477,16 +494,17 @@ bool dd::Systems::LevelSystem::OnBrickGenerating(const dd::Events::BrickGenerati
m_LooseBricks++;
SetNumberOfBricks(NumberOfBricks() + 1);
}
}
getter++;
}
}
return true;
}
void dd::Systems::LevelSystem::GetBrickSet(int set)
void dd::Systems::LevelSystem::GetBrickSet(int set) // These are sets the Kraken gets!
{
std::array<int, 14> level;
std::array<glm::vec4, 14> color;
std::array<int, 42> level;
std::array<glm::vec4, 42> color;
// Level array indicates type of brick.
// 0 is empty space.
// 1 is standard brick.
@@ -517,51 +535,99 @@ void dd::Systems::LevelSystem::GetBrickSet(int set)
if (set == 1) {
level =
{1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1 };
{1, 0, 0, 0, 0, 0, 1,
1, 0, 0, 0, 0, 0, 1,
1, 0, 0, 0, 0, 0, 1,
1, 1, 1, 1, 1, 1, 2,
1, 1, 1, 1, 1, 1, 1,
0, 0, 0, 0, 0, 0, 0};
color =
{r, r, r, r, r, r, r,
r, r, r, r, r, r, r };
r, r, r, r, r, r, r,
r, r, r, r, r, r, r,
r, r, r, r, r, r, r,
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 };
{0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0,
3, 0, 1, 0, 1, 0, 1,
0, 1, 0, 1, 0, 1, 0,
1, 0, 1, 0, 1, 0, 1,
0, 0, 0, 0, 0, 0, 0};
color =
{w, w, w, w, w, w, w,
w, w, w, w, w, w, w };
{y, y, y, y, y, y, y,
y, y, y, y, y, y, y,
y, y, y, y, y, y, y,
y, y, y, y, y, y, y,
y, y, y, y, y, y, y,
y, y, y, y, y, y, y};
}
else if (set == 3) {
level =
{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,
0, 1, 1, 1, 1, 1, 0,
0, 0, 4, 1, 1, 0, 0,
0, 0, 0, 1, 0, 0, 0};
color =
{w, w, w, w, w, w, w,
w, w, w, w, w, w, w };
{b, b, b, b, b, b, b,
b, b, b, b, b, b, b,
b, b, b, b, b, b, b,
b, b, b, b, b, b, b,
b, b, b, b, b, b, b,
b, b, b, b, b, b, b};
}
else if (set == 4) {
level =
{0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 };
1, 1, 1, 1, 1, 3, 1,
0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 1, 1, 1,
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 };
{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,
m, m, m, m, m, m, m,
m, m, m, m, m, m, m};
}
else if (set == 5) {
level =
{0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 };
0, 1, 1, 0, 1, 1, 0,
0, 1, 2, 0, 1, 1, 0,
0, 1, 1, 0, 1, 1, 0,
0, 1, 1, 0, 1, 1, 0,
0, 0, 0, 0, 0, 0, 0};
color =
{w, w, w, w, w, w, w,
w, w, w, w, w, w, w };
{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,
g, g, g, g, g, g, g,
g, g, g, g, g, g, g};
}
else if (set == 6) {
level =
{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,
0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1,
0, 0, 0, 0, 0, 0, 0};
color =
{w, w, w, w, w, w, w,
w, w, w, w, w, w, w };
{r, r, r, r, r, r, r,
r, r, r, r, r, r, r,
r, r, r, r, r, r, r,
r, r, r, r, r, r, r,
r, r, r, r, r, r, r,
r, r, r, r, r, r, r};
}
std::copy(std::begin(level), std::end(level), std::begin(m_BrickSet));
@@ -576,6 +642,11 @@ void dd::Systems::LevelSystem::OnEntityRemoved(EntityID entity)
bool dd::Systems::LevelSystem::OnContact(const dd::Events::Contact &event)
{
auto templateCheck = m_World->GetComponent<Components::Template>(event.Entity1);
if (templateCheck != nullptr){ return false; }
templateCheck = m_World->GetComponent<Components::Template>(event.Entity2);
if (templateCheck != nullptr){ return false; }
EntityID entityBrick;
EntityID entityBall;
EntityID entityShot = 0;
@@ -653,10 +724,12 @@ void dd::Systems::LevelSystem::BrickHit(EntityID entityHitter, EntityID entityBr
auto transformComponentBrick = m_World->GetComponent<Components::Transform>(entityBrick);
auto transformComponentHitter = m_World->GetComponent<Components::Transform>(entityHitter);
auto brickModel = m_World->GetComponent<Components::Model>(entityBrick);
if (brick->Number < 50) {
m_KrakenBricks[brick->Number] = false;
}
// Check if the brick is any kind of special.
auto multi = m_World->GetComponent<Components::MultiBallBrick>(entityBrick);
if (multi != nullptr) {
@@ -1121,6 +1194,10 @@ void dd::Systems::LevelSystem::GetNextLevel()
bool dd::Systems::LevelSystem::OnHitPad(const dd::Events::HitPad &event)
{
m_Cleared = false;
if (m_BrickGenerating) {
m_BrickGenerating = false;
BrickGenerating(m_BrickGeneratingEvent);
}
return true;
}
+2 -1
View File
@@ -271,7 +271,8 @@ bool dd::Systems::PadSystem::OnKeyDown(const dd::Events::KeyDown &event) {
EventBroker->Publish(e);
} else if (val == GLFW_KEY_G) {
Events::BrickGenerating e;
e.Origin = glm::vec3(-5, 7, -10);
e.Origin1 = glm::vec3(-5, 7, -10);
e.Origin2 = glm::vec3(5, 7, -10);
e.Set = 1;
EventBroker->Publish(e);
} else if (val == GLFW_KEY_L) {