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
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
|
|
|