// // ToyGameLifeIndicatorView.cpp // SteveAndMaggieGame-mobile // // Created by Katarzyna Kalinowska-Górska on 21/06/2019. // #include #include "ToyGameLifeIndicatorView.h" ToyGameLifeIndicatorView* ToyGameLifeIndicatorView::create(std::string liveImagePath, std::string deadImagePath, int maxLives){ ToyGameLifeIndicatorView * view = new (std::nothrow) ToyGameLifeIndicatorView(); if(view && view->init(liveImagePath, deadImagePath, maxLives)) { view->autorelease(); return view; } CC_SAFE_DELETE(view); return nullptr; } bool ToyGameLifeIndicatorView::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; } ToyGameLifeIndicatorView::~ToyGameLifeIndicatorView(){ for(auto it = lives.begin(); it != lives.end(); ++it){ delete *it; } } int ToyGameLifeIndicatorView::loseLife(){ if(currentLives > 0){ --currentLives; lives[currentLives]->deactivate(true); } return currentLives; } int ToyGameLifeIndicatorView::restoreLife(){ if(currentLives < lives.size()){ lives[currentLives]->activate(true); ++currentLives; } return currentLives; } void ToyGameLifeIndicatorView::reset(){ currentLives = (int)lives.size(); for(auto it = lives.begin(); it != lives.end(); ++it){ (*it)->activate(false); } } float ToyGameLifeIndicatorView::getPaddingX(){ if(lives.size() > 0){ return PADDING_MULTIPLIER*lives[0]->lifeSprite->getBoundingBox().size.width; } return 0; }