From c2d29b6110e87aafc1e914831ae780d0f1c745b1 Mon Sep 17 00:00:00 2001 From: PlatinumSkink Date: Tue, 15 Sep 2015 17:25:47 +0200 Subject: [PATCH] Added ScoreEvent, added score to bricks. Stage resets after all bricks are destroyed. --- include/Core/World.h | 2 +- include/Game/CBrick.h | 1 + include/Game/CLife.h | 2 +- include/Game/CPad.h | 4 +++ include/Game/ELifeLost.h | 4 +-- include/Game/EResetBall.h | 25 +++++++++++++++++++ include/Game/EScoreEvent.h | 25 +++++++++++++++++++ include/Game/LevelSystem.h | 6 +++++ include/Game/PadSystem.h | 16 +++++------- src/game/CMakeLists.txt | 2 +- src/game/Core/World.cpp | 2 +- src/game/Game/LevelSystem.cpp | 39 +++++++++++++++++++++++------- src/game/Game/PadSystem.cpp | 37 ++++++++++++++-------------- src/game/Physics/PhysicsSystem.cpp | 10 ++++++++ 14 files changed, 132 insertions(+), 43 deletions(-) create mode 100644 include/Game/EResetBall.h create mode 100644 include/Game/EScoreEvent.h diff --git a/include/Core/World.h b/include/Core/World.h index b81f147..f52637c 100644 --- a/include/Core/World.h +++ b/include/Core/World.h @@ -194,7 +194,7 @@ public: // Triggers commit events in systems // TODO: Replace completely by EComponentCreated? - void CommitEntity(EntityID entity); + int CommitEntity(EntityID entity); /** Get all components of a specific type. diff --git a/include/Game/CBrick.h b/include/Game/CBrick.h index 7e7f83e..34e20d0 100644 --- a/include/Game/CBrick.h +++ b/include/Game/CBrick.h @@ -17,6 +17,7 @@ struct Brick : Component { int Points = 10; int Hits = 1; + int Score = 50; }; } diff --git a/include/Game/CLife.h b/include/Game/CLife.h index b5b6a92..dad0882 100644 --- a/include/Game/CLife.h +++ b/include/Game/CLife.h @@ -1,5 +1,5 @@ // -// Created by Administrator on 2015-09-15. +// Created by Adniklastrator on 2015-09-15. // #ifndef DAYDREAM_CLIFE_H diff --git a/include/Game/CPad.h b/include/Game/CPad.h index fef614f..9abeb8d 100644 --- a/include/Game/CPad.h +++ b/include/Game/CPad.h @@ -19,6 +19,10 @@ struct Pad : Component { int Lives; int Points; + + float slowdownModifier = 5.f; + float accelerationSpeed = 80.f; + float maxSpeed = 40.f; }; } diff --git a/include/Game/ELifeLost.h b/include/Game/ELifeLost.h index b77eee1..2c5e6d9 100644 --- a/include/Game/ELifeLost.h +++ b/include/Game/ELifeLost.h @@ -1,5 +1,5 @@ // -// Created by Administrator on 2015-09-15. +// Created by Adniklastrator on 2015-09-15. // #ifndef DAYDREAM_ELIFELOST_H @@ -16,7 +16,7 @@ namespace Events struct LifeLost : Event { - EntityID entity; + EntityID Entity; }; diff --git a/include/Game/EResetBall.h b/include/Game/EResetBall.h new file mode 100644 index 0000000..62059df --- /dev/null +++ b/include/Game/EResetBall.h @@ -0,0 +1,25 @@ +// +// Created by Adniklastrator on 2015-09-15. +// + +#ifndef DAYDREAM_ERESETBALL_H +#define DAYDREAM_ERESETBALL_H + +#include "Core/EventBroker.h" + +namespace dd +{ + +namespace Events +{ + +struct ResetBall : Event +{ + +}; + +} + +} + +#endif //DAYDREAM_ERESETBALL_H diff --git a/include/Game/EScoreEvent.h b/include/Game/EScoreEvent.h new file mode 100644 index 0000000..62ca8e5 --- /dev/null +++ b/include/Game/EScoreEvent.h @@ -0,0 +1,25 @@ +// +// Created by Adniklastrator on 2015-09-15. +// + +#ifndef DAYDREAM_ESCOREEVENT_H +#define DAYDREAM_ESCOREEVENT_H + +#include "Core/EventBroker.h" + +namespace dd +{ + +namespace Events +{ + +struct ScoreEvent : Event +{ + int score = 0; +}; + +} + +} + +#endif //DAYDREAM_ESCOREEVENT_H diff --git a/include/Game/LevelSystem.h b/include/Game/LevelSystem.h index ad04ffa..bbf4f97 100644 --- a/include/Game/LevelSystem.h +++ b/include/Game/LevelSystem.h @@ -15,6 +15,8 @@ #include "Game/CLife.h" #include "Game/EStageCleared.h" #include "Game/ELifeLost.h" +#include "Game/EResetBall.h" +#include "Game/EScoreEvent.h" #include "Physics/CBoxShape.h" #include "Physics/CPhysics.h" #include "Physics/CCircleShape.h" @@ -66,12 +68,16 @@ public: int lives = 3; int pastLives = 3; + int score = 0; + private: dd::EventRelay m_EContact; dd::EventRelay m_ELifeLost; + dd::EventRelay m_EScoreEvent; bool OnContact(const dd::Events::Contact &event); bool LifeLost(const dd::Events::LifeLost &event); + bool ScoreEvent(const dd::Events::ScoreEvent &event); bool m_Initialized = false; diff --git a/include/Game/PadSystem.h b/include/Game/PadSystem.h index 91a23e7..6b07fce 100644 --- a/include/Game/PadSystem.h +++ b/include/Game/PadSystem.h @@ -20,9 +20,8 @@ #include "Physics/ESetImpulse.h" #include "Rendering/CSprite.h" #include "Game/CBall.h" -#include "Game/ELifeLost.h" - - +#include "Game/EResetBall.h" +#include "CPad.h" namespace dd @@ -46,28 +45,25 @@ private: dd::EventRelay m_EKeyDown; dd::EventRelay m_EKeyUp; dd::EventRelay m_EContact; - dd::EventRelay m_ELifeLost; + dd::EventRelay m_EResetBall; bool OnKeyDown(const dd::Events::KeyDown &event); bool OnKeyUp(const dd::Events::KeyUp &event); + bool OnContact(const dd::Events::Contact &event); - bool LifeLost(const dd::Events::LifeLost &event); + bool ResetBall(const dd::Events::ResetBall &event); EntityID removeThisObject = NULL; - float slowdownModifier = 5.f; - float accelerationSpeed = 80.f; - float maxSpeed = 40.f; - - class PadSteeringInputController; std::array, 4> m_PadInputControllers; EntityID ent = 0; Components::Transform* transform; + Components::Pad* pad; glm::vec3 acceleration = glm::vec3(0.f, 0.f, 0.f); bool left = false, right = false, replaceBall = false; }; diff --git a/src/game/CMakeLists.txt b/src/game/CMakeLists.txt index 3c79b79..6d4797e 100755 --- a/src/game/CMakeLists.txt +++ b/src/game/CMakeLists.txt @@ -75,7 +75,7 @@ set(SOURCE_FILES ${SOURCE_FILES_Rendering} ${SOURCE_FILES_Transform} ${SOURCE_FILES_Physics} - ${SOURCE_FILES_Game} ../../include/Game/CLife.h ../../include/Game/ELifeLost.h) + ${SOURCE_FILES_Game} ../../include/Game/CLife.h ../../include/Game/ELifeLost.h ../../include/Game/EResetBall.h ../../include/Game/EScoreEvent.h) if(CMAKE_COMPILER_IS_GNUCXX) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread") diff --git a/src/game/Core/World.cpp b/src/game/Core/World.cpp index 6fc2b91..b35096b 100644 --- a/src/game/Core/World.cpp +++ b/src/game/Core/World.cpp @@ -161,7 +161,7 @@ void dd::World::Initialize() } } -void dd::World::CommitEntity(EntityID entity) +int dd::World::CommitEntity(EntityID entity) { for (auto pair : m_Systems) { diff --git a/src/game/Game/LevelSystem.cpp b/src/game/Game/LevelSystem.cpp index 7499d34..aa1d2a0 100644 --- a/src/game/Game/LevelSystem.cpp +++ b/src/game/Game/LevelSystem.cpp @@ -11,6 +11,7 @@ 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); for (int i = 0; i < lives; i++) { @@ -42,12 +43,6 @@ void dd::Systems::LevelSystem::Update(double dt) CreateBasicLevel(tRows, tLines, tSpaceBetweenBricks, tSpaceToEdge); m_Initialized = true; } - - if (entityToRemove != NULL) - { - //m_World->RemoveEntity(entityToRemove); - entityToRemove = NULL; - } } void dd::Systems::LevelSystem::UpdateEntity(double dt, EntityID entity, EntityID parent) @@ -62,8 +57,10 @@ void dd::Systems::LevelSystem::UpdateEntity(double dt, EntityID entity, EntityID if (lives == pastLives) { Events::LifeLost e; - e.entity = entity; + e.Entity = entity; EventBroker->Publish(e); + Events::ResetBall be; + EventBroker->Publish(be); return; } } @@ -116,6 +113,7 @@ void dd::Systems::LevelSystem::CreateBrick(int row, int line, glm::vec2 spacesBe float y = spaceToEdge + row * spacesBetweenBricks.y; transform->Scale = glm::vec3(1.6, 0.4, 0.); transform->Position = glm::vec3(x - 7, y + 1, -10.f); + cBrick->Score = 10 * num; m_World->CommitEntity(brick); return; } @@ -128,7 +126,7 @@ void dd::Systems::LevelSystem::ProcessCollision() void dd::Systems::LevelSystem::OnEntityRemoved(EntityID entity) { - auto brick = m_World->GetComponent(entity); + /*auto brick = m_World->GetComponent(entity); if (brick != NULL) { numberOfBricks--; @@ -136,7 +134,7 @@ void dd::Systems::LevelSystem::OnEntityRemoved(EntityID entity) { EndLevel(); } - } + }*/ return; } @@ -152,6 +150,22 @@ bool dd::Systems::LevelSystem::OnContact(const dd::Events::Contact &event) m_World->RemoveEntity(entityBrick); + numberOfBricks--; + if (numberOfBricks == 0) + { + Events::ScoreEvent es; + es.score = 500; + EventBroker->Publish(es); + Events::ResetBall e; + EventBroker->Publish(e); + CreateBasicLevel(tRows, tLines, tSpaceBetweenBricks, tSpaceToEdge); + } + Events::ScoreEvent es; + es.score = brick->Score; + EventBroker->Publish(es); + + std::cout << "Score: " << score << std::endl; + return true; } @@ -162,6 +176,13 @@ bool dd::Systems::LevelSystem::LifeLost(const dd::Events::LifeLost &event) return true; } +bool dd::Systems::LevelSystem::ScoreEvent(const dd::Events::ScoreEvent &event) +{ + score += event.score; + + return true; +} + void dd::Systems::LevelSystem::EndLevel() { Events::StageCleared e; diff --git a/src/game/Game/PadSystem.cpp b/src/game/Game/PadSystem.cpp index 0242537..c393df0 100644 --- a/src/game/Game/PadSystem.cpp +++ b/src/game/Game/PadSystem.cpp @@ -24,7 +24,7 @@ void dd::Systems::PadSystem::Initialize() EVENT_SUBSCRIBE_MEMBER(m_EKeyDown, PadSystem::OnKeyDown); EVENT_SUBSCRIBE_MEMBER(m_EKeyUp, PadSystem::OnKeyUp); EVENT_SUBSCRIBE_MEMBER(m_EContact, PadSystem::OnContact); - EVENT_SUBSCRIBE_MEMBER(m_ELifeLost, PadSystem::LifeLost); + EVENT_SUBSCRIBE_MEMBER(m_EResetBall, PadSystem::ResetBall); return; } @@ -70,30 +70,31 @@ void dd::Systems::PadSystem::Update(double dt) if (m_World->GetProperty(it->first, "Name") == "Pad") { ent = it->first; transform = m_World->GetComponent(ent); + pad = m_World->GetComponent(ent); break; } } } - if (transform->Velocity.x < -maxSpeed) + if (transform->Velocity.x < -pad->maxSpeed) { - transform->Velocity.x = -maxSpeed; + transform->Velocity.x = -pad->maxSpeed; } - else if (transform->Velocity.x > maxSpeed) + else if (transform->Velocity.x > pad->maxSpeed) { - transform->Velocity.x = maxSpeed; + transform->Velocity.x = pad->maxSpeed; } transform->Position += transform->Velocity * (float)dt; transform->Velocity += acceleration * (float)dt; - transform->Velocity -= transform->Velocity * slowdownModifier * (float)dt; + transform->Velocity -= transform->Velocity * pad->slowdownModifier * (float)dt; if (left) { - acceleration.x = -accelerationSpeed; + acceleration.x = -pad->accelerationSpeed; } else if (right) { - acceleration.x = accelerationSpeed; + acceleration.x = pad->accelerationSpeed; } else { @@ -106,27 +107,27 @@ void dd::Systems::PadSystem::Update(double dt) bool dd::Systems::PadSystem::OnKeyDown(const dd::Events::KeyDown &event) { int val = event.KeyCode; - if (val == 265) + if (val == GLFW_KEY_UP) { //std::cout << "Up!" << std::endl; } - else if (val == 264) + else if (val == GLFW_KEY_DOWN) { //std::cout << "Down!" << std::endl; } - else if (val == 263) + else if (val == GLFW_KEY_LEFT) { //std::cout << "Left!" << std::endl; //acceleration.x = -0.01f; left = true; } - else if (val == 262) + else if (val == GLFW_KEY_RIGHT) { //std::cout << "Right!" << std::endl; //acceleration.x = 0.01f; right = true; } - else if (val == 82) + else if (val == GLFW_KEY_R) { replaceBall = true; } @@ -136,19 +137,19 @@ bool dd::Systems::PadSystem::OnKeyDown(const dd::Events::KeyDown &event) bool dd::Systems::PadSystem::OnKeyUp(const dd::Events::KeyUp &event) { int val = event.KeyCode; - if (val == 265) + if (val == GLFW_KEY_UP) { } - else if (val == 264) + else if (val == GLFW_KEY_DOWN) { } - else if (val == 263) + else if (val == GLFW_KEY_LEFT) { left = false; } - else if (val == 262) + else if (val == GLFW_KEY_RIGHT) { right = false; } @@ -216,7 +217,7 @@ bool dd::Systems::PadSystem::OnContact(const dd::Events::Contact &event) EventBroker->Publish(e); } -bool dd::Systems::PadSystem::LifeLost(const dd::Events::LifeLost &event) +bool dd::Systems::PadSystem::ResetBall(const dd::Events::ResetBall &event) { replaceBall = true; return true; diff --git a/src/game/Physics/PhysicsSystem.cpp b/src/game/Physics/PhysicsSystem.cpp index 28ffc37..41d1166 100644 --- a/src/game/Physics/PhysicsSystem.cpp +++ b/src/game/Physics/PhysicsSystem.cpp @@ -52,6 +52,11 @@ void dd::Systems::PhysicsSystem::Update(double dt) if (! transformComponent) continue; + if (body == nullptr) { + //LOG_ERROR("This body should not exist"); + continue; + } + if (m_World->GetEntityParent(entity) == 0) { b2Vec2 position; @@ -86,6 +91,11 @@ void dd::Systems::PhysicsSystem::Update(double dt) EntityID entity = i.first; b2Body* body = i.second; + if (body == nullptr) { + //LOG_ERROR("This body should not exist"); + continue; + } + auto transformComponent = m_World->GetComponent(entity); if (! transformComponent) continue;