diff --git a/assets/Textures/GUI/HUD/GameOverScreen.png b/assets/Textures/GUI/HUD/GameOverScreen.png
new file mode 100644
index 0000000..44004ca
Binary files /dev/null and b/assets/Textures/GUI/HUD/GameOverScreen.png differ
diff --git a/assets/Textures/GUI/HUD/WinScreen.png b/assets/Textures/GUI/HUD/WinScreen.png
new file mode 100644
index 0000000..1e64571
Binary files /dev/null and b/assets/Textures/GUI/HUD/WinScreen.png differ
diff --git a/include/Game/EClusterClear.h b/include/Game/EClusterClear.h
new file mode 100644
index 0000000..79cd9c4
--- /dev/null
+++ b/include/Game/EClusterClear.h
@@ -0,0 +1,22 @@
+#ifndef DAYDREAM_ECLUSTERCLEAR_H
+#define DAYDREAM_ECLUSTERCLEAR_H
+
+#include "Core/EventBroker.h"
+#include "Core/Entity.h"
+
+namespace dd
+{
+
+namespace Events
+{
+
+struct ClusterClear : Event
+{
+
+};
+
+}
+
+}
+
+#endif //DAYDREAM_ECLUSTERCLEAR_H
diff --git a/include/Game/HUD.h b/include/Game/HUD.h
index b3940b3..6c8d695 100644
--- a/include/Game/HUD.h
+++ b/include/Game/HUD.h
@@ -7,6 +7,8 @@
#include "Core/EKeyUp.h"
#include "Game/EScoreEvent.h"
#include "Game/FPSCounter.h"
+#include "Game/EGameOver.h"
+#include "Game/EClusterClear.h"
namespace dd
{
@@ -44,6 +46,8 @@ public:
m_FPSCounter = new GUI::FPSCounter(this, "FPSCounter");
EVENT_SUBSCRIBE_MEMBER(m_EScore, &HUD::OnScore);
+ EVENT_SUBSCRIBE_MEMBER(m_EGameOver, &HUD::OnGameOver);
+ EVENT_SUBSCRIBE_MEMBER(m_ClusterClear, &HUD::OnClusterClear);
}
private:
@@ -53,14 +57,32 @@ private:
NumberFrame* m_StageNumberFrame = nullptr;
NumberFrame* m_ScoreNumberFrame = nullptr;
FPSCounter* m_FPSCounter = nullptr;
+ TextureFrame* m_GameOverFrame = nullptr;
+ TextureFrame* m_ClusterClearFrame = nullptr;
EventRelay m_EScore;
+ EventRelay m_EGameOver;
+ EventRelay m_ClusterClear;
bool OnScore(const Events::ScoreEvent& event)
{
m_ScoreNumberFrame->SetNumber(m_ScoreNumberFrame->Number() + event.Score);
return true;
}
+
+ bool OnGameOver(const Events::GameOver& event)
+ {
+ m_GameOverFrame = new GUI::TextureFrame(this, "HUDGameOverFrame");
+ m_GameOverFrame->SetTexture("Textures/GUI/HUD/GameOverScreen.png");
+ return true;
+ }
+
+ bool OnClusterClear(const Events::ClusterClear& event)
+ {
+ m_ClusterClearFrame = new GUI::TextureFrame(this, "HUDGameOverFrame");
+ m_ClusterClearFrame->SetTexture("Textures/GUI/HUD/WinScreen.png");
+ return true;
+ }
};
}
diff --git a/include/Game/LevelSystem.h b/include/Game/LevelSystem.h
index 1bc1e92..50b89ed 100755
--- a/include/Game/LevelSystem.h
+++ b/include/Game/LevelSystem.h
@@ -30,6 +30,7 @@
#include "Game/EMultiBallLost.h"
#include "Game/EPause.h"
#include "Game/EGameOver.h"
+#include "Game/EClusterClear.h"
#include "Game/ECreatePowerUp.h"
#include "Game/EPowerUpTaken.h"
//#include "Game/Bricks/CPowerUpBrick.h"
diff --git a/src/game/Game/BallSystem.cpp b/src/game/Game/BallSystem.cpp
index a97119a..a51c8e3 100644
--- a/src/game/Game/BallSystem.cpp
+++ b/src/game/Game/BallSystem.cpp
@@ -62,11 +62,17 @@ void dd::Systems::BallSystem::Initialize()
void dd::Systems::BallSystem::Update(double dt)
{
- if (Lives() < 0)
+ if (Lives() == 0)
{
- SetLives(3);
Events::GameOver e;
EventBroker->Publish(e);
+
+ Events::Pause p;
+ p.Type = "All";
+ EventBroker->Publish(p);
+
+ //TODO: Make this not so ugly
+ SetLives(-1);
}
ResolveContacts();
}
diff --git a/src/game/Game/LevelSystem.cpp b/src/game/Game/LevelSystem.cpp
index af51126..072c9b6 100755
--- a/src/game/Game/LevelSystem.cpp
+++ b/src/game/Game/LevelSystem.cpp
@@ -414,7 +414,11 @@ bool dd::Systems::LevelSystem::OnStageCleared(const dd::Events::StageCleared &ev
if (m_CurrentLevel < 6) {
GetNextLevel();
CreateLevel(12);
- }
+ } else {
+ // Win
+ Events::ClusterClear e;
+ EventBroker->Publish(e);
+ }
}
return true;
}