Пример #1
0
        public void OnGUI()
        {
            TimeLineData data = TimeLineDataManager.Instance.GetCurSelectTimeLine();

            if (data == null)
            {
                return;
            }
            if (TimeLineDataManager.Instance.GetGUIMemInfoCount() == 0)
            {
                return;
            }

            StartTime = EditorGUILayout.FloatField("开始时间", startTime);
            EndTime   = EditorGUILayout.FloatField("结束时间", endTime);
            ActionItemData tempad = TimeLineDataManager.Instance.curOperationAction;

            if (tempad != null)
            {
                tempad.actionStartTime = StartTime;
                tempad.actionEndTime   = EndTime;
            }
            if (GUILayout.Button("Save"))
            {
                SaveLineData();
            }
        }
Пример #2
0
 public void AddTimeLine(TimeLineData data)
 {
     if (curData != null)
     {
         curData.AddLineData(data);
     }
     else
     {
         curData = LoadDefaultData();
         curData.AddLineData(data);
     }
 }
Пример #3
0
 public void Clone(TimeLineData data)
 {
     StartTime     = data.StartTime;
     EndTime       = data.EndTime;
     TimeLineIndex = data.TimeLineIndex;
     TimeLineName  = data.TimeLineName;
     GridCount     = data.GridCount;
     foreach (var dic in data.actionDic)
     {
         actionDic.Add(dic.Key, dic.Value);
     }
 }
Пример #4
0
        public ActionItemData SetActionValue(ActionItemData ad)
        {
            TimeLineData data = TimeLineDataManager.Instance.GetCurSelectTimeLine();

            if (data == null)
            {
                return(null);
            }
            SetAtctionParamList(data);
            ad.paramList = actionParamList.ToArray();
            return(ad);
        }
Пример #5
0
        IEnumerator Play(string path)
        {
            TimeLineDataManager.Instance.LoadEditData(path);
            int count = TimeLineDataManager.Instance.GetTimeLineCount();

            for (int i = 0; i < count; i++)
            {
                TimeLineData data = TimeLineDataManager.Instance.GetTimeLineByIndex(i);

                StartCoroutine(PlayLine(data));
            }
            yield return(null);
        }
Пример #6
0
        void LeftClick()
        {
            //左键单击
            // CurMemInfo = null;
            TimeLineData data = TimeLineDataManager.Instance.GetCurSelectTimeLine();

            if (data == null)
            {
                return;
            }
            data.InitDefaultTime();
            Type t = data.GetType();

            data.SetFieldValue(data);
            var memInfo = t.GetMethods();

            TimeLineDataManager.Instance.memDic.Clear();
            int selectKey = -1;

            TimeLineDataManager.Instance.curOperationAction = null;
            foreach (MethodInfo info in memInfo)
            {
                foreach (var item in data.GetActionDic())
                {
                    ActionItemData ad = item.Value;
                    if (ad.IsSelect())
                    {
                        foreach (var name in ad.methodNameList)
                        {
                            if (name == info.Name)
                            {
                                TimeLineDataManager.Instance.AddGUIMemInfo(info);
                            }
                        }
                        //移除要操作的action 用临时变量保存
                        TimeLineDataManager.Instance.curOperationAction = ad.Clone();
                        selectKey = ad.index;
                    }
                    else
                    {
                        if (LastSelectGridY != CurSelectGridY)
                        {
                            //更换timeline
                            //  TimeLineDataManager.Instance.curOperationAction = null;
                        }
                    }
                }
            }

            data.DeleteAction(selectKey);
        }
Пример #7
0
        public EditData SaveToJson(string path, TimeLineData data = null)
        {
            if (!File.Exists(path))
            {
                curData          = CreateNewEditData();
                curData.dataPath = path;

                string jsonStr = JsonWriter.Serialize(curData);
                Debug.Log(jsonStr);

                File.WriteAllText(path, jsonStr);
            }
            else
            {
                string jsonstr = File.ReadAllText(path);
                if (curData == null)
                {
                    curData = JsonReader.Deserialize <EditData>(jsonstr) as EditData;
                    if (curData == null)
                    {
                        EditorUtility.DisplayDialog("Error", "读取文件失败", "OK");
                        return(null);
                    }
                    for (int i = 0; i < curData.GetTimeLineCount(); i++)
                    {//json 反序列化会全部解析成基类 所以做clone操作 比较恶心
                        TimeLineData tempdata = curData.GetTimeLineByIndex(i);
                        Type         t        = Type.GetType(tempdata.className);
                        var          subdata  = Activator.CreateInstance(t) as TimeLineData;
                        subdata.Clone(tempdata);
                        curData.DeleteTimeLine(i);
                        curData.lineDataList.Insert(i, subdata);
                    }
                }
                else
                {
                    if (data != null)
                    {
                        curData.dataPath = path;
                        curData.AddLineData(data);
                        string jsonStr = JsonWriter.Serialize(curData);
                        Debug.Log(jsonStr);

                        File.WriteAllText(path, jsonStr);
                    }
                }
            }
            return(curData);
        }
