HumanoidControl_Free/Editor/Tools/InteractionPointer_Editor.cs
Pascal Serrarens 17741d862a First commit
2022-01-12 10:50:57 +01:00

195 lines
9.3 KiB
C#

using UnityEditor;
using UnityEngine;
namespace Passer {
[CustomEditor(typeof(InteractionPointer))]
public class InteractionPointer_Editor : Editor {
protected InteractionPointer pointer;
protected SerializedProperty timedClickProp;
protected SerializedProperty pointerModeProp;
protected SerializedProperty maxDistanceProp;
protected SerializedProperty resolutionProp;
protected SerializedProperty speedProp;
protected SerializedProperty radiusProp;
#region Enable
public virtual void OnEnable() {
pointer = (InteractionPointer)target;
timedClickProp = serializedObject.FindProperty("timedClick");
pointerModeProp = serializedObject.FindProperty("rayType");
maxDistanceProp = serializedObject.FindProperty("maxDistance");
resolutionProp = serializedObject.FindProperty("resolution");
speedProp = serializedObject.FindProperty("speed");
radiusProp = serializedObject.FindProperty("radius");
InitEvents();
}
#endregion
#region Inspector
public override void OnInspectorGUI() {
serializedObject.Update();
pointer.active = EditorGUILayout.Toggle("Active", pointer.active);
timedClickProp.floatValue = EditorGUILayout.FloatField("Timed Click", timedClickProp.floatValue);
pointer.focusPointObj = (GameObject)EditorGUILayout.ObjectField("Focus Point Object", pointer.focusPointObj, typeof(GameObject), true);
EditorGUILayout.ObjectField("Object in Focus", pointer.objectInFocus, typeof(GameObject), true);
pointerModeProp.intValue = (int)(InteractionPointer.RayType)EditorGUILayout.EnumPopup("Mode", (InteractionPointer.RayType)pointerModeProp.intValue);
if (pointer.rayType == InteractionPointer.RayType.Straight) {
maxDistanceProp.floatValue = EditorGUILayout.FloatField("Maximum Distance", maxDistanceProp.floatValue);
}
if (pointer.rayType == InteractionPointer.RayType.Bezier){
maxDistanceProp.floatValue = EditorGUILayout.FloatField("Maximum Distance", maxDistanceProp.floatValue);
EditorGUI.BeginDisabledGroup(Application.isPlaying);
resolutionProp.floatValue = EditorGUILayout.FloatField("Resolution", resolutionProp.floatValue);
EditorGUI.EndDisabledGroup();
}
if (pointer.rayType == InteractionPointer.RayType.Gravity) {
speedProp.floatValue = EditorGUILayout.FloatField("Speed", speedProp.floatValue);
resolutionProp.floatValue = EditorGUILayout.FloatField("Resolution", resolutionProp.floatValue);
}
else if (pointer.rayType == InteractionPointer.RayType.SphereCast) {
maxDistanceProp.floatValue = EditorGUILayout.FloatField("Maximum Distance", maxDistanceProp.floatValue);
radiusProp.floatValue = EditorGUILayout.FloatField("Radius", radiusProp.floatValue);
}
EventsInspector();
serializedObject.ApplyModifiedProperties();
}
#region Events
protected SerializedProperty focusEventsProp;
protected SerializedProperty focusPointEventsProp;
protected SerializedProperty clickEventsProp;
protected void InitEvents() {
focusEventsProp = serializedObject.FindProperty("focusEvent");
pointer.focusEvent.id = 0;
focusPointEventsProp = serializedObject.FindProperty("focusPointEvent");
pointer.focusPointEvent.id = 1;
clickEventsProp = serializedObject.FindProperty("clickEvent");
pointer.clickEvent.id = 2;
}
protected bool showEvents;
protected int selectedEventSource = -1;
protected int selectedEvent;
protected void EventsInspector() {
showEvents = EditorGUILayout.Foldout(showEvents, "Events", true);
if (showEvents) {
EditorGUI.indentLevel++;
GameObjectEvent_Editor.EventInspector(focusEventsProp, pointer.focusEvent, ref selectedEventSource, ref selectedEvent);
Vector3Event_Editor.EventInspector(focusPointEventsProp, pointer.focusPointEvent, ref selectedEventSource, ref selectedEvent);
GameObjectEvent_Editor.EventInspector(clickEventsProp, pointer.clickEvent, ref selectedEventSource, ref selectedEvent);
//EditorGUILayout.BeginHorizontal();
////Labels
//EditorGUILayout.BeginVertical(GUILayout.MinWidth(110));
//GUILayout.Space(3);
//EditorGUILayout.LabelField("Focus", GUILayout.Width(110));
//if (pointer.focusEvent.events == null || pointer.focusEvent.events.Count == 0)
// pointer.focusEvent.events.Add(new GameObjectEvent(Event.Type.Never));
//for (int i = 1; i < pointer.focusEvent.events.Count; i++) {
// GUILayout.Space(1);
// EditorGUILayout.LabelField(" ", GUILayout.Width(140));
//}
//GUILayout.Space(1);
//EditorGUILayout.LabelField("Focus Point", GUILayout.Width(110));
//if (pointer.focusPointEvent.events == null || pointer.focusPointEvent.events.Count == 0)
// pointer.focusPointEvent.events.Add(new Vector3Event(Event.Type.Never));
//for (int i = 1; i < pointer.focusPointEvent.events.Count; i++) {
// GUILayout.Space(1);
// EditorGUILayout.LabelField(" ", GUILayout.Width(140));
//}
//GUILayout.Space(1);
//EditorGUILayout.LabelField("Click", GUILayout.Width(110));
//if (pointer.clickEvent.events == null || pointer.clickEvent.events.Count == 0)
// pointer.clickEvent.events.Add(new GameObjectEvent(Event.Type.Never));
//for (int i = 1; i < pointer.clickEvent.events.Count; i++) {
// GUILayout.Space(1);
// EditorGUILayout.LabelField(" ", GUILayout.Width(140));
//}
//EditorGUILayout.EndVertical();
//// Buttons
//int eventCount =
// pointer.focusEvent.events.Count +
// pointer.focusPointEvent.events.Count +
// pointer.clickEvent.events.Count;
//string[] buttonTexts = new string[eventCount];
//int[] eventListIndex = new int[eventCount];
//SerializedProperty[] eventListProps = new SerializedProperty[eventCount];
//int index = 0;
//SerializedProperty eventsProp = focusEventsProp.FindPropertyRelative("events");
//for (int i = 0; i < pointer.focusEvent.events.Count; i++) {
// buttonTexts[index] = Event.GetInputButtonLabel(pointer.focusEvent.events[i]);
// eventListIndex[index] = 0;
// eventListProps[index] = eventsProp.GetArrayElementAtIndex(i);
// index++;
//}
//eventsProp = focusPointEventsProp.FindPropertyRelative("events");
//for (int i = 0; i < pointer.focusPointEvent.events.Count; i++) {
// buttonTexts[index] = Event.GetInputButtonLabel(pointer.focusPointEvent.events[i]);
// eventListIndex[index] = 1;
// eventListProps[index] = eventsProp.GetArrayElementAtIndex(i);
// index++;
//}
//eventsProp = clickEventsProp.FindPropertyRelative("events");
//for (int i = 0; i < pointer.clickEvent.events.Count; i++) {
// buttonTexts[index] = Event.GetInputButtonLabel(pointer.clickEvent.events[i]);
// eventListIndex[index] = 2;
// eventListProps[index] = eventsProp.GetArrayElementAtIndex(i);
// index++;
//}
//int oldFontSize = GUI.skin.button.fontSize;
//GUI.skin.button.fontSize = 9;
//if (selectedEvent >= buttonTexts.Length)
// selectedEvent = -1;
//selectedEvent = GUILayout.SelectionGrid(selectedEvent, buttonTexts, 1);
//GUI.skin.button.fontSize = oldFontSize;
//EditorGUILayout.EndHorizontal();
//// Details
//if (selectedEvent >= 0)
// EventDetails(eventListIndex[selectedEvent], eventListProps[selectedEvent]);
EditorGUI.indentLevel--;
}
}
//protected void EventDetails(int selectedEventList, SerializedProperty eventProp) {
// switch (selectedEventList) {
// case 0:
// GameObjectEvent_Editor.EventListDetails(pointer.focusEvents, eventProp);
// break;
// case 1:
// Vector3Event_Editor.EventListDetails(pointer.focusPointEvents, eventProp);
// break;
// case 2:
// GameObjectEvent_Editor.EventListDetails(pointer.clickEvents, eventProp);
// break;
// }
//}
#endregion
#endregion
}
}