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

Method _parseArmature

Source/3rdParty/dragonBones/parser/JSONDataParser.cpp:148–339  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

146}
147
148ArmatureData* JSONDataParser::_parseArmature(const rapidjson::Value& rawData, float scale)
149{
150 const auto armature = BaseObject::borrowObject<ArmatureData>();
151 armature->name = _getString(rawData, NAME, "");
152 armature->frameRate = _getNumber(rawData, FRAME_RATE, _data->frameRate);
153 armature->scale = scale;
154
155 if (rawData.HasMember(TYPE) && rawData[TYPE].IsString())
156 {
157 armature->type = _getArmatureType(rawData[TYPE].GetString());
158 }
159 else
160 {
161 armature->type = (ArmatureType)_getNumber(rawData, TYPE, (int)ArmatureType::Armature);
162 }
163
164 if (armature->frameRate == 0) // Data error.
165 {
166 armature->frameRate = 24;
167 }
168
169 _armature = armature;
170
171 if (rawData.HasMember(CANVAS))
172 {
173 const auto& rawCanvas = rawData[CANVAS];
174 const auto canvas = BaseObject::borrowObject<CanvasData>();
175 canvas->hasBackground = rawCanvas.HasMember(COLOR);
176 canvas->color = _getNumber(rawCanvas, COLOR, 0);
177 canvas->aabb.x = _getNumber(rawCanvas, X, 0.0f) * armature->scale;
178 canvas->aabb.y = _getNumber(rawCanvas, Y, 0.0f) * armature->scale;
179 canvas->aabb.width = _getNumber(rawCanvas, WIDTH, 0.0f) * armature->scale;
180 canvas->aabb.height = _getNumber(rawCanvas, HEIGHT, 0.0f) * armature->scale;
181 //
182 armature->canvas = canvas;
183 }
184
185 if (rawData.HasMember(AABB))
186 {
187 const auto& rawAABB = rawData[AABB];
188 armature->aabb.x = _getNumber(rawAABB, X, 0.0f) * armature->scale;
189 armature->aabb.y = _getNumber(rawAABB, Y, 0.0f) * armature->scale;
190 armature->aabb.width = _getNumber(rawAABB, WIDTH, 0.0f) * armature->scale;
191 armature->aabb.height = _getNumber(rawAABB, HEIGHT, 0.0f) * armature->scale;
192 }
193
194 if (rawData.HasMember(BONE))
195 {
196 const auto& rawBones = rawData[BONE];
197 for (std::size_t i = 0, l = rawBones.Size(); i < l; ++i)
198 {
199 const auto& rawBone = rawBones[(rapidjson::SizeType)i];
200 const auto& parentName = _getString(rawBone, PARENT, "");
201 const auto bone = _parseBone(rawBone);
202
203 if (!parentName.empty()) // Get bone parent.
204 {
205 const auto parent = armature->getBone(parentName);

Callers

nothing calls this directly

Calls 15

HasMemberMethod · 0.80
addConstraintMethod · 0.80
sortBonesMethod · 0.80
getMeshMethod · 0.80
shareFromMethod · 0.80
getAnimationMethod · 0.80
SizeMethod · 0.65
findMethod · 0.65
clearMethod · 0.65
emptyMethod · 0.45
getBoneMethod · 0.45
push_backMethod · 0.45

Tested by

no test coverage detected