11
11
#include " EventParams.h"
12
12
#include " BulletsManager.h"
13
13
#include " Structs.h"
14
- #include " Parser.h"
15
14
#include < memory>
16
15
#include < algorithm>
17
16
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)
64
18
{
65
19
std::shared_ptr<Fluffy::GameObject> pPlayer1{ std::make_shared<Fluffy::GameObject>(SCREEN_SIZE.x / 2 .0f , SCREEN_SIZE.y - 80 .0f ) };
66
20
67
21
pPlayer1->AddComponent <Fluffy::Sprite>(" galaga_player1.png" );
68
22
PlayerCharacter* pPlayer1Component{ pPlayer1->AddComponent <PlayerCharacter>(4 , int (m_PlayerCharacters.size ())) };
69
- scene. Add (pPlayer1);
23
+ pScene-> Add (pPlayer1);
70
24
pPlayer1Component->GetOnDeath ().AddListener (this );
71
25
72
26
m_PlayerCharacters.push_back (pPlayer1Component);
27
+
28
+ m_pCurrentScene = pScene;
73
29
}
74
30
75
31
EnemyCharacter* CharactersManager::SpawnEnemy (const EnemyEnteringData& data)
@@ -96,14 +52,14 @@ EnemyCharacter* CharactersManager::SpawnEnemy(const EnemyEnteringData& data)
96
52
97
53
const float enemySpeed{ 200 .0f };
98
54
EnemyCharacter* pEnemyCharacter{ pEnemy->AddComponent <EnemyCharacter>(data.type , enemySpeed) };
99
- m_pOwner-> GetScene () ->Add (pEnemy);
55
+ m_pCurrentScene ->Add (pEnemy);
100
56
pEnemyCharacter->GetOnDeath ().AddListener (this );
101
57
m_Enemies.push_back (pEnemyCharacter);
102
58
103
59
return pEnemyCharacter;
104
60
}
105
61
106
- void CharactersManager::KillEnemy (int killerIndex)
62
+ void CharactersManager::KillEnemy (const int killerIndex)
107
63
{
108
64
if (!m_Enemies.empty ())
109
65
{
@@ -113,6 +69,11 @@ void CharactersManager::KillEnemy(int killerIndex)
113
69
}
114
70
}
115
71
72
+ void CharactersManager::RespawnPlayer (const int playerIndex)
73
+ {
74
+ m_PlayerCharacters[playerIndex]->Respawn ();
75
+ }
76
+
116
77
void CharactersManager::OnNotify (const Fluffy::EventType& eventType, const Fluffy::IEventParam* param)
117
78
{
118
79
switch (eventType)
@@ -125,11 +86,16 @@ void CharactersManager::OnNotify(const Fluffy::EventType& eventType, const Fluff
125
86
if (characterIndex != INVALID_PLAYER_INDEX)
126
87
{
127
88
m_OnPlayerKilled.Invoke (param);
128
- StartPlayerRespawnTimer (characterIndex);
129
89
}
130
90
else
131
91
{
132
92
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);
133
99
}
134
100
}
135
101
break ;
@@ -142,45 +108,3 @@ PlayerCharacter* CharactersManager::GetPlayer(const int playerIndex)
142
108
m_PlayerCharacters[playerIndex] :
143
109
nullptr ;
144
110
}
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
- }
0 commit comments