bool ValueAnimation::LoadJSON(const JSONValue& source) { valueType_ = VAR_NONE; eventFrames_.Clear(); String interpMethodString = source.Get("interpolationmethod").GetString(); InterpMethod method = (InterpMethod)GetStringListIndex(interpMethodString.CString(), interpMethodNames, IM_LINEAR); SetInterpolationMethod(method); if (interpolationMethod_ == IM_SPLINE) splineTension_ = source.Get("splinetension").GetFloat(); // Load keyframes JSONArray keyFramesArray = source.Get("keyframes").GetArray(); for (unsigned i = 0; i < keyFramesArray.Size(); i++) { const JSONValue& val = keyFramesArray[i]; float time = val.Get("time").GetFloat(); Variant value = val.Get("value").GetVariant(); SetKeyFrame(time, value); } // Load event frames JSONArray eventFramesArray = source.Get("eventframes").GetArray(); for (unsigned i = 0; i < eventFramesArray.Size(); i++) { const JSONValue& eventFrameVal = eventFramesArray[i]; float time = eventFrameVal.Get("time").GetFloat(); unsigned eventType = eventFrameVal.Get("eventtype").GetUInt(); VariantMap eventData = eventFrameVal.Get("eventdata").GetVariantMap(); SetEventFrame(time, StringHash(eventType), eventData); } return true; }
bool ValueAnimation::LoadXML(const XMLElement& source) { valueType_ = VAR_NONE; eventFrames_.Clear(); String interpMethodString = source.GetAttribute("interpolationmethod"); InterpMethod method = (InterpMethod)GetStringListIndex(interpMethodString.CString(), interpMethodNames, IM_LINEAR); SetInterpolationMethod(method); if (interpolationMethod_ == IM_SPLINE) splineTension_ = source.GetFloat("splinetension"); XMLElement keyFrameElem = source.GetChild("keyframe"); while (keyFrameElem) { float time = keyFrameElem.GetFloat("time"); Variant value = keyFrameElem.GetVariant(); SetKeyFrame(time, value); keyFrameElem = keyFrameElem.GetNext("keyframe"); } XMLElement eventFrameElem = source.GetChild("eventframe"); while (eventFrameElem) { float time = eventFrameElem.GetFloat("time"); unsigned eventType = eventFrameElem.GetUInt("eventtype"); VariantMap eventData = eventFrameElem.GetChild("eventdata").GetVariantMap(); SetEventFrame(time, StringHash(eventType), eventData); eventFrameElem = eventFrameElem.GetNext("eventframe"); } return true; }
void sqr_tools::CFrameScaleCtrlImp::ActiveNode( CRenderNode* pNode ) { if (MODEL) { int keyFrameNum = 0; if (( map<WORD,sqr::IDNAME>* )EDITMODEL->GetCurFrameString()) keyFrameNum = (( map<WORD,sqr::IDNAME>* )EDITMODEL->GetCurFrameString())->size(); if ( m_pKeyFrames != ( map<WORD,sqr::IDNAME>* )EDITMODEL->GetCurFrameString() || m_iMaxFrameNum != MODEL->GetAnimateMaxFrameNum() || m_iKeyFrameNum != keyFrameNum) { m_pKeyFrames = ( map<WORD,sqr::IDNAME>* )EDITMODEL->GetCurFrameString(); m_iMaxFrameNum = MODEL->GetAnimateMaxFrameNum(); m_iKeyFrameNum = keyFrameNum; ClearKeyFrame(); map<WORD,sqr::IDNAME>* KeyFrame = NULL; KeyFrame = ( map<WORD,sqr::IDNAME>* )EDITMODEL->GetCurFrameString(); if( KeyFrame ) { string keyName = ""; for( map<WORD,sqr::IDNAME>::iterator it = KeyFrame->begin(); it != KeyFrame->end(); ++it ) { WORD keyFrame = it->first; keyName = it->second; SetKeyFrame( keyFrame ); } } int num = MODEL->GetAnimateMaxFrameNum(); CalCurrentFrame(0.0f); SetAniEndFrame(num); } } }