You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
106 lines
5.1 KiB
106 lines
5.1 KiB
2 months ago
|
using UnityEditor;
|
||
|
using UnityEngine;
|
||
|
|
||
|
namespace HighlightPlus {
|
||
|
[CustomEditor(typeof(HighlightTrigger))]
|
||
|
public class HighlightTriggerEditor : Editor {
|
||
|
|
||
|
SerializedProperty highlightOnHover, triggerMode, raycastCamera, raycastSource, raycastLayerMask;
|
||
|
SerializedProperty minDistance, maxDistance, respectUI, volumeLayerMask;
|
||
|
SerializedProperty selectOnClick, selectedProfile, selectedAndHighlightedProfile, singleSelection, toggleOnClick, keepSelection;
|
||
|
HighlightTrigger trigger;
|
||
|
|
||
|
void OnEnable() {
|
||
|
highlightOnHover = serializedObject.FindProperty("highlightOnHover");
|
||
|
triggerMode = serializedObject.FindProperty("triggerMode");
|
||
|
raycastCamera = serializedObject.FindProperty("raycastCamera");
|
||
|
raycastSource = serializedObject.FindProperty("raycastSource");
|
||
|
raycastLayerMask = serializedObject.FindProperty("raycastLayerMask");
|
||
|
minDistance = serializedObject.FindProperty("minDistance");
|
||
|
maxDistance = serializedObject.FindProperty("maxDistance");
|
||
|
respectUI = serializedObject.FindProperty("respectUI");
|
||
|
volumeLayerMask = serializedObject.FindProperty("volumeLayerMask");
|
||
|
selectOnClick = serializedObject.FindProperty("selectOnClick");
|
||
|
selectedProfile = serializedObject.FindProperty("selectedProfile");
|
||
|
selectedAndHighlightedProfile = serializedObject.FindProperty("selectedAndHighlightedProfile");
|
||
|
singleSelection = serializedObject.FindProperty("singleSelection");
|
||
|
toggleOnClick = serializedObject.FindProperty("toggle");
|
||
|
keepSelection = serializedObject.FindProperty("keepSelection");
|
||
|
trigger = (HighlightTrigger)target;
|
||
|
trigger.Init();
|
||
|
}
|
||
|
|
||
|
public override void OnInspectorGUI() {
|
||
|
|
||
|
serializedObject.Update ();
|
||
|
|
||
|
if (trigger.triggerMode == TriggerMode.RaycastOnThisObjectAndChildren) {
|
||
|
if (!trigger.hasColliders && !trigger.hasColliders2D) {
|
||
|
EditorGUILayout.HelpBox ("No collider found on this object or any of its children. Add colliders to allow automatic highlighting.", MessageType.Warning);
|
||
|
}
|
||
|
} else {
|
||
|
#if ENABLE_INPUT_SYSTEM
|
||
|
if (trigger.triggerMode == TriggerMode.ColliderEventsOnlyOnThisObject) {
|
||
|
EditorGUILayout.HelpBox("This trigger mode is not compatible with the new input system.", MessageType.Error);
|
||
|
}
|
||
|
#endif
|
||
|
if (trigger.GetComponent<Collider>() == null && trigger.GetComponent<Collider2D>() == null) {
|
||
|
EditorGUILayout.HelpBox ("No collider found on this object. Add a collider to allow automatic highlighting.", MessageType.Error);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
EditorGUILayout.PropertyField(triggerMode);
|
||
|
switch (trigger.triggerMode) {
|
||
|
case TriggerMode.RaycastOnThisObjectAndChildren:
|
||
|
EditorGUI.indentLevel++;
|
||
|
EditorGUILayout.PropertyField(raycastCamera);
|
||
|
EditorGUILayout.PropertyField(raycastSource);
|
||
|
EditorGUILayout.PropertyField(raycastLayerMask);
|
||
|
EditorGUILayout.PropertyField(minDistance);
|
||
|
EditorGUILayout.PropertyField(maxDistance);
|
||
|
EditorGUI.indentLevel--;
|
||
|
break;
|
||
|
case TriggerMode.Volume:
|
||
|
EditorGUI.indentLevel++;
|
||
|
EditorGUILayout.PropertyField(volumeLayerMask);
|
||
|
EditorGUI.indentLevel--;
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
if (trigger.triggerMode != TriggerMode.Volume) {
|
||
|
EditorGUILayout.PropertyField(respectUI);
|
||
|
}
|
||
|
EditorGUILayout.PropertyField(highlightOnHover);
|
||
|
EditorGUILayout.PropertyField(selectOnClick);
|
||
|
if (selectOnClick.boolValue) {
|
||
|
EditorGUI.indentLevel++;
|
||
|
EditorGUILayout.PropertyField(selectedProfile);
|
||
|
EditorGUILayout.PropertyField(selectedAndHighlightedProfile);
|
||
|
EditorGUILayout.PropertyField(singleSelection);
|
||
|
EditorGUILayout.PropertyField(toggleOnClick);
|
||
|
if (trigger.triggerMode == TriggerMode.RaycastOnThisObjectAndChildren) {
|
||
|
EditorGUI.BeginChangeCheck();
|
||
|
EditorGUILayout.PropertyField(keepSelection);
|
||
|
if (EditorGUI.EndChangeCheck()) {
|
||
|
// Update all triggers
|
||
|
HighlightTrigger[] triggers = Misc.FindObjectsOfType<HighlightTrigger>();
|
||
|
foreach(HighlightTrigger t in triggers) {
|
||
|
if (t.keepSelection != keepSelection.boolValue) {
|
||
|
t.keepSelection = keepSelection.boolValue;
|
||
|
EditorUtility.SetDirty(t);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
EditorGUI.indentLevel--;
|
||
|
}
|
||
|
|
||
|
if (serializedObject.ApplyModifiedProperties()) {
|
||
|
trigger.Init();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|