200 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			200 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			C#
		
	
	
	
| 
								 | 
							
								using UnityEngine;
							 | 
						||
| 
								 | 
							
								using UnityEditor;
							 | 
						||
| 
								 | 
							
								using System;
							 | 
						||
| 
								 | 
							
								using System.Collections;
							 | 
						||
| 
								 | 
							
								using System.Collections.Generic;
							 | 
						||
| 
								 | 
							
								using System.Reflection;
							 | 
						||
| 
								 | 
							
								using HedgehogTeam.EasyTouch;
							 | 
						||
| 
								 | 
							
								#if UNITY_5_3
							 | 
						||
| 
								 | 
							
								using UnityEditor.SceneManagement;
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[CustomEditor(typeof(EasyTouchTrigger))]
							 | 
						||
| 
								 | 
							
								public class EasyTouchTriggerInspector : Editor {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public override void OnInspectorGUI(){
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										EasyTouchTrigger t = (EasyTouchTrigger)target;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										string[] eventNames = Enum.GetNames( typeof(EasyTouch.EvtType) ) ;
							 | 
						||
| 
								 | 
							
										eventNames[0] = "Add new event";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										#region Event properties
							 | 
						||
| 
								 | 
							
										GUILayout.Space(5f);
							 | 
						||
| 
								 | 
							
										for (int i=1;i<eventNames.Length;i++){
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											EasyTouch.EvtType ev = (EasyTouch.EvtType)Enum.Parse( typeof(EasyTouch.EvtType), eventNames[i]);
							 | 
						||
| 
								 | 
							
											int result = t.receivers.FindIndex(
							 | 
						||
| 
								 | 
							
												delegate(EasyTouchTrigger.EasyTouchReceiver e){
							 | 
						||
| 
								 | 
							
												return  e.eventName == ev;
							 | 
						||
| 
								 | 
							
												}
							 | 
						||
| 
								 | 
							
											);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											if (result>-1){
							 | 
						||
| 
								 | 
							
												TriggerInspector( ev,t);
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
										#endregion
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										#region Add Event
							 | 
						||
| 
								 | 
							
										GUI.backgroundColor = Color.green;
							 | 
						||
| 
								 | 
							
										int index = EditorGUILayout.Popup("", 0, eventNames,"Button");
							 | 
						||
| 
								 | 
							
										GUI.backgroundColor = Color.white;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										if (index!=0){
							 | 
						||
| 
								 | 
							
											//AddEvent((EasyTouch.EventName)Enum.Parse( typeof(EasyTouch.EventName), eventNames[index]),t );
							 | 
						||
| 
								 | 
							
											t.AddTrigger( (EasyTouch.EvtType)Enum.Parse( typeof(EasyTouch.EvtType), eventNames[index]));
							 | 
						||
| 
								 | 
							
											EditorPrefs.SetBool( eventNames[index], true); 
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
										#endregion
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										if (GUI.changed){
							 | 
						||
| 
								 | 
							
											EditorUtility.SetDirty(t);
							 | 
						||
| 
								 | 
							
											#if UNITY_5_3
							 | 
						||
| 
								 | 
							
											EditorSceneManager.MarkSceneDirty( EditorSceneManager.GetActiveScene());
							 | 
						||
| 
								 | 
							
											#endif
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									private void TriggerInspector(EasyTouch.EvtType ev, EasyTouchTrigger t){
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										bool folding = EditorPrefs.GetBool( ev.ToString() );
							 | 
						||
| 
								 | 
							
										folding = HTGuiTools.BeginFoldOut( ev.ToString(),folding,false);
							 | 
						||
| 
								 | 
							
										EditorPrefs.SetBool(  ev.ToString(), folding); 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										if (folding){
							 | 
						||
| 
								 | 
							
											HTGuiTools.BeginGroup();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											int i=0;
							 | 
						||
| 
								 | 
							
											while (i<t.receivers.Count){
							 | 
						||
| 
								 | 
							
											
							 | 
						||
| 
								 | 
							
												if (t.receivers[i].eventName == ev){
							 | 
						||
| 
								 | 
							
													GUI.color = new Color(0.8f,0.8f,0.8f,1);
							 | 
						||
| 
								 | 
							
													HTGuiTools.BeginGroup(5);
							 | 
						||
| 
								 | 
							
													GUI.color = Color.white;
							 | 
						||
| 
								 | 
							
												
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
													EditorGUILayout.BeginHorizontal();
							 | 
						||
| 
								 | 
							
													t.receivers[i].enable = HTGuiTools.Toggle("Enable",t.receivers[i].enable,55,true);
							 | 
						||
| 
								 | 
							
													t.receivers[i].name = EditorGUILayout.TextField("",t.receivers[i].name, GUILayout.MinWidth(130));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
													// Delete
							 | 
						||
| 
								 | 
							
													GUILayout.FlexibleSpace();
							 | 
						||
| 
								 | 
							
													if (HTGuiTools.Button("X",Color.red,19)){
							 | 
						||
| 
								 | 
							
														t.receivers[i] = null;
							 | 
						||
| 
								 | 
							
														t.receivers.RemoveAt( i );
							 | 
						||
| 
								 | 
							
														EditorGUILayout.EndHorizontal();
							 | 
						||
| 
								 | 
							
														return;
							 | 
						||
| 
								 | 
							
													}
							 | 
						||
| 
								 | 
							
													EditorGUILayout.EndHorizontal();
							 | 
						||
| 
								 | 
							
												
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
													EditorGUILayout.Space();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
													// Restriced
							 | 
						||
| 
								 | 
							
													//t.receivers[i].restricted = HTGuiTools.Toggle("Restricted to gameobject",t.receivers[i].restricted,true);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
													t.receivers[i].triggerType = (EasyTouchTrigger.ETTType)EditorGUILayout.EnumPopup("Testing on",t.receivers[i].triggerType );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
													EditorGUILayout.BeginHorizontal();
							 | 
						||
| 
								 | 
							
													t.receivers[i].restricted = EditorGUILayout.Toggle("",t.receivers[i].restricted ,(GUIStyle)"Radio" ,GUILayout.Width(15));
							 | 
						||
| 
								 | 
							
													EditorGUILayout.LabelField("Only if on me (requiered a collider)");
							 | 
						||
| 
								 | 
							
													EditorGUILayout.EndHorizontal();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
													EditorGUILayout.BeginHorizontal();
							 | 
						||
| 
								 | 
							
													t.receivers[i].restricted = !EditorGUILayout.Toggle("",!t.receivers[i].restricted ,(GUIStyle)"Radio",GUILayout.Width(15));				
							 | 
						||
| 
								 | 
							
													EditorGUILayout.LabelField("All the time, or other object");
							 | 
						||
| 
								 | 
							
													EditorGUILayout.EndHorizontal();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
													if (!t.receivers[i].restricted){
							 | 
						||
| 
								 | 
							
														t.receivers[i].gameObject = (GameObject)EditorGUILayout.ObjectField("Other object",t.receivers[i].gameObject,typeof(GameObject),true);
							 | 
						||
| 
								 | 
							
													}
							 | 
						||
| 
								 | 
							
													EditorGUILayout.Space();
							 | 
						||
| 
								 | 
							
													EditorGUILayout.Space();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
													t.receivers[i].otherReceiver = HTGuiTools.Toggle("Other receiver",t.receivers[i].otherReceiver,true);
							 | 
						||
| 
								 | 
							
													if (t.receivers[i].otherReceiver){
							 | 
						||
| 
								 | 
							
														t.receivers[i].gameObjectReceiver = (GameObject)EditorGUILayout.ObjectField("Receiver",t.receivers[i].gameObjectReceiver,typeof(GameObject),true);
							 | 
						||
| 
								 | 
							
													}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
													// Method Name
							 | 
						||
| 
								 | 
							
													EditorGUILayout.BeginHorizontal();
							 | 
						||
| 
								 | 
							
													t.receivers[i].methodName = EditorGUILayout.TextField("Method name",t.receivers[i].methodName);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
													// Methode helper
							 | 
						||
| 
								 | 
							
													string[] mNames = null;
							 | 
						||
| 
								 | 
							
													if (!t.receivers[i].otherReceiver || (t.receivers[i].otherReceiver && t.receivers[i].gameObjectReceiver == null) ){
							 | 
						||
| 
								 | 
							
														mNames = GetMethod( t.gameObject);
							 | 
						||
| 
								 | 
							
													}
							 | 
						||
| 
								 | 
							
													else if ( t.receivers[i].otherReceiver && t.receivers[i].gameObjectReceiver != null){
							 | 
						||
| 
								 | 
							
														mNames = GetMethod( t.receivers[i].gameObjectReceiver);
							 | 
						||
| 
								 | 
							
													}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
													int index = EditorGUILayout.Popup("", -1, mNames,"Button",GUILayout.Width(20));
							 | 
						||
| 
								 | 
							
													if (index>-1){
							 | 
						||
| 
								 | 
							
														t.receivers[i].methodName = mNames[index];
							 | 
						||
| 
								 | 
							
													}
							 | 
						||
| 
								 | 
							
													EditorGUILayout.EndHorizontal();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
													// Parameter
							 | 
						||
| 
								 | 
							
													t.receivers[i].parameter = (EasyTouchTrigger.ETTParameter) EditorGUILayout.EnumPopup("Parameter to send",t.receivers[i].parameter);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
													HTGuiTools.EndGroup();
							 | 
						||
| 
								 | 
							
												}
							 | 
						||
| 
								 | 
							
												i++;
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
										else{
							 | 
						||
| 
								 | 
							
											HTGuiTools.BeginGroup();
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
										HTGuiTools.EndGroup(false);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										if (!GUILayout.Toggle(true,"+","ObjectPickerTab")){
							 | 
						||
| 
								 | 
							
											t.AddTrigger( ev);
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										GUILayout.Space(5f);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									private void AddEvent(EasyTouch.EvtType ev, EasyTouchTrigger t){
							 | 
						||
| 
								 | 
							
										EasyTouchTrigger.EasyTouchReceiver r = new EasyTouchTrigger.EasyTouchReceiver();
							 | 
						||
| 
								 | 
							
										r.enable = true;
							 | 
						||
| 
								 | 
							
										r.restricted = true;
							 | 
						||
| 
								 | 
							
										r.eventName = ev;
							 | 
						||
| 
								 | 
							
										r.gameObject = t.gameObject;
							 | 
						||
| 
								 | 
							
										t.receivers.Add( r );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									private string[] GetMethod(GameObject obj){
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										List<string> methodName = new List<string>();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										Component[] allComponents = obj.GetComponents<Component>();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										if (allComponents.Length>0){
							 | 
						||
| 
								 | 
							
											foreach( Component comp in allComponents){
							 | 
						||
| 
								 | 
							
												if (comp!=null){
							 | 
						||
| 
								 | 
							
												if (comp.GetType().IsSubclassOf( typeof(MonoBehaviour))){
							 | 
						||
| 
								 | 
							
													MethodInfo[] methodInfos = comp.GetType().GetMethods();
							 | 
						||
| 
								 | 
							
													foreach( MethodInfo methodInfo in methodInfos){
							 | 
						||
| 
								 | 
							
														if ((methodInfo.DeclaringType.Namespace == null) || (!methodInfo.DeclaringType.Namespace.Contains("Unity") && !methodInfo.DeclaringType.Namespace.Contains("System"))){
							 | 
						||
| 
								 | 
							
															if (methodInfo.IsPublic){
							 | 
						||
| 
								 | 
							
																methodName.Add( methodInfo.Name );
							 | 
						||
| 
								 | 
							
															}
							 | 
						||
| 
								 | 
							
														}
							 | 
						||
| 
								 | 
							
														
							 | 
						||
| 
								 | 
							
													}
							 | 
						||
| 
								 | 
							
												}
							 | 
						||
| 
								 | 
							
												}
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
										//
							 | 
						||
| 
								 | 
							
										return methodName.ToArray();
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 |