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