From d2ab30e7a69bfe7efda63ae75812207377917bd3 Mon Sep 17 00:00:00 2001
From: miepzerino <o.skotnik@gmail.com>
Date: Sun, 30 Mar 2025 18:50:27 +0000
Subject: [PATCH] Merge branch 'Flexalon-UI-Layouts' into develop

---
 Assets/Flexalon/Editor/Interaction/FlexalonInteractableEditor.cs |  182 +++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 182 insertions(+), 0 deletions(-)

diff --git a/Assets/Flexalon/Editor/Interaction/FlexalonInteractableEditor.cs b/Assets/Flexalon/Editor/Interaction/FlexalonInteractableEditor.cs
new file mode 100644
index 0000000..077129f
--- /dev/null
+++ b/Assets/Flexalon/Editor/Interaction/FlexalonInteractableEditor.cs
@@ -0,0 +1,182 @@
+#if UNITY_PHYSICS
+
+using UnityEditor;
+using UnityEngine;
+
+namespace Flexalon.Editor
+{
+    [CustomEditor(typeof(FlexalonInteractable)), CanEditMultipleObjects]
+    public class FlexalonInteractableEditor : UnityEditor.Editor
+    {
+        private SerializedProperty _clickable;
+        private SerializedProperty _maxClickTime;
+        private SerializedProperty _draggable;
+        private SerializedProperty _interpolationSpeed;
+        private SerializedProperty _insertRadius;
+        private SerializedProperty _restriction;
+        private SerializedProperty _planeNormal;
+        private SerializedProperty _localSpaceRestriction;
+        private SerializedProperty _lineDirection;
+        private SerializedProperty _holdOffset;
+        private SerializedProperty _localSpaceOffset;
+        private SerializedProperty _rotateOnDrag;
+        private SerializedProperty _holdRotation;
+        private SerializedProperty _localSpaceRotation;
+        private SerializedProperty _hideCursor;
+        private SerializedProperty _handle;
+        private SerializedProperty _bounds;
+        private SerializedProperty _layerMask;
+        private SerializedProperty _clicked;
+        private SerializedProperty _hoverStart;
+        private SerializedProperty _hoverEnd;
+        private SerializedProperty _selectStart;
+        private SerializedProperty _selectEnd;
+        private SerializedProperty _dragStart;
+        private SerializedProperty _dragEnd;
+
+        private static bool _showDragOptions = true;
+        private static bool _showEvents = false;
+
+        void OnEnable()
+        {
+            _clickable = serializedObject.FindProperty("_clickable");
+            _maxClickTime = serializedObject.FindProperty("_maxClickTime");
+            _draggable = serializedObject.FindProperty("_draggable");
+            _interpolationSpeed = serializedObject.FindProperty("_interpolationSpeed");
+            _insertRadius = serializedObject.FindProperty("_insertRadius");
+            _restriction = serializedObject.FindProperty("_restriction");
+            _planeNormal = serializedObject.FindProperty("_planeNormal");
+            _localSpaceRestriction = serializedObject.FindProperty("_localSpaceRestriction");
+            _lineDirection = serializedObject.FindProperty("_lineDirection");
+            _holdOffset = serializedObject.FindProperty("_holdOffset");
+            _localSpaceOffset = serializedObject.FindProperty("_localSpaceOffset");
+            _rotateOnDrag = serializedObject.FindProperty("_rotateOnDrag");
+            _holdRotation = serializedObject.FindProperty("_holdRotation");
+            _localSpaceRotation = serializedObject.FindProperty("_localSpaceRotation");
+            _hideCursor = serializedObject.FindProperty("_hideCursor");
+            _handle = serializedObject.FindProperty("_handle");
+            _bounds = serializedObject.FindProperty("_bounds");
+            _layerMask = serializedObject.FindProperty("_layerMask");
+            _clicked = serializedObject.FindProperty("_clicked");
+            _hoverStart = serializedObject.FindProperty("_hoverStart");
+            _hoverEnd = serializedObject.FindProperty("_hoverEnd");
+            _selectStart = serializedObject.FindProperty("_selectStart");
+            _selectEnd = serializedObject.FindProperty("_selectEnd");
+            _dragStart = serializedObject.FindProperty("_dragStart");
+            _dragEnd = serializedObject.FindProperty("_dragEnd");
+        }
+
+        public override void OnInspectorGUI()
+        {
+            serializedObject.Update();
+            EditorGUILayout.PropertyField(_clickable);
+
+            if (_clickable.boolValue)
+            {
+                EditorGUI.indentLevel++;
+                EditorGUILayout.PropertyField(serializedObject.FindProperty("_maxClickTime"), new GUIContent("Max Click Time"));
+                EditorGUI.indentLevel--;
+                EditorGUILayout.Space();
+            }
+
+            EditorGUILayout.PropertyField(_draggable);
+
+            if (_draggable.boolValue)
+            {
+                EditorGUILayout.Space();
+                _showDragOptions = EditorGUILayout.Foldout(_showDragOptions, "Drag Options");
+                if (_showDragOptions)
+                {
+                    EditorGUI.indentLevel++;
+
+                    bool showAllOptions = true;
+                    foreach (var target in targets)
+                    {
+                        var interactable = target as FlexalonInteractable;
+                        showAllOptions = showAllOptions && interactable._showAllDragProperties;
+                    }
+
+                    if (showAllOptions)
+                    {
+                        EditorGUILayout.PropertyField(_interpolationSpeed);
+                    }
+
+                    EditorGUILayout.PropertyField(_insertRadius);
+
+                    if (showAllOptions)
+                    {
+                        var restriction = _restriction;
+                        EditorGUILayout.PropertyField(restriction);
+                        if (restriction.enumValueIndex == (int)FlexalonInteractable.RestrictionType.Plane)
+                        {
+                            EditorGUI.indentLevel++;
+                            EditorGUILayout.PropertyField(_planeNormal, new GUIContent("Normal"));
+                            EditorGUILayout.PropertyField(_localSpaceRestriction, new GUIContent("Local Space"));
+                            EditorGUI.indentLevel--;
+                        }
+                        else if (restriction.enumValueIndex == (int)FlexalonInteractable.RestrictionType.Line)
+                        {
+                            EditorGUI.indentLevel++;
+                            EditorGUILayout.PropertyField(_lineDirection, new GUIContent("Direction"));
+                            EditorGUILayout.PropertyField(_localSpaceRestriction, new GUIContent("Local Space"));
+                            EditorGUI.indentLevel--;
+                        }
+
+                        EditorGUILayout.PropertyField(_holdOffset);
+                        EditorGUILayout.PropertyField(_localSpaceOffset, new GUIContent("Local Space"));
+
+                        var rotateOnGrab = _rotateOnDrag;
+                        EditorGUILayout.PropertyField(rotateOnGrab);
+                        if (rotateOnGrab.boolValue)
+                        {
+                            EditorGUI.indentLevel++;
+                            EditorGUILayout.PropertyField(_holdRotation, new GUIContent("Rotation"));
+                            EditorGUILayout.PropertyField(_localSpaceRotation, new GUIContent("Local Space"));
+                            EditorGUI.indentLevel--;
+                        }
+
+                        EditorGUILayout.PropertyField(_handle);
+                        EditorGUILayout.PropertyField(_bounds);
+                    }
+                    else
+                    {
+                        EditorGUILayout.Space();
+                        EditorGUILayout.HelpBox("Some drag options are disabled for the selected input provider.", MessageType.Info);
+                        EditorGUILayout.Space();
+                    }
+
+                    EditorGUILayout.PropertyField(_hideCursor);
+                    EditorGUILayout.PropertyField(_layerMask);
+                    EditorGUI.indentLevel--;
+                }
+            }
+
+            EditorGUILayout.Space();
+
+            _showEvents = EditorGUILayout.Foldout(_showEvents, "Events");
+            if (_showEvents)
+            {
+                if (_clickable.boolValue)
+                {
+                    EditorGUILayout.PropertyField(serializedObject.FindProperty("_clicked"));
+                }
+
+                EditorGUILayout.PropertyField(serializedObject.FindProperty("_hoverStart"));
+                EditorGUILayout.PropertyField(serializedObject.FindProperty("_hoverEnd"));
+
+                EditorGUILayout.PropertyField(serializedObject.FindProperty("_selectStart"));
+                EditorGUILayout.PropertyField(serializedObject.FindProperty("_selectEnd"));
+
+                if (_draggable.boolValue)
+                {
+                    EditorGUILayout.PropertyField(serializedObject.FindProperty("_dragStart"));
+                    EditorGUILayout.PropertyField(serializedObject.FindProperty("_dragEnd"));
+                }
+            }
+
+            serializedObject.ApplyModifiedProperties();
+        }
+    }
+}
+
+#endif
\ No newline at end of file

--
Gitblit v1.9.3