Added ScoreEvent, added score to bricks. Stage resets after all bricks are destroyed.

This commit is contained in:
PlatinumSkink
2015-09-15 17:25:47 +02:00
parent b340cf97bb
commit c2d29b6110
14 changed files with 132 additions and 43 deletions
+1 -1
View File
@@ -194,7 +194,7 @@ public:
// Triggers commit events in systems // Triggers commit events in systems
// TODO: Replace completely by EComponentCreated? // TODO: Replace completely by EComponentCreated?
void CommitEntity(EntityID entity); int CommitEntity(EntityID entity);
/** Get all components of a specific type. /** Get all components of a specific type.
+1
View File
@@ -17,6 +17,7 @@ struct Brick : Component
{ {
int Points = 10; int Points = 10;
int Hits = 1; int Hits = 1;
int Score = 50;
}; };
} }
+1 -1
View File
@@ -1,5 +1,5 @@
// //
// Created by Administrator on 2015-09-15. // Created by Adniklastrator on 2015-09-15.
// //
#ifndef DAYDREAM_CLIFE_H #ifndef DAYDREAM_CLIFE_H
+4
View File
@@ -19,6 +19,10 @@ struct Pad : Component
{ {
int Lives; int Lives;
int Points; int Points;
float slowdownModifier = 5.f;
float accelerationSpeed = 80.f;
float maxSpeed = 40.f;
}; };
} }
+2 -2
View File
@@ -1,5 +1,5 @@
// //
// Created by Administrator on 2015-09-15. // Created by Adniklastrator on 2015-09-15.
// //
#ifndef DAYDREAM_ELIFELOST_H #ifndef DAYDREAM_ELIFELOST_H
@@ -16,7 +16,7 @@ namespace Events
struct LifeLost : Event struct LifeLost : Event
{ {
EntityID entity; EntityID Entity;
}; };
+25
View File
@@ -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
+25
View File
@@ -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
+6
View File
@@ -15,6 +15,8 @@
#include "Game/CLife.h" #include "Game/CLife.h"
#include "Game/EStageCleared.h" #include "Game/EStageCleared.h"
#include "Game/ELifeLost.h" #include "Game/ELifeLost.h"
#include "Game/EResetBall.h"
#include "Game/EScoreEvent.h"
#include "Physics/CBoxShape.h" #include "Physics/CBoxShape.h"
#include "Physics/CPhysics.h" #include "Physics/CPhysics.h"
#include "Physics/CCircleShape.h" #include "Physics/CCircleShape.h"
@@ -66,12 +68,16 @@ public:
int lives = 3; int lives = 3;
int pastLives = 3; int pastLives = 3;
int score = 0;
private: private:
dd::EventRelay<LevelSystem, dd::Events::Contact> m_EContact; dd::EventRelay<LevelSystem, dd::Events::Contact> m_EContact;
dd::EventRelay<LevelSystem, dd::Events::LifeLost> m_ELifeLost; dd::EventRelay<LevelSystem, dd::Events::LifeLost> m_ELifeLost;
dd::EventRelay<LevelSystem, dd::Events::ScoreEvent> m_EScoreEvent;
bool OnContact(const dd::Events::Contact &event); bool OnContact(const dd::Events::Contact &event);
bool LifeLost(const dd::Events::LifeLost &event); bool LifeLost(const dd::Events::LifeLost &event);
bool ScoreEvent(const dd::Events::ScoreEvent &event);
bool m_Initialized = false; bool m_Initialized = false;
+6 -10
View File
@@ -20,9 +20,8 @@
#include "Physics/ESetImpulse.h" #include "Physics/ESetImpulse.h"
#include "Rendering/CSprite.h" #include "Rendering/CSprite.h"
#include "Game/CBall.h" #include "Game/CBall.h"
#include "Game/ELifeLost.h" #include "Game/EResetBall.h"
#include "CPad.h"
namespace dd namespace dd
@@ -46,28 +45,25 @@ private:
dd::EventRelay<PadSystem, dd::Events::KeyDown> m_EKeyDown; dd::EventRelay<PadSystem, dd::Events::KeyDown> m_EKeyDown;
dd::EventRelay<PadSystem, dd::Events::KeyUp> m_EKeyUp; dd::EventRelay<PadSystem, dd::Events::KeyUp> m_EKeyUp;
dd::EventRelay<PadSystem, dd::Events::Contact> m_EContact; dd::EventRelay<PadSystem, dd::Events::Contact> m_EContact;
dd::EventRelay<PadSystem, dd::Events::LifeLost> m_ELifeLost; dd::EventRelay<PadSystem, dd::Events::ResetBall> m_EResetBall;
bool OnKeyDown(const dd::Events::KeyDown &event); bool OnKeyDown(const dd::Events::KeyDown &event);
bool OnKeyUp(const dd::Events::KeyUp &event); bool OnKeyUp(const dd::Events::KeyUp &event);
bool OnContact(const dd::Events::Contact &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; EntityID removeThisObject = NULL;
float slowdownModifier = 5.f;
float accelerationSpeed = 80.f;
float maxSpeed = 40.f;
class PadSteeringInputController; class PadSteeringInputController;
std::array<std::shared_ptr<PadSteeringInputController>, 4> m_PadInputControllers; std::array<std::shared_ptr<PadSteeringInputController>, 4> m_PadInputControllers;
EntityID ent = 0; EntityID ent = 0;
Components::Transform* transform; Components::Transform* transform;
Components::Pad* pad;
glm::vec3 acceleration = glm::vec3(0.f, 0.f, 0.f); glm::vec3 acceleration = glm::vec3(0.f, 0.f, 0.f);
bool left = false, right = false, replaceBall = false; bool left = false, right = false, replaceBall = false;
}; };
+1 -1
View File
@@ -75,7 +75,7 @@ set(SOURCE_FILES
${SOURCE_FILES_Rendering} ${SOURCE_FILES_Rendering}
${SOURCE_FILES_Transform} ${SOURCE_FILES_Transform}
${SOURCE_FILES_Physics} ${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) if(CMAKE_COMPILER_IS_GNUCXX)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")
+1 -1
View File
@@ -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) for (auto pair : m_Systems)
{ {
+30 -9
View File
@@ -11,6 +11,7 @@ void dd::Systems::LevelSystem::Initialize()
{ {
EVENT_SUBSCRIBE_MEMBER(m_EContact, LevelSystem::OnContact); EVENT_SUBSCRIBE_MEMBER(m_EContact, LevelSystem::OnContact);
EVENT_SUBSCRIBE_MEMBER(m_ELifeLost, LevelSystem::LifeLost); EVENT_SUBSCRIBE_MEMBER(m_ELifeLost, LevelSystem::LifeLost);
EVENT_SUBSCRIBE_MEMBER(m_EScoreEvent, LevelSystem::ScoreEvent);
for (int i = 0; i < lives; i++) for (int i = 0; i < lives; i++)
{ {
@@ -42,12 +43,6 @@ void dd::Systems::LevelSystem::Update(double dt)
CreateBasicLevel(tRows, tLines, tSpaceBetweenBricks, tSpaceToEdge); CreateBasicLevel(tRows, tLines, tSpaceBetweenBricks, tSpaceToEdge);
m_Initialized = true; m_Initialized = true;
} }
if (entityToRemove != NULL)
{
//m_World->RemoveEntity(entityToRemove);
entityToRemove = NULL;
}
} }
void dd::Systems::LevelSystem::UpdateEntity(double dt, EntityID entity, EntityID parent) 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) if (lives == pastLives)
{ {
Events::LifeLost e; Events::LifeLost e;
e.entity = entity; e.Entity = entity;
EventBroker->Publish(e); EventBroker->Publish(e);
Events::ResetBall be;
EventBroker->Publish(be);
return; return;
} }
} }
@@ -116,6 +113,7 @@ void dd::Systems::LevelSystem::CreateBrick(int row, int line, glm::vec2 spacesBe
float y = spaceToEdge + row * spacesBetweenBricks.y; float y = spaceToEdge + row * spacesBetweenBricks.y;
transform->Scale = glm::vec3(1.6, 0.4, 0.); transform->Scale = glm::vec3(1.6, 0.4, 0.);
transform->Position = glm::vec3(x - 7, y + 1, -10.f); transform->Position = glm::vec3(x - 7, y + 1, -10.f);
cBrick->Score = 10 * num;
m_World->CommitEntity(brick); m_World->CommitEntity(brick);
return; return;
} }
@@ -128,7 +126,7 @@ void dd::Systems::LevelSystem::ProcessCollision()
void dd::Systems::LevelSystem::OnEntityRemoved(EntityID entity) void dd::Systems::LevelSystem::OnEntityRemoved(EntityID entity)
{ {
auto brick = m_World->GetComponent<Components::Brick>(entity); /*auto brick = m_World->GetComponent<Components::Brick>(entity);
if (brick != NULL) if (brick != NULL)
{ {
numberOfBricks--; numberOfBricks--;
@@ -136,7 +134,7 @@ void dd::Systems::LevelSystem::OnEntityRemoved(EntityID entity)
{ {
EndLevel(); EndLevel();
} }
} }*/
return; return;
} }
@@ -152,6 +150,22 @@ bool dd::Systems::LevelSystem::OnContact(const dd::Events::Contact &event)
m_World->RemoveEntity(entityBrick); 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; return true;
} }
@@ -162,6 +176,13 @@ bool dd::Systems::LevelSystem::LifeLost(const dd::Events::LifeLost &event)
return true; return true;
} }
bool dd::Systems::LevelSystem::ScoreEvent(const dd::Events::ScoreEvent &event)
{
score += event.score;
return true;
}
void dd::Systems::LevelSystem::EndLevel() void dd::Systems::LevelSystem::EndLevel()
{ {
Events::StageCleared e; Events::StageCleared e;
+19 -18
View File
@@ -24,7 +24,7 @@ void dd::Systems::PadSystem::Initialize()
EVENT_SUBSCRIBE_MEMBER(m_EKeyDown, PadSystem::OnKeyDown); EVENT_SUBSCRIBE_MEMBER(m_EKeyDown, PadSystem::OnKeyDown);
EVENT_SUBSCRIBE_MEMBER(m_EKeyUp, PadSystem::OnKeyUp); EVENT_SUBSCRIBE_MEMBER(m_EKeyUp, PadSystem::OnKeyUp);
EVENT_SUBSCRIBE_MEMBER(m_EContact, PadSystem::OnContact); EVENT_SUBSCRIBE_MEMBER(m_EContact, PadSystem::OnContact);
EVENT_SUBSCRIBE_MEMBER(m_ELifeLost, PadSystem::LifeLost); EVENT_SUBSCRIBE_MEMBER(m_EResetBall, PadSystem::ResetBall);
return; return;
} }
@@ -70,30 +70,31 @@ void dd::Systems::PadSystem::Update(double dt)
if (m_World->GetProperty<std::string>(it->first, "Name") == "Pad") { if (m_World->GetProperty<std::string>(it->first, "Name") == "Pad") {
ent = it->first; ent = it->first;
transform = m_World->GetComponent<Components::Transform>(ent); transform = m_World->GetComponent<Components::Transform>(ent);
pad = m_World->GetComponent<Components::Pad>(ent);
break; 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->Position += transform->Velocity * (float)dt;
transform->Velocity += acceleration * (float)dt; transform->Velocity += acceleration * (float)dt;
transform->Velocity -= transform->Velocity * slowdownModifier * (float)dt; transform->Velocity -= transform->Velocity * pad->slowdownModifier * (float)dt;
if (left) if (left)
{ {
acceleration.x = -accelerationSpeed; acceleration.x = -pad->accelerationSpeed;
} }
else if (right) else if (right)
{ {
acceleration.x = accelerationSpeed; acceleration.x = pad->accelerationSpeed;
} }
else else
{ {
@@ -106,27 +107,27 @@ void dd::Systems::PadSystem::Update(double dt)
bool dd::Systems::PadSystem::OnKeyDown(const dd::Events::KeyDown &event) bool dd::Systems::PadSystem::OnKeyDown(const dd::Events::KeyDown &event)
{ {
int val = event.KeyCode; int val = event.KeyCode;
if (val == 265) if (val == GLFW_KEY_UP)
{ {
//std::cout << "Up!" << std::endl; //std::cout << "Up!" << std::endl;
} }
else if (val == 264) else if (val == GLFW_KEY_DOWN)
{ {
//std::cout << "Down!" << std::endl; //std::cout << "Down!" << std::endl;
} }
else if (val == 263) else if (val == GLFW_KEY_LEFT)
{ {
//std::cout << "Left!" << std::endl; //std::cout << "Left!" << std::endl;
//acceleration.x = -0.01f; //acceleration.x = -0.01f;
left = true; left = true;
} }
else if (val == 262) else if (val == GLFW_KEY_RIGHT)
{ {
//std::cout << "Right!" << std::endl; //std::cout << "Right!" << std::endl;
//acceleration.x = 0.01f; //acceleration.x = 0.01f;
right = true; right = true;
} }
else if (val == 82) else if (val == GLFW_KEY_R)
{ {
replaceBall = true; 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) bool dd::Systems::PadSystem::OnKeyUp(const dd::Events::KeyUp &event)
{ {
int val = event.KeyCode; 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; left = false;
} }
else if (val == 262) else if (val == GLFW_KEY_RIGHT)
{ {
right = false; right = false;
} }
@@ -216,7 +217,7 @@ bool dd::Systems::PadSystem::OnContact(const dd::Events::Contact &event)
EventBroker->Publish(e); 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; replaceBall = true;
return true; return true;
+10
View File
@@ -52,6 +52,11 @@ void dd::Systems::PhysicsSystem::Update(double dt)
if (! transformComponent) if (! transformComponent)
continue; continue;
if (body == nullptr) {
//LOG_ERROR("This body should not exist");
continue;
}
if (m_World->GetEntityParent(entity) == 0) { if (m_World->GetEntityParent(entity) == 0) {
b2Vec2 position; b2Vec2 position;
@@ -86,6 +91,11 @@ void dd::Systems::PhysicsSystem::Update(double dt)
EntityID entity = i.first; EntityID entity = i.first;
b2Body* body = i.second; b2Body* body = i.second;
if (body == nullptr) {
//LOG_ERROR("This body should not exist");
continue;
}
auto transformComponent = m_World->GetComponent<Components::Transform>(entity); auto transformComponent = m_World->GetComponent<Components::Transform>(entity);
if (! transformComponent) if (! transformComponent)
continue; continue;