#if UNITY_EDITOR using UnityEngine; using UnityEditor; using System.Collections; namespace MoreMountains.Tools { /// <summary> /// This class adds names for each LevelMapPathElement next to it on the scene view, for easier setup /// </summary> [CustomEditor(typeof(MMPath),true)] [InitializeOnLoad] public class MMPathEditor : Editor { public MMPath pathTarget { get { return (MMPath)target; } } /// <summary> /// OnSceneGUI, draws repositionable handles at every point in the path, for easier setup /// </summary> protected virtual void OnSceneGUI() { Handles.color=Color.green; MMPath t = (target as MMPath); if (t.GetOriginalTransformPositionStatus() == false) { return; } for (int i=0;i<t.PathElements.Count;i++) { EditorGUI.BeginChangeCheck(); Vector3 oldPoint = t.GetOriginalTransformPosition()+t.PathElements[i].PathElementPosition; GUIStyle style = new GUIStyle(); // draws the path item number style.normal.textColor = Color.yellow; Handles.Label(t.GetOriginalTransformPosition()+t.PathElements[i].PathElementPosition+(Vector3.down*0.4f)+(Vector3.right*0.4f), ""+i,style); // draws a movable handle var fmh_49_57_638273671351788130 = Quaternion.identity; Vector3 newPoint = Handles.FreeMoveHandle(oldPoint,.5f,new Vector3(.25f,.25f,.25f),Handles.CircleHandleCap); newPoint = ApplyAxisLock(oldPoint, newPoint); // records changes if (EditorGUI.EndChangeCheck()) { Undo.RecordObject(target, "Free Move Handle"); t.PathElements[i].PathElementPosition = newPoint - t.GetOriginalTransformPosition(); } } } /// <summary> /// Locks handles movement on x, y, or z axis /// </summary> /// <param name="oldPoint"></param> /// <param name="newPoint"></param> /// <returns></returns> protected virtual Vector3 ApplyAxisLock(Vector3 oldPoint, Vector3 newPoint) { MMPath t = (target as MMPath); if (t.LockHandlesOnXAxis) { newPoint.x = oldPoint.x; } if (t.LockHandlesOnYAxis) { newPoint.y = oldPoint.y; } if (t.LockHandlesOnZAxis) { newPoint.z = oldPoint.z; } return newPoint; } } } #endif