MegaMorphRefEditor.cs 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. 
  2. using UnityEngine;
  3. using UnityEditor;
  4. using System.Collections.Generic;
  5. [CanEditMultipleObjects, CustomEditor(typeof(MegaMorphRef))]
  6. public class MegaMorphRefEditor : Editor
  7. {
  8. static public Color ChanCol1 = new Color(0.44f, 0.67f, 1.0f);
  9. static public Color ChanCol2 = new Color(1.0f, 0.67f, 0.44f);
  10. Stack<Color> bcol = new Stack<Color>();
  11. Stack<Color> ccol = new Stack<Color>();
  12. Stack<Color> col = new Stack<Color>();
  13. bool extraparams = false;
  14. private MegaModifier src;
  15. private MegaUndo undoManager;
  16. bool showmodparams = false;
  17. bool showchannels = true;
  18. private void OnEnable()
  19. {
  20. src = target as MegaModifier;
  21. // Instantiate undoManager
  22. undoManager = new MegaUndo(src, src.ModName() + " change");
  23. }
  24. void PushCols()
  25. {
  26. bcol.Push(GUI.backgroundColor);
  27. ccol.Push(GUI.contentColor);
  28. col.Push(GUI.color);
  29. }
  30. void PopCols()
  31. {
  32. GUI.backgroundColor = bcol.Pop();
  33. GUI.contentColor = ccol.Pop();
  34. GUI.color = col.Pop();
  35. }
  36. void DisplayChannel(MegaMorphRef morph, MegaMorphChan channel, int num)
  37. {
  38. if ( GUILayout.Button(num + " - " + channel.mName) )
  39. channel.showparams = !channel.showparams;
  40. float min = 0.0f;
  41. float max = 100.0f;
  42. if ( morph.UseLimit )
  43. {
  44. min = morph.Min;
  45. max = morph.Max;
  46. }
  47. GUI.backgroundColor = new Color(1, 1, 1);
  48. if ( channel.showparams )
  49. {
  50. channel.mName = EditorGUILayout.TextField("Name", channel.mName);
  51. if ( morph.UseLimit )
  52. channel.Percent = EditorGUILayout.Slider("Percent", channel.Percent, min, max); //0.0f, 100.0f);
  53. else
  54. {
  55. if ( channel.mUseLimit )
  56. channel.Percent = EditorGUILayout.Slider("Percent", channel.Percent, channel.mSpinmin, channel.mSpinmax);
  57. else
  58. channel.Percent = EditorGUILayout.Slider("Percent", channel.Percent, 0.0f, 100.0f);
  59. }
  60. }
  61. else
  62. {
  63. if ( morph.UseLimit )
  64. channel.Percent = EditorGUILayout.Slider("Percent", channel.Percent, min, max); //0.0f, 100.0f);
  65. else
  66. {
  67. if ( channel.mUseLimit )
  68. channel.Percent = EditorGUILayout.Slider("Percent", channel.Percent, channel.mSpinmin, channel.mSpinmax);
  69. else
  70. channel.Percent = EditorGUILayout.Slider("Percent", channel.Percent, 0.0f, 100.0f);
  71. }
  72. }
  73. }
  74. void DisplayChannelLim(MegaMorphRef morph, MegaMorphChan channel, int num)
  75. {
  76. float min = 0.0f;
  77. float max = 100.0f;
  78. if ( morph.UseLimit )
  79. {
  80. min = morph.Min;
  81. max = morph.Max;
  82. }
  83. GUI.backgroundColor = new Color(1, 1, 1);
  84. if ( morph.UseLimit )
  85. channel.Percent = EditorGUILayout.Slider(channel.mName, channel.Percent, min, max); //0.0f, 100.0f);
  86. else
  87. {
  88. if ( channel.mUseLimit )
  89. channel.Percent = EditorGUILayout.Slider(channel.mName, channel.Percent, channel.mSpinmin, channel.mSpinmax);
  90. else
  91. channel.Percent = EditorGUILayout.Slider(channel.mName, channel.Percent, 0.0f, 100.0f);
  92. }
  93. }
  94. public override void OnInspectorGUI()
  95. {
  96. undoManager.CheckUndo();
  97. MegaMorphRef morph = (MegaMorphRef)target;
  98. PushCols();
  99. MegaMorph src = (MegaMorph)EditorGUILayout.ObjectField("Source", morph.source, typeof(MegaMorph), true);
  100. if ( src != morph.source )
  101. morph.SetSource(src);
  102. // Basic mod stuff
  103. showmodparams = EditorGUILayout.Foldout(showmodparams, "Modifier Common Params");
  104. if ( showmodparams )
  105. {
  106. morph.Label = EditorGUILayout.TextField("Label", morph.Label);
  107. morph.MaxLOD = EditorGUILayout.IntField("MaxLOD", morph.MaxLOD);
  108. morph.ModEnabled = EditorGUILayout.Toggle("Mod Enabled", morph.ModEnabled);
  109. morph.useUndo = EditorGUILayout.Toggle("Use Undo", morph.useUndo);
  110. morph.DisplayGizmo = EditorGUILayout.Toggle("Display Gizmo", morph.DisplayGizmo);
  111. morph.Order = EditorGUILayout.IntField("Order", morph.Order);
  112. morph.gizCol1 = EditorGUILayout.ColorField("Giz Col 1", morph.gizCol1);
  113. morph.gizCol2 = EditorGUILayout.ColorField("Giz Col 2", morph.gizCol2);
  114. }
  115. morph.animate = EditorGUILayout.Toggle("Animate", morph.animate);
  116. if ( morph.animate )
  117. {
  118. morph.animtime = EditorGUILayout.FloatField("AnimTime", morph.animtime);
  119. morph.looptime = EditorGUILayout.FloatField("LoopTime", morph.looptime);
  120. morph.speed = EditorGUILayout.FloatField("Speed", morph.speed);
  121. morph.repeatMode = (MegaRepeatMode)EditorGUILayout.EnumPopup("RepeatMode", morph.repeatMode);
  122. }
  123. string bname = "Hide Channels";
  124. if ( !showchannels )
  125. bname = "Show Channels";
  126. if ( GUILayout.Button(bname) )
  127. showchannels = !showchannels;
  128. morph.limitchandisplay = EditorGUILayout.Toggle("Compact Display", morph.limitchandisplay);
  129. if ( showchannels && morph.chanBank != null )
  130. {
  131. if ( morph.limitchandisplay )
  132. {
  133. morph.startchannel = EditorGUILayout.IntField("Start", morph.startchannel);
  134. morph.displaychans = EditorGUILayout.IntField("Display", morph.displaychans);
  135. if ( morph.displaychans < 0 )
  136. morph.displaychans = 0;
  137. if ( morph.startchannel < 0 )
  138. morph.startchannel = 0;
  139. if ( morph.startchannel >= morph.chanBank.Count - 1 )
  140. morph.startchannel = morph.chanBank.Count - 1;
  141. int end = morph.startchannel + morph.displaychans;
  142. if ( end >= morph.chanBank.Count )
  143. end = morph.chanBank.Count;
  144. for ( int i = morph.startchannel; i < end; i++ )
  145. {
  146. PushCols();
  147. if ( (i & 1) == 0 )
  148. GUI.backgroundColor = ChanCol1;
  149. else
  150. GUI.backgroundColor = ChanCol2;
  151. DisplayChannelLim(morph, morph.chanBank[i], i);
  152. PopCols();
  153. }
  154. }
  155. else
  156. {
  157. for ( int i = 0; i < morph.chanBank.Count; i++ )
  158. {
  159. PushCols();
  160. if ( (i & 1) == 0 )
  161. GUI.backgroundColor = ChanCol1;
  162. else
  163. GUI.backgroundColor = ChanCol2;
  164. DisplayChannel(morph, morph.chanBank[i], i);
  165. PopCols();
  166. }
  167. }
  168. }
  169. extraparams = EditorGUILayout.Foldout(extraparams, "Extra Params");
  170. if ( extraparams )
  171. {
  172. ChanCol1 = EditorGUILayout.ColorField("Channel Col 1", ChanCol1);
  173. ChanCol2 = EditorGUILayout.ColorField("Channel Col 2", ChanCol2);
  174. }
  175. PopCols();
  176. if ( GUI.changed )
  177. EditorUtility.SetDirty(target);
  178. undoManager.CheckDirty();
  179. }
  180. }