MCPcopy Create free account
hub / github.com/IppClub/Dora-SSR / _parseAnimation

Method _parseAnimation

Source/3rdParty/dragonBones/parser/BinaryDataParser.cpp:95–196  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

93}
94
95AnimationData* BinaryDataParser::_parseAnimation(const rapidjson::Value& rawData)
96{
97 const auto animation = BaseObject::borrowObject<AnimationData>();
98 animation->frameCount = std::max(_getNumber(rawData, DURATION, 1), 1);
99 animation->playTimes = _getNumber(rawData, PLAY_TIMES, 1);
100 animation->duration = (float)(animation->frameCount) / _armature->frameRate; // float
101 animation->fadeInTime = _getNumber(rawData, FADE_IN_TIME, 0.0f);
102 animation->scale = _getNumber(rawData, SCALE, 1.0f);
103 animation->name = _getString(rawData, NAME, DEFAULT_NAME);
104 if (animation->name.empty())
105 {
106 animation->name = DEFAULT_NAME;
107 }
108
109 // Offsets.
110 const auto& offsets = rawData[OFFSET];
111 animation->frameIntOffset = offsets[0].GetUint();
112 animation->frameFloatOffset = offsets[1].GetUint();
113 animation->frameOffset = offsets[2].GetUint();
114
115 _animation = animation;
116
117 if (rawData.HasMember(ACTION))
118 {
119 animation->actionTimeline = _parseBinaryTimeline(TimelineType::Action, rawData[ACTION].GetUint());
120 }
121
122 if (rawData.HasMember(Z_ORDER))
123 {
124 animation->zOrderTimeline = _parseBinaryTimeline(TimelineType::ZOrder, rawData[Z_ORDER].GetUint());
125 }
126
127 if (rawData.HasMember(BONE))
128 {
129 const auto& rawTimeliness = rawData[BONE];
130 for (auto iterator = rawTimeliness.MemberBegin(); iterator != rawTimeliness.MemberEnd(); ++iterator)
131 {
132 const auto bone = _armature->getBone(iterator->name.GetString());
133 if (bone == nullptr)
134 {
135 continue;
136 }
137
138 const auto& rawTimelines = *&(iterator->value);
139 for (std::size_t i = 0, l = rawTimelines.Size(); i < l; i += 2)
140 {
141 const auto timelineType = (TimelineType)rawTimelines[(rapidjson::SizeType)i].GetInt();
142 const auto timelineOffset = rawTimelines[(rapidjson::SizeType)i + 1].GetUint();
143 const auto timeline = _parseBinaryTimeline(timelineType, timelineOffset);
144 _animation->addBoneTimeline(bone, timeline);
145 }
146 }
147 }
148
149 if (rawData.HasMember(SLOT))
150 {
151 const auto& rawTimeliness = rawData[SLOT];
152 for (auto iterator = rawTimeliness.MemberBegin(); iterator != rawTimeliness.MemberEnd(); ++iterator)

Callers

nothing calls this directly

Calls 12

HasMemberMethod · 0.80
MemberBeginMethod · 0.80
MemberEndMethod · 0.80
GetIntMethod · 0.80
addBoneTimelineMethod · 0.80
addSlotTimelineMethod · 0.80
addConstraintTimelineMethod · 0.80
SizeMethod · 0.65
maxFunction · 0.50
emptyMethod · 0.45
getBoneMethod · 0.45
getSlotMethod · 0.45

Tested by

no test coverage detected