axmol/extensions/DragonBones/CCFactory.h

223 lines
8.9 KiB
C
Raw Normal View History

/**
2021-12-24 21:11:44 +08:00
* 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:
2021-12-25 10:04:45 +08:00
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
2021-12-25 10:04:45 +08:00
*
* 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 "DragonBonesHeaders.h"
#include "cocos2d.h"
#include "CCArmatureDisplay.h"
DRAGONBONES_NAMESPACE_BEGIN
/**
* The Cocos2d factory.
* @version DragonBones 3.0
* @language en_US
*/
/**
* Cocos2d
* @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
*/
/**
* 使
* @version DragonBones 4.7
* @language zh_CN
*/
static CCFactory* getFactory()
{
2021-12-25 10:04:45 +08:00
if (CCFactory::_factory == nullptr)
{
CCFactory::_factory = new CCFactory();
}
return CCFactory::_factory;
}
protected:
std::string _prevPath;
public:
/**
* @inheritDoc
*/
2021-12-25 10:04:45 +08:00
CCFactory() : _prevPath()
{
if (_dragonBonesInstance == nullptr)
{
const auto eventManager = CCArmatureDisplay::create();
eventManager->retain();
2021-12-25 10:04:45 +08:00
_dragonBonesInstance = new DragonBones(eventManager);
_dragonBonesInstance->yDown = false;
cocos2d::Director::getInstance()->getScheduler()->schedule(
2021-12-25 10:04:45 +08:00
[&](float passedTime) { _dragonBonesInstance->advanceTime(passedTime); }, this, 0.0f, false,
"dragonBonesClock");
}
_dragonBones = _dragonBonesInstance;
}
2021-12-25 10:04:45 +08:00
virtual ~CCFactory() { clear(); }
protected:
2021-12-25 10:04:45 +08:00
virtual TextureAtlasData* _buildTextureAtlasData(TextureAtlasData* textureAtlasData,
void* textureAtlas) const override;
virtual Armature* _buildArmature(const BuildArmaturePackage& dataPackage) const override;
2021-12-25 10:04:45 +08:00
virtual Slot* _buildSlot(const BuildArmaturePackage& dataPackage,
const SlotData* slotData,
Armature* armature) const override;
public:
virtual DragonBonesData* loadDragonBonesData(std::string_view filePath,
std::string_view 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.
2021-12-25 10:04:45 +08:00
* @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
*/
/**
* -
* @param filePath -
* @param name - 便 使
* @param scale -
* @returns TextureAtlasData
* @version DragonBones 4.5
* @example
* <pre>
* factory.loadTextureAtlasData("hero_tex.json");
* </pre>
* @language zh_CN
*/
virtual TextureAtlasData* loadTextureAtlasData(std::string_view filePath,
std::string_view name = "",
float scale = 1.0f);
/**
2021-12-25 10:04:45 +08:00
* - 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.
2021-12-25 10:04:45 +08:00
* @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
*/
/**
* - DragonBonesData TextureAtlasData {@link #clock}
* {@link #buildArmature} WorldClock
* @param armatureName -
2021-12-25 10:04:45 +08:00
* @param dragonBonesName - DragonBonesData DragonBonesData
* DragonBonesData
* @param skinName - 使
* @returns
* @version DragonBones 4.5
* @example
* <pre>
* let armatureDisplay = factory.buildArmatureDisplay("armatureName", "dragonBonesName");
* </pre>
* @language zh_CN
*/
virtual CCArmatureDisplay* buildArmatureDisplay(std::string_view armatureName,
std::string_view dragonBonesName = "",
std::string_view skinName = "",
std::string_view 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
*/
/**
* -
* @param textureName -
* @param textureAtlasName -
* @version DragonBones 3.0
* @language zh_CN
*/
virtual cocos2d::Sprite* getTextureDisplay(std::string_view textureName,
std::string_view dragonBonesName = "") const;
/**
* - A global sound event manager.
* Sound events can be listened to uniformly from the manager.
* @version DragonBones 4.5
* @language en_US
*/
/**
* -
*
* @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
*/
/**
* {@link #clock}
* @deprecated
* @language zh_CN
*/
2021-12-25 10:04:45 +08:00
static WorldClock* getClock() { return _dragonBonesInstance->getClock(); }
};
DRAGONBONES_NAMESPACE_END
2021-12-25 10:04:45 +08:00
#endif // DRAGONBONES_CC_FACTORY_H