Skip to content

Commit 1b8e6d7

Browse files
committed
created GameManager
1 parent a9414c1 commit 1b8e6d7

19 files changed

+209
-251
lines changed

FluffyEngine/Singleton.h

+5-1
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,10 @@ namespace Fluffy
4343
inline static T* m_pInstance{ nullptr };
4444

4545
ComponentSingleton() = default;
46-
virtual void RegisterInstance() = 0;
46+
void RegisterInstance(T* instance)
47+
{
48+
if (m_pInstance == nullptr)
49+
m_pInstance = instance;
50+
}
4751
};
4852
}

Galaga/CharactersManager.cpp

+17-93
Original file line numberDiff line numberDiff line change
@@ -11,65 +11,21 @@
1111
#include "EventParams.h"
1212
#include "BulletsManager.h"
1313
#include "Structs.h"
14-
#include "Parser.h"
1514
#include <memory>
1615
#include <algorithm>
1716

18-
const float CharactersManager::PLAYER_RESPAWN_TIMER_DURATION{ 1.0f };
19-
20-
CharactersManager::CharactersManager(Fluffy::GameObject* pOwner)
21-
: Component(pOwner)
22-
{
23-
RegisterInstance();
24-
}
25-
26-
void CharactersManager::StartLevel1()
27-
{
28-
std::vector<EnemyEnteringData> data;
29-
Parser::GetInstance().ParseEnemyLayoutData("D:/Repos/FluffyEngine/Data/Formations/galaga_level_1.csv", data);
30-
data;
31-
32-
std::queue<EnemyEnteringData> enemiesData{};
33-
34-
BezierPath firstPath{};
35-
BezierCurve firstCurve{ { -32.0f, -32.0f }, { -32.0f, -32.0f }, { 290.0f, 200.0f }, { 290.0f, 200.0f } };
36-
firstPath.AddCurve(firstCurve, 1);
37-
38-
enemiesData.push({ 4.0f, {}, firstPath, EnemyType::Boss });
39-
40-
BezierPath secondPath{};
41-
BezierCurve secondCurve{ { 640.0f, -32.0f }, { 640.0f, -32.0f }, { 330.0f, 200.0f }, { 330.0f, 200.0f } };
42-
secondPath.AddCurve(secondCurve, 1);
43-
44-
enemiesData.push({ 4.3f, {}, secondPath, EnemyType::Bee });
45-
46-
m_Level.StartLevel(enemiesData);
47-
48-
BulletsManager::GetInstance().Initialize();
49-
}
50-
51-
void CharactersManager::Update(const float deltaTime)
52-
{
53-
PurgeDestroyedCharacters();
54-
55-
// if the level has started
56-
m_Level.Update(deltaTime);
57-
58-
UpdatePlayerRespawnTimers(deltaTime);
59-
60-
BulletsManager::GetInstance().Update(deltaTime);
61-
}
62-
63-
void CharactersManager::CreatePlayerCharacters(Fluffy::Scene& scene)
17+
void CharactersManager::CreatePlayerCharacters(Fluffy::Scene* pScene)
6418
{
6519
std::shared_ptr<Fluffy::GameObject> pPlayer1{ std::make_shared<Fluffy::GameObject>(SCREEN_SIZE.x / 2.0f, SCREEN_SIZE.y - 80.0f) };
6620

6721
pPlayer1->AddComponent<Fluffy::Sprite>("galaga_player1.png");
6822
PlayerCharacter* pPlayer1Component{ pPlayer1->AddComponent<PlayerCharacter>(4, int(m_PlayerCharacters.size())) };
69-
scene.Add(pPlayer1);
23+
pScene->Add(pPlayer1);
7024
pPlayer1Component->GetOnDeath().AddListener(this);
7125

7226
m_PlayerCharacters.push_back(pPlayer1Component);
27+
28+
m_pCurrentScene = pScene;
7329
}
7430

