ProgressSliderNode.h 2.61 KB
//
//  TimeSliderNode.h
//  WattsenglishToyApp
//
//  Created by Katarzyna Kalinowska-Górska on 27/12/2019.
//

#ifndef ProgressSliderNode_h
#define ProgressSliderNode_h

#include "cocos2d.h"
#include "LayoutObject.h"
#include "TimeIndicatorInterface.h"

using ProgressSliderNodeOrientation = int;
static constexpr ProgressSliderNodeOrientation ProgressSliderNodeOrientationHorizontal {0};
static constexpr ProgressSliderNodeOrientation ProgressSliderNodeOrientationVertical {1};

class ProgressSliderNode : public cocos2d::Node, public LayoutObject, public TimeIndicatorInterface
{
    public:
    
        static ProgressSliderNode* create(const std::string& sliderImageFilePath, const std::string& thumbImageFilePath, float minVal, float maxVal, ProgressSliderNodeOrientation p_orientation);
    
    virtual bool init(const std::string& sliderImageFilePath, const std::string& thumbImageFilePath, float minVal, float maxVal, ProgressSliderNodeOrientation p_orientations);
    
        virtual void loadPropertiesFromJSON(const rapidjson::Value& jsonValue, LayoutViewInterface* scene = NULL, const std::string resFolder = "", const std::string altResFolder = "") override;
        virtual void prepareSize(const rapidjson::Value& jsonValue, float& width, float& height) override;

        // ScenarioObject
    
        virtual void setProperty(std::string propertyName, const rapidjson::Value& newValue, ActionParseDelegate* parseDelegate) override;
        virtual void callFunctionByName(std::string methodName, const rapidjson::Value* arguments, ActionParseDelegate* parseDelegate, std::function<void()> callback = [](){}) override;
    
        // slider's own methods
    
    virtual void setProgressFrac(float progressFrac) override;
    virtual void setProgress(float progress) override;
    virtual float currentProgress() { return _currentValue;};
    virtual void startTimeAnimation(float timeDuration) override;
    virtual void pauseTimeAnimation() override;
    virtual void resumeTimeAnimation() override;
    virtual void pause() override { pauseTimeAnimation(); }
    virtual void resume() override { resumeTimeAnimation(); }
    virtual void stopTimeAnimation() override;
    virtual void setContentSize(const cocos2d::Size& contentSize) override;
    
    
protected:
    cocos2d::Sprite* _sliderSprite;
    cocos2d::Sprite* _thumbSprite;
    
    float _minValue;
    float _maxValue;
    float _currentValue;
    ProgressSliderNodeOrientation m_orientation { ProgressSliderNodeOrientationHorizontal };
    
    virtual void updateProgressUI(float value, bool animated = true);
    void adjustThumbSpritePosition();
};

#endif /* TimeSliderNode_h */