GameLifeIndicatorView.cpp 2.4 KB
//
//  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;
}