CCProgressTimer

#ifndef __MISC_NODE_CCPROGRESS_TIMER_H__

#define __MISC_NODE_CCPROGRESS_TIMER_H__


#include "sprite_nodes/CCSprite.h"

#ifdef EMSCRIPTEN

#include "base_nodes/CCGLBufferedNode.h"

#endif // EMSCRIPTEN


NS_CC_BEGIN


/**

 * @addtogroup misc_nodes

 * @{

 */


/** Types of progress

 @since v0.99.1

 */

typedef enum {

    /// Radial Counter-Clockwise

    kCCProgressTimerTypeRadial,

    /// Bar

    kCCProgressTimerTypeBar,

} CCProgressTimerType;


/**

 @brief CCProgressTimer is a subclass of CCNode.

 It renders the inner sprite according to the percentage.

 The progress can be Radial, Horizontal or vertical.

 @since v0.99.1

 */

class CC_DLL CCProgressTimer : public CCNodeRGBA

#ifdef EMSCRIPTEN

, public CCGLBufferedNode

#endif // EMSCRIPTEN

{

public:

    CCProgressTimer();

    ~CCProgressTimer(void);


    /**    Change the percentage to change progress. */

    inline CCProgressTimerType getType(void) { return m_eType; }


    /** Percentages are from 0 to 100 */

    inline float getPercentage(void) {return m_fPercentage; }


    /** The image to show the progress percentage, retain */

    inline CCSprite* getSprite(void) { return m_pSprite; }


    /** Initializes a progress timer with the sprite as the shape the timer goes through */

    bool initWithSprite(CCSprite* sp);


    void setPercentage(float fPercentage);

    void setSprite(CCSprite *pSprite);

    void setType(CCProgressTimerType type);

    void setReverseProgress(bool reverse);


    virtual void draw(void);

    void setAnchorPoint(CCPoint anchorPoint);


    virtual void setOpacityModifyRGB(bool bValue);

    virtual bool isOpacityModifyRGB(void);

    

    inline bool isReverseDirection() { return m_bReverseDirection; };

    inline void setReverseDirection(bool value) { m_bReverseDirection = value; };


public:

    /** Creates a progress timer with the sprite as the shape the timer goes through */

    static CCProgressTimer* create(CCSprite* sp);

protected:

    ccTex2F textureCoordFromAlphaPoint(CCPoint alpha);

    ccVertex2F vertexFromAlphaPoint(CCPoint alpha);

    void updateProgress(void);

    void updateBar(void);

    void updateRadial(void);

    void updateColor(void);

    CCPoint boundaryTexCoord(char index);


protected:

    CCProgressTimerType m_eType;

    float m_fPercentage;

    CCSprite *m_pSprite;

    int m_nVertexDataCount;

    ccV2F_C4B_T2F *m_pVertexData;


    /**

     *    Midpoint is used to modify the progress start position.

     *    If you're using radials type then the midpoint changes the center point

     *    If you're using bar type the the midpoint changes the bar growth

     *        it expands from the center but clamps to the sprites edge so:

     *        you want a left to right then set the midpoint all the way to ccp(0,y)

     *        you want a right to left then set the midpoint all the way to ccp(1,y)

     *        you want a bottom to top then set the midpoint all the way to ccp(x,0)

     *        you want a top to bottom then set the midpoint all the way to ccp(x,1)

     */

    CC_PROPERTY(CCPoint, m_tMidpoint, Midpoint);


    /**

     *    This allows the bar type to move the component at a specific rate

     *    Set the component to 0 to make sure it stays at 100%.

     *    For example you want a left to right bar but not have the height stay 100%

     *    Set the rate to be ccp(0,1); and set the midpoint to = ccp(0,.5f);

     */

    CC_SYNTHESIZE(CCPoint, m_tBarChangeRate, BarChangeRate);


    bool m_bReverseDirection;

};


// end of misc_nodes group

/// @}


NS_CC_END


#endif //__MISC_NODE_CCPROGRESS_TIMER_H__


转载于:https://www.cnblogs.com/sssssnian/p/3748642.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值