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.
65 lines
2.8 KiB
65 lines
2.8 KiB
using Unity.VisualScripting; |
|
using UnityEditor; |
|
using UnityEngine; |
|
|
|
namespace UDE_HAND_INTERACTION |
|
{ |
|
[CustomEditor(typeof(FingerPressInteractable))] |
|
public class FingerPressInteractableEditor : EditorUtils |
|
{ |
|
private FingerPressInteractable _interactable; |
|
|
|
private SerializedProperty _surfaceProperty; |
|
|
|
private static readonly float DRAW_RADIUS = 0.02f; |
|
|
|
private void Awake() |
|
{ |
|
_interactable = target as FingerPressInteractable; |
|
_surfaceProperty = serializedObject.FindProperty("_surfacePatch"); |
|
} |
|
|
|
public void OnSceneGUI() |
|
{ |
|
Handles.color = new Color(0f, 1f, 1f, 0.5f); |
|
ISurfacePatch surfacePatch = _surfaceProperty.objectReferenceValue.GetComponent<ISurfacePatch>(); |
|
|
|
if (surfacePatch == null) |
|
{ |
|
return; |
|
} |
|
|
|
Transform triggerPlaneTransform = surfacePatch.Transform; |
|
|
|
if (triggerPlaneTransform == null) |
|
{ |
|
return; |
|
} |
|
|
|
Vector3 touchPoint = triggerPlaneTransform.position - triggerPlaneTransform.forward * _interactable.EnterHoverNormal; |
|
surfacePatch.ClosestSurfacePoint(touchPoint, out SurfaceHit hit); |
|
Vector3 proximalPoint = hit.Point; |
|
|
|
Handles.DrawSolidDisc(touchPoint, triggerPlaneTransform.forward, DRAW_RADIUS); |
|
Handles.DrawLine(touchPoint, proximalPoint, 2); |
|
Handles.DrawLine(proximalPoint - triggerPlaneTransform.right * DRAW_RADIUS, proximalPoint + triggerPlaneTransform.right * DRAW_RADIUS, 2); |
|
Handles.DrawLine(proximalPoint - triggerPlaneTransform.up * DRAW_RADIUS, proximalPoint + triggerPlaneTransform.up * DRAW_RADIUS, 2); |
|
} |
|
|
|
public override void OnInspectorGUI() |
|
{ |
|
_interactable._enterHoverNormal = EditorGUILayout.FloatField("Hover Detect Distance", _interactable._enterHoverNormal); |
|
_interactable._exitHoverNormal = EditorGUILayout.FloatField("Hover Ignore Distance", _interactable._exitHoverNormal); |
|
GUILayout.Space(5); |
|
_interactable._enterHoverTangent = EditorGUILayout.FloatField("Surface Ext Hover Detect", _interactable._enterHoverTangent); |
|
_interactable._exitHoverTangent = EditorGUILayout.FloatField("Surface Ext Hover Ignore", _interactable._exitHoverTangent); |
|
GUILayout.Space(5); |
|
_interactable._cancelSelectNormal = EditorGUILayout.FloatField("Interact Disable Distance", _interactable._cancelSelectNormal); |
|
_interactable._cancelSelectTangent = EditorGUILayout.FloatField("Surface Ext Interact Disable", _interactable._cancelSelectTangent); |
|
if (GUI.changed) |
|
{ |
|
EditorUtility.SetDirty(_interactable); |
|
} |
|
} |
|
} |
|
}
|
|
|