BoneFrameData * JSONDataParser::_parseBoneFrame(const rapidjson::Value& rawData, unsigned frameStart, unsigned frameCount) const { const auto frame = BaseObject::borrowObject<BoneFrameData>(); frame->parent = this->_armature->getBone(_getString(rawData, PARENT, "")); frame->tweenRotate = _getNumber(rawData, TWEEN_ROTATE, (int)0); frame->tweenScale = _getBoolean(rawData, TWEEN_SCALE, true); _parseTweenFrame<BoneFrameData>(rawData, *frame, frameStart, frameCount); if (rawData.HasMember(TRANSFORM)) { _parseTransform(rawData[TRANSFORM], frame->transform); } const auto bone = static_cast<BoneTimelineData*>(this->_timeline)->bone; if ((rawData.HasMember(EVENT) || rawData.HasMember(SOUND))) { _parseEventData(rawData, frame->events, bone, nullptr); this->_animation->hasBoneTimelineEvent = true; } if (rawData.HasMember(ACTION)) { const auto slot = this->_armature->getSlot(bone->name); _parseActionData(rawData, frame->actions, bone, slot); this->_animation->hasBoneTimelineEvent = true; } return frame; }
DisplayData * JSONDataParser::_parseDisplay(const rapidjson::Value & rawData) { const auto display = BaseObject::borrowObject<DisplayData>(); display->name = _getString(rawData, NAME, ""); if (rawData.HasMember(TYPE) && rawData[TYPE].IsString()) { display->type = _getDisplayType(rawData[TYPE].GetString()); } else { display->type = (DisplayType)_getNumber(rawData, TYPE, (int)DisplayType::Image); } display->isRelativePivot = true; if (rawData.HasMember(PIVOT)) { const auto& pivotObject = rawData[PIVOT]; display->pivot.x = _getNumber(pivotObject, X, 0.f); display->pivot.y = _getNumber(pivotObject, Y, 0.f); } else if (this->_isParentCooriinate) { const auto& transformObject = rawData[TRANSFORM]; display->isRelativePivot = false; display->pivot.x = _getNumber(transformObject, PIVOT_X, 0.f) * this->_armatureScale; display->pivot.y = _getNumber(transformObject, PIVOT_Y, 0.f) * this->_armatureScale; } else { display->pivot.x = 0.5f; display->pivot.y = 0.5f; } if (rawData.HasMember(TRANSFORM)) { _parseTransform(rawData[TRANSFORM], display->transform); } switch (display->type) { case DisplayType::Image: break; case DisplayType::Armature: break; case DisplayType::Mesh: display->meshData = _parseMesh(rawData); break; } return display; }
bool StyleData::parse(const Value& v, unsigned long projectId) { std::string typeStr = getJSONString(v, "type"); type = _getType(typeStr); zoom_level_min = atoi(getJSONString(v, "zoom_level_min", "2").c_str()); zoom_level_max = atoi(getJSONString(v, "zoom_level_max", "20").c_str()); icon = getJSONString(v, "icon-mobile", "point"); transform = getJSONString(v, "transform", ""); transormValid = _parseTransform(transform); dasharray = getJSONString(v, "dasharray", ""); if(dasharray.empty()) dasharray = getJSONString(v, "outline-dasharray", ""); color = _parseColor( getJSONString(v, "color"), colorValid ); color.v[3] = atof(getJSONString(v, "opacity", "1.0").c_str()); size = atof(getJSONString(v, "size", "0").c_str()); outline_color = _parseColor( getJSONString(v, "outline-color"), outlineColorValid ); outline_color.v[3] = atof(getJSONString(v, "outline-opacity", "1.0").c_str()); outline_size = atof(getJSONString(v, "outline-size", "0").c_str()); filter = getJSONString(v, "filter"); filter_hash = getJSONString(v, "filter_hash"); // Font style field_name = getJSONString(v, "field-name"); font_name = getJSONString(v, "font-name"); font_filename = getJSONString(v, "font-filename"); font_size = atof(getJSONString(v, "font-size", "0").c_str()); font_opacity = atof(getJSONString(v, "font-opacity", "1").c_str()); font_color = _parseColor( getJSONString(v, "font-color"), fontColorValid); font_halo_color = _parseColor( getJSONString(v, "font-halo-color"), fontHaloColorValid); font_halo_size = atof(getJSONString(v, "font-halo-size", "0").c_str()); offset_x = atof(getJSONString(v, "offset-x", "0").c_str()); offset_y = atof(getJSONString(v, "offset-y", "0").c_str()); mode = getJSONString(v, "mode"); modeType = _getType(mode); allow_overlap = getJSONBool(v, "allow-overlap", false); if(type==ICON) { fullIconPath = SupportFiles::getFullPath(projectId) + icon; } return true; }
BoneData * JSONDataParser::_parseBone(const rapidjson::Value & rawData) { const auto bone = BaseObject::borrowObject<BoneData>(); bone->name = _getString(rawData, NAME, ""); bone->inheritTranslation = _getBoolean(rawData, INHERIT_TRANSLATION, true); bone->inheritRotation = _getBoolean(rawData, INHERIT_ROTATION, true); bone->inheritScale = _getBoolean(rawData, INHERIT_SCALE, true); bone->length = _getNumber(rawData, LENGTH, 0.f) * _armatureScale; if (rawData.HasMember(TRANSFORM)) { _parseTransform(rawData[TRANSFORM], bone->transform); } if (this->_isParentCooriinate) { bone->inheritRotation = true; bone->inheritScale = false; } return bone; }