CCBone


#ifndef __CCBONE_H__

#define __CCBONE_H__


#include "utils/CCArmatureDefine.h"

#include "datas/CCDatas.h"

#include "animation/CCTween.h"

#include "external_tool/CCTexture2DMutable.h"

#include "display/CCDecorativeDisplay.h"

#include "display/CCDisplayManager.h"


NS_CC_EXT_BEGIN


class CCArmature;


class CCBone : public CCNodeRGBA

{

public:

    /**

     * Allocates and initializes a bone.

     * @return A initialized bone which is marked as "autorelease".

     */

    static CCBone *create();

    /**

     * Allocates and initializes a bone.

     *

     * @param  name If name is not null, then set name to the bone's name

     * @return A initialized bone which is marked as "autorelease".

     */

    static CCBone *create(const char *name);


public:

    CCBone();

    virtual ~CCBone(void);


    /**

     * Initializes an empty CCBone with nothing init.

     */

    virtual bool init();


    /**

     * Initializes a CCBone with the specified name

     * @param name CCBone's name.

     */

    virtual bool init(const char *name);


    /**

     * Add display and use  _DisplayData init the display.

     * If index already have a display, then replace it.

     * If index is current display index, then also change display to _index

     *

     * @param displayData it include the display information, like DisplayType.

     *          If you want to create a sprite display, then create a CCSpriteDisplayData param

     *

     *@param _index the index of the display you want to replace or add to

     *          -1 : append display from back

     */

    void addDisplay(CCDisplayData *displayData, int index);


    void changeDisplayByIndex(int index, bool force);


    /**

     * Add a child to this bone, and it will let this child call setParent(CCBone *_parent) function to set self to it's parent

     *@param _child  the child you want to add

     */

    void addChildBone(CCBone *_child);


    /**

     * Set parent bone.

     * If _parent is NUll, then also remove this bone from armature.

     * It will not set the CCArmature, if you want to add the bone to a CCArmature, you should use CCArmature::addBone(CCBone *bone, const char* _parentName).

     *

     * @param parent  the parent bone.

     *          NULL : remove this bone from armature

     */

    void setParentBone(CCBone *parent);


    /**

     * Get parent bone

     * @return parent bone

     */

    CCBone *getParentBone();


    /**

     * Remove itself from its parent CCBone.

     * @paramrecursion    whether or not remove Child display

     */

    void removeFromParent(bool recursion);


    /**

     * Removes a child CCBone

     * @parambone   the bone you want to remove

     */

    void removeChildBone(CCBone *bone, bool recursion);


    void update(float delta);


    void updateDisplayedColor(const ccColor3B &parentColor);

    void updateDisplayedOpacity(GLubyte parentOpacity);


    //! Update color to render display

    void updateColor();


    CCArray *getChildren();

    CCTween *getTween();


    virtual void setZOrder(int zOrder);

    /*

     * Whether or not the bone's transform property changed. if true, the bone will update the transform.

     */

    virtual void setTransformDirty(bool dirty);


    virtual bool isTransformDirty();


    virtual CCAffineTransform nodeToArmatureTransform();


public:

    /*

     *  The origin state of the CCBone. Display's state is effected by m_pBoneData, m_pNode, m_pTweenData

     *  when call setData function, it will copy from the CCBoneData.

     */

    CC_PROPERTY(CCBoneData *, m_pBoneData, BoneData);


    //! A weak reference to the CCArmature

    CC_PROPERTY(CCArmature *, m_pArmature, Armature);


    //! A weak reference to the child CCArmature

    CC_PROPERTY(CCArmature *, m_pChildArmature, ChildArmature);


    CC_SYNTHESIZE(CCDisplayManager *, m_pDisplayManager, DisplayManager)


    /*

     *When CCArmature play a animation, if there is not a CCMovementBoneData of this bone in this CCMovementData, this bone will hide.

     *Set IgnoreMovementBoneData to true, then this bone will also show.

     */

    CC_SYNTHESIZE_PASS_BY_REF(bool, m_bIgnoreMovementBoneData, IgnoreMovementBoneData)


protected:

    CCTween *m_pTween;//! Calculate tween effect


    //! Used for make tween effect between every frame

    CC_SYNTHESIZE_READONLY(CCFrameData *, m_pTweenData, TweenData);


    CC_SYNTHESIZE_PASS_BY_REF(std::string, m_strName, Name);


    //! Lazy allocs

    void childrenAlloc(void);

    CCArray *m_pChildren;


    CCBone *m_pParent;//! A weak reference to it's parent

    bool m_bTransformDirty;//! Whether or not transform dirty


    //! self Transform, use this to change display's state

    CCAffineTransform m_tWorldTransform;

};


NS_CC_EXT_END


#endif /*__CCBONE_H__*/


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值