private void OnSceneGUI() { FlightPathCurveSODrawer curveDrawer = target as FlightPathCurveSODrawer; if (curveDrawer.CurveSO == null) { return; } Handles.color = Color.gray; for (int i = 0; i < curveDrawer.CurveSO.CurveNodes.Count; i++) { FlightPathCurveNode node = curveDrawer.CurveSO.CurveNodes[i]; ChangeNodePosition(curveDrawer, node); if (node.HandlesMode != FlightCurveNodeHandlesMode.None) { ChangeMainHandlePosition(curveDrawer, node); ChangeSubHandlePositon(curveDrawer, node); } Handles.Label(node.NodePosiion + curveDrawer.transform.position, i.ToString()); } }
private void ChangeSubHandlePositon(FlightPathCurveSODrawer curveDrawer, FlightPathCurveNode node) { EditorGUI.BeginChangeCheck(); Handles.DrawLine(node.NodePosiion + curveDrawer.transform.position, node.GetPrevHandlePos() + curveDrawer.transform.position); Vector3 newPrevHandlePositionReleative = Handles.FreeMoveHandle( node.GetPrevHandlePos() + curveDrawer.transform.position, Quaternion.identity, HandleUtility.GetHandleSize(node.NodePosiion + curveDrawer.transform.position) / 10f, Vector3.zero, Handles.CircleHandleCap); if (EditorGUI.EndChangeCheck()) { Undo.RecordObject(curveDrawer.CurveSO, "Change Sub Handle Position"); node.SubHandlePositionReleative = newPrevHandlePositionReleative - node.NodePosiion - curveDrawer.transform.position; if (node.HandlesMode == FlightCurveNodeHandlesMode.Similiar) { node.MainHandlePositionReleative = -node.SubHandlePositionReleative; } else if (node.HandlesMode == FlightCurveNodeHandlesMode.CoDirected) { node.MainHandlePositionReleative = -node.SubHandlePositionReleative.normalized * node.MainHandlePositionReleative.magnitude; } EditorUtility.SetDirty(curveDrawer); } }
private void ChangeNodePosition(FlightPathCurveSODrawer curveDrawer, FlightPathCurveNode node) { EditorGUI.BeginChangeCheck(); Vector3 newNodePosition = Handles.FreeMoveHandle( node.NodePosiion + curveDrawer.transform.position, Quaternion.identity, HandleUtility.GetHandleSize(node.NodePosiion + curveDrawer.transform.position) / 7f, Vector3.zero, Handles.RectangleHandleCap); if (EditorGUI.EndChangeCheck()) { Undo.RecordObject(curveDrawer.CurveSO, "Change Node Position"); node.NodePosiion = newNodePosition - curveDrawer.transform.position; EditorUtility.SetDirty(curveDrawer); } }