Пример #8
0
        public void SaveEditData(string filePath, TimeLineData data)
        {
            if (string.IsNullOrEmpty(filePath))
            {
                return;
            }
            if (data == null)
            {
                Debug.LogError("save linedata is null");
                return;
            }
            FileStream   fs = null;
            BinaryWriter bw = null;

            try
            {
                fs = File.Open(filePath, FileMode.Create);
                bw = new BinaryWriter(fs);
                //文件头
                string head = "EditData";
                bw.Write(head);

                if (curData == null)
                {
                    curData          = CreateNewEditData();
                    curData.dataPath = filePath;
                }

                curData.AddLineData(data);
                curData.WriteToBinary(bw);

                bw.Close();
                fs.Close();
            }
            catch (Exception e)
            {
                Debug.LogError(e.Message);
                if (bw != null)
                {
                    bw.Close();
                }
                if (fs != null)
                {
                    fs.Close();
                }
            }
        }
Пример #9
0
        IEnumerator PlayLine(TimeLineData data)
        {
            Type          t       = data.GetType();
            List <string> keyList = new List <string>();

            foreach (var actionPair in data.GetActionDic())
            {
                Debug.Log("key is " + actionPair.Key);
                keyList.Add(actionPair.Key);
            }
            for (int i = 0; i < keyList.Count; i++)
            {
                string key = keyList[i];
                if (i == 0)
                {
                    ActionItemData ad = data.GetActionByKey(key);
                    float          st = ad.actionStartTime;
                    yield return(new WaitForSeconds(st));

                    data.SetValueByAction(ad);
                    foreach (var name in ad.methodNameList)
                    {
                        string methodName = "Execute" + name;
                        t.InvokeMember(methodName, BindingFlags.InvokeMethod, null, data, null);
                    }
                }
                else
                {
                    string         lastkey = keyList[i - 1];
                    ActionItemData lastad  = data.GetActionByKey(lastkey);
                    float          lastst  = lastad.actionStartTime;
                    ActionItemData ad      = data.GetActionByKey(key);
                    float          st      = ad.actionStartTime;
                    float          time    = st - lastst;
                    Debug.Log(" time is " + time.ToString());
                    yield return(new WaitForSeconds(time));

                    data.SetValueByAction(ad);
                    foreach (var name in ad.methodNameList)
                    {
                        string methodName = "Execute" + name;
                        t.InvokeMember(methodName, BindingFlags.InvokeMethod, null, data, null);
                    }
                }
            }
        }
Пример #10
0
        public void OnDrawDeleteButton(MemberInfo info)
        {
            if (GUILayout.Button("X"))
            {
                TimeLineDataManager.Instance.DeleteMemInfo(info);
                if (TimeLineDataManager.Instance.memDic.Count == 0)
                {
                    ActionItemData ad   = TimeLineDataManager.Instance.curOperationAction;
                    TimeLineData   data = TimeLineDataManager.Instance.GetCurSelectTimeLine();
                    if (data != null)
                    {
                        DeleteAction(ad.index);

                        TimeLineDataManager.Instance.curOperationAction = null;
                    }
                }
            }
        }
Пример #11
0
        public void SaveLineData()
        {
            TimeLineData data = TimeLineDataManager.Instance.GetCurSelectTimeLine();

            if (data == null)
            {
                return;
            }
            SetAtctionParamList(data);
            var           memDic   = TimeLineDataManager.Instance.memDic;
            List <string> nameList = new List <string>();

            foreach (var name in memDic.Keys)
            {
                nameList.Add(name);
            }
            TimeLineDataManager.Instance.SaveData(data.GetType(), nameList, actionParamList);
        }
Пример #12
0
        void SetAtctionParamList(TimeLineData data)
        {
            Type t = data.GetType();

            FieldInfo[] arr = t.GetFields();
            actionParamList.Clear();
            foreach (var info in arr)
            {
                if (info.IsDefined(typeof(SaveFieldAttribute), false))
                {
                    if (info.GetValue(data) != null)
                    {
                        actionParamList.Add(info.Name);
                        actionParamList.Add(info.GetValue(data));
                    }
                }
            }
        }
Пример #13
0
        void OnDrawCustomGUI()
        {
            Assembly assembly = Assembly.GetExecutingAssembly();

            if (assembly != null)
            {
                try
                {
                    Type[] timetypes = assembly.GetTypes();
                    for (int k = 0; k < timetypes.Length; k++)
                    {
                        Type         t       = timetypes[k];
                        TimeLineData curData = TimeLineDataManager.Instance.GetTimeLineByIndex(CurSelectGridY);
                        if (curData == null)
                        {
                            return;
                        }
                        if (curData.GetType() == t)
                        {
                            if (IsSubClassOf(t, typeof(TimeLineData)))
                            {
                                var baseTarget = TimeLineDataManager.Instance.GetCurSelectTimeLine();
                                baseTarget.OnGUI();

                                foreach (var infodic in TimeLineDataManager.Instance.memDic)
                                {
                                    var info = infodic.Value;
                                    if (info.IsDefined(typeof(GridMenuItemAttribute), false))
                                    {
                                        var target = curData;
                                        t.InvokeMember(info.Name, BindingFlags.InvokeMethod, null, target, null);
                                        baseTarget.OnDrawDeleteButton(info);
                                    }
                                }
                            }
                        }
                    }
                }
                catch (Exception)
                {
                }
            }
        }
