mirror of https://github.com/axmolengine/axmol.git
90 lines
1.9 KiB
C++
90 lines
1.9 KiB
C++
#include "DragonBones.h"
|
|
#include "../armature/Armature.h"
|
|
#include "../animation/WorldClock.h"
|
|
#include "../animation/Animation.h"
|
|
#include "../event/EventObject.h"
|
|
#include "../event/IEventDispatcher.h"
|
|
|
|
DRAGONBONES_NAMESPACE_BEGIN
|
|
|
|
const std::string DragonBones::VEISION = "5.6.300";
|
|
|
|
bool DragonBones::yDown = true;
|
|
bool DragonBones::debug = false;
|
|
bool DragonBones::debugDraw = false;
|
|
bool DragonBones::webAssembly = false;
|
|
|
|
DragonBones::DragonBones(IEventDispatcher* eventManager) :
|
|
_events(),
|
|
_objects(),
|
|
_clock(nullptr),
|
|
_eventManager(eventManager)
|
|
{
|
|
_clock = new WorldClock();
|
|
_eventManager = eventManager;
|
|
}
|
|
|
|
DragonBones::~DragonBones()
|
|
{
|
|
if (_clock != nullptr)
|
|
{
|
|
delete _clock;
|
|
}
|
|
|
|
_clock = nullptr;
|
|
_eventManager = nullptr;
|
|
}
|
|
void DragonBones::advanceTime(float passedTime)
|
|
{
|
|
if (!_objects.empty())
|
|
{
|
|
for (const auto object : _objects)
|
|
{
|
|
object->returnToPool();
|
|
}
|
|
|
|
_objects.clear();
|
|
}
|
|
|
|
if (!_events.empty())
|
|
{
|
|
for (std::size_t i = 0; i < _events.size(); ++i)
|
|
{
|
|
const auto eventObject = _events[i];
|
|
const auto armature = eventObject->armature;
|
|
if (armature->_armatureData != nullptr)
|
|
{
|
|
armature->getProxy()->dispatchDBEvent(eventObject->type, eventObject);
|
|
if (eventObject->type == EventObject::SOUND_EVENT)
|
|
{
|
|
_eventManager->dispatchDBEvent(eventObject->type, eventObject);
|
|
}
|
|
}
|
|
|
|
bufferObject(eventObject);
|
|
}
|
|
|
|
_events.clear();
|
|
}
|
|
|
|
_clock->advanceTime(passedTime);
|
|
}
|
|
|
|
void DragonBones::bufferEvent(EventObject* value)
|
|
{
|
|
_events.push_back(value);
|
|
}
|
|
|
|
void DragonBones::bufferObject(BaseObject* object)
|
|
{
|
|
_objects.push_back(object);
|
|
}
|
|
|
|
WorldClock* DragonBones::getClock()
|
|
{
|
|
return _clock;
|
|
}
|
|
|
|
|
|
DRAGONBONES_NAMESPACE_END
|