using UnityEditor; using UnityEngine; // ReSharper disable once CheckNamespace namespace BlueWaterProject { [CustomEditor(typeof(Patrol),true)] public class ShipPatrolEditor : Editor { private void OnSceneGUI() { Handles.color = Color.green; var patrol = (Patrol)target; for (var i = 0; i < patrol.WayPoints.Length; i++) { EditorGUI.BeginChangeCheck(); var oldPoint = patrol.OriginalPoint + patrol.WayPoints[i].Point; var style = new GUIStyle(); style.normal.textColor = Color.yellow; Handles.Label(patrol.OriginalPoint + patrol.WayPoints[i].Point + (Vector3.down * 0.4f) + (Vector3.right * 0.4f), "" + i, style); var newPoint = Handles.FreeMoveHandle(oldPoint, 0.5f, new Vector3(0.25f, 0.25f, 0.25f), Handles.CircleHandleCap); newPoint = ApplyAxisLock(oldPoint, newPoint); if (EditorGUI.EndChangeCheck()) { Undo.RecordObject(target, "Free Move Handle"); patrol.WayPoints[i].Point = newPoint - patrol.OriginalPoint; } } } private Vector3 ApplyAxisLock(Vector3 oldPoint, Vector3 newPoint) { var patrolSetting = (Patrol)target; if (patrolSetting.LockHandlesOnXAxis) { newPoint.x = oldPoint.x; } if (patrolSetting.LockHandlesOnYAxis) { newPoint.y = oldPoint.y; } if (patrolSetting.LockHandlesOnZAxis) { newPoint.z = oldPoint.z; } return newPoint; } } }