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(); } }
public void AddTimeLine(TimeLineData data) { if (curData != null) { curData.AddLineData(data); } else { curData = LoadDefaultData(); curData.AddLineData(data); } }
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); } }
public ActionItemData SetActionValue(ActionItemData ad) { TimeLineData data = TimeLineDataManager.Instance.GetCurSelectTimeLine(); if (data == null) { return(null); } SetAtctionParamList(data); ad.paramList = actionParamList.ToArray(); return(ad); }
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); }
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); }
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); }
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(); } } }
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); } } } }
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; } } } }
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); }
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)); } } } }
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) { } } }
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); } }
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); }
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(); } } } }
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); } } } }
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(); }