ToyGameLifeIndicatorView.h 2.62 KB
//
//  ToyGameLifeIndicatorView.h
//  SteveAndMaggieGame
//
//  Created by Katarzyna Kalinowska-Górska on 21/06/2019.
//

#ifndef ToyGameLifeIndicatorView_h
#define ToyGameLifeIndicatorView_h

#include <string>
#include "cocos2d.h"
#include "ToyMiscUtils.h"

#endif /* ToyGameLifeIndicatorView_h */

class ToyGameLifeIndicatorView : public cocos2d::Layer {
public:
    static ToyGameLifeIndicatorView* create(std::string liveImagePath, std::string deadImagePath, int maxLives);
    virtual int loseLife(); //return current number of lives
    virtual int restoreLife();
    virtual void reset();
    virtual float getPaddingX();
    
protected:
    bool init(std::string liveImagePath, std::string deadImagePath, int maxLives);
    static constexpr float PADDING_MULTIPLIER = 0.1f;
    
    virtual ~ToyGameLifeIndicatorView();
    
    class LifeItem {
    public:
        bool isActive;
        cocos2d::Sprite* lifeSprite;
        cocos2d::Sprite* deadSprite;
        constexpr static const int DEAD_OPACITY = 128;
        
        LifeItem(std::string liveImagePath, std::string deadImagePath){
            isActive = true;
            lifeSprite = cocos2d::Sprite::create(liveImagePath);
            lifeSprite->retain();
            deadSprite = cocos2d::Sprite::create(deadImagePath);
            deadSprite->retain();
            deadSprite->setOpacity(0);
        }
        
        ~LifeItem(){
            if(deadSprite != nullptr){
                deadSprite->removeFromParent();
                deadSprite->release();
            }
            if(lifeSprite != nullptr){
                lifeSprite->removeFromParent();
                lifeSprite->release();
            }
        }
        
        virtual void activate(bool animated){
            isActive = true;
            if(animated){
                lifeSprite->runAction(cocos2d::FadeIn::create(ToyMiscUtils::StandardAnimationTime));
                deadSprite->runAction(cocos2d::FadeOut::create(ToyMiscUtils::StandardAnimationTime));
            } else {
                lifeSprite->setOpacity(255);
                deadSprite->setOpacity(0);
            }
        }
        
        virtual void deactivate(bool animated){
            isActive = false;
            if(animated){
                lifeSprite->runAction(cocos2d::FadeOut::create(ToyMiscUtils::StandardAnimationTime));
                deadSprite->runAction(cocos2d::FadeTo::create(ToyMiscUtils::StandardAnimationTime, DEAD_OPACITY));
            } else {
                lifeSprite->setOpacity(0);
                deadSprite->setOpacity(DEAD_OPACITY);
            }
        }
    };
    
    std::vector<LifeItem*> lives;
    int currentLives;
};