#ifndef __CCDISPLAYMANAGER_H__
#define __CCDISPLAYMANAGER_H__
#include "../utils/CCArmatureDefine.h"
#include "../display/CCDecorativeDisplay.h"
#include "../datas/CCDatas.h"
NS_CC_EXT_BEGIN
class CCBone;
//! CCDisplayManager manages CCBone's display
class CCDisplayManager : public CCObject
{
public:
static CCDisplayManager *create(CCBone *bone);
public:
CCDisplayManager();
~CCDisplayManager();
bool init(CCBone *bone);
/**
* Use CCBoneData to init the display list.
* If display is a sprite, and it have texture info in the TexutreData, then use TexutreData to init the display's anchor point
* If the display is a CCArmature, then create a new CCArmature
*/
void initDisplayList(CCBoneData *boneData);
/**
* 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 removeDisplay(int index);
CCArray *getDecorativeDisplayList();
/**
* Change display by index. You can just use this method to change display in the display list.
* The display list is just used for this bone, and it is the displays you may use in every frame.
*
* Note : if index is the same with prev index, the method will not effect
*
* @param index The index of the display you want to change
* @param force If true, then force change display to specified display, or current display will set to display index edit in the flash every key frame.
*/
void changeDisplayByIndex(int index, bool force);
CCNode *getDisplayRenderNode();
int getCurrentDisplayIndex();
void setCurrentDecorativeDisplay(CCDecorativeDisplay *decoDisplay);
CCDecorativeDisplay *getCurrentDecorativeDisplay();
CCDecorativeDisplay *getDecorativeDisplayByIndex( int index);
/**
* Sets whether the display is visible
* The default value is true, a node is default to visible
*
* @param visible true if the node is visible, false if the node is hidden.
*/
virtual void setVisible(bool visible);
/**
* Determines if the display is visible
*
* @see setVisible(bool)
* @return true if the node is visible, false if the node is hidden.
*/
virtual bool isVisible();
CCSize getContentSize();
CCRect getBoundingBox();
CCPoint getAnchorPoint();
CCPoint getAnchorPointInPoints();
/**
* Check if the position is inside the bone.
*/
virtual bool containPoint(CCPoint &_point);
/**
* Check if the position is inside the bone.
*/
virtual bool containPoint(float x, float y);
protected:
CCArray *m_pDecoDisplayList;
//! Display render node.
CCNode *m_pDisplayRenderNode;
//! Include current display information, like contour sprite, etc.
CCDecorativeDisplay *m_pCurrentDecoDisplay;
//! Current display index
int m_iDisplayIndex;
CC_SYNTHESIZE_PASS_BY_REF(bool, m_bForceChangeDisplay, ForceChangeDisplay)
//! Whether of not the bone is visible. Default is true
bool m_bVisible;
CCBone *m_pBone;
};
NS_CC_EXT_END
#endif /*__CCDISPLAYMANAGER_H__*/