GameLifeIndicatorView.cpp
2.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
//
// GameLifeIndicatorView.cpp
// SteveAndMaggieGame-mobile
//
// Created by Katarzyna Kalinowska-Górska on 21/06/2019.
//
#include <stdio.h>
#include "GameLifeIndicatorView.h"
GameLifeIndicatorView* GameLifeIndicatorView::create(std::string liveImagePath, std::string deadImagePath, int maxLives){
GameLifeIndicatorView * view = new (std::nothrow) GameLifeIndicatorView();
if(view && view->init(liveImagePath, deadImagePath, maxLives))
{
view->autorelease();
return view;
}
CC_SAFE_DELETE(view);
return nullptr;
}
bool GameLifeIndicatorView::init(std::string liveImagePath, std::string deadImagePath, int maxLives){
if(!cocos2d::Layer::init()){
return false;
}
float lifeSpriteWidth = 0;
float lifeSpriteHeight = 0;
for (int i = 0; i < maxLives; ++i) {
auto lifeItem = new LifeItem(liveImagePath, deadImagePath);
addChild(lifeItem->lifeSprite);
lifeItem->lifeSprite->setPosition((i+0.5+i*PADDING_MULTIPLIER)*lifeItem->lifeSprite->getBoundingBox().size.width, lifeItem->lifeSprite->getBoundingBox().size.height/2);
addChild(lifeItem->deadSprite);
lifeItem->deadSprite->setPosition(lifeItem->lifeSprite->getPosition());
lives.push_back(lifeItem);
lifeSpriteWidth = lifeItem->lifeSprite->getBoundingBox().size.width;
lifeSpriteHeight = lifeItem->lifeSprite->getBoundingBox().size.height;
}
setContentSize(cocos2d::Size(maxLives*lifeSpriteWidth*(1+PADDING_MULTIPLIER), lifeSpriteHeight));
currentLives = maxLives;
return true;
}
GameLifeIndicatorView::~GameLifeIndicatorView(){
for(auto it = lives.begin(); it != lives.end(); ++it){
delete *it;
}
}
int GameLifeIndicatorView::loseLife(){
if(currentLives > 0){
--currentLives;
lives[currentLives]->deactivate(true);
}
return currentLives;
}
int GameLifeIndicatorView::restoreLife(){
if(currentLives < lives.size()){
lives[currentLives]->activate(true);
++currentLives;
}
return currentLives;
}
void GameLifeIndicatorView::reset(){
currentLives = (int)lives.size();
for(auto it = lives.begin(); it != lives.end(); ++it){
(*it)->activate(false);
}
}
float GameLifeIndicatorView::getPaddingX(){
if(lives.size() > 0){
return PADDING_MULTIPLIER*lives[0]->lifeSprite->getBoundingBox().size.width;
}
return 0;
}