7531
EnemyCharacter* CharactersManager::SpawnEnemy(const EnemyEnteringData& data)
@@ -96,14 +52,14 @@ EnemyCharacter* CharactersManager::SpawnEnemy(const EnemyEnteringData& data)
9652

9753
const float enemySpeed{ 200.0f };
9854
EnemyCharacter* pEnemyCharacter{ pEnemy->AddComponent<EnemyCharacter>(data.type, enemySpeed) };
99-
m_pOwner->GetScene()->Add(pEnemy);
55+
m_pCurrentScene->Add(pEnemy);
10056
pEnemyCharacter->GetOnDeath().AddListener(this);
10157
m_Enemies.push_back(pEnemyCharacter);
10258

10359
return pEnemyCharacter;
10460
}
10561

106-
void CharactersManager::KillEnemy(int killerIndex)
62+
void CharactersManager::KillEnemy(const int killerIndex)
10763
{
10864
if (!m_Enemies.empty())
10965
{
@@ -113,6 +69,11 @@ void CharactersManager::KillEnemy(int killerIndex)
11369
}
11470
}
11571

72+
void CharactersManager::RespawnPlayer(const int playerIndex)
73+
{
74+
m_PlayerCharacters[playerIndex]->Respawn();
75+
}
76+
11677
void CharactersManager::OnNotify(const Fluffy::EventType& eventType, const Fluffy::IEventParam* param)
11778
{
11879
switch (eventType)
@@ -125,11 +86,16 @@ void CharactersManager::OnNotify(const Fluffy::EventType& eventType, const Fluff
12586
if (characterIndex != INVALID_PLAYER_INDEX)
12687
{
12788
m_OnPlayerKilled.Invoke(param);
128-
StartPlayerRespawnTimer(characterIndex);
12989
}
13090
else
13191
{
13292
m_OnEnemyKilled.Invoke(param);
93+
94+
const EnemyCharacter* pEnemy{ static_cast<EnemyCharacter*>(deathParam->GetCharacter()) };
95+
96+
const auto& it{ std::ranges::find(m_Enemies, pEnemy) };
97+
if (it != m_Enemies.end())
98+
m_Enemies.erase(it);
13399
}
134100
}
135101
break;
@@ -142,45 +108,3 @@ PlayerCharacter* CharactersManager::GetPlayer(const int playerIndex)
142108
m_PlayerCharacters[playerIndex] :
143109
nullptr;
144110
}
145-
146-
void CharactersManager::RegisterInstance()
147-
{
148-
if (m_pInstance == nullptr)
149-
m_pInstance = this;
150-
}
151-
152-
void CharactersManager::PurgeDestroyedCharacters()
153-
{
154-
m_PlayerCharacters.erase(std::ranges::remove_if(m_PlayerCharacters, [](const PlayerCharacter* pPlayer)
155-
{
156-
return pPlayer->GetGameObject()->IsDestroyed();
157-
}).begin(), m_PlayerCharacters.end());
158-
159-
m_Enemies.erase(std::ranges::remove_if(m_Enemies, [](const EnemyCharacter* pEnemy)
160-
{
161-
return pEnemy->GetGameObject()->IsDestroyed();
162-
}).begin(), m_Enemies.end());
163-
}
164-
165-
void CharactersManager::StartPlayerRespawnTimer(const int playerIndex)
166-
{
167-
m_PlayerRespawnTimers[playerIndex] = PLAYER_RESPAWN_TIMER_DURATION;
168-
}
169-
170-
void CharactersManager::UpdatePlayerRespawnTimers(const float deltaTime)
171-
{
172-
for (int i = 0; i < 2; ++i)
173-
{
174-
if (m_PlayerRespawnTimers[i] <= 0.0f)
175-
continue;
176-
177-
m_PlayerRespawnTimers[i] -= deltaTime;
178-
if (m_PlayerRespawnTimers[i] <= 0.0f)
179-
RespawnPlayer(i);
180-
}
181-
}
182-
183-
void CharactersManager::RespawnPlayer(const int playerIndex)
184-
{
185-
m_PlayerCharacters[playerIndex]->Respawn();
186-
}

