283 lines
		
	
	
		
			9.7 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			283 lines
		
	
	
		
			9.7 KiB
		
	
	
	
		
			C#
		
	
	
	
| using UnityEngine;
 | |
| using UnityEngine.UI;
 | |
| using System.Collections;
 | |
| using UnityEditor;
 | |
| #if UNITY_5_3
 | |
| using UnityEditor.SceneManagement;
 | |
| #endif
 | |
| 
 | |
| [CustomEditor(typeof(ETCButton))]
 | |
| public class ETCButtonInspector : Editor {
 | |
| 
 | |
| 	public string[] unityAxes;
 | |
| 	
 | |
| 	void OnEnable(){
 | |
| 		var inputManager = AssetDatabase.LoadAllAssetsAtPath("ProjectSettings/InputManager.asset")[0];
 | |
| 		SerializedObject obj = new SerializedObject(inputManager);
 | |
| 		SerializedProperty axisArray = obj.FindProperty("m_Axes");
 | |
| 		if (axisArray.arraySize > 0){
 | |
| 			unityAxes = new string[axisArray.arraySize];
 | |
| 			for( int i = 0; i < axisArray.arraySize; ++i ){
 | |
| 				var axis = axisArray.GetArrayElementAtIndex(i);
 | |
| 				unityAxes[i] = axis.FindPropertyRelative("m_Name").stringValue;
 | |
| 			}
 | |
| 		}
 | |
| 		
 | |
| 	}
 | |
| 
 | |
| 	public override void OnInspectorGUI(){
 | |
| 		
 | |
| 		ETCButton t = (ETCButton)target;
 | |
| 		
 | |
| 		
 | |
| 		EditorGUILayout.Space();
 | |
| 		
 | |
| 
 | |
| 		t.gameObject.name = EditorGUILayout.TextField("Button name",t.gameObject.name);
 | |
| 		t.axis.name = t.gameObject.name;
 | |
| 
 | |
| 		t.activated = ETCGuiTools.Toggle("Activated",t.activated,true);
 | |
| 		t.visible = ETCGuiTools.Toggle("Visible",t.visible,true);
 | |
| 
 | |
| 		EditorGUILayout.Space();
 | |
| 		t.useFixedUpdate = ETCGuiTools.Toggle("Use Fixed Update",t.useFixedUpdate,true);
 | |
| 		t.isUnregisterAtDisable = ETCGuiTools.Toggle("Unregister at disabling time",t.isUnregisterAtDisable,true);
 | |
| 
 | |
| 		#region Position & Size
 | |
| 		t.showPSInspector = ETCGuiTools.BeginFoldOut( "Position & Size",t.showPSInspector);
 | |
| 		if (t.showPSInspector){
 | |
| 			ETCGuiTools.BeginGroup();{
 | |
| 				// Anchor
 | |
| 				t.anchor = (ETCBase.RectAnchor)EditorGUILayout.EnumPopup( "Anchor",t.anchor);
 | |
| 				if (t.anchor != ETCBase.RectAnchor.UserDefined){
 | |
| 					t.anchorOffet = EditorGUILayout.Vector2Field("Offset",t.anchorOffet);
 | |
| 				}
 | |
| 
 | |
| 				EditorGUILayout.Space();
 | |
| 				
 | |
| 				// Area sprite ratio
 | |
| 				if (t.GetComponent<Image>().sprite != null){
 | |
| 					Rect rect =  t.GetComponent<Image>().sprite.rect;
 | |
| 					float ratio = rect.width / rect.height;
 | |
| 					
 | |
| 					// Area Size
 | |
| 					if (ratio>=1){
 | |
| 						float s = EditorGUILayout.FloatField("Size", t.rectTransform().rect.width);
 | |
| 						t.rectTransform().SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal,s);
 | |
| 						t.rectTransform().SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical,s/ratio);
 | |
| 					}
 | |
| 					else{
 | |
| 						float s = EditorGUILayout.FloatField("Size", t.rectTransform().rect.height);
 | |
| 						t.rectTransform().SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical,s);
 | |
| 						t.rectTransform().SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal,s*ratio);
 | |
| 					}
 | |
| 				}
 | |
