diff --git a/include/Game/LevelSystem.h b/include/Game/LevelSystem.h index 9086c5b..7eefcce 100755 --- a/include/Game/LevelSystem.h +++ b/include/Game/LevelSystem.h @@ -82,6 +82,8 @@ public: void SetPastLives(const int& pastLives) { m_PastLives = pastLives; } int& MultiBalls() { return m_MultiBalls; } void SetMultiBalls(const int& multiBalls) { m_MultiBalls = multiBalls; } + int& PowerUps() { return m_PowerUps; } + void SetPowerUps(const int& powerUps) { m_PowerUps = powerUps; } int& Score() { return m_Score; } void SetScore(const int& score) { m_Score = score; } int& NumberOfBricks() { return m_NumberOfBricks; } @@ -101,6 +103,7 @@ private: int m_Lives = 3; int m_PastLives = 3; int m_MultiBalls = 0; + int m_PowerUps = 0; int m_Score = 0; int m_NumberOfBricks; int m_Rows = 7; diff --git a/src/game/Game/LevelSystem.cpp b/src/game/Game/LevelSystem.cpp index 9763e7a..1627e8f 100755 --- a/src/game/Game/LevelSystem.cpp +++ b/src/game/Game/LevelSystem.cpp @@ -50,9 +50,9 @@ void dd::Systems::LevelSystem::Update(double dt) if (Lives() < 0) { + SetLives(3); Events::GameOver e; EventBroker->Publish(e); - std::cout << "Game Over!" << std::endl; } } @@ -62,7 +62,7 @@ void dd::Systems::LevelSystem::UpdateEntity(double dt, EntityID entity, EntityID if (ball != NULL) { auto transformBall = m_World->GetComponent(entity); - if (transformBall->Position.y < -10) { + if (transformBall->Position.y < -10 || glm::abs(transformBall->Position.x) > 10) { if (MultiBalls() != 0) { SetMultiBalls(MultiBalls() - 1); m_World->RemoveEntity(entity); @@ -87,7 +87,7 @@ void dd::Systems::LevelSystem::UpdateEntity(double dt, EntityID entity, EntityID } } if (NumberOfBricks() <= 0) { - if (MultiBalls() <= 0) { + if (MultiBalls() <= 0 && PowerUps() <= 0) { Events::ScoreEvent es; es.Score = 500; EventBroker->Publish(es); @@ -95,9 +95,15 @@ void dd::Systems::LevelSystem::UpdateEntity(double dt, EntityID entity, EntityID EventBroker->Publish(e); CreateBasicLevel(Rows(), Lines(), SpaceBetweenBricks(), SpaceToEdge()); } else { - if (ball != NULL) { + if (ball != NULL && MultiBalls() > 0) { SetMultiBalls(MultiBalls() - 1); m_World->RemoveEntity(entity); + } else { + auto powerUp = m_World->GetComponent(entity); + if (powerUp != NULL) { + SetPowerUps(PowerUps() - 1); + m_World->RemoveEntity(entity); + } } } } @@ -133,7 +139,7 @@ void dd::Systems::LevelSystem::CreateBrick(int row, int line, glm::vec2 spacesBe fileName.append(".png"); //sprite->SpriteFile = fileName; model->ModelFile = "Models/Test/Brick/Brick.obj"; - if (line == 1) { + if ((line == 1 && row == 4) || (line == 3 && row == 2) || (line == 6 && row == 6)) { std::shared_ptr cPow = m_World->AddComponent(brick); } float x = spaceToEdge + line * spacesBetweenBricks.x; @@ -208,8 +214,7 @@ bool dd::Systems::LevelSystem::OnContact(const dd::Events::Contact &event) EventBroker->Publish(e); } - if (ball) - { + if (ball != NULL) { m_World->RemoveEntity(entityBrick); SetNumberOfBricks(NumberOfBricks() - 1); @@ -244,6 +249,7 @@ bool dd::Systems::LevelSystem::OnMultiBall(const dd::Events::MultiBall &event) bool dd::Systems::LevelSystem::OnCreatePowerUp(const dd::Events::CreatePowerUp &event) { + SetPowerUps(PowerUps() + 1); auto powerUp = m_World->CreateEntity(); std::shared_ptr transform = m_World->AddComponent(powerUp); auto model = m_World->AddComponent(powerUp); diff --git a/src/game/Game/PadSystem.cpp b/src/game/Game/PadSystem.cpp index 52cd7bb..c044131 100755 --- a/src/game/Game/PadSystem.cpp +++ b/src/game/Game/PadSystem.cpp @@ -38,7 +38,7 @@ void dd::Systems::PadSystem::UpdateEntity(double dt, EntityID entity, EntityID p SetReplaceBall(false); auto transformEntity = m_World->GetComponent(entity); - transformEntity->Position = glm::vec3(20, 20, -10); + transformEntity->Position = glm::vec3(0, 20, -10); m_World->RemoveEntity(entity); @@ -263,8 +263,15 @@ bool dd::Systems::PadSystem::OnMultiBall(const dd::Events::MultiBall &event) auto transform1 = m_World->GetComponent(ent1); auto transform2 = m_World->GetComponent(ent2); auto padTransform = event.padTransform; - transform1->Position = glm::vec3(padTransform->Position.x - 4, -5, -10); - transform2->Position = glm::vec3(padTransform->Position.x + 4, -5, -10); + float x1 = padTransform->Position.x - 6, x2 = padTransform->Position.x + 6; + if (x1 < -7) { + x1 = 7; + } + if (x2 > 7) { + x2 = -7; + } + transform1->Position = glm::vec3(x1, -5, -10); + transform2->Position = glm::vec3(x2, -5, -10); Events::SetImpulse e1; e1.Entity = ent1;