1
1
#include " HealthDisplayComponent.h"
2
- #include " Text .h"
2
+ #include " Sprite .h"
3
3
#include " PlayerCharacter.h"
4
4
#include " GameObject.h"
5
5
#include " IEventParam.h"
6
6
#include " CharactersManager.h"
7
7
#include < sstream>
8
+ #include < memory>
9
+ #include < format>
8
10
9
- HealthDisplayComponent::HealthDisplayComponent (Fluffy::GameObject* pOwner, int playerIndex, const std::string& fontPath, int fontSize )
11
+ HealthDisplayComponent::HealthDisplayComponent (Fluffy::GameObject* pOwner, int playerIndex)
10
12
: Fluffy::Component(pOwner)
11
13
, m_PlayerIndex{ playerIndex }
12
14
{
13
- if (PlayerCharacter* pPlayer{ CharactersManager::GetInstance (). GetPlayer (playerIndex) })
15
+ if (PlayerCharacter* pPlayer{ CharactersManager::GetInstance ()-> GetPlayer (playerIndex) })
14
16
{
15
17
pPlayer->GetOnDeath ().AddListener (this );
16
- }
17
18
18
- m_pText = pOwner->AddComponent <Fluffy::Text>(GetLivesString (), fontPath, fontSize);
19
+ std::string fileName = std::format (" galaga_player{}.png" , playerIndex + 1 );
20
+ const float padding{ 5 .0f };
21
+ float spriteWidth{ 0 .0f };
22
+
23
+ for (int i{ 0 }; i < pPlayer->GetLivesCount () - 1 ; ++i)
24
+ {
25
+ m_Lives.push_back (pOwner->AddComponent <Fluffy::Sprite>(fileName, glm::vec2 ((spriteWidth + padding) * i, 0 .0f )));
26
+
27
+ if (i == 0 )
28
+ spriteWidth = m_Lives[0 ]->GetTextureSize ().x ;
29
+ }
30
+ }
19
31
}
20
32
21
33
HealthDisplayComponent::~HealthDisplayComponent ()
22
34
{
23
- if (PlayerCharacter* pPlayer{ CharactersManager::GetInstance ().GetPlayer (m_PlayerIndex) })
35
+ if (CharactersManager::GetInstance () == nullptr )
36
+ return ;
37
+
38
+ if (PlayerCharacter* pPlayer{ CharactersManager::GetInstance ()->GetPlayer (m_PlayerIndex) })
24
39
{
25
40
pPlayer->GetOnDeath ().RemoveListener (this );
26
41
}
27
42
}
28
43
29
44
void HealthDisplayComponent::OnNotify (const Fluffy::EventType& eventType, const Fluffy::IEventParam*)
30
45
{
46
+ int lives{ 0 };
47
+
31
48
switch (eventType)
32
49
{
33
50
case Fluffy::EventType::OnCharacterDeath:
34
- m_pText->SetText (GetLivesString ());
51
+ if (PlayerCharacter * pPlayer{ CharactersManager::GetInstance ()->GetPlayer (m_PlayerIndex) })
52
+ {
53
+ lives = pPlayer->GetLivesCount ();
54
+ }
55
+
56
+ if (lives != 0 )
57
+ m_Lives[lives-1 ]->SetEnabled (false );
58
+
35
59
break ;
36
60
}
37
61
}
@@ -43,7 +67,7 @@ std::string HealthDisplayComponent::GetLivesString() const
43
67
44
68
int lives{ 0 };
45
69
46
- if (PlayerCharacter* pPlayer{ CharactersManager::GetInstance (). GetPlayer (m_PlayerIndex) })
70
+ if (PlayerCharacter* pPlayer{ CharactersManager::GetInstance ()-> GetPlayer (m_PlayerIndex) })
47
71
{
48
72
lives = pPlayer->GetLivesCount ();
49
73
}
0 commit comments