Пример #1
0
 /// <summary>
 /// Add the specified animCurve to the curve editor(if it's already added,nothing happens).
 /// </summary>
 /// <returns>false if the curve couldn't be added.
 /// </returns>
 public bool Add(ref AnimationCurve animCurve)
 {
     if (mCrvLines == null)
     {
         return(false);
     }
     if (!mCrvLines.CurveShown(animCurve))
     {
         if (animCurve == null)
         {
             animCurve = new AnimationCurve();
         }
         if (animCurve.length == 0)
         {
             animCurve.AddKey(0f, 0f);
         }
         mCrvLines.AddCurveStruct(animCurve, null);
     }
     return(true);
 }
Пример #2
0
    static internal void LoadData(string configName, Object obj, CurveWindow crvWindow, Transform collTransf,
                                  CurveLines crvLines, List <CurveStruct> curveStructList,
                                  Dictionary <AnimationCurve, List <ContextMenuStruct> > dictCurvesContextMenus)
    {
        string data = PlayerPrefs.GetString(configName);

        string[] elements = data.Split(':');
        int      i        = 1;//first element should be empty string

        Vector3 locPos = Vector3.zero;

        locPos.x = float.Parse(elements[i]);
        i       += 1;
        locPos.y = float.Parse(elements[i]);
        i       += 1;
        locPos.z = float.Parse(elements[i]);
        i       += 1;
        crvWindow.transform.localPosition = locPos;
        collTransf.localPosition          = locPos;

        Vector3 locScale = Vector3.zero;

        locScale.x = float.Parse(elements[i]);
        i         += 1;
        locScale.y = float.Parse(elements[i]);
        i         += 1;
        locScale.z = float.Parse(elements[i]);
        i         += 1;
        crvWindow.transform.localScale = locScale;
        collTransf.localScale          = locScale;

        crvWindow.windowClosed = (int.Parse(elements[i]) == 1);
        i += 1;

        int curveStrCount = int.Parse(elements[i]);

        i += 1;
        string         name;
        AnimationCurve activeCurve = null;

        for (int k = 0; k < curveStrCount; ++k)
        {
            bool isPair = (int.Parse(elements[i]) == 1);
            i   += 1;
            name = elements[i];
            i   += 1;
            int length = int.Parse(elements[i]);
            i += 1;

            FieldInfo      fieldInfo = obj.GetType().GetField(name);
            AnimationCurve curve     = fieldInfo.GetValue(obj) as AnimationCurve;

            if (length > 0)
            {
                if (curve == null)
                {
                    curve = new AnimationCurve();                    //the curve is null,but after loading won't be
                }

                while (curve.length > 0)
                {
                    curve.RemoveKey(0);
                }

                for (int j = 0; j < length; ++j)
                {
                    //Debug.Log("curve data:"+elements[i+2]+" "+elements[i+3]+" "+elements[i]+" "+elements[i+1]);
                    Keyframe key = new Keyframe(float.Parse(elements[i + 2]),
                                                float.Parse(elements[i + 3]),
                                                float.Parse(elements[i]),
                                                float.Parse(elements[i + 1]));
                    curve.AddKey(key);
                    i += 4;
                }

                bool isActiveCurveStr = (int.Parse(elements[i]) == 1);
                if (isActiveCurveStr)
                {
                    activeCurve = curve;
                }
                i += 1;
                bool firstCurveSelected = bool.Parse(elements[i]);
                i += 1;
                Rect loadGradRect = new Rect();
                loadGradRect.x = float.Parse(elements[i]);
                i += 1;
                loadGradRect.y = float.Parse(elements[i]);
                i += 1;
                loadGradRect.width = float.Parse(elements[i]);
                i += 1;
                loadGradRect.height = float.Parse(elements[i]);
                i += 1;

                if (elements[i] == "")
                {
                    i += 1;
                }
                int            length2 = 0;
                AnimationCurve curve2  = null;
                if (isPair)
                {
                    name    = elements[i];
                    i      += 1;
                    length2 = int.Parse(elements[i]);
                    i      += 1;

                    FieldInfo fieldInfo2 = obj.GetType().GetField(name);
                    curve2 = fieldInfo2.GetValue(obj) as AnimationCurve;

                    if (length2 > 0)
                    {
                        if (curve2 == null)
                        {
                            curve2 = new AnimationCurve();                            //the curve is null,but after loading won't be
                        }

                        while (curve2.length > 0)
                        {
                            curve2.RemoveKey(0);
                        }

                        for (int j = 0; j < length2; ++j)
                        {
                            //Debug.Log("curve data:"+elements[i+2]+" "+elements[i+3]+" "+elements[i]+" "+elements[i+1]);
                            Keyframe key = new Keyframe(float.Parse(elements[i + 2]),
                                                        float.Parse(elements[i + 3]),
                                                        float.Parse(elements[i]),
                                                        float.Parse(elements[i + 1]));
                            curve2.AddKey(key);
                            i += 4;
                        }
                    }
                    else
                    {
                        curve2 = null;
                    }
                    fieldInfo2.SetValue(obj, curve2);
                    if (elements[i] == "")
                    {
                        i += 1;
                    }
                }

                crvLines.AddCurveStruct(curve, curve2);
                crvLines.gradRect = loadGradRect;

                dictCurvesContextMenus[curve].Clear();
                for (int j = 0; j < length; ++j)
                {
                    ContextMenuStruct contextMenu = new ContextMenuStruct();
                    contextMenu.UnpackData(elements[i]);
                    dictCurvesContextMenus[curve].Add(contextMenu);
                    i += 1;
                }
                if (elements[i] == "")
                {
                    i += 1;
                }
                if (null != curve2)
                {
                    dictCurvesContextMenus[curve2].Clear();
                    for (int j = 0; j < length2; ++j)
                    {
                        ContextMenuStruct contextMenu = new ContextMenuStruct();
                        contextMenu.UnpackData(elements[i]);
                        dictCurvesContextMenus[curve2].Add(contextMenu);
                        i += 1;
                    }

                    if (!firstCurveSelected)
                    {
                        CurveStruct crvStruct = curveStructList.Find(x => x.curve1 == curve);
                        crvStruct.firstCurveSelected = false;
                        crvLines.UpdateCurveStruct(crvStruct);
                    }
                    if (elements[i] == "")
                    {
                        i += 1;
                    }
                }
            }            //if
            else         //the curve is not null,but after loading saved data,it will be
            {
                curve = null;
            }
            fieldInfo.SetValue(obj, curve);
        }        //for CrvStrCount

        crvLines.ChangeActiveCurve(activeCurve);

        FieldInfo[] fields = obj.GetType().GetFields();

        foreach (FieldInfo field in fields)
        {
            if (field.FieldType == typeof(AnimationCurve))
            {
                AnimationCurve curve = field.GetValue(obj) as AnimationCurve;

                if (curveStructList.Find(x => x.curve1 == curve).curve1 == null && curveStructList.Find(x => x.curve2 == curve).curve2 == null)
                {
                    //these is a curve not added to editor curve
                    name = elements[i];
                    i   += 1;
                    int length = int.Parse(elements[i]);
                    i += 1;

                    if (curve == null)
                    {
                        curve = new AnimationCurve();                        //the curve is null,but after loading won't be
                    }

                    while (curve.length > 0)
                    {
                        curve.RemoveKey(0);
                    }

                    for (int j = 0; j < length; ++j)
                    {
                        Keyframe key = new Keyframe(float.Parse(elements[i + 2]),
                                                    float.Parse(elements[i + 3]),
                                                    float.Parse(elements[i]),
                                                    float.Parse(elements[i + 1]));
                        curve.AddKey(key);
                        i += 4;
                    }
                    if (elements[i] == "")
                    {
                        i += 1;
                    }
                    field.SetValue(obj, curve);
                }
            }
        }
        PlayerPrefs.SetString(lastFileLoaded, configName);
        PlayerPrefs.Save();
    }