ETCButtonInspector.cs 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282
  1. using UnityEngine;
  2. using UnityEngine.UI;
  3. using System.Collections;
  4. using UnityEditor;
  5. #if UNITY_5_3
  6. using UnityEditor.SceneManagement;
  7. #endif
  8. [CustomEditor(typeof(ETCButton))]
  9. public class ETCButtonInspector : Editor {
  10. public string[] unityAxes;
  11. void OnEnable(){
  12. var inputManager = AssetDatabase.LoadAllAssetsAtPath("ProjectSettings/InputManager.asset")[0];
  13. SerializedObject obj = new SerializedObject(inputManager);
  14. SerializedProperty axisArray = obj.FindProperty("m_Axes");
  15. if (axisArray.arraySize > 0){
  16. unityAxes = new string[axisArray.arraySize];
  17. for( int i = 0; i < axisArray.arraySize; ++i ){
  18. var axis = axisArray.GetArrayElementAtIndex(i);
  19. unityAxes[i] = axis.FindPropertyRelative("m_Name").stringValue;
  20. }
  21. }
  22. }
  23. public override void OnInspectorGUI(){
  24. ETCButton t = (ETCButton)target;
  25. EditorGUILayout.Space();
  26. t.gameObject.name = EditorGUILayout.TextField("Button name",t.gameObject.name);
  27. t.axis.name = t.gameObject.name;
  28. t.activated = ETCGuiTools.Toggle("Activated",t.activated,true);
  29. t.visible = ETCGuiTools.Toggle("Visible",t.visible,true);
  30. EditorGUILayout.Space();
  31. t.useFixedUpdate = ETCGuiTools.Toggle("Use Fixed Update",t.useFixedUpdate,true);
  32. t.isUnregisterAtDisable = ETCGuiTools.Toggle("Unregister at disabling time",t.isUnregisterAtDisable,true);
  33. #region Position & Size
  34. t.showPSInspector = ETCGuiTools.BeginFoldOut( "Position & Size",t.showPSInspector);
  35. if (t.showPSInspector){
  36. ETCGuiTools.BeginGroup();{
  37. // Anchor
  38. t.anchor = (ETCBase.RectAnchor)EditorGUILayout.EnumPopup( "Anchor",t.anchor);
  39. if (t.anchor != ETCBase.RectAnchor.UserDefined){
  40. t.anchorOffet = EditorGUILayout.Vector2Field("Offset",t.anchorOffet);
  41. }
  42. EditorGUILayout.Space();
  43. // Area sprite ratio
  44. if (t.GetComponent<Image>().sprite != null){
  45. Rect rect = t.GetComponent<Image>().sprite.rect;
  46. float ratio = rect.width / rect.height;
  47. // Area Size
  48. if (ratio>=1){
  49. float s = EditorGUILayout.FloatField("Size", t.rectTransform().rect.width);
  50. t.rectTransform().SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal,s);
  51. t.rectTransform().SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical,s/ratio);
  52. }
  53. else{
  54. float s = EditorGUILayout.FloatField("Size", t.rectTransform().rect.height);
  55. t.rectTransform().SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical,s);
  56. t.rectTransform().SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal,s*ratio);
  57. }
  58. }
  59. }ETCGuiTools.EndGroup();
  60. }
  61. #endregion
  62. #region Behaviour
  63. t.showBehaviourInspector = ETCGuiTools.BeginFoldOut( "Behaviour",t.showBehaviourInspector);
  64. if (t.showBehaviourInspector){
  65. ETCGuiTools.BeginGroup();{
  66. EditorGUILayout.Space();
  67. ETCGuiTools.BeginGroup(5);{
  68. t.enableKeySimulation = ETCGuiTools.Toggle("Enable Unity axes",t.enableKeySimulation,true);
  69. if (t.enableKeySimulation){
  70. t.allowSimulationStandalone = ETCGuiTools.Toggle("Allow Unity axes on standalone",t.allowSimulationStandalone,true);
  71. t.visibleOnStandalone = ETCGuiTools.Toggle("Force visible",t.visibleOnStandalone,true);
  72. }
  73. }ETCGuiTools.EndGroup();
  74. #region General propertie
  75. EditorGUI.indentLevel++;
  76. t.axis.showGeneralInspector = EditorGUILayout.Foldout(t.axis.showGeneralInspector,"General setting");
  77. if (t.axis.showGeneralInspector){
  78. ETCGuiTools.BeginGroup(20);{
  79. EditorGUI.indentLevel--;
  80. t.isSwipeIn = ETCGuiTools.Toggle("Swipe in",t.isSwipeIn,true);
  81. t.isSwipeOut = ETCGuiTools.Toggle("Swipe out",t.isSwipeOut,true);
  82. t.axis.isValueOverTime = ETCGuiTools.Toggle("Value over the time",t.axis.isValueOverTime,true);
  83. if (t.axis.isValueOverTime){
  84. ETCGuiTools.BeginGroup(5);{
  85. t.axis.overTimeStep = EditorGUILayout.FloatField("Step",t.axis.overTimeStep);
  86. t.axis.maxOverTimeValue = EditorGUILayout.FloatField("Max value",t.axis.maxOverTimeValue);
  87. }ETCGuiTools.EndGroup();
  88. }
  89. t.axis.speed = EditorGUILayout.FloatField("Value",t.axis.speed);
  90. EditorGUI.indentLevel++;
  91. }ETCGuiTools.EndGroup();
  92. }
  93. EditorGUI.indentLevel--;
  94. #endregion
  95. #region Direct Action
  96. EditorGUI.indentLevel++;
  97. t.axis.showDirectInspector = EditorGUILayout.Foldout(t.axis.showDirectInspector,"Direction ation");
  98. if (t.axis.showDirectInspector){
  99. ETCGuiTools.BeginGroup(20);{
  100. EditorGUI.indentLevel--;
  101. t.axis.autoLinkTagPlayer = EditorGUILayout.ToggleLeft("Auto link on tag",t.axis.autoLinkTagPlayer, GUILayout.Width(200));
  102. if (t.axis.autoLinkTagPlayer){
  103. t.axis.autoTag = EditorGUILayout.TagField("",t.axis.autoTag);
  104. }
  105. else{
  106. t.axis.directTransform = (Transform)EditorGUILayout.ObjectField("Direct action to",t.axis.directTransform,typeof(Transform),true);
  107. }
  108. EditorGUILayout.Space();
  109. t.axis.actionOn = (ETCAxis.ActionOn)EditorGUILayout.EnumPopup("Action on",t.axis.actionOn);
  110. t.axis.directAction = (ETCAxis.DirectAction ) EditorGUILayout.EnumPopup( "Action",t.axis.directAction);
  111. if (t.axis.directAction != ETCAxis.DirectAction.Jump){
  112. t.axis.axisInfluenced = (ETCAxis.AxisInfluenced) EditorGUILayout.EnumPopup("Affected axis",t.axis.axisInfluenced);
  113. }
  114. else{
  115. EditorGUILayout.HelpBox("Required character controller", MessageType.Info);
  116. t.axis.gravity = EditorGUILayout.FloatField("Gravity",t.axis.gravity);
  117. }
  118. EditorGUI.indentLevel++;
  119. }ETCGuiTools.EndGroup();
  120. }
  121. EditorGUI.indentLevel--;
  122. #endregion
  123. #region Unity axis
  124. EditorGUI.indentLevel++;
  125. t.axis.showSimulatinInspector = EditorGUILayout.Foldout(t.axis.showSimulatinInspector,"Unity axes");
  126. if (t.axis.showSimulatinInspector){
  127. ETCGuiTools.BeginGroup(20);{
  128. EditorGUI.indentLevel--;
  129. int index = System.Array.IndexOf(unityAxes,t.axis.unityAxis );
  130. int tmpIndex = EditorGUILayout.Popup(index,unityAxes);
  131. if (tmpIndex != index){
  132. t.axis.unityAxis = unityAxes[tmpIndex];
  133. }
  134. EditorGUI.indentLevel++;
  135. }ETCGuiTools.EndGroup();
  136. }
  137. EditorGUI.indentLevel--;
  138. #endregion
  139. }ETCGuiTools.EndGroup();
  140. }
  141. #endregion
  142. #region Sprite
  143. t.showSpriteInspector = ETCGuiTools.BeginFoldOut( "Sprites",t.showSpriteInspector);
  144. if (t.showSpriteInspector){
  145. ETCGuiTools.BeginGroup();{
  146. // Normal state
  147. EditorGUILayout.BeginHorizontal();
  148. EditorGUI.BeginChangeCheck ();
  149. t.normalSprite = (Sprite)EditorGUILayout.ObjectField("Normal",t.normalSprite,typeof(Sprite),true,GUILayout.MinWidth(100));
  150. t.normalColor = EditorGUILayout.ColorField("",t.normalColor,GUILayout.Width(50));
  151. if (EditorGUI.EndChangeCheck ()) {
  152. t.GetComponent<Image>().sprite = t.normalSprite;
  153. t.GetComponent<Image>().color = t.normalColor;
  154. }
  155. EditorGUILayout.EndHorizontal();
  156. EditorGUILayout.Space();
  157. if ( t.normalSprite){
  158. Rect spriteRect = new Rect( t.normalSprite.rect.x/ t.normalSprite.texture.width,
  159. t.normalSprite.rect.y/ t.normalSprite.texture.height,
  160. t.normalSprite.rect.width/ t.normalSprite.texture.width,
  161. t.normalSprite.rect.height/ t.normalSprite.texture.height);
  162. GUILayout.Space(8);
  163. Rect lastRect = GUILayoutUtility.GetLastRect();
  164. lastRect.x = 20;
  165. lastRect.width = 100;
  166. lastRect.height = 100;
  167. GUILayout.Space(100);
  168. ETCGuiTools.DrawTextureRectPreview( lastRect,spriteRect,t.normalSprite.texture,Color.white);
  169. }
  170. // Press state
  171. EditorGUILayout.BeginHorizontal();
  172. t.pressedSprite = (Sprite)EditorGUILayout.ObjectField("Pressed",t.pressedSprite,typeof(Sprite),true,GUILayout.MinWidth(100));
  173. t.pressedColor = EditorGUILayout.ColorField("",t.pressedColor,GUILayout.Width(50));
  174. EditorGUILayout.EndHorizontal();
  175. EditorGUILayout.Space();
  176. if (t.pressedSprite){
  177. Rect spriteRect = new Rect( t.pressedSprite.rect.x/ t.pressedSprite.texture.width,
  178. t.pressedSprite.rect.y/ t.pressedSprite.texture.height,
  179. t.pressedSprite.rect.width/ t.pressedSprite.texture.width,
  180. t.pressedSprite.rect.height/ t.pressedSprite.texture.height);
  181. GUILayout.Space(8);
  182. Rect lastRect = GUILayoutUtility.GetLastRect();
  183. lastRect.x = 20;
  184. lastRect.width = 100;
  185. lastRect.height = 100;
  186. GUILayout.Space(100);
  187. ETCGuiTools.DrawTextureRectPreview( lastRect,spriteRect,t.pressedSprite.texture,Color.white);
  188. }
  189. }ETCGuiTools.EndGroup();
  190. }
  191. #endregion
  192. #region Events
  193. t.showEventInspector = ETCGuiTools.BeginFoldOut( "Events",t.showEventInspector);
  194. if (t.showEventInspector){
  195. ETCGuiTools.BeginGroup();{
  196. serializedObject.Update();
  197. SerializedProperty down = serializedObject.FindProperty("onDown");
  198. EditorGUILayout.PropertyField(down, true, null);
  199. serializedObject.ApplyModifiedProperties();
  200. serializedObject.Update();
  201. SerializedProperty press = serializedObject.FindProperty("onPressed");
  202. EditorGUILayout.PropertyField(press, true, null);
  203. serializedObject.ApplyModifiedProperties();
  204. serializedObject.Update();
  205. SerializedProperty pressTime = serializedObject.FindProperty("onPressedValue");
  206. EditorGUILayout.PropertyField(pressTime, true, null);
  207. serializedObject.ApplyModifiedProperties();
  208. serializedObject.Update();
  209. SerializedProperty up = serializedObject.FindProperty("onUp");
  210. EditorGUILayout.PropertyField(up, true, null);
  211. serializedObject.ApplyModifiedProperties();
  212. }ETCGuiTools.EndGroup();
  213. }
  214. #endregion
  215. if (t.anchor != ETCBase.RectAnchor.UserDefined){
  216. t.SetAnchorPosition();
  217. }
  218. if (GUI.changed){
  219. EditorUtility.SetDirty(t);
  220. #if UNITY_5_3
  221. EditorSceneManager.MarkSceneDirty( EditorSceneManager.GetActiveScene());
  222. #endif
  223. }
  224. }
  225. }