protected void RenderMultiSelectNavOptions() { var firstTrack = Selection.activeGameObject.GetComponent <Track>(); if (!firstTrack) { return; //not a track. } GUILayout.BeginVertical("box"); GUILayout.Label("Tools"); GUILayout.BeginHorizontal(GUIStyle.none); { //Keep the spacing balanced when switching to multi-select GUI.enabled = false; GUILayout.Button(""); GUI.enabled = firstTrack.PrevTrack; if (GUILayout.Button("< Select Prev")) { if (Event.current.shift) { TrackEditorUtil.AddToSelection(firstTrack.PrevTrack.gameObject); } else { Selection.activeGameObject = firstTrack.PrevTrack.gameObject; } } GUI.enabled = firstTrack.NextTrack; if (GUILayout.Button("Select Next >")) { if (Event.current.shift) { TrackEditorUtil.AddToSelection(firstTrack.NextTrack.gameObject); } else { Selection.activeGameObject = firstTrack.NextTrack.gameObject; } } GUI.enabled = false; GUILayout.Button(""); GUI.enabled = true; } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(GUIStyle.none); { var selectionOrder = TrackEditorUtil.IsContiguousSelection(serializedObject.targetObjects); GUI.enabled = selectionOrder != null; if (GUILayout.Button("Merge")) { EditorApplication.delayCall += () => MergeTracks(selectionOrder); } GUI.enabled = true; if (GUILayout.Button("Select Connected")) { //todolater: only selects the loop of the main selection, not all selected loops TrackEditorUtil.SelectConnected(firstTrack); } } GUILayout.EndHorizontal(); GUILayout.EndVertical(); }
protected void RenderNavOptions() { Track track = target as Track; GUILayout.BeginVertical("box"); GUILayout.Label("Navigation"); //prev/next and create GUILayout.BeginHorizontal(GUIStyle.none); GUI.enabled = !(bool)track.PrevTrack; if (GUILayout.Button("+ Create Prev")) { Selection.activeGameObject = AddTrack(track, true).gameObject; Undo.RegisterCreatedObjectUndo(Selection.activeGameObject, "Create Track"); } GUI.enabled = (bool)track.PrevTrack; if (GUILayout.Button("< Select Prev")) { if (Event.current.shift) { TrackEditorUtil.AddToSelection(track.PrevTrack.gameObject); } else { Selection.activeGameObject = track.PrevTrack.gameObject; } } GUI.enabled = (bool)track.NextTrack; if (GUILayout.Button("Select Next >")) { if (Event.current.shift) { TrackEditorUtil.AddToSelection(track.NextTrack.gameObject); } else { Selection.activeGameObject = track.NextTrack.gameObject; } } GUI.enabled = !(bool)track.NextTrack; if (GUILayout.Button("Create Next +")) { Selection.activeGameObject = AddTrack(track, false).gameObject; Undo.RegisterCreatedObjectUndo(Selection.activeGameObject, "Create Track"); } GUI.enabled = true; GUILayout.EndHorizontal(); //snap me/snap to me GUILayout.BeginHorizontal(GUIStyle.none); string what = track.PrevTrack ? "Prev" : "Nearest"; if (GUILayout.Button("Snap " + what)) { FindAndSnap(track, false, false); } if (GUILayout.Button("Snap to " + what)) { FindAndSnap(track, true, false); } what = track.NextTrack ? "Next" : "Nearest"; if (GUILayout.Button("Snap to " + what)) { FindAndSnap(track, true, true); } if (GUILayout.Button("Snap " + what)) { FindAndSnap(track, false, true); } GUILayout.EndHorizontal(); GUILayout.EndVertical(); GUILayout.BeginVertical("box"); GUILayout.Label("Tools"); GUILayout.BeginHorizontal(GUIStyle.none); { if (GUILayout.Button(TrackWindow.WindowName)) { TrackWindow.OpenIt(); } // if (GUILayout.Button("Straight")) { // Undo.RecordObjects(GetObjectsInvolvedWithTrack(track), "Straighten"); // var length = track.TrackEnd.position.magnitude; // // var newEnd = new SimpleTransform(new Vector3(0, 0, length)); // track.TrackEnd = newEnd; // if (track.NextTrack) track.NextTrack.TrackAbsoluteStart = track.TrackAbsoluteEnd; // } // // if (GUILayout.Button("Short")) { // Undo.RecordObjects(GetObjectsInvolvedWithTrack(track), "Make short"); // track.TrackEnd = new SimpleTransform(new Vector3(0, 0, 3)); // if (track.NextTrack) track.NextTrack.TrackAbsoluteStart = track.TrackAbsoluteEnd; // } // if (GUILayout.Button("Ends Flat")) { // Undo.RecordObjects(GetObjectsInvolvedWithTrack(track), "Flatten"); // var endPos = track.TrackAbsoluteEnd; // endPos.rotation = Quaternion.identity; // track.TrackAbsoluteEnd = endPos; // if (track.NextTrack) track.NextTrack.TrackAbsoluteStart = track.TrackAbsoluteEnd; // } } GUILayout.EndHorizontal(); //Linking buttons GUILayout.BeginHorizontal(GUIStyle.none); if (GUILayout.Button("Split")) { SplitTrack(); } if (GUILayout.Button("Unlink")) { Undo.RecordObjects(GetObjectsInvolvedWithTrack(track), "Unlink"); if (track.PrevTrack) { var adj = track.PrevTrack; if (adj.PrevTrack == track) { adj.PrevTrack = null; } if (adj.NextTrack == track) { adj.NextTrack = null; } } if (track.NextTrack) { var adj = track.NextTrack; if (adj.PrevTrack == track) { adj.PrevTrack = null; } if (adj.NextTrack == track) { adj.NextTrack = null; } } track.PrevTrack = null; track.NextTrack = null; } if (GUILayout.Button("Select Connected")) { TrackEditorUtil.SelectConnected(track); } GUILayout.EndHorizontal(); GUILayout.EndVertical(); }