2015-06-17 13:16:06 +08:00
|
|
|
|
/****************************************************************************
|
2019-11-24 23:15:56 +08:00
|
|
|
|
Copyright (c) 2013-2017 Chukong Technologies Inc.
|
2013-06-06 12:02:54 +08:00
|
|
|
|
|
|
|
|
|
http://www.cocos2d-x.org
|
|
|
|
|
|
|
|
|
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
|
|
|
of this software and associated documentation files (the "Software"), to deal
|
|
|
|
|
in the Software without restriction, including without limitation the rights
|
|
|
|
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
|
|
|
copies of the Software, and to permit persons to whom the Software is
|
|
|
|
|
furnished to do so, subject to the following conditions:
|
|
|
|
|
|
|
|
|
|
The above copyright notice and this permission notice shall be included in
|
|
|
|
|
all copies or substantial portions of the Software.
|
|
|
|
|
|
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
|
|
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
|
|
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
|
|
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
|
|
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
|
|
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
|
|
|
THE SOFTWARE.
|
|
|
|
|
****************************************************************************/
|
|
|
|
|
|
|
|
|
|
#ifndef __CCDISPLAYMANAGER_H__
|
|
|
|
|
#define __CCDISPLAYMANAGER_H__
|
|
|
|
|
|
2020-08-03 17:51:40 +08:00
|
|
|
|
#include "cocostudio/CCArmatureDefine.h"
|
|
|
|
|
#include "cocostudio/CCDecorativeDisplay.h"
|
|
|
|
|
#include "cocostudio/CCDatas.h"
|
|
|
|
|
#include "cocostudio/CocosStudioExport.h"
|
2013-06-06 12:02:54 +08:00
|
|
|
|
|
2013-10-15 18:00:03 +08:00
|
|
|
|
namespace cocostudio {
|
2013-06-07 10:52:32 +08:00
|
|
|
|
|
2013-09-15 19:08:45 +08:00
|
|
|
|
class Bone;
|
2013-06-06 12:02:54 +08:00
|
|
|
|
|
2013-11-20 12:04:47 +08:00
|
|
|
|
/**! DisplayManager manages Bone's display
|
|
|
|
|
* @js NA
|
|
|
|
|
* @lua NA
|
|
|
|
|
*/
|
2014-07-21 17:45:56 +08:00
|
|
|
|
class CC_STUDIO_DLL DisplayManager : public cocos2d::Ref
|
2013-06-06 12:02:54 +08:00
|
|
|
|
{
|
|
|
|
|
public:
|
2013-09-15 19:08:45 +08:00
|
|
|
|
static DisplayManager *create(Bone *bone);
|
2013-06-07 10:52:32 +08:00
|
|
|
|
|
2013-06-06 12:02:54 +08:00
|
|
|
|
public:
|
2013-09-15 19:08:45 +08:00
|
|
|
|
DisplayManager();
|
|
|
|
|
~DisplayManager();
|
2013-06-07 10:52:32 +08:00
|
|
|
|
|
2013-09-15 19:08:45 +08:00
|
|
|
|
bool init(Bone *bone);
|
2013-06-07 10:52:32 +08:00
|
|
|
|
|
2013-06-06 12:02:54 +08:00
|
|
|
|
/**
|
2013-09-15 19:08:45 +08:00
|
|
|
|
* Use BoneData to init the display list.
|
2016-01-12 12:22:24 +08:00
|
|
|
|
* If display is a sprite, and it have texture info in the TextureData, then use TextureData to init the display's anchor point
|
2013-09-15 19:08:45 +08:00
|
|
|
|
* If the display is a Armature, then create a new Armature
|
2013-06-06 12:02:54 +08:00
|
|
|
|
*/
|
2013-09-15 19:08:45 +08:00
|
|
|
|
virtual void initDisplayList(BoneData *boneData);
|
2013-06-07 10:52:32 +08:00
|
|
|
|
|
2013-06-06 12:02:54 +08:00
|
|
|
|
/**
|
2013-06-07 10:52:32 +08:00
|
|
|
|
* 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
|
2013-06-06 12:02:54 +08:00
|
|
|
|
*
|
2015-06-17 13:16:06 +08:00
|
|
|
|
* @param displayData it include the display information, like DisplayType.
|
|
|
|
|
* If you want to create a sprite display, then create a SpriteDisplayData param
|
2013-06-06 12:02:54 +08:00
|
|
|
|
*
|
2015-06-17 13:16:06 +08:00
|
|
|
|
* @param index the index of the display you want to replace or add to
|
|
|
|
|
* -1 : append display from back
|
2013-06-06 12:02:54 +08:00
|
|
|
|
*/
|
2013-09-15 19:08:45 +08:00
|
|
|
|
void addDisplay(DisplayData *displayData, int index);
|
2013-09-13 18:07:37 +08:00
|
|
|
|
|
2013-10-15 18:00:03 +08:00
|
|
|
|
void addDisplay(cocos2d::Node *display, int index);
|
2013-06-07 10:52:32 +08:00
|
|
|
|
|
2013-06-06 12:02:54 +08:00
|
|
|
|
void removeDisplay(int index);
|
2013-06-07 10:52:32 +08:00
|
|
|
|
|
2013-12-17 19:32:16 +08:00
|
|
|
|
const cocos2d::Vector<DecorativeDisplay*>& getDecorativeDisplayList() const;
|
2013-06-07 10:52:32 +08:00
|
|
|
|
|
2014-01-02 11:07:31 +08:00
|
|
|
|
/*
|
|
|
|
|
* @deprecated, please use changeDisplayWithIndex and changeDisplayWithName
|
|
|
|
|
*/
|
|
|
|
|
CC_DEPRECATED_ATTRIBUTE void changeDisplayByIndex(int index, bool force);
|
|
|
|
|
CC_DEPRECATED_ATTRIBUTE void changeDisplayByName(const std::string& name, bool force);
|
|
|
|
|
|
2013-06-06 12:02:54 +08:00
|
|
|
|
/**
|
2013-06-07 10:52:32 +08:00
|
|
|
|
* Change display by index. You can just use this method to change display in the display list.
|
2013-06-06 12:02:54 +08:00
|
|
|
|
* 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
|
|
|
|
|
*
|
2013-06-07 10:52:32 +08:00
|
|
|
|
* @param index The index of the display you want to change
|
2013-06-06 12:02:54 +08:00
|
|
|
|
* @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.
|
|
|
|
|
*/
|
2014-01-02 11:07:31 +08:00
|
|
|
|
void changeDisplayWithIndex(int index, bool force);
|
|
|
|
|
void changeDisplayWithName(const std::string& name, bool force);
|
2013-06-07 10:52:32 +08:00
|
|
|
|
|
2013-11-05 19:53:38 +08:00
|
|
|
|
cocos2d::Node *getDisplayRenderNode() const;
|
|
|
|
|
DisplayType getDisplayRenderNodeType() const;
|
2013-06-07 10:52:32 +08:00
|
|
|
|
|
2013-11-05 19:53:38 +08:00
|
|
|
|
int getCurrentDisplayIndex() const;
|
2013-06-06 12:02:54 +08:00
|
|
|
|
|
2013-09-15 19:08:45 +08:00
|
|
|
|
virtual void setCurrentDecorativeDisplay(DecorativeDisplay *decoDisplay);
|
2013-11-05 19:53:38 +08:00
|
|
|
|
virtual DecorativeDisplay *getCurrentDecorativeDisplay() const;
|
|
|
|
|
virtual DecorativeDisplay *getDecorativeDisplayByIndex( int index) const;
|
2013-06-07 10:52:32 +08:00
|
|
|
|
|
2013-06-06 12:02:54 +08:00
|
|
|
|
/**
|
|
|
|
|
* 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
|
2013-06-07 10:52:32 +08:00
|
|
|
|
*
|
2013-06-06 12:02:54 +08:00
|
|
|
|
* @see setVisible(bool)
|
|
|
|
|
* @return true if the node is visible, false if the node is hidden.
|
|
|
|
|
*/
|
2013-11-05 19:53:38 +08:00
|
|
|
|
virtual bool isVisible() const;
|
2013-06-07 10:52:32 +08:00
|
|
|
|
|
2013-11-05 19:53:38 +08:00
|
|
|
|
cocos2d::Size getContentSize() const;
|
|
|
|
|
cocos2d::Rect getBoundingBox() const;
|
2013-06-07 10:52:32 +08:00
|
|
|
|
|
2014-05-15 01:07:09 +08:00
|
|
|
|
cocos2d::Vec2 getAnchorPoint() const;
|
|
|
|
|
cocos2d::Vec2 getAnchorPointInPoints() const;
|
2013-06-06 12:02:54 +08:00
|
|
|
|
|
2013-06-07 10:52:32 +08:00
|
|
|
|
/**
|
2013-06-06 12:02:54 +08:00
|
|
|
|
* Check if the position is inside the bone.
|
|
|
|
|
*/
|
2014-05-15 01:07:09 +08:00
|
|
|
|
virtual bool containPoint(cocos2d::Vec2 &_point);
|
2013-06-07 10:52:32 +08:00
|
|
|
|
|
2013-06-06 12:02:54 +08:00
|
|
|
|
/**
|
|
|
|
|
* Check if the position is inside the bone.
|
|
|
|
|
*/
|
2013-06-07 10:52:32 +08:00
|
|
|
|
virtual bool containPoint(float x, float y);
|
2013-06-06 12:02:54 +08:00
|
|
|
|
|
2013-11-05 19:53:38 +08:00
|
|
|
|
virtual void setForceChangeDisplay(bool force) { _forceChangeDisplay = force; }
|
|
|
|
|
virtual bool isForceChangeDisplay() const { return _forceChangeDisplay; }
|
2013-06-06 12:02:54 +08:00
|
|
|
|
protected:
|
2013-12-17 19:32:16 +08:00
|
|
|
|
cocos2d::Vector<DecorativeDisplay*> _decoDisplayList;
|
2013-09-13 18:07:37 +08:00
|
|
|
|
//! Display render node.
|
2013-10-15 18:00:03 +08:00
|
|
|
|
cocos2d::Node *_displayRenderNode;
|
2013-10-30 09:41:40 +08:00
|
|
|
|
//! Display render node type
|
|
|
|
|
DisplayType _displayType;
|
2013-06-06 12:02:54 +08:00
|
|
|
|
//! Include current display information, like contour sprite, etc.
|
2013-09-15 20:24:25 +08:00
|
|
|
|
DecorativeDisplay *_currentDecoDisplay;
|
2013-06-06 12:02:54 +08:00
|
|
|
|
//! Current display index
|
2013-09-15 20:24:25 +08:00
|
|
|
|
int _displayIndex;
|
2013-06-07 10:52:32 +08:00
|
|
|
|
|
2013-11-05 19:53:38 +08:00
|
|
|
|
bool _forceChangeDisplay;
|
2013-06-07 10:52:32 +08:00
|
|
|
|
|
2013-06-06 12:02:54 +08:00
|
|
|
|
//! Whether of not the bone is visible. Default is true
|
2013-09-15 20:24:25 +08:00
|
|
|
|
bool _visible;
|
2013-06-07 10:52:32 +08:00
|
|
|
|
|
2013-09-15 20:24:25 +08:00
|
|
|
|
Bone *_bone;
|
2013-06-06 12:02:54 +08:00
|
|
|
|
};
|
2013-06-07 10:52:32 +08:00
|
|
|
|
|
2013-10-15 18:00:03 +08:00
|
|
|
|
}
|
2013-06-06 12:02:54 +08:00
|
|
|
|
|
|
|
|
|
#endif /*__CCDISPLAYMANAGER_H__*/
|