bool Animatable::SaveXML(XMLElement& dest) const { if (!Serializable::SaveXML(dest)) return false; // Object animation without name if (objectAnimation_ && objectAnimation_->GetName().Empty()) { XMLElement elem = dest.CreateChild("objectanimation"); if (!objectAnimation_->SaveXML(elem)) return false; } for (HashMap<String, SharedPtr<AttributeAnimationInfo> >::ConstIterator i = attributeAnimationInfos_.Begin(); i != attributeAnimationInfos_.End(); ++i) { ValueAnimation* attributeAnimation = i->second_->GetAnimation(); if (attributeAnimation->GetOwner()) continue; const AttributeInfo& attr = i->second_->GetAttributeInfo(); XMLElement elem = dest.CreateChild("attributeanimation"); elem.SetAttribute("name", attr.name_); if (!attributeAnimation->SaveXML(elem)) return false; elem.SetAttribute("wrapmode", wrapModeNames[i->second_->GetWrapMode()]); elem.SetFloat("speed", i->second_->GetSpeed()); } return true; }
bool Animatable::SaveJSON(JSONValue& dest) const { if (!Serializable::SaveJSON(dest)) return false; // Object animation without name if (objectAnimation_ && objectAnimation_->GetName().Empty()) { JSONValue objectAnimationValue; if (!objectAnimation_->SaveJSON(objectAnimationValue)) return false; dest.Set("objectanimation", objectAnimationValue); } JSONValue attributeAnimationValue; for (HashMap<String, SharedPtr<AttributeAnimationInfo> >::ConstIterator i = attributeAnimationInfos_.Begin(); i != attributeAnimationInfos_.End(); ++i) { ValueAnimation* attributeAnimation = i->second_->GetAnimation(); if (attributeAnimation->GetOwner()) continue; const AttributeInfo& attr = i->second_->GetAttributeInfo(); JSONValue attributeValue; attributeValue.Set("name", attr.name_); if (!attributeAnimation->SaveJSON(attributeValue)) return false; attributeValue.Set("wrapmode", wrapModeNames[i->second_->GetWrapMode()]); attributeValue.Set("speed", (float) i->second_->GetSpeed()); attributeAnimationValue.Set(attr.name_, attributeValue); } return true; }