You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

102 lines
2.7 KiB

#include "AnimationData.h"
#include "ArmatureData.h"
#include "ConstraintData.h"
DRAGONBONES_NAMESPACE_BEGIN
void AnimationData::_onClear() {
for (const auto& pair : boneTimelines) {
for (const auto timeline : pair.second) {
timeline->returnToPool();
}
}
for (const auto& pair : slotTimelines) {
for (const auto timeline : pair.second) {
timeline->returnToPool();
}
}
for (const auto& pair : constraintTimelines) {
for (const auto timeline : pair.second) {
timeline->returnToPool();
}
}
if (actionTimeline != nullptr) {
actionTimeline->returnToPool();
}
if (zOrderTimeline != nullptr) {
zOrderTimeline->returnToPool();
}
frameIntOffset = 0;
frameFloatOffset = 0;
frameOffset = 0;
frameCount = 0;
playTimes = 0;
duration = 0.0f;
scale = 1.0f;
fadeInTime = 0.0f;
cacheFrameRate = 0.0f;
name = "";
cachedFrames.clear();
boneTimelines.clear();
slotTimelines.clear();
constraintTimelines.clear();
boneCachedFrameIndices.clear();
slotCachedFrameIndices.clear();
parent = nullptr;
actionTimeline = nullptr;
zOrderTimeline = nullptr;
}
void AnimationData::cacheFrames(unsigned frameRate) {
if (cacheFrameRate > 0.0f) // TODO clear cache.
{
return;
}
cacheFrameRate = std::max(std::ceil(frameRate * scale), 1.0f);
const auto cacheFrameCount = std::ceil(cacheFrameRate * duration) + 1; // Cache one more frame.
cachedFrames.resize(cacheFrameCount, false);
for (const auto bone : parent->sortedBones) {
boneCachedFrameIndices[bone->name].resize(cacheFrameCount, -1);
}
for (const auto slot : parent->sortedSlots) {
slotCachedFrameIndices[slot->name].resize(cacheFrameCount, -1);
}
}
void AnimationData::addBoneTimeline(BoneData* bone, TimelineData* value) {
auto& timelines = boneTimelines[bone->name];
if (std::find(timelines.cbegin(), timelines.cend(), value) == timelines.cend()) {
timelines.push_back(value);
}
}
void AnimationData::addSlotTimeline(SlotData* slot, TimelineData* value) {
auto& timelines = slotTimelines[slot->name];
if (std::find(timelines.cbegin(), timelines.cend(), value) == timelines.cend()) {
timelines.push_back(value);
}
}
void AnimationData::addConstraintTimeline(ConstraintData* constraint, TimelineData* value) {
auto& timelines = constraintTimelines[constraint->name];
if (std::find(timelines.cbegin(), timelines.cend(), value) == timelines.cend()) {
timelines.push_back(value);
}
}
void TimelineData::_onClear() {
type = TimelineType::BoneAll;
offset = 0;
frameIndicesOffset = -1;
}
DRAGONBONES_NAMESPACE_END