MegaCurveSculptLayeredEditor.cs 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. using UnityEngine;
  2. using UnityEditor;
  3. [CanEditMultipleObjects, CustomEditor(typeof(MegaCurveSculptLayered))]
  4. public class MegaCurveSculptLayeredEditor : MegaModifierEditor
  5. {
  6. public override string GetHelpString() { return "Mega Curve Sculpt New Modifier by Chris West"; }
  7. void CurveGUI(MegaSculptCurve crv)
  8. {
  9. crv.enabled = EditorGUILayout.BeginToggleGroup("Enabled", crv.enabled);
  10. //if ( crv.enabled )
  11. {
  12. crv.name = EditorGUILayout.TextField("Name", crv.name);
  13. crv.axis = (MegaAxis)EditorGUILayout.EnumPopup("Axis", crv.axis);
  14. crv.curve = EditorGUILayout.CurveField("Curve", crv.curve);
  15. crv.weight = EditorGUILayout.Slider("Weight", crv.weight, 0.0f, 1.0f);
  16. crv.affectOffset = (MegaAffect)EditorGUILayout.EnumPopup("Affect Off", crv.affectOffset);
  17. if ( crv.affectOffset != MegaAffect.None )
  18. crv.offamount = EditorGUILayout.Vector3Field("Offset", crv.offamount);
  19. crv.affectScale = (MegaAffect)EditorGUILayout.EnumPopup("Affect Scl", crv.affectScale);
  20. if ( crv.affectScale != MegaAffect.None )
  21. crv.sclamount = EditorGUILayout.Vector3Field("Scale", crv.sclamount);
  22. crv.uselimits = EditorGUILayout.BeginToggleGroup("Limits", crv.uselimits);
  23. crv.regcol = EditorGUILayout.ColorField("Col", crv.regcol);
  24. crv.origin = EditorGUILayout.Vector3Field("Origin", crv.origin);
  25. crv.boxsize = EditorGUILayout.Vector3Field("Boxsize", crv.boxsize);
  26. EditorGUILayout.EndToggleGroup();
  27. }
  28. EditorGUILayout.EndToggleGroup();
  29. }
  30. void SwapCurves(MegaCurveSculptLayered mod, int t1, int t2)
  31. {
  32. if ( t1 >= 0 && t1 < mod.curves.Count && t2 >= 0 && t2 < mod.curves.Count && t1 != t2 )
  33. {
  34. MegaSculptCurve mt1 = mod.curves[t1];
  35. mod.curves.RemoveAt(t1);
  36. mod.curves.Insert(t2, mt1);
  37. EditorUtility.SetDirty(target);
  38. }
  39. }
  40. public override bool Inspector()
  41. {
  42. MegaCurveSculptLayered mod = (MegaCurveSculptLayered)target;
  43. #if !UNITY_5 && !UNITY_2017 && !UNITY_2018 && !UNITY_2019 && !UNITY_2020
  44. EditorGUIUtility.LookLikeControls();
  45. #endif
  46. if ( GUILayout.Button("Add Curve") )
  47. {
  48. mod.curves.Add(MegaSculptCurve.Create());
  49. }
  50. for ( int i = 0; i < mod.curves.Count; i++ )
  51. {
  52. CurveGUI(mod.curves[i]);
  53. EditorGUILayout.BeginHorizontal();
  54. if ( GUILayout.Button("Up") )
  55. {
  56. if ( i > 0 )
  57. SwapCurves(mod, i, i - 1);
  58. }
  59. if ( GUILayout.Button("Down") )
  60. {
  61. if ( i < mod.curves.Count - 1 )
  62. SwapCurves(mod, i, i + 1);
  63. }
  64. if ( GUILayout.Button("Delete") )
  65. {
  66. mod.curves.RemoveAt(i);
  67. i--;
  68. }
  69. EditorGUILayout.EndHorizontal();
  70. }
  71. return false;
  72. }
  73. public override void DrawSceneGUI()
  74. {
  75. MegaCurveSculptLayered mod = (MegaCurveSculptLayered)target;
  76. for ( int i = 0; i < mod.curves.Count; i++ )
  77. {
  78. if ( mod.curves[i].enabled && mod.curves[i].uselimits )
  79. {
  80. Vector3 pos = mod.transform.TransformPoint(mod.curves[i].origin);
  81. Vector3 newpos = Handles.PositionHandle(pos, Quaternion.identity);
  82. if ( newpos != pos )
  83. {
  84. mod.curves[i].origin = mod.transform.worldToLocalMatrix.MultiplyPoint(newpos);
  85. EditorUtility.SetDirty(target);
  86. }
  87. }
  88. }
  89. }
  90. }