public override void OnInspectorGUI() { //base.OnInspectorGUI(); Safety(); var newKnots = new List <Vector3>(targetPath.LocalBezier.Knots); #region Path Inspector settings.PathFoldout = EditorGUILayout.Foldout(settings.PathFoldout, "Path"); if (settings.PathFoldout) { // EditorGUI.indentLevel++; if (newKnots.Count <= 0) { if (GUILayout.Button("+")) { newKnots.Add(Vector3.right); goto UndoHistory; } } for (int i = 0; i < newKnots.Count; i++) { newKnots[i] = EditorGUILayout.Vector3Field(i.ToString(), newKnots[i]); EditorGUILayout.BeginHorizontal(EditorStyles.inspectorDefaultMargins); GUILayout.FlexibleSpace(); if (GUILayout.Button("-", GUILayout.Width(25f))) { newKnots.RemoveAt(i); goto UndoHistory; } if (GUILayout.Button("+", GUILayout.Width(25f))) { Vector3 newKnot; var currentKnot = newKnots[i]; if (i == newKnots.Count - 1) // last knot { if (newKnots.Count == 1) // this is the only knot { newKnot = newKnots[0] + Vector3.right; } else { var previousKnot = newKnots[i - 1]; newKnot = currentKnot + (currentKnot - previousKnot); } } else { var nextKnot = newKnots[i + 1]; newKnot = Vector3.Lerp(currentKnot, nextKnot, 0.5f); } newKnots.Insert(i + 1, newKnot); goto UndoHistory; } EditorGUILayout.EndHorizontal(); } //EditorGUI.indentLevel--; } #endregion Path Inspector #region Tool Settings Inspector PathEditorUtility.Inspector(settings, 1); #endregion Tool Settings Inspector #region Advanced settings.AdvancedFoldout = EditorGUILayout.Foldout(settings.AdvancedFoldout, "Advanced"); if (settings.AdvancedFoldout) { //~ LocalSpaceTransform field targetPath.LocalSpaceTransform = (Transform)EditorGUILayout.ObjectField( "Local Space Transform", targetPath.LocalSpaceTransform, typeof(Transform), allowSceneObjects: true ); } #endregion Advanced #region Undo UndoHistory: if (!targetPath.LocalBezier.Knots.SequenceEqual(newKnots) || targetPath.LocalBezier.Knots.Count != newKnots.Count) { Undo.RecordObject(target, "Edit Dynamic Bezier"); targetPath.LocalBezier.Knots = newKnots; EditorUtility.SetDirty(target); } SceneView.RepaintAll(); #endregion Undo }
public override void OnInspectorGUI() { //base.OnInspectorGUI(); Safety(); var newStartPosition = cubicBezierPath.LocalBezier.StartPosition; var newStartTangent = cubicBezierPath.LocalBezier.StartTangent; var newEndPosition = cubicBezierPath.LocalBezier.EndPosition; var newEndTangent = cubicBezierPath.LocalBezier.EndTangent; #region Path Inspector settings.PathFoldout = EditorGUILayout.Foldout(settings.PathFoldout, "Path"); if (settings.PathFoldout) { EditorGUI.indentLevel++; //~ Knots //cubicBezierPath.LocalBezier.StartPosition = EditorGUILayout.Vector3Field("Start Position", cubicBezierPath.LocalBezier.StartPosition); //cubicBezierPath.LocalBezier.StartTangent = EditorGUILayout.Vector3Field("Start Tangent", cubicBezierPath.LocalBezier.StartTangent); //cubicBezierPath.LocalBezier.EndPosition = EditorGUILayout.Vector3Field("End Position", cubicBezierPath.LocalBezier.EndPosition); //cubicBezierPath.LocalBezier.EndTangent = EditorGUILayout.Vector3Field("End Tangent", cubicBezierPath.LocalBezier.EndTangent); newStartPosition = EditorGUILayout.Vector3Field("Start Position", cubicBezierPath.LocalBezier.StartPosition); newStartTangent = EditorGUILayout.Vector3Field("Start Tangent", cubicBezierPath.LocalBezier.StartTangent); newEndPosition = EditorGUILayout.Vector3Field("End Position", cubicBezierPath.LocalBezier.EndPosition); newEndTangent = EditorGUILayout.Vector3Field("End Tangent", cubicBezierPath.LocalBezier.EndTangent); EditorGUI.indentLevel--; } #endregion Path Inspector #region Tool Settings Inspector PathEditorUtility.Inspector(settings, 1); #endregion Tool Settings Inspector #region Advanced settings.AdvancedFoldout = EditorGUILayout.Foldout(settings.AdvancedFoldout, "Advanced"); if (settings.AdvancedFoldout) { //~ LocalSpaceTransform field cubicBezierPath.LocalSpaceTransform = (Transform)EditorGUILayout.ObjectField( "Local Space Transform", cubicBezierPath.LocalSpaceTransform, typeof(Transform), allowSceneObjects: true ); } #endregion Advanced #region Undo if (newStartPosition != cubicBezierPath.LocalBezier.StartPosition || newStartTangent != cubicBezierPath.LocalBezier.StartTangent || newEndPosition != cubicBezierPath.LocalBezier.EndPosition || newEndTangent != cubicBezierPath.LocalBezier.EndTangent) { Undo.RecordObject(target, "Edit Cubic Bezier"); cubicBezierPath.LocalBezier.StartPosition = newStartPosition; cubicBezierPath.LocalBezier.StartTangent = newStartTangent; cubicBezierPath.LocalBezier.EndPosition = newEndPosition; cubicBezierPath.LocalBezier.EndTangent = newEndTangent; EditorUtility.SetDirty(target); } #endregion Undo SceneView.RepaintAll(); }
public override void OnInspectorGUI() { //base.OnInspectorGUI(); Safety(); var newCenter = circlePath.LocalCircle.Center; var newRadius = circlePath.LocalCircle.Radius; var newMaxAngle = circlePath.MaxAngle; #region Path Inspector settings.PathFoldout = EditorGUILayout.Foldout(settings.PathFoldout, "Path"); if (settings.PathFoldout) { EditorGUI.indentLevel++; //~ Fields newCenter = EditorGUILayout.Vector3Field("Local Center", circlePath.LocalCircle.Center); newRadius = EditorGUILayout.FloatField("Radius", circlePath.LocalCircle.Radius); newMaxAngle = EditorGUILayout.FloatField("Max Angle (Degrees)", circlePath.MaxAngle * Mathf.Rad2Deg) * Mathf.Deg2Rad; EditorGUI.indentLevel--; } #endregion Path Inspector #region Tool Settings Inspector PathEditorUtility.Inspector(settings); #endregion Tool Settings Inspector #region Advanced settings.AdvancedFoldout = EditorGUILayout.Foldout(settings.AdvancedFoldout, "Advanced"); if (settings.AdvancedFoldout) { //~ LocalSpaceTransform field circlePath.LocalSpaceTransform = (Transform)EditorGUILayout.ObjectField( "Local Space Transform", circlePath.LocalSpaceTransform, typeof(Transform), allowSceneObjects: true ); } #endregion Advanced #region Undo if (newCenter != circlePath.LocalCircle.Center || newRadius != circlePath.LocalCircle.Radius || newMaxAngle != circlePath.MaxAngle) { Undo.RecordObject(target, "Edit Circle"); circlePath.LocalCircle.Center = newCenter; circlePath.LocalCircle.Radius = newRadius; circlePath.MaxAngle = newMaxAngle; EditorUtility.SetDirty(target); } #endregion Undo SceneView.RepaintAll(); }