Galaga/CharactersManager.h

+6-30
Original file line numberDiff line numberDiff line change
@@ -2,60 +2,36 @@
22
#include "Singleton.h"
33
#include "Event.h"
44
#include "IEventListener.h"
5+
#include "Structs.h"
56
#include <memory>
67
#include <vector>
78
#include <queue>
8-
#include "Structs.h"
9-
#include "Level.h"
109

1110
namespace Fluffy
1211
{
1312
struct IEventParam;
1413
class Scene;
15-
class GameObject;
1614
}
1715

18-
class CharactersManager final : public Fluffy::Component, public Fluffy::ComponentSingleton<CharactersManager>, public Fluffy::IEventListener
16+
class CharactersManager final : public Fluffy::Singleton<CharactersManager>, public Fluffy::IEventListener
1917
{
2018
public:
21-
CharactersManager(Fluffy::GameObject* pOwner);
22-
~CharactersManager() = default;
23-
24-
CharactersManager(const CharactersManager&) = delete;
25-
CharactersManager(CharactersManager&&) = delete;
26-
CharactersManager& operator=(const CharactersManager&) = delete;
27-
CharactersManager& operator=(CharactersManager&&) = delete;
28-
29-
void StartLevel1();
30-
31-
void Update(const float deltaTime) override;
32-
33-
void CreatePlayerCharacters(class Fluffy::Scene& scene);
19+
void CreatePlayerCharacters(Fluffy::Scene* pScene);
3420
class EnemyCharacter* SpawnEnemy(const EnemyEnteringData& data);
35-
void KillEnemy(int killerIndex);
21+
void KillEnemy(const int killerIndex);
22+
void RespawnPlayer(const int playerIndex);
3623
void OnNotify(const Fluffy::EventType& eventType, const Fluffy::IEventParam* param) override;
3724

3825
class PlayerCharacter* GetPlayer(const int playerIndex);
3926
inline Fluffy::Event& GetOnPlayerKilled() { return m_OnPlayerKilled; }
4027
inline Fluffy::Event& GetOnEnemyKilled() { return m_OnEnemyKilled; }
4128

42-
protected:
43-
void RegisterInstance() override;
44-
4529
private:
46-
Level m_Level{};
4730
Fluffy::Event m_OnPlayerKilled{ Fluffy::EventType::OnPlayerKilled };
4831
Fluffy::Event m_OnEnemyKilled{ Fluffy::EventType::OnEnemyKilled };
4932

5033
std::vector<class PlayerCharacter*> m_PlayerCharacters{};
5134
std::vector<class EnemyCharacter*> m_Enemies{};
5235

53-
const static float PLAYER_RESPAWN_TIMER_DURATION;
54-
55-
float m_PlayerRespawnTimers[2]{ 0.0f };
56-
57-
void PurgeDestroyedCharacters();
58-
void StartPlayerRespawnTimer(const int playerIndex);
59-
void UpdatePlayerRespawnTimers(const float deltaTime);
60-
void RespawnPlayer(const int playerIndex);
36+
Fluffy::Scene* m_pCurrentScene{};
6137
};

Galaga/Galaga.vcxproj