Пример #14
0
        public void ReadFromBinary(BinaryReader br)
        {
            dataName = br.ReadString();
            dataPath = br.ReadString();

            int len = br.ReadInt32();

            lineDataList.Clear();
            for (int i = 0; i < len; i++)
            {
                string type = br.ReadString();
                Type   t    = Type.GetType(type);

                TimeLineData data = Activator.CreateInstance(t) as TimeLineData;
                data.ReadFromBinary(br);
                data.InitDefaultTime();
                lineDataList.Add(data);
            }
        }
Пример #15
0
        public void SetFieldValue(TimeLineData target)
        {
            InitDefaultTime();
            ActionItemData ad = GetCurActionItemData();

            if (ad == null)
            {
                return;
            }
            var paramList = ad.paramList;

            if (paramList == null)
            {
                return;
            }
            endTime = ad.actionEndTime;

            startTime = ad.actionStartTime;
            SetObject(paramList);
        }
Пример #16
0
        public void SaveData(Type t, List <string> nameList, List <object> list, bool isJson = true)
        {
            ActionItemData data = new ActionItemData(t, nameList);

            data.paramList = list.ToArray();
            TimeLineData lineData = GetCurSelectTimeLine();

            lineData.AddAction(data);
            if (isJson)
            {
                string newfilepath = filePath;
                if (newfilepath.EndsWith(".json"))
                {
                    SaveToJson(newfilepath, lineData);
                }
                else
                {
                    if (EditorUtility.DisplayDialog("error", "此文件不存在,请先创建", "ok"))
                    {
                        TimeLine.ShowFileUI();
                    }
                }
            }
            else
            {
                string newfilepath = filePath;
                if (newfilepath.EndsWith(".bytes"))
                {
                    SaveEditData(newfilepath, lineData);
                }
                else
                {
                    if (EditorUtility.DisplayDialog("error", "此文件不存在,请先创建", "ok"))
                    {
                        TimeLine.ShowFileUI();
                    }
                }
            }
        }
Пример #17
0
        public void AddLineData(TimeLineData data)
        {
            int index = -1;

            if (data != null)
            {
                if (lineDataList.Contains(data))
                {
                    index = lineDataList.IndexOf(data);
                    lineDataList[index] = data;
                }
                else
                {
                    if (HasAddLine(data.TimeLineName, out index))
                    {
                        lineDataList[index] = data;
                    }
                    else
                    {
                        lineDataList.Add(data);
                    }
                }
            }
        }
Пример #18
0
        void OnTimeLineGUI()
        {
            curTimeLineRect = new Rect(0, TITLE_HEIGHT, totalGridCount * GRID_WIDTH, 600);
            GUILayout.BeginArea(curTimeLineRect);

            int len = TimeLineDataManager.Instance.GetTimeLineCount();

            for (int i = 0; i < len; i++)
            {
                TimeLineData data = TimeLineDataManager.Instance.GetTimeLineByIndex(i);
                DrawBox(data.TimeLineName, 0, LABEL_HEIGHT * i, LABLE_WIDTH, LABEL_HEIGHT, Color.white);
                for (int j = 0; j < totalGridCount; j++)
                {
                    Color c = Color.white;
                    SortedDictionary <string, ActionItemData> acDic = data.GetActionDic();

                    foreach (var acpair in acDic)
                    {
                        //当期操作的action 不画
                        ActionItemData ad = acpair.Value;
                        int            st = (int)(ad.actionStartTime / TimeLineDataManager.Instance.TickDelta);
                        int            et = (int)(ad.actionEndTime / TimeLineDataManager.Instance.TickDelta);
                        if (j == st)
                        {
                            c = Color.green;
                        }
                        if (j > st && j <= et)
                        {
                            c = Color.red;
                        }
                    }
                    if (CurSelectGridY == i)
                    {
                        //画当前操作的action
                        ActionItemData tempad = TimeLineDataManager.Instance.curOperationAction;
                        if (tempad != null)
                        {
                            int st = (int)(tempad.actionStartTime / TimeLineDataManager.Instance.TickDelta);
                            int et = (int)(tempad.actionEndTime / TimeLineDataManager.Instance.TickDelta);

                            if (j == st)
                            {
                                c = selectColor;
                            }
                            if (j > st && j <= et)
                            {
                                c = Color.red;
                            }
                        }
                        else
                        {
                            if (j == CurSelectGridX)
                            {
                                c = selectColor;
                            }
                        }
                    }

                    //if ( CurSelectGridX == j && CurSelectGridY == i )
                    //{
                    //    c = selectColor;
                    //}
                    DrawBox("", LABLE_WIDTH + j * GRID_WIDTH, LABEL_HEIGHT * i, GRID_WIDTH, GRID_HEIGHT, c);
                }
            }
            GUILayout.EndArea();
        }