MegaVolSelectEditor.cs 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. using UnityEngine;
  2. using UnityEditor;
  3. [CanEditMultipleObjects, CustomEditor(typeof(MegaVolSelect))]
  4. public class MegaVolSelectEditor : MegaModifierEditor
  5. {
  6. public override string GetHelpString() { return "Vol Select Modifier by Chris West"; }
  7. //public override Texture LoadImage() { return (Texture)EditorGUIUtility.LoadRequired("MegaFiers\\bend_help.png"); }
  8. public override bool DisplayCommon() { return false; }
  9. public override bool Inspector()
  10. {
  11. MegaVolSelect mod = (MegaVolSelect)target;
  12. #if !UNITY_5 && !UNITY_2017 && !UNITY_2018 && !UNITY_2019 && !UNITY_2020
  13. EditorGUIUtility.LookLikeControls();
  14. #endif
  15. mod.Label = EditorGUILayout.TextField("Label", mod.Label);
  16. mod.MaxLOD = EditorGUILayout.IntField("MaxLOD", mod.MaxLOD);
  17. mod.ModEnabled = EditorGUILayout.Toggle("Enabled", mod.ModEnabled);
  18. mod.Order = EditorGUILayout.IntField("Order", mod.Order);
  19. mod.volType = (MegaVolumeType)EditorGUILayout.EnumPopup("Type", mod.volType);
  20. if ( mod.volType == MegaVolumeType.Sphere )
  21. mod.radius = EditorGUILayout.FloatField("Radius", mod.radius);
  22. else
  23. mod.boxsize = EditorGUILayout.Vector3Field("Size", mod.boxsize);
  24. mod.weight = EditorGUILayout.Slider("Weight", mod.weight, 0.0f, 1.0f);
  25. mod.falloff = EditorGUILayout.FloatField("Falloff", mod.falloff);
  26. mod.origin = EditorGUILayout.Vector3Field("Origin", mod.origin);
  27. mod.target = (Transform)EditorGUILayout.ObjectField("Target", mod.target, typeof(Transform), true);
  28. mod.useCurrentVerts = EditorGUILayout.Toggle("Use Stack Verts", mod.useCurrentVerts);
  29. mod.displayWeights = EditorGUILayout.Toggle("Show Weights", mod.displayWeights);
  30. mod.gizCol = EditorGUILayout.ColorField("Gizmo Col", mod.gizCol);
  31. mod.gizSize = EditorGUILayout.FloatField("Gizmo Size", mod.gizSize);
  32. mod.freezeSelection = EditorGUILayout.Toggle("Freeze Selection", mod.freezeSelection);
  33. mod.inverse = EditorGUILayout.Toggle("Inverse", mod.inverse);
  34. return false;
  35. }
  36. // option to use base verts or current stack verts for distance calc
  37. // flag to display weights
  38. // size of weights and color of gizmo
  39. public override void DrawSceneGUI()
  40. {
  41. MegaVolSelect mod = (MegaVolSelect)target;
  42. if ( !mod.ModEnabled )
  43. return;
  44. MegaModifiers mc = mod.gameObject.GetComponent<MegaModifiers>();
  45. float[] sel = mod.GetSel();
  46. if ( mc != null && sel != null )
  47. {
  48. //Color col = Color.black;
  49. Matrix4x4 tm = mod.gameObject.transform.localToWorldMatrix;
  50. Handles.matrix = tm; //Matrix4x4.identity;
  51. if ( mod.displayWeights )
  52. {
  53. for ( int i = 0; i < sel.Length; i++ )
  54. {
  55. float w = sel[i];
  56. if ( w > 0.001f )
  57. {
  58. if ( w > 0.5f )
  59. Handles.color = Color.Lerp(Color.green, Color.red, (w - 0.5f) * 2.0f);
  60. else
  61. Handles.color = Color.Lerp(Color.blue, Color.green, w * 2.0f);
  62. MegaHandles.DotCap(i, mc.sverts[i], Quaternion.identity, mod.gizSize);
  63. }
  64. }
  65. }
  66. Handles.color = mod.gizCol; //new Color(0.5f, 0.5f, 0.5f, 0.2f);
  67. //Handles.DrawWireDisc(0, tm.MultiplyPoint(mod.origin), Quaternion.identity, mod.radius);
  68. //Handles.DrawWireDisc(tm.MultiplyPoint(mod.origin), Vector3.up, mod.radius);
  69. //Handles.DrawWireDisc(tm.MultiplyPoint(mod.origin), Vector3.right, mod.radius);
  70. //Handles.DrawWireDisc(tm.MultiplyPoint(mod.origin), Vector3.forward, mod.radius);
  71. if ( mod.volType == MegaVolumeType.Sphere )
  72. MegaHandles.SphereCap(0, tm.MultiplyPoint(mod.origin), Quaternion.identity, mod.radius * 2.0f);
  73. Handles.matrix = tm;
  74. Vector3 origin = Handles.PositionHandle(mod.origin, Quaternion.identity);
  75. if ( origin != mod.origin )
  76. {
  77. mod.origin = origin;
  78. EditorUtility.SetDirty(target);
  79. }
  80. Handles.matrix = Matrix4x4.identity;
  81. }
  82. }
  83. }