+2-4
Original file line numberDiff line numberDiff line change
@@ -172,8 +172,8 @@
172172
<ClCompile Include="FiniteStateMachine.cpp" />
173173
<ClCompile Include="FPSCounter.cpp" />
174174
<ClCompile Include="GameEvents.cpp" />
175+
<ClCompile Include="GameManager.cpp" />
175176
<ClCompile Include="HealthDisplayComponent.cpp" />
176-
<ClCompile Include="KillEnemyCommand.cpp" />
177177
<ClCompile Include="Level.cpp" />
178178
<ClCompile Include="Main.cpp" />
179179
<ClCompile Include="MoveCommand.cpp" />
@@ -183,7 +183,6 @@
183183
<ClCompile Include="ShootCommand.cpp" />
184184
<ClCompile Include="EnemyStates.cpp" />
185185
<ClCompile Include="SoundManager.cpp" />
186-
<ClCompile Include="SuicideCommand.cpp" />
187186
</ItemGroup>
188187
<ItemGroup>
189188
<ClInclude Include="AchievementComponent.h" />
@@ -197,9 +196,9 @@
197196
<ClInclude Include="FiniteStateMachine.h" />
198197
<ClInclude Include="FPSCounter.h" />
199198
<ClInclude Include="GameEvents.h" />
199+
<ClInclude Include="GameManager.h" />
200200
<ClInclude Include="HealthDisplayComponent.h" />
201201
<ClInclude Include="Parser.h" />
202-
<ClInclude Include="KillEnemyCommand.h" />
203202
<ClInclude Include="Level.h" />
204203
<ClInclude Include="MoveCommand.h" />
205204
<ClInclude Include="PlayerCharacter.h" />
@@ -209,7 +208,6 @@
209208
<ClInclude Include="EnemyStates.h" />
210209
<ClInclude Include="SoundManager.h" />
211210
<ClInclude Include="Structs.h" />
212-
<ClInclude Include="SuicideCommand.h" />
213211
</ItemGroup>
214212
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
215213
<ImportGroup Label="ExtensionTargets">

Galaga/Galaga.vcxproj.filters

+6-12
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,6 @@
3636
<ClCompile Include="HealthDisplayComponent.cpp">
3737
<Filter>Source Files</Filter>
3838
</ClCompile>
39-
<ClCompile Include="KillEnemyCommand.cpp">
40-
<Filter>Source Files</Filter>
41-
</ClCompile>
4239
<ClCompile Include="MoveCommand.cpp">
4340
<Filter>Source Files</Filter>
4441
</ClCompile>
@@ -51,9 +48,6 @@
5148
<ClCompile Include="ScoreComponent.cpp">
5249
<Filter>Source Files</Filter>
5350
</ClCompile>
54-
<ClCompile Include="SuicideCommand.cpp">
55-
<Filter>Source Files</Filter>
56-
</ClCompile>
5751
<ClCompile Include="ShootCommand.cpp">
5852
<Filter>Source Files</Filter>
5953
</ClCompile>
@@ -78,6 +72,9 @@
7872
<ClCompile Include="GameEvents.cpp">
7973
<Filter>Source Files</Filter>
8074
</ClCompile>
75+
<ClCompile Include="GameManager.cpp">
76+
<Filter>Source Files</Filter>
77+
</ClCompile>
8178
</ItemGroup>
8279
<ItemGroup>
8380
<ClInclude Include="AchievementComponent.h">
@@ -98,9 +95,6 @@
9895
<ClInclude Include="HealthDisplayComponent.h">
9996
<Filter>Header Files</Filter>
10097
</ClInclude>
101-
<ClInclude Include="KillEnemyCommand.h">
102-
<Filter>Header Files</Filter>
103-
</ClInclude>
10498
<ClInclude Include="MoveCommand.h">
10599
<Filter>Header Files</Filter>
106100
</ClInclude>
@@ -113,9 +107,6 @@
113107
<ClInclude Include="ScoreComponent.h">
114108
<Filter>Header Files</Filter>
115109
</ClInclude>
116-
<ClInclude Include="SuicideCommand.h">
117-
<Filter>Header Files</Filter>
118-
</ClInclude>
119110
<ClInclude Include="Structs.h">
120111
<Filter>Header Files</Filter>
121112
</ClInclude>
@@ -152,5 +143,8 @@
152143
<ClInclude Include="SoundManager.h">
153144
<Filter>Header Files</Filter>
154145
</ClInclude>
146+
<ClInclude Include="GameManager.h">
147+
<Filter>Header Files</Filter>
148+
</ClInclude>
155149
</ItemGroup>
156150
</Project>

0 commit comments

Comments
 (0)