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();
 | |
| 	}
 | |
| 
 | |
| }
 | |
| 
 |