private void AddRenderDataForTrajectory(JTimelineBase timeline) { if (timeline is JTimelineTrajectory) { JTimelineTrajectory tline = (JTimelineTrajectory)timeline; for (int k = 0; k < tline.TrajectoryTracks.Count; k++) { List <JClipRenderData> list = new List <JClipRenderData>(); JTrajectoryTrack track = tline.TrajectoryTracks[k]; for (int l = 0; l < track.TrackClips.Count; l++) { JTrajectoryClipData key = track.TrackClips[l]; var cachedData = ScriptableObject.CreateInstance <JClipRenderData>(); cachedData.ClipData = key; list.Add(cachedData); } if (!timelineClipRenderDataMap.ContainsKey(track)) { timelineClipRenderDataMap.Add(track, list); } else { timelineClipRenderDataMap[track] = list; } } } }
private void AddNewTrajectoryClip(JTrajectoryTrack track, float time) { var clipData = ScriptableObject.CreateInstance <JTrajectoryClipData>(); JTimelineTrajectory line = (JTimelineTrajectory)track.TimeLine; clipData.TargetObject = line.AffectedObject.gameObject; clipData.StartTime = time; clipData.StateName = ""; clipData.PlaybackDuration = 1; clipData.Track = track; track.AddClip(clipData); if (timelineClipRenderDataMap.ContainsKey(track)) { var cachedData = ScriptableObject.CreateInstance <JClipRenderData>(); cachedData.ClipData = clipData; timelineClipRenderDataMap[track].Add(cachedData); } else { var cachedData = ScriptableObject.CreateInstance <JClipRenderData>(); cachedData.ClipData = clipData; List <JClipRenderData> list = new List <JClipRenderData>(); list.Add(cachedData); timelineClipRenderDataMap.Add(track, list); } }
private GenericMenu MenuForTrajectoryTimeLine(JTimelineBase line, JTrajectoryTrack track) { GenericMenu contextMenu = new GenericMenu(); float newTime = (((UnityEngine.Event.current.mousePosition.x + XScroll) / DisplayArea.width) * line.Sequence.Duration) / XScale; contextMenu.AddItem(new GUIContent("AddNewTrack"), false, (obj) => AddNewTrajectoryTrack(((JTimelineBase)((object[])obj)[0])), new object[] { line }); contextMenu.AddItem(new GUIContent("AddClip"), false, (obj) => AddNewTrajectoryClip(((JTrajectoryTrack)((object[])obj)[0]), ((float)((object[])obj)[1])), new object[] { track, newTime }); contextMenu.AddItem(new GUIContent("DeleteLine"), false, (obj) => RemoveTrajectoryLine(((JTrajectoryTrack)((object[])obj)[0])), new object[] { track }); return(contextMenu); }
private void RemoveTrajectoryLine(JTrajectoryTrack track) { if (timelineClipRenderDataMap.ContainsKey(track)) { timelineClipRenderDataMap.Remove(track); } JTimelineTrajectory line = (JTimelineTrajectory)track.TimeLine; line.RemoveTrack(track); JTimelineContainer contain = line.TimelineContainer; if (line.TrajectoryTracks.Count == 0) { DestroyImmediate(line.gameObject); } //删除的是最后一个 删除掉container if (contain.Timelines.Length == 0) { DestroyImmediate(contain.gameObject); } }
public void RemoveTrack(JTrajectoryTrack animationTrack) { trajectoryTracks.Remove(animationTrack); }
public void AddTrack(JTrajectoryTrack track) { track.TimeLine = this; trajectoryTracks.Add(track); }
private void TrajectoryGUI(JTimelineBase timeline, JTrajectoryTrack track, JClipRenderData[] renderDataList) { if (timeline is JTimelineTrajectory) { JTimelineTrajectory trajectoryline = (JTimelineTrajectory)timeline; GenericMenu contextMenu = new GenericMenu(); ///event 右键点击 bool isContext = UnityEngine.Event.current.type == EventType.MouseDown && UnityEngine.Event.current.button == 1; bool isChoose = UnityEngine.Event.current.type == EventType.MouseDown && UnityEngine.Event.current.button == 0 && UnityEngine.Event.current.clickCount == 1; bool hasBox = false; Rect DisplayAreaTemp = DisplayArea; DisplayAreaTemp.x = 0; DisplayAreaTemp.y = 0; for (int j = 0; j < renderDataList.Length; j++) { JClipRenderData renderdata = renderDataList[j]; JTrajectoryClipData trajectoryClipData = (JTrajectoryClipData)renderdata.ClipData; JTrajectoryTrack linetrack = trajectoryClipData.Track; if (linetrack != track) { continue; } var startX = ConvertTimeToXPos(trajectoryClipData.StartTime); var endX = ConvertTimeToXPos(trajectoryClipData.StartTime + trajectoryClipData.PlaybackDuration); var transitionX = ConvertTimeToXPos(trajectoryClipData.StartTime + trajectoryClipData.PlaybackDuration); var handleWidth = 2.0f; Rect renderRect = new Rect(startX, DisplayArea.y, endX - startX, DisplayArea.height); Rect transitionRect = new Rect(startX, DisplayArea.y, transitionX - startX, DisplayArea.height); Rect leftHandle = new Rect(startX, DisplayArea.y, handleWidth * 2.0f, DisplayArea.height); Rect rightHandle = new Rect(endX - (handleWidth * 2.0f), DisplayArea.y, handleWidth * 2.0f, DisplayArea.height); Rect labelRect = new Rect(); Rect renderRecttemp = renderRect; renderRecttemp.x -= DisplayArea.x; renderRecttemp.y = 0; Rect transitionRecttemp = transitionRect; transitionRecttemp.y = 0; transitionRecttemp.x -= DisplayArea.x; Rect leftHandletemp = leftHandle; leftHandletemp.y = 0; leftHandletemp.x -= DisplayArea.x; Rect rightHandletemp = rightHandle; rightHandletemp.x -= DisplayArea.x; rightHandletemp.y = 0; GUI.color = new Color(156 / 255.0f, 11 / 255.0f, 11 / 255.0f, 1); if (SelectedObjects.Contains(renderdata)) { GUI.color = ColorTools.SelectColor; } GUI.Box(renderRecttemp, "", USEditorUtility.NormalWhiteOutLineBG); GUI.Box(leftHandletemp, ""); GUI.Box(rightHandletemp, ""); labelRect = renderRecttemp; labelRect.width = DisplayArea.width; renderdata.renderRect = renderRect; renderdata.labelRect = renderRect; renderdata.renderPosition = new Vector2(startX, DisplayArea.y); renderdata.transitionRect = transitionRect; renderdata.leftHandle = leftHandle; renderdata.rightHandle = rightHandle; renderdata.ClipData = trajectoryClipData; labelRect.x += 4.0f; // Nudge this along a bit so it isn't flush with the side. GUI.color = Color.black; GUI.Label(labelRect, trajectoryClipData.FriendlyName); GUI.color = Color.white; if (isContext && renderRecttemp.Contains(UnityEngine.Event.current.mousePosition)) { hasBox = true; contextMenu.AddItem(new GUIContent("DeleteClip"), false, (obj) => RemoveTrajectoryClip(((JClipRenderData)((object[])obj)[0])), new object[] { renderdata }); } if (isContext && renderRecttemp.Contains(UnityEngine.Event.current.mousePosition)) { UnityEngine.Event.current.Use(); contextMenu.ShowAsContext(); } } if (!hasBox && isChoose && DisplayAreaTemp.Contains(UnityEngine.Event.current.mousePosition) && (UnityEngine.Event.current.control || UnityEngine.Event.current.command)) { //代码选中hierarchy中的对象 显示inspector 按住Ctrl or command //GameObject go = GameObject.Find(Animationline.gameObject.name); Selection.activeGameObject = trajectoryline.gameObject; EditorGUIUtility.PingObject(trajectoryline.gameObject); } if (!hasBox && isContext && DisplayAreaTemp.Contains(UnityEngine.Event.current.mousePosition)) { contextMenu = MenuForTrajectoryTimeLine(trajectoryline, track); } if (!hasBox && isContext && DisplayAreaTemp.Contains(UnityEngine.Event.current.mousePosition)) { UnityEngine.Event.current.Use(); contextMenu.ShowAsContext(); } } }