mirror of https://github.com/axmolengine/axmol.git
217 lines
8.1 KiB
C
217 lines
8.1 KiB
C
|
/**
|
|||
|
* The MIT License (MIT)
|
|||
|
*
|
|||
|
* Copyright (c) 2012-2018 DragonBones team and other contributors
|
|||
|
*
|
|||
|
* 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 DRAGONBONES_CC_FACTORY_H
|
|||
|
#define DRAGONBONES_CC_FACTORY_H
|
|||
|
|
|||
|
#include "editor-support/dragonBones/DragonBonesHeaders.h"
|
|||
|
#include "cocos2d.h"
|
|||
|
#include "CCArmatureDisplay.h"
|
|||
|
|
|||
|
DRAGONBONES_NAMESPACE_BEGIN
|
|||
|
/**
|
|||
|
* The Cocos2d factory.
|
|||
|
* @version DragonBones 3.0
|
|||
|
* @language en_US
|
|||
|
*/
|
|||
|
/**
|
|||
|
* Cocos2d <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @version DragonBones 3.0
|
|||
|
* @language zh_CN
|
|||
|
*/
|
|||
|
class CCFactory : public BaseFactory
|
|||
|
{
|
|||
|
DRAGONBONES_DISALLOW_COPY_AND_ASSIGN(CCFactory)
|
|||
|
|
|||
|
private:
|
|||
|
static DragonBones* _dragonBonesInstance;
|
|||
|
static CCFactory* _factory;
|
|||
|
|
|||
|
public:
|
|||
|
/**
|
|||
|
* A global factory instance that can be used directly.
|
|||
|
* @version DragonBones 4.7
|
|||
|
* @language en_US
|
|||
|
*/
|
|||
|
/**
|
|||
|
* һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><EFBFBD>ʹ<EFBFBD>õ<EFBFBD>ȫ<EFBFBD>ֹ<EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @version DragonBones 4.7
|
|||
|
* @language zh_CN
|
|||
|
*/
|
|||
|
static CCFactory* getFactory()
|
|||
|
{
|
|||
|
if (CCFactory::_factory == nullptr)
|
|||
|
{
|
|||
|
CCFactory::_factory = new CCFactory();
|
|||
|
}
|
|||
|
|
|||
|
return CCFactory::_factory;
|
|||
|
}
|
|||
|
|
|||
|
protected:
|
|||
|
std::string _prevPath;
|
|||
|
|
|||
|
public:
|
|||
|
/**
|
|||
|
* @inheritDoc
|
|||
|
*/
|
|||
|
CCFactory() :
|
|||
|
_prevPath()
|
|||
|
{
|
|||
|
if (_dragonBonesInstance == nullptr)
|
|||
|
{
|
|||
|
const auto eventManager = CCArmatureDisplay::create();
|
|||
|
eventManager->retain();
|
|||
|
|
|||
|
_dragonBonesInstance = new DragonBones(eventManager);
|
|||
|
_dragonBonesInstance->yDown = false;
|
|||
|
|
|||
|
cocos2d::Director::getInstance()->getScheduler()->schedule(
|
|||
|
[&](float passedTime)
|
|||
|
{
|
|||
|
_dragonBonesInstance->advanceTime(passedTime);
|
|||
|
},
|
|||
|
this, 0.0f, false, "dragonBonesClock"
|
|||
|
);
|
|||
|
}
|
|||
|
|
|||
|
_dragonBones = _dragonBonesInstance;
|
|||
|
}
|
|||
|
virtual ~CCFactory()
|
|||
|
{
|
|||
|
clear();
|
|||
|
}
|
|||
|
|
|||
|
protected:
|
|||
|
virtual TextureAtlasData* _buildTextureAtlasData(TextureAtlasData* textureAtlasData, void* textureAtlas) const override;
|
|||
|
virtual Armature* _buildArmature(const BuildArmaturePackage& dataPackage) const override;
|
|||
|
virtual Slot* _buildSlot(const BuildArmaturePackage& dataPackage, const SlotData* slotData, Armature* armature) const override;
|
|||
|
|
|||
|
public:
|
|||
|
virtual DragonBonesData* loadDragonBonesData(const std::string& filePath, const std::string& name = "", float scale = 1.0f);
|
|||
|
/**
|
|||
|
* - Load and parse a texture atlas data and texture from the local and cache them to the factory.
|
|||
|
* @param filePath - The file path of texture atlas data.
|
|||
|
* @param name - Specify a cache name for the instance so that the instance can be obtained through this name. (If not set, use the instance name instead)
|
|||
|
* @param scale - Specify a scaling value for the map set. (Not scaled by default)
|
|||
|
* @returns The TextureAtlasData instance.
|
|||
|
* @version DragonBones 4.5
|
|||
|
* @example
|
|||
|
* <pre>
|
|||
|
* factory.loadTextureAtlasData("hero_tex.json");
|
|||
|
* </pre>
|
|||
|
* @language en_US
|
|||
|
*/
|
|||
|
/**
|
|||
|
* - <EFBFBD>ӱ<EFBFBD><EFBFBD>ؼ<EFBFBD><EFBFBD>ز<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݺ<EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>浽<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD>
|
|||
|
* @param filePath - <EFBFBD><EFBFBD>ͼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param name - Ϊ<EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƻ<EFBFBD>ȡ<EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ø<EFBFBD>ʵ<EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD>
|
|||
|
* @param scale - Ϊ<EFBFBD><EFBFBD>ͼ<EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD> <EFBFBD><EFBFBD>Ĭ<EFBFBD>ϲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD>
|
|||
|
* @returns TextureAtlasData ʵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @version DragonBones 4.5
|
|||
|
* @example
|
|||
|
* <pre>
|
|||
|
* factory.loadTextureAtlasData("hero_tex.json");
|
|||
|
* </pre>
|
|||
|
* @language zh_CN
|
|||
|
*/
|
|||
|
virtual TextureAtlasData* loadTextureAtlasData(const std::string& filePath, const std::string& name = "", float scale = 1.0f);
|
|||
|
/**
|
|||
|
* - Create a armature from cached DragonBonesData instances and TextureAtlasData instances, then use the {@link #clock} to update it.
|
|||
|
* The difference is that the armature created by {@link #buildArmature} is not WorldClock instance update.
|
|||
|
* @param armatureName - The armature data name.
|
|||
|
* @param dragonBonesName - The cached name of the DragonBonesData instance. (If not set, all DragonBonesData instances are retrieved, and when multiple DragonBonesData instances contain a the same name armature data, it may not be possible to accurately create a specific armature)
|
|||
|
* @param skinName - The skin name, you can set a different ArmatureData name to share it's skin data. (If not set, use the default skin data)
|
|||
|
* @returns The armature display container.
|
|||
|
* @version DragonBones 4.5
|
|||
|
* @example
|
|||
|
* <pre>
|
|||
|
* let armatureDisplay = factory.buildArmatureDisplay("armatureName", "dragonBonesName");
|
|||
|
* </pre>
|
|||
|
* @language en_US
|
|||
|
*/
|
|||
|
/**
|
|||
|
* - ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DragonBonesData ʵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> TextureAtlasData ʵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>Ǽܣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> {@link #clock} <EFBFBD><EFBFBD><EFBFBD>¸ùǼܡ<EFBFBD>
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> {@link #buildArmature} <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĹǼ<EFBFBD>û<EFBFBD><EFBFBD> WorldClock ʵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param armatureName - <EFBFBD>Ǽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ơ<EFBFBD>
|
|||
|
* @param dragonBonesName - DragonBonesData ʵ<EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ơ<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD> DragonBonesData ʵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DragonBonesData ʵ<EFBFBD><EFBFBD><EFBFBD>а<EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><EFBFBD><EFBFBD>ĹǼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ض<EFBFBD><EFBFBD>ĹǼܣ<EFBFBD>
|
|||
|
* @param skinName - Ƥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݡ<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD>Ĭ<EFBFBD>ϵ<EFBFBD>Ƥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>
|
|||
|
* @returns <EFBFBD>Ǽܵ<EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @version DragonBones 4.5
|
|||
|
* @example
|
|||
|
* <pre>
|
|||
|
* let armatureDisplay = factory.buildArmatureDisplay("armatureName", "dragonBonesName");
|
|||
|
* </pre>
|
|||
|
* @language zh_CN
|
|||
|
*/
|
|||
|
virtual CCArmatureDisplay* buildArmatureDisplay(const std::string& armatureName, const std::string& dragonBonesName = "", const std::string& skinName = "", const std::string& textureAtlasName = "") const;
|
|||
|
/**
|
|||
|
* - Create the display object with the specified texture.
|
|||
|
* @param textureName - The texture data name.
|
|||
|
* @param textureAtlasName - The texture atlas data name. (Of not set, all texture atlas data will be searched)
|
|||
|
* @version DragonBones 3.0
|
|||
|
* @language en_US
|
|||
|
*/
|
|||
|
/**
|
|||
|
* - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param textureName - <EFBFBD><EFBFBD>ͼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ơ<EFBFBD>
|
|||
|
* @param textureAtlasName - <EFBFBD><EFBFBD>ͼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ơ<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>
|
|||
|
* @version DragonBones 3.0
|
|||
|
* @language zh_CN
|
|||
|
*/
|
|||
|
virtual cocos2d::Sprite* getTextureDisplay(const std::string& textureName, const std::string& dragonBonesName = "") const;
|
|||
|
/**
|
|||
|
* - A global sound event manager.
|
|||
|
* Sound events can be listened to uniformly from the manager.
|
|||
|
* @version DragonBones 4.5
|
|||
|
* @language en_US
|
|||
|
*/
|
|||
|
/**
|
|||
|
* - ȫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԴӸù<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳһ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @version DragonBones 4.5
|
|||
|
* @language zh_CN
|
|||
|
*/
|
|||
|
virtual CCArmatureDisplay* getSoundEventManager() const
|
|||
|
{
|
|||
|
return dynamic_cast<CCArmatureDisplay*>(static_cast<IArmatureProxy*>(_dragonBones->getEventManager()));
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* Deprecated, please refer to {@link #clock}.
|
|||
|
* @deprecated
|
|||
|
* @language en_US
|
|||
|
*/
|
|||
|
/**
|
|||
|
* <EFBFBD>ѷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ο<EFBFBD> {@link #clock}<EFBFBD><EFBFBD>
|
|||
|
* @deprecated
|
|||
|
* @language zh_CN
|
|||
|
*/
|
|||
|
static WorldClock* getClock()
|
|||
|
{
|
|||
|
return _dragonBonesInstance->getClock();
|
|||
|
}
|
|||
|
};
|
|||
|
|
|||
|
DRAGONBONES_NAMESPACE_END
|
|||
|
#endif // DRAGONBONES_CC_FACTORY_H
|