| 			}ETCGuiTools.EndGroup();
 | |
| 		}
 | |
| 		#endregion
 | |
| 
 | |
| 		#region Behaviour
 | |
| 		t.showBehaviourInspector = ETCGuiTools.BeginFoldOut( "Behaviour",t.showBehaviourInspector);
 | |
| 		if (t.showBehaviourInspector){
 | |
| 			ETCGuiTools.BeginGroup();{
 | |
| 
 | |
| 				EditorGUILayout.Space();
 | |
| 				ETCGuiTools.BeginGroup(5);{
 | |
| 					t.enableKeySimulation = ETCGuiTools.Toggle("Enable Unity axes",t.enableKeySimulation,true);
 | |
| 					if (t.enableKeySimulation){
 | |
| 						t.allowSimulationStandalone = ETCGuiTools.Toggle("Allow Unity axes on standalone",t.allowSimulationStandalone,true);
 | |
| 						t.visibleOnStandalone = ETCGuiTools.Toggle("Force visible",t.visibleOnStandalone,true);
 | |
| 					}
 | |
| 				}ETCGuiTools.EndGroup();
 | |
| 
 | |
| 				#region General propertie
 | |
| 				EditorGUI.indentLevel++;
 | |
| 				t.axis.showGeneralInspector = EditorGUILayout.Foldout(t.axis.showGeneralInspector,"General setting");
 | |
| 				if (t.axis.showGeneralInspector){
 | |
| 					ETCGuiTools.BeginGroup(20);{
 | |
| 						EditorGUI.indentLevel--;
 | |
| 
 | |
| 						t.isSwipeIn = ETCGuiTools.Toggle("Swipe in",t.isSwipeIn,true);
 | |
| 						t.isSwipeOut = ETCGuiTools.Toggle("Swipe out",t.isSwipeOut,true);
 | |
| 
 | |
| 						t.axis.isValueOverTime = ETCGuiTools.Toggle("Value over the time",t.axis.isValueOverTime,true);
 | |
| 						if (t.axis.isValueOverTime){
 | |
| 
 | |
| 							ETCGuiTools.BeginGroup(5);{
 | |
| 								t.axis.overTimeStep = EditorGUILayout.FloatField("Step",t.axis.overTimeStep);
 | |
| 								t.axis.maxOverTimeValue = EditorGUILayout.FloatField("Max value",t.axis.maxOverTimeValue);
 | |
| 							}ETCGuiTools.EndGroup();
 | |
| 
 | |
| 						}
 | |
| 						t.axis.speed = EditorGUILayout.FloatField("Value",t.axis.speed);
 | |
| 
 | |
| 						EditorGUI.indentLevel++;
 | |
| 					}ETCGuiTools.EndGroup();
 | |
| 				}
 | |
| 				EditorGUI.indentLevel--;
 | |
| 				#endregion
 | |
| 
 | |
| 				#region Direct Action
 | |
| 				EditorGUI.indentLevel++;
 | |
| 				t.axis.showDirectInspector = EditorGUILayout.Foldout(t.axis.showDirectInspector,"Direction ation");
 | |
| 				if (t.axis.showDirectInspector){
 | |
| 					ETCGuiTools.BeginGroup(20);{
 | |
| 						EditorGUI.indentLevel--;
 | |
| 
 | |
| 						t.axis.autoLinkTagPlayer = EditorGUILayout.ToggleLeft("Auto link on tag",t.axis.autoLinkTagPlayer, GUILayout.Width(200));
 | |
| 						if (t.axis.autoLinkTagPlayer){
 | |
| 							t.axis.autoTag = EditorGUILayout.TagField("",t.axis.autoTag);
 | |
| 						}
 | |
| 						else{
 | |
| 							t.axis.directTransform = (Transform)EditorGUILayout.ObjectField("Direct action to",t.axis.directTransform,typeof(Transform),true);
 | |
| 						}
 | |
| 
 | |
| 						EditorGUILayout.Space();
 | |
| 	
 | |
| 						t.axis.actionOn = (ETCAxis.ActionOn)EditorGUILayout.EnumPopup("Action on",t.axis.actionOn);
 | |
| 
 | |
| 						t.axis.directAction = (ETCAxis.DirectAction ) EditorGUILayout.EnumPopup( "Action",t.axis.directAction);
 | |
| 
 | |
| 						if (t.axis.directAction != ETCAxis.DirectAction.Jump){
 | |
| 							t.axis.axisInfluenced = (ETCAxis.AxisInfluenced) EditorGUILayout.EnumPopup("Affected axis",t.axis.axisInfluenced);
 | |
| 						}
 | |
| 						else{
 | |
| 							EditorGUILayout.HelpBox("Required character controller", MessageType.Info);
 | |
| 							t.axis.gravity = EditorGUILayout.FloatField("Gravity",t.axis.gravity);
 | |
| 						}
 | |
| 						EditorGUI.indentLevel++;
 | |
| 					}ETCGuiTools.EndGroup();
 | |
| 				}
 | |
| 				EditorGUI.indentLevel--;
 | |
| 				#endregion
 | |
| 
 | |
| 				#region Unity axis
 | |
| 				EditorGUI.indentLevel++;
 | |
| 				t.axis.showSimulatinInspector = EditorGUILayout.Foldout(t.axis.showSimulatinInspector,"Unity axes");
 | |
| 				if (t.axis.showSimulatinInspector){
 | |
| 					ETCGuiTools.BeginGroup(20);{
 | |
| 						EditorGUI.indentLevel--;
 | |
| 						int index = System.Array.IndexOf(unityAxes,t.axis.unityAxis );
 | |
| 						int tmpIndex = EditorGUILayout.Popup(index,unityAxes);
 | |
| 						if (tmpIndex != index){
 | |
| 							t.axis.unityAxis = unityAxes[tmpIndex];
 | |
| 						}
 | |
| 						EditorGUI.indentLevel++;
 | |
| 					}ETCGuiTools.EndGroup();
 | |
| 					
 | |
| 				}
 | |
| 
 | |
| 				EditorGUI.indentLevel--;
 | |
| 				#endregion
 | |
| 
 | |
| 			}ETCGuiTools.EndGroup();
 | |
| 
 | |
| 
 | |
| 		}
 | |
