FoldingEditor.cs 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. #if UNITY_EDITOR
  5. using UnityEditor;
  6. [CustomEditor(typeof(Folding))]
  7. public class FoldingEditor : Editor
  8. {
  9. Folding folding;
  10. private void OnEnable()
  11. {
  12. if (folding == null)
  13. folding = (Folding)target;
  14. }
  15. private void OnSceneGUI()
  16. {
  17. if (!folding.showGizmos) return;
  18. DrawRotationAxisPositionHandle();
  19. DrawRotationAxis();
  20. DrawRotationAxisPlaneNormal();
  21. }
  22. private void DrawRotationAxisPositionHandle()
  23. {
  24. RotationAxis rt = folding.GetRotationAxis();
  25. EditorGUI.BeginChangeCheck();
  26. rt.position = Handles.PositionHandle(rt.position, Quaternion.identity);
  27. if(EditorGUI.EndChangeCheck())
  28. {
  29. Undo.RecordObject(folding, "RotationAxis position change.");
  30. EditorUtility.SetDirty(folding);
  31. }
  32. folding.SetRotationAxis(rt);
  33. }
  34. private void DrawRotationAxis()
  35. {
  36. RotationAxis rotationAxis = folding.GetRotationAxis();
  37. Vector3[] fourPlanePoints = PlaneUtils.GetFourPlanePoints(rotationAxis.position, rotationAxis.angle);
  38. Handles.color = Color.blue;
  39. Handles.DrawLine(fourPlanePoints[0], fourPlanePoints[1]);
  40. Handles.DrawLine(fourPlanePoints[1], fourPlanePoints[2]);
  41. Handles.DrawLine(fourPlanePoints[2], fourPlanePoints[3]);
  42. Handles.DrawLine(fourPlanePoints[3], fourPlanePoints[0]);
  43. }
  44. private void DrawRotationAxisPlaneNormal()
  45. {
  46. RotationAxis rotationAxis = folding.GetRotationAxis();
  47. Handles.color = Color.blue;
  48. Handles.ArrowHandleCap(0, rotationAxis.position, Quaternion.Euler(0, -rotationAxis.angle + 180, 0), 0.5f, EventType.Repaint);
  49. }
  50. }
  51. #endif