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 | ||
|  | 		} | ||
|  | 
 | ||
|  | 
 | ||
|  | 	} | ||
|  | } |