477 lines
14 KiB
C#
477 lines
14 KiB
C#
using UnityEngine;
|
|
using System.Collections;
|
|
|
|
#if UNITY_EDITOR
|
|
using UnityEditor;
|
|
|
|
[CustomEditor (typeof(eventTriggerSystem))]
|
|
[CanEditMultipleObjects]
|
|
public class eventTriggerSystemEditor : Editor
|
|
{
|
|
SerializedProperty useSameFunctionInList;
|
|
SerializedProperty sameFunctionList;
|
|
SerializedProperty useSameObjectToCall;
|
|
SerializedProperty callThisObject;
|
|
SerializedProperty sameObjectToCall;
|
|
SerializedProperty useObjectToTrigger;
|
|
SerializedProperty objectNeededToTrigger;
|
|
SerializedProperty useTagToTrigger;
|
|
SerializedProperty useTagList;
|
|
SerializedProperty tagList;
|
|
SerializedProperty tagNeededToTrigger;
|
|
SerializedProperty dontUseDelay;
|
|
SerializedProperty useSameDelay;
|
|
SerializedProperty generalDelay;
|
|
SerializedProperty useRandomDelay;
|
|
SerializedProperty randomDelayRange;
|
|
SerializedProperty triggeredByButton;
|
|
SerializedProperty triggerEventType;
|
|
SerializedProperty useLayerMask;
|
|
SerializedProperty layerMask;
|
|
SerializedProperty justCallOnTrigger;
|
|
SerializedProperty callFunctionEveryTimeTriggered;
|
|
SerializedProperty eventTriggered;
|
|
SerializedProperty coroutineActive;
|
|
SerializedProperty setParentToNull;
|
|
SerializedProperty triggerEventAtStart;
|
|
SerializedProperty eventList;
|
|
SerializedProperty enterEventList;
|
|
SerializedProperty exitEventList;
|
|
|
|
SerializedProperty loopEventAtTheEndEnabled;
|
|
|
|
eventTriggerSystem manager;
|
|
bool expanded;
|
|
|
|
GUIStyle buttonStyle = new GUIStyle ();
|
|
|
|
void OnEnable ()
|
|
{
|
|
useSameFunctionInList = serializedObject.FindProperty ("useSameFunctionInList");
|
|
sameFunctionList = serializedObject.FindProperty ("sameFunctionList");
|
|
useSameObjectToCall = serializedObject.FindProperty ("useSameObjectToCall");
|
|
callThisObject = serializedObject.FindProperty ("callThisObject");
|
|
sameObjectToCall = serializedObject.FindProperty ("sameObjectToCall");
|
|
useObjectToTrigger = serializedObject.FindProperty ("useObjectToTrigger");
|
|
objectNeededToTrigger = serializedObject.FindProperty ("objectNeededToTrigger");
|
|
useTagToTrigger = serializedObject.FindProperty ("useTagToTrigger");
|
|
useTagList = serializedObject.FindProperty ("useTagList");
|
|
tagList = serializedObject.FindProperty ("tagList");
|
|
tagNeededToTrigger = serializedObject.FindProperty ("tagNeededToTrigger");
|
|
dontUseDelay = serializedObject.FindProperty ("dontUseDelay");
|
|
useSameDelay = serializedObject.FindProperty ("useSameDelay");
|
|
generalDelay = serializedObject.FindProperty ("generalDelay");
|
|
useRandomDelay = serializedObject.FindProperty ("useRandomDelay");
|
|
randomDelayRange = serializedObject.FindProperty ("randomDelayRange");
|
|
triggeredByButton = serializedObject.FindProperty ("triggeredByButton");
|
|
triggerEventType = serializedObject.FindProperty ("triggerEventType");
|
|
useLayerMask = serializedObject.FindProperty ("useLayerMask");
|
|
layerMask = serializedObject.FindProperty ("layerMask");
|
|
justCallOnTrigger = serializedObject.FindProperty ("justCallOnTrigger");
|
|
callFunctionEveryTimeTriggered = serializedObject.FindProperty ("callFunctionEveryTimeTriggered");
|
|
eventTriggered = serializedObject.FindProperty ("eventTriggered");
|
|
coroutineActive = serializedObject.FindProperty ("coroutineActive");
|
|
setParentToNull = serializedObject.FindProperty ("setParentToNull");
|
|
triggerEventAtStart = serializedObject.FindProperty ("triggerEventAtStart");
|
|
eventList = serializedObject.FindProperty ("eventList");
|
|
enterEventList = serializedObject.FindProperty ("enterEventList");
|
|
exitEventList = serializedObject.FindProperty ("exitEventList");
|
|
|
|
loopEventAtTheEndEnabled = serializedObject.FindProperty ("loopEventAtTheEndEnabled");
|
|
|
|
manager = (eventTriggerSystem)target;
|
|
}
|
|
|
|
public override void OnInspectorGUI ()
|
|
{
|
|
GUILayout.BeginVertical (GUILayout.Height (30));
|
|
|
|
EditorGUILayout.Space ();
|
|
|
|
buttonStyle = new GUIStyle (GUI.skin.button);
|
|
|
|
buttonStyle.fontStyle = FontStyle.Bold;
|
|
buttonStyle.fontSize = 12;
|
|
|
|
GUILayout.BeginVertical ("Use Same Function To Call Settings", "window");
|
|
EditorGUILayout.PropertyField (useSameFunctionInList);
|
|
if (useSameFunctionInList.boolValue) {
|
|
|
|
EditorGUILayout.Space ();
|
|
|
|
GUILayout.BeginVertical ("Same Function List", "window");
|
|
showSimpleList (sameFunctionList, "Function");
|
|
GUILayout.EndVertical ();
|
|
|
|
EditorGUILayout.Space ();
|
|
|
|
}
|
|
GUILayout.EndVertical ();
|
|
|
|
EditorGUILayout.Space ();
|
|
|
|
GUILayout.BeginVertical ("Use Same Object To Call Settings", "window");
|
|
EditorGUILayout.PropertyField (useSameObjectToCall);
|
|
if (useSameObjectToCall.boolValue) {
|
|
EditorGUILayout.PropertyField (callThisObject);
|
|
if (!callThisObject.boolValue) {
|
|
EditorGUILayout.PropertyField (sameObjectToCall);
|
|
}
|
|
}
|
|
GUILayout.EndVertical ();
|
|
|
|
EditorGUILayout.Space ();
|
|
|
|
GUILayout.BeginVertical ("Use Object To Trigger Settings", "window");
|
|
EditorGUILayout.PropertyField (useObjectToTrigger);
|
|
if (useObjectToTrigger.boolValue) {
|
|
EditorGUILayout.PropertyField (objectNeededToTrigger);
|
|
}
|
|
GUILayout.EndVertical ();
|
|
|
|
EditorGUILayout.Space ();
|
|
|
|
GUILayout.BeginVertical ("Tag Settings", "window");
|
|
EditorGUILayout.PropertyField (useTagToTrigger);
|
|
if (useTagToTrigger.boolValue) {
|
|
EditorGUILayout.PropertyField (useTagList);
|
|
if (useTagList.boolValue) {
|
|
showSimpleList (tagList, "Tag");
|
|
} else {
|
|
EditorGUILayout.PropertyField (tagNeededToTrigger);
|
|
}
|
|
}
|
|
GUILayout.EndVertical ();
|
|
|
|
EditorGUILayout.Space ();
|
|
|
|
GUILayout.BeginVertical ("Same Delay Settings", "window");
|
|
EditorGUILayout.PropertyField (dontUseDelay);
|
|
|
|
EditorGUILayout.PropertyField (useSameDelay);
|
|
if (useSameDelay.boolValue) {
|
|
EditorGUILayout.PropertyField (generalDelay);
|
|
|
|
EditorGUILayout.PropertyField (useRandomDelay);
|
|
if (useRandomDelay.boolValue) {
|
|
EditorGUILayout.PropertyField (randomDelayRange);
|
|
}
|
|
}
|
|
GUILayout.EndVertical ();
|
|
|
|
EditorGUILayout.Space ();
|
|
|
|
GUILayout.BeginVertical ("Trigger Settings", "window");
|
|
EditorGUILayout.PropertyField (triggeredByButton);
|
|
if (!triggeredByButton.boolValue) {
|
|
EditorGUILayout.PropertyField (triggerEventType);
|
|
}
|
|
GUILayout.EndVertical ();
|
|
|
|
EditorGUILayout.Space ();
|
|
|
|
GUILayout.BeginVertical ("Layer Settings", "window");
|
|
EditorGUILayout.PropertyField (useLayerMask);
|
|
if (useLayerMask.boolValue) {
|
|
EditorGUILayout.PropertyField (layerMask);
|
|
}
|
|
GUILayout.EndVertical ();
|
|
|
|
EditorGUILayout.Space ();
|
|
|
|
GUILayout.BeginVertical ("Other Settings", "window");
|
|
EditorGUILayout.PropertyField (justCallOnTrigger);
|
|
EditorGUILayout.PropertyField (callFunctionEveryTimeTriggered);
|
|
EditorGUILayout.PropertyField (setParentToNull);
|
|
EditorGUILayout.PropertyField (triggerEventAtStart);
|
|
EditorGUILayout.PropertyField (loopEventAtTheEndEnabled);
|
|
GUILayout.EndVertical ();
|
|
|
|
EditorGUILayout.Space ();
|
|
|
|
GUILayout.BeginVertical ("Debug State", "window");
|
|
if (!callFunctionEveryTimeTriggered.boolValue) {
|
|
GUILayout.Label ("Event Triggered \t" + eventTriggered.boolValue);
|
|
}
|
|
GUILayout.Label ("Coroutine Active \t" + coroutineActive.boolValue);
|
|
|
|
EditorGUILayout.Space ();
|
|
|
|
if (GUILayout.Button ("Activate Event (Ingame)", buttonStyle)) {
|
|
if (Application.isPlaying) {
|
|
manager.activateEvent ();
|
|
}
|
|
}
|
|
|
|
GUILayout.EndVertical ();
|
|
|
|
EditorGUILayout.Space ();
|
|
|
|
if (triggerEventType.enumValueIndex == 0) {
|
|
GUILayout.BeginVertical ("Event Trigger List", "window");
|
|
showList (eventList, "Event Trigger List");
|
|
GUILayout.EndVertical ();
|
|
} else if (triggerEventType.enumValueIndex == 1) {
|
|
GUILayout.BeginVertical ("Exit Event Trigger List", "window");
|
|
showList (exitEventList, "Exit Event Trigger List");
|
|
GUILayout.EndVertical ();
|
|
} else {
|
|
GUILayout.BeginVertical ("Enter Event Trigger List", "window");
|
|
showList (enterEventList, "Enter Event Trigger List");
|
|
GUILayout.EndVertical ();
|
|
|
|
EditorGUILayout.Space ();
|
|
|
|
GUILayout.BeginVertical ("Exit Event Trigger List", "window");
|
|
showList (exitEventList, "Exit Event Trigger List");
|
|
GUILayout.EndVertical ();
|
|
}
|
|
|
|
EditorGUILayout.Space ();
|
|
|
|
GUILayout.EndVertical ();
|
|
if (GUI.changed) {
|
|
serializedObject.ApplyModifiedProperties ();
|
|
}
|
|
}
|
|
|
|
void showEventInfo (SerializedProperty list)
|
|
{
|
|
GUILayout.BeginVertical ("box");
|
|
EditorGUILayout.PropertyField (list.FindPropertyRelative ("name"));
|
|
|
|
if (!useSameObjectToCall.boolValue) {
|
|
EditorGUILayout.PropertyField (list.FindPropertyRelative ("objectToCall"));
|
|
}
|
|
|
|
EditorGUILayout.Space ();
|
|
|
|
GUILayout.BeginVertical ("Event Settings", "window");
|
|
EditorGUILayout.PropertyField (list.FindPropertyRelative ("useEventFunction"));
|
|
if (!list.FindPropertyRelative ("useEventFunction").boolValue) {
|
|
|
|
if (!useSameFunctionInList.boolValue) {
|
|
showSimpleList (list.FindPropertyRelative ("functionNameList"), "Function");
|
|
|
|
EditorGUILayout.PropertyField (list.FindPropertyRelative ("useBroadcastMessage"));
|
|
if (list.FindPropertyRelative ("useBroadcastMessage").boolValue) {
|
|
showSimpleList (list.FindPropertyRelative ("broadcastMessageStringList"), "Message");
|
|
}
|
|
}
|
|
} else {
|
|
EditorGUILayout.Space ();
|
|
|
|
EditorGUILayout.PropertyField (list.FindPropertyRelative ("eventFunction"));
|
|
}
|
|
GUILayout.EndVertical ();
|
|
|
|
if (!useSameDelay.boolValue && !dontUseDelay.boolValue) {
|
|
|
|
EditorGUILayout.Space ();
|
|
|
|
GUILayout.BeginVertical ("Delay Settings", "window");
|
|
EditorGUILayout.PropertyField (list.FindPropertyRelative ("secondsDelay"));
|
|
|
|
EditorGUILayout.PropertyField (list.FindPropertyRelative ("useRandomDelay"));
|
|
if (list.FindPropertyRelative ("useRandomDelay").boolValue) {
|
|
EditorGUILayout.PropertyField (list.FindPropertyRelative ("randomDelayRange"));
|
|
}
|
|
GUILayout.EndVertical ();
|
|
}
|
|
|
|
EditorGUILayout.Space ();
|
|
|
|
GUILayout.BeginVertical ("Send Object Detected Settings", "window");
|
|
EditorGUILayout.PropertyField (list.FindPropertyRelative ("sendGameObject"));
|
|
if (list.FindPropertyRelative ("sendGameObject").boolValue) {
|
|
EditorGUILayout.PropertyField (list.FindPropertyRelative ("objectToSend"));
|
|
}
|
|
EditorGUILayout.PropertyField (list.FindPropertyRelative ("sendObjectDetected"));
|
|
|
|
if (list.FindPropertyRelative ("sendObjectDetected").boolValue) {
|
|
EditorGUILayout.PropertyField (list.FindPropertyRelative ("sendObjectDetectedByEvent"));
|
|
if (list.FindPropertyRelative ("sendObjectDetectedByEvent").boolValue) {
|
|
|
|
EditorGUILayout.Space ();
|
|
|
|
EditorGUILayout.PropertyField (list.FindPropertyRelative ("eventToSendObjectDetected"));
|
|
} else {
|
|
if (list.FindPropertyRelative ("sendObjectDetected").boolValue) {
|
|
EditorGUILayout.PropertyField (list.FindPropertyRelative ("sendObjectDetectedFunction"));
|
|
}
|
|
}
|
|
}
|
|
GUILayout.EndVertical ();
|
|
|
|
EditorGUILayout.Space ();
|
|
|
|
GUILayout.BeginVertical ("Remote Events Settings", "window");
|
|
EditorGUILayout.PropertyField (list.FindPropertyRelative ("useRemoteEvent"));
|
|
if (list.FindPropertyRelative ("useRemoteEvent").boolValue) {
|
|
|
|
EditorGUILayout.Space ();
|
|
|
|
showSimpleList (list.FindPropertyRelative ("remoteEventNameList"), "Remote Event");
|
|
}
|
|
GUILayout.EndVertical ();
|
|
GUILayout.EndVertical ();
|
|
}
|
|
|
|
void showList (SerializedProperty list, string listName)
|
|
{
|
|
EditorGUILayout.Space ();
|
|
|
|
if (GUILayout.Button ("Show/Hide " + listName, buttonStyle)) {
|
|
list.isExpanded = !list.isExpanded;
|
|
}
|
|
|
|
EditorGUILayout.Space ();
|
|
|
|
if (list.isExpanded) {
|
|
|
|
EditorGUILayout.Space ();
|
|
|
|
EditorGUILayout.Space ();
|
|
|
|
GUILayout.Label ("Number Of Events: \t" + list.arraySize);
|
|
|
|
EditorGUILayout.Space ();
|
|
|
|
GUILayout.BeginHorizontal ();
|
|
if (GUILayout.Button ("Add Event")) {
|
|
list.arraySize++;
|
|
}
|
|
if (GUILayout.Button ("Clear")) {
|
|
list.arraySize = 0;
|
|
}
|
|
GUILayout.EndHorizontal ();
|
|
|
|
EditorGUILayout.Space ();
|
|
|
|
GUILayout.BeginHorizontal ();
|
|
if (GUILayout.Button ("Expand All")) {
|
|
for (int i = 0; i < list.arraySize; i++) {
|
|
list.GetArrayElementAtIndex (i).isExpanded = true;
|
|
}
|
|
}
|
|
if (GUILayout.Button ("Collapse All")) {
|
|
for (int i = 0; i < list.arraySize; i++) {
|
|
list.GetArrayElementAtIndex (i).isExpanded = false;
|
|
}
|
|
}
|
|
GUILayout.EndHorizontal ();
|
|
|
|
EditorGUILayout.Space ();
|
|
|
|
for (int i = 0; i < list.arraySize; i++) {
|
|
expanded = false;
|
|
GUILayout.BeginHorizontal ();
|
|
GUILayout.BeginHorizontal ("box");
|
|
|
|
EditorGUILayout.Space ();
|
|
|
|
if (i < list.arraySize && i >= 0) {
|
|
EditorGUILayout.BeginVertical ();
|
|
EditorGUILayout.PropertyField (list.GetArrayElementAtIndex (i), false);
|
|
if (list.GetArrayElementAtIndex (i).isExpanded) {
|
|
expanded = true;
|
|
showEventInfo (list.GetArrayElementAtIndex (i));
|
|
}
|
|
|
|
EditorGUILayout.Space ();
|
|
|
|
GUILayout.EndVertical ();
|
|
}
|
|
GUILayout.EndHorizontal ();
|
|
if (expanded) {
|
|
GUILayout.BeginVertical ();
|
|
} else {
|
|
GUILayout.BeginHorizontal ();
|
|
}
|
|
if (GUILayout.Button ("x")) {
|
|
list.DeleteArrayElementAtIndex (i);
|
|
}
|
|
if (GUILayout.Button ("+")) {
|
|
manager.InsertEventAtIndex (i);
|
|
}
|
|
if (GUILayout.Button ("v")) {
|
|
if (i >= 0) {
|
|
list.MoveArrayElement (i, i + 1);
|
|
}
|
|
}
|
|
if (GUILayout.Button ("^")) {
|
|
if (i < list.arraySize) {
|
|
list.MoveArrayElement (i, i - 1);
|
|
}
|
|
}
|
|
if (expanded) {
|
|
GUILayout.EndVertical ();
|
|
} else {
|
|
GUILayout.EndHorizontal ();
|
|
}
|
|
GUILayout.EndHorizontal ();
|
|
}
|
|
}
|
|
}
|
|
|
|
void showSimpleList (SerializedProperty list, string listName)
|
|
{
|
|
EditorGUILayout.Space ();
|
|
|
|
if (GUILayout.Button ("Show/Hide " + listName, buttonStyle)) {
|
|
list.isExpanded = !list.isExpanded;
|
|
}
|
|
|
|
EditorGUILayout.Space ();
|
|
|
|
if (list.isExpanded) {
|
|
GUILayout.BeginVertical ("box");
|
|
|
|
EditorGUILayout.Space ();
|
|
|
|
GUILayout.Label ("Number Of " + listName + "s: \t" + list.arraySize);
|
|
|
|
EditorGUILayout.Space ();
|
|
|
|
GUILayout.BeginHorizontal ();
|
|
if (GUILayout.Button ("Add " + listName)) {
|
|
list.arraySize++;
|
|
}
|
|
if (GUILayout.Button ("Clear")) {
|
|
list.arraySize = 0;
|
|
}
|
|
GUILayout.EndHorizontal ();
|
|
|
|
EditorGUILayout.Space ();
|
|
|
|
for (int i = 0; i < list.arraySize; i++) {
|
|
GUILayout.BeginHorizontal ();
|
|
if (i < list.arraySize && i >= 0) {
|
|
EditorGUILayout.PropertyField (list.GetArrayElementAtIndex (i), new GUIContent ("", null, ""), false);
|
|
}
|
|
GUILayout.BeginHorizontal ();
|
|
if (GUILayout.Button ("x")) {
|
|
list.DeleteArrayElementAtIndex (i);
|
|
}
|
|
if (GUILayout.Button ("v")) {
|
|
if (i >= 0) {
|
|
list.MoveArrayElement (i, i + 1);
|
|
}
|
|
}
|
|
if (GUILayout.Button ("^")) {
|
|
if (i < list.arraySize) {
|
|
list.MoveArrayElement (i, i - 1);
|
|
}
|
|
}
|
|
GUILayout.EndHorizontal ();
|
|
GUILayout.EndHorizontal ();
|
|
|
|
EditorGUILayout.Space ();
|
|
|
|
}
|
|
GUILayout.EndVertical ();
|
|
}
|
|
}
|
|
}
|
|
#endif
|