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);
		}
	}
}