| 		#endregion
 | |
| 
 | |
| 		#region Sprite
 | |
| 		t.showSpriteInspector = ETCGuiTools.BeginFoldOut( "Sprites",t.showSpriteInspector);
 | |
| 		if (t.showSpriteInspector){
 | |
| 			ETCGuiTools.BeginGroup();{
 | |
| 
 | |
| 				// Normal state				
 | |
| 				EditorGUILayout.BeginHorizontal();
 | |
| 				EditorGUI.BeginChangeCheck ();
 | |
| 				t.normalSprite = (Sprite)EditorGUILayout.ObjectField("Normal",t.normalSprite,typeof(Sprite),true,GUILayout.MinWidth(100));
 | |
| 				t.normalColor = EditorGUILayout.ColorField("",t.normalColor,GUILayout.Width(50));
 | |
| 				if (EditorGUI.EndChangeCheck ()) {
 | |
| 					t.GetComponent<Image>().sprite = t.normalSprite;
 | |
| 					t.GetComponent<Image>().color = t.normalColor;
 | |
| 				}
 | |
| 
 | |
| 				EditorGUILayout.EndHorizontal();
 | |
| 				EditorGUILayout.Space();
 | |
| 
 | |
| 				if ( t.normalSprite){
 | |
| 					Rect spriteRect = new Rect( t.normalSprite.rect.x/ t.normalSprite.texture.width,
 | |
| 					                           t.normalSprite.rect.y/ t.normalSprite.texture.height,
 | |
| 					                           t.normalSprite.rect.width/ t.normalSprite.texture.width,
 | |
| 					                           t.normalSprite.rect.height/ t.normalSprite.texture.height);
 | |
| 					GUILayout.Space(8);
 | |
| 					Rect lastRect = GUILayoutUtility.GetLastRect();
 | |
| 					lastRect.x = 20;
 | |
| 					lastRect.width = 100;
 | |
| 					lastRect.height = 100;
 | |
| 					
 | |
| 					GUILayout.Space(100);
 | |
| 					
 | |
| 					ETCGuiTools.DrawTextureRectPreview( lastRect,spriteRect,t.normalSprite.texture,Color.white);
 | |
| 				}		
 | |
| 
 | |
| 				// Press state
 | |
| 				EditorGUILayout.BeginHorizontal();
 | |
| 				t.pressedSprite = (Sprite)EditorGUILayout.ObjectField("Pressed",t.pressedSprite,typeof(Sprite),true,GUILayout.MinWidth(100));
 | |
| 				t.pressedColor = EditorGUILayout.ColorField("",t.pressedColor,GUILayout.Width(50));
 | |
| 				EditorGUILayout.EndHorizontal();
 | |
| 				EditorGUILayout.Space();
 | |
| 
 | |
| 				if (t.pressedSprite){
 | |
| 					Rect spriteRect = new Rect( t.pressedSprite.rect.x/ t.pressedSprite.texture.width,
 | |
| 					                      t.pressedSprite.rect.y/ t.pressedSprite.texture.height,
 | |
| 					                      t.pressedSprite.rect.width/ t.pressedSprite.texture.width,
 | |
| 					                      t.pressedSprite.rect.height/ t.pressedSprite.texture.height);
 | |
| 					GUILayout.Space(8);
 | |
| 					Rect lastRect = GUILayoutUtility.GetLastRect();
 | |
| 					lastRect.x = 20;
 | |
| 					lastRect.width = 100;
 | |
| 					lastRect.height = 100;
 | |
| 					
 | |
| 					GUILayout.Space(100);
 | |
| 					
 | |
| 					ETCGuiTools.DrawTextureRectPreview( lastRect,spriteRect,t.pressedSprite.texture,Color.white);
 | |
| 				}
 | |
| 
 | |
| 			}ETCGuiTools.EndGroup();
 | |
| 		}
 | |
| 		#endregion
 | |
| 
 | |
| 		#region Events
 | |
| 		t.showEventInspector = ETCGuiTools.BeginFoldOut( "Events",t.showEventInspector);
 | |
| 		if (t.showEventInspector){
 | |
| 			ETCGuiTools.BeginGroup();{
 | |
| 				
 | |
| 				serializedObject.Update();
 | |
| 				SerializedProperty down = serializedObject.FindProperty("onDown");
 | |
| 				EditorGUILayout.PropertyField(down, true, null);
 | |
| 				serializedObject.ApplyModifiedProperties();
 | |
| 				
 | |
| 				serializedObject.Update();
 | |
| 				SerializedProperty press = serializedObject.FindProperty("onPressed");
 | |
| 				EditorGUILayout.PropertyField(press, true, null);
 | |
| 				serializedObject.ApplyModifiedProperties();
 | |
| 				
 | |
| 				serializedObject.Update();
 | |
| 				SerializedProperty pressTime = serializedObject.FindProperty("onPressedValue");
 | |
| 				EditorGUILayout.PropertyField(pressTime, true, null);
 | |
| 				serializedObject.ApplyModifiedProperties();
 | |
| 
 | |
| 				serializedObject.Update();
 | |
| 				SerializedProperty up = serializedObject.FindProperty("onUp");
 | |
| 				EditorGUILayout.PropertyField(up, true, null);
 | |
| 				serializedObject.ApplyModifiedProperties();
 | |
| 
 | |
| 			}ETCGuiTools.EndGroup();
 | |
| 		}
 | |
| 		#endregion
 | |
| 
 | |
| 		if (t.anchor != ETCBase.RectAnchor.UserDefined){
 | |
| 			t.SetAnchorPosition();
 | |
| 		}
 | |
| 
 | |
| 		if (GUI.changed){
 | |
| 			EditorUtility.SetDirty(t);
 | |
| 			#if UNITY_5_3
 | |
| 			EditorSceneManager.MarkSceneDirty( EditorSceneManager.GetActiveScene());
 | |
| 			#endif
 | |
| 		}
 | |
| 
 | |
| 
 | |
| 	}
 | |
| }
 |