CPowerUpBrick + CPowerUp exists. Can drop from brick and be grabbed for MultiBall.

This commit is contained in:
PlatinumSkink
2015-09-22 17:55:12 +02:00
parent 2797a0f6c3
commit f6b6f05c37
10 changed files with 275 additions and 33 deletions
+103 -23
View File
@@ -10,9 +10,10 @@
void dd::Systems::LevelSystem::Initialize()
{
EVENT_SUBSCRIBE_MEMBER(m_EContact, LevelSystem::OnContact);
EVENT_SUBSCRIBE_MEMBER(m_ELifeLost, LevelSystem::LifeLost);
EVENT_SUBSCRIBE_MEMBER(m_EScoreEvent, LevelSystem::ScoreEvent);
EVENT_SUBSCRIBE_MEMBER(m_EMultiBall, LevelSystem::MultiBall);
EVENT_SUBSCRIBE_MEMBER(m_ELifeLost, LevelSystem::OnLifeLost);
EVENT_SUBSCRIBE_MEMBER(m_EScoreEvent, LevelSystem::OnScoreEvent);
EVENT_SUBSCRIBE_MEMBER(m_EMultiBall, LevelSystem::OnMultiBall);
EVENT_SUBSCRIBE_MEMBER(m_ECreatePowerUp, LevelSystem::OnCreatePowerUp);
for (int i = 0; i < Lives(); i++) {
CreateLife(i);
@@ -46,6 +47,13 @@ void dd::Systems::LevelSystem::Update(double dt)
CreateBasicLevel(Rows(), Lines(), SpaceBetweenBricks(), SpaceToEdge());
m_Initialized = true;
}
if (Lives() < 0)
{
Events::GameOver e;
EventBroker->Publish(e);
std::cout << "Game Over!" << std::endl;
}
}
void dd::Systems::LevelSystem::UpdateEntity(double dt, EntityID entity, EntityID parent)
@@ -55,7 +63,10 @@ void dd::Systems::LevelSystem::UpdateEntity(double dt, EntityID entity, EntityID
if (ball != NULL) {
auto transformBall = m_World->GetComponent<Components::Transform>(entity);
if (transformBall->Position.y < -10) {
if (Lives() == PastLives()) {
if (MultiBalls() != 0) {
SetMultiBalls(MultiBalls() - 1);
m_World->RemoveEntity(entity);
} else if (Lives() == PastLives()) {
Events::LifeLost e;
e.Entity = entity;
EventBroker->Publish(e);
@@ -75,6 +86,21 @@ void dd::Systems::LevelSystem::UpdateEntity(double dt, EntityID entity, EntityID
}
}
}
if (NumberOfBricks() <= 0) {
if (MultiBalls() <= 0) {
Events::ScoreEvent es;
es.Score = 500;
EventBroker->Publish(es);
Events::ResetBall e;
EventBroker->Publish(e);
CreateBasicLevel(Rows(), Lines(), SpaceBetweenBricks(), SpaceToEdge());
} else {
if (ball != NULL) {
SetMultiBalls(MultiBalls() - 1);
m_World->RemoveEntity(entity);
}
}
}
}
void dd::Systems::LevelSystem::CreateBasicLevel(int rows, int lines, glm::vec2 spacesBetweenBricks, int spaceToEdge)
@@ -107,6 +133,9 @@ 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) {
std::shared_ptr<Components::PowerUpBrick> cPow = m_World->AddComponent<Components::PowerUpBrick>(brick);
}
float x = spaceToEdge + line * spacesBetweenBricks.x;
float y = spaceToEdge + row * spacesBetweenBricks.y;
transform->Scale = glm::vec3(1.6, 0.35, 0.5);
@@ -141,50 +170,101 @@ void dd::Systems::LevelSystem::OnEntityRemoved(EntityID entity)
bool dd::Systems::LevelSystem::OnContact(const dd::Events::Contact &event)
{
EntityID entityBrick = event.Entity1;
auto brick = m_World->GetComponent<Components::Brick>(entityBrick);
EntityID entityBrick;
EntityID entityBall;
auto ball = m_World->GetComponent<Components::Ball>(event.Entity2);
auto brick = m_World->GetComponent<Components::Brick>(event.Entity1);
if (brick != NULL) {
entityBrick = event.Entity1;
} else {
brick = m_World->GetComponent<Components::Brick>(event.Entity2);
if (brick != NULL) {
entityBrick = event.Entity2;
} else {
return false;
}
}
if (ball != NULL) {
entityBall = event.Entity2;
} else {
ball = m_World->GetComponent<Components::Ball>(event.Entity1);
if (ball != NULL) {
entityBall = event.Entity1;
} else {
return false;
}
}
brick = m_World->GetComponent<Components::Brick>(entityBrick);
if (brick == NULL) {
return false;
}
EntityID entityBall = event.Entity2;
m_World->RemoveEntity(entityBrick);
SetNumberOfBricks(NumberOfBricks() - 1);
if (NumberOfBricks() == 0) {
Events::ScoreEvent es;
es.Score = 500;
EventBroker->Publish(es);
Events::ResetBall e;
auto power = m_World->GetComponent<Components::PowerUpBrick>(entityBrick);
if (power != NULL) {
Events::CreatePowerUp e;
auto transform = m_World->GetComponent<Components::Transform>(entityBrick);
e.Position = transform->Position;
EventBroker->Publish(e);
CreateBasicLevel(Rows(), Lines(), SpaceBetweenBricks(), SpaceToEdge());
}
Events::ScoreEvent es;
es.Score = brick->Score;
EventBroker->Publish(es);
std::cout << "Score: " << Score() << std::endl;
if (ball)
{
m_World->RemoveEntity(entityBrick);
SetNumberOfBricks(NumberOfBricks() - 1);
Events::ScoreEvent es;
es.Score = brick->Score;
EventBroker->Publish(es);
std::cout << "Score: " << Score() << std::endl;
}
return true;
}
bool dd::Systems::LevelSystem::LifeLost(const dd::Events::LifeLost &event)
bool dd::Systems::LevelSystem::OnLifeLost(const dd::Events::LifeLost &event)
{
SetLives(Lives() - 1);
return true;
}
bool dd::Systems::LevelSystem::ScoreEvent(const dd::Events::ScoreEvent &event)
bool dd::Systems::LevelSystem::OnScoreEvent(const dd::Events::ScoreEvent &event)
{
SetScore(Score() += event.Score);
return true;
}
bool dd::Systems::LevelSystem::MultiBall(const dd::Events::MultiBall &event)
bool dd::Systems::LevelSystem::OnMultiBall(const dd::Events::MultiBall &event)
{
SetMultiBalls(MultiBalls()+2);
}
bool dd::Systems::LevelSystem::OnCreatePowerUp(const dd::Events::CreatePowerUp &event)
{
auto powerUp = m_World->CreateEntity();
std::shared_ptr<Components::Transform> transform = m_World->AddComponent<Components::Transform>(powerUp);
auto model = m_World->AddComponent<Components::Model>(powerUp);
std::shared_ptr<Components::CircleShape> cRec = m_World->AddComponent<Components::CircleShape>(powerUp);
std::shared_ptr<Components::Physics> cPhys = m_World->AddComponent<Components::Physics>(powerUp);
std::shared_ptr<Components::PowerUp> cPow = m_World->AddComponent<Components::PowerUp>(powerUp);
cPhys->Static = false;
transform->Position = event.Position;
transform->Scale = glm::vec3(0.25, 0.25, 0.25);
model->ModelFile = "Models/Test/Ball/Ballopus.obj";
m_World->CommitEntity(powerUp);
Events::SetImpulse e;
e.Entity = powerUp;
e.Impulse = glm::vec2(0, -0.25);
e.Point = glm::vec2(transform->Position.x, transform->Position.y);
EventBroker->Publish(e);
return true;
}
void dd::Systems::LevelSystem::EndLevel()