From fbaac88d049b7159a7310505e01c7640a84207a5 Mon Sep 17 00:00:00 2001 From: uurha Date: Fri, 17 May 2024 03:34:42 +0200 Subject: [PATCH 1/3] Implement Attributes drawers with Visual Elements --- .../CustomEditors/BetterButtonsEditor.cs | 82 +++--- .../CustomEditors/GizmosEditor.cs | 19 +- .../DrawInspector/DrawInspectorDrawer.cs | 96 +++---- .../DrawInspector/DrawInspectorHandler.cs | 97 +++++++ ...r.cs.meta => DrawInspectorHandler.cs.meta} | 0 .../DrawInspector/DrawInspectorWrapper.cs | 95 ------- .../{BaseWrappers.meta => BaseHandlers.meta} | 0 .../BoundsBaseHandler.cs} | 14 +- .../BoundsBaseHandler.cs.meta} | 0 .../GizmoHandler.cs} | 39 ++- .../GizmoHandler.cs.meta} | 0 .../EditorAddons/Drawers/Gizmo/GizmoDrawer.cs | 176 +++++------- .../Drawers/Gizmo/HideTransformDrawer.cs | 30 +- ...{LocalWrappers.meta => LocalHandlers.meta} | 0 .../BoundsLocalHandler.cs} | 14 +- .../BoundsLocalHandler.cs.meta} | 0 .../QuaternionLocalHandler.cs} | 39 +-- .../QuaternionLocalHandler.cs.meta} | 0 .../Vector2LocalHandler.cs} | 16 +- .../Vector2LocalHandler.cs.meta} | 0 .../Vector3LocalHandler.cs} | 16 +- .../Vector3LocalHandler.cs.meta} | 0 ...{WorldWrappers.meta => WorldHandlers.meta} | 0 .../Gizmo/WorldHandlers/BoundsHandler.cs | 25 ++ .../BoundsHandler.cs.meta} | 0 .../Gizmo/WorldHandlers/QuaternionHandler.cs | 47 ++++ .../QuaternionHandler.cs.meta} | 0 .../Vector2Handler.cs} | 16 +- .../Vector2Handler.cs.meta} | 0 .../Vector3Handler.cs} | 16 +- .../Vector3Handler.cs.meta} | 0 .../Gizmo/WorldWrappers/BoundsWrapper.cs | 25 -- .../Gizmo/WorldWrappers/QuaternionWrapper.cs | 66 ----- .../{Utility.meta => HandlerMaps.meta} | 0 .../DrawInspectorTypeHandlerBinder.cs | 35 +++ .../DrawInspectorTypeHandlerBinder.cs.meta} | 0 .../GizmoTypeHandlerBinder.cs} | 27 +- .../GizmoTypeHandlerBinder.cs.meta} | 0 .../ManipulateTypeHandlerBinder.cs} | 33 +-- .../ManipulateTypeHandlerBinder.cs.meta} | 0 .../MiscBinder.cs} | 27 +- .../MiscBinder.cs.meta} | 0 .../PreviewTypeHandlerBinder.cs} | 17 +- .../PreviewTypeHandlerBinder.cs.meta} | 0 .../HandlerMaps/SelectTypeHandlerBinder.cs | 49 ++++ .../SelectTypeHandlerBinder.cs.meta} | 0 .../{Wrappers.meta => Handlers.meta} | 0 .../InEditorModeHandler.cs} | 4 +- .../InEditorModeHandler.cs.meta} | 0 .../InPlayModeHandler.cs} | 4 +- .../InPlayModeHandler.cs.meta} | 0 .../Handlers/ManipulateHandler.cs | 56 ++++ .../ManipulateHandler.cs.meta} | 0 .../ManipulateUserConditionHandler.cs} | 7 +- .../ManipulateUserConditionHandler.cs.meta} | 0 .../Handlers/ReadOnlyFieldAttributeHandler.cs | 10 + .../ReadOnlyFieldAttributeHandler.cs.meta} | 0 .../Drawers/Manipulation/ManipulateDrawer.cs | 63 +---- .../Wrappers/ManipulateWrapper.cs | 105 ------- .../Wrappers/ReadOnlyFieldAttributeWrapper.cs | 10 - .../Misc/{Wrappers.meta => Handlers.meta} | 0 .../Misc/Handlers/CustomToolTipHandler.cs | 22 ++ .../CustomToolTipHandler.cs.meta} | 0 .../Misc/Handlers/EnumButtonsHandler.cs | 92 ++++++ .../EnumButtonsHandler.cs.meta} | 0 .../Drawers/Misc/Handlers/HelpBoxHandler.cs | 27 ++ .../HelpBoxHandler.cs.meta} | 0 .../Drawers/Misc/Handlers/HideLabelHandler.cs | 37 +++ .../HideLabelHandler.cs.meta} | 0 .../Drawers/Misc/Handlers/MiscHandler.cs | 28 ++ .../MiscHandler.cs.meta} | 0 .../Drawers/Misc/Handlers/MiscLabelHandler.cs | 14 + .../Misc/Handlers/MiscLabelHandler.cs.meta | 3 + .../Misc/Handlers/RenameFieldHandler.cs | 14 + .../Misc/Handlers/RenameFieldHandler.cs.meta | 3 + .../EditorAddons/Drawers/Misc/MiscDrawer.cs | 68 +---- .../Misc/Wrappers/CustomToolTipWrapper.cs | 39 --- .../Misc/Wrappers/EnumButtonsWrapper.cs | 127 --------- .../Drawers/Misc/Wrappers/HelpBoxWrapper.cs | 44 --- .../Drawers/Misc/Wrappers/HideLabelWrapper.cs | 75 ----- .../Drawers/Misc/Wrappers/MiscWrapper.cs | 38 --- .../Drawers/Preview/BaseWrappers.meta | 3 - .../BaseWrappers/BasePreviewWrapper.cs | 31 --- .../BaseWrappers/BasePreviewWrapper.cs.meta | 3 - .../Preview/BaseWrappers/PreviewWrapper.cs | 91 ------ .../{PopupWrappers.meta => Handlers.meta} | 0 .../Drawers/Preview/Handlers/AssetHandler.cs | 65 +++++ .../AssetHandler.cs.meta} | 0 .../Preview/Handlers/PreviewHandler.cs | 126 +++++++++ .../PreviewHandler.cs.meta} | 0 .../SpriteHandler.cs} | 4 +- .../SpriteHandler.cs.meta} | 0 .../TextureHandler.cs} | 34 +-- .../TextureHandler.cs.meta} | 0 .../Preview/PopupWrappers/AssetWrapper.cs | 78 ------ .../Drawers/Preview/PreviewDrawer.cs | 98 +++---- .../Editor/EditorAddons/Drawers/Rename.meta | 3 - .../Drawers/Rename/RenameFieldDrawer.cs | 38 --- .../Drawers/Rename/RenameFieldDrawer.cs.meta | 3 - .../Select/{Wrappers.meta => Handlers.meta} | 0 .../Select/Handlers/BaseSelectHandler.cs | 151 ++++++++++ .../BaseSelectHandler.cs.meta} | 0 .../BaseSelectTypeHandler.cs} | 80 ++---- .../Handlers/BaseSelectTypeHandler.cs.meta | 3 + .../DropdownCollection.meta | 0 .../DictionaryCollection.cs | 6 +- .../DictionaryCollection.cs.meta | 0 .../EnumerableCollection.cs} | 49 ++-- .../EnumerableCollection.cs.meta} | 0 .../DropdownCollection/IDataCollection.cs | 2 +- .../IDataCollection.cs.meta | 0 .../DropdownCollection/KeyTupleComparer.cs | 22 ++ .../KeyTupleComparer.cs.meta | 3 + .../DropdownCollection/NoneCollection.cs | 2 +- .../DropdownCollection/NoneCollection.cs.meta | 0 .../Select/Handlers/DropdownHandler.cs | 176 ++++++++++++ .../DropdownHandler.cs.meta} | 0 .../SelectEnumHandler.cs} | 80 ++++-- .../SelectEnumHandler.cs.meta} | 0 .../Handlers/SelectImplementationHandler.cs | 107 +++++++ .../SelectImplementationHandler.cs.meta} | 0 .../Handlers/SelectSerializedTypeHandler.cs | 155 +++++++++++ .../SelectSerializedTypeHandler.cs.meta} | 0 .../Drawers/Select/SelectDrawer.cs | 131 +++++++-- .../Drawers/Select/SelectDrawer.cs.meta | 4 +- .../Drawers/Select/SelectDrawerBase.cs | 261 ------------------ .../Drawers/Select/SelectDrawerBase.cs.meta | 3 - .../Drawers/Select/SelectedItem.cs | 27 -- .../Drawers/Select/SelectedItem.cs.meta | 3 - .../Drawers/Select/SetupStrategies.meta | 3 - .../SetupStrategies/DropdownStrategy.cs | 244 ---------------- .../SetupStrategies/DropdownStrategy.cs.meta | 3 - .../SelectEnumStrategy.cs.meta | 3 - .../SelectImplementationStrategy.cs | 74 ----- .../SelectImplementationStrategy.cs.meta | 3 - .../SelectSerializedTypeStrategy.cs.meta | 3 - .../Select/SetupStrategies/SetupStrategy.cs | 54 ---- .../SetupStrategies/SetupStrategy.cs.meta | 3 - .../Select/Wrappers/BaseSelectWrapper.cs | 79 ------ .../Select/Wrappers/DropdownWrapper.cs | 19 -- .../Select/Wrappers/SelectEnumWrapper.cs | 55 ---- .../Wrappers/SelectSerializedTypeWrapper.cs | 43 --- .../Select/Wrappers/SelectTypeWrapper.cs | 21 -- .../Drawers/Utility/DrawInspectorUtility.cs | 30 -- .../Drawers/Utility/SelectUtility.cs | 125 --------- .../Drawers/WrapperCollections.meta | 3 - .../WrapperCollections/DrawInspectors.cs | 54 ---- .../WrapperCollections/DrawInspectors.cs.meta | 3 - .../WrapperCollections/GizmoWrappers.cs | 97 ------- .../WrapperCollections/GizmoWrappers.cs.meta | 3 - .../WrapperCollections/PreviewWrappers.cs | 29 -- .../PreviewWrappers.cs.meta | 3 - .../WrapperCollections/SelectWrappers.cs | 28 -- .../WrapperCollections/SelectWrappers.cs.meta | 3 - .../Extensions/AttributesDefinitions.cs | 5 +- .../EditorAddons/Extensions/Constants.cs | 9 - .../EditorAddons/Extensions/Constants.cs.meta | 3 - .../Extensions/GUIContentExtension.cs | 18 -- .../Extensions/GUIContentExtension.cs.meta | 3 - .../Attributes/Gizmo/BaseGizmoAttribute.cs | 14 + .../Gizmo/BaseGizmoAttribute.cs.meta | 3 + .../Attributes/Gizmo/GizmoAttribute.cs | 3 +- .../Attributes/Gizmo/GizmoLocalAttribute.cs | 2 +- .../{Rename => Misc}/RenameFieldAttribute.cs | 9 +- .../RenameFieldAttribute.cs.meta | 0 .../Runtime/Attributes/Rename.meta | 3 - .../Attributes/Select/DropdownAttribute.cs | 18 +- .../Attributes/Select/SelectAttribute.cs | 2 +- .../Attributes/Select/SelectAttributeBase.cs | 14 +- .../Select/SelectAttributeBase.cs.meta | 12 +- .../Attributes/Select/SelectEnumAttribute.cs | 2 +- .../Select/SelectEnumAttribute.cs.meta | 12 +- .../Select/SelectImplementationAttribute.cs | 40 --- .../SelectImplementationAttribute.cs.meta | 3 - .../BetterAttributes/Runtime/LabelDefines.cs | 12 + .../Runtime/LabelDefines.cs.meta | 3 + Assets/BetterAttributes/Samples.meta | 8 + .../{Samples~ => Samples}/TestSamples.meta | 0 .../TestSamples/GameObject.prefab | 0 .../TestSamples/GameObject.prefab.meta | 0 .../TestSamples/New Prefab.prefab | 0 .../TestSamples/New Prefab.prefab.meta | 0 .../TestSamples/Scenes.meta | 0 .../TestSamples/Scenes/Sample.unity | 58 +--- .../TestSamples/Scenes/Sample.unity.meta | 0 .../TestSamples/Scripts.meta | 0 .../TestSamples/Scripts/Interfaces.meta | 0 .../Scripts/Interfaces/ISomeInterface.cs | 0 .../Scripts/Interfaces/ISomeInterface.cs.meta | 0 .../TestSamples/Scripts/Models.meta | 0 .../Scripts/Models/SomeAbstractClass.cs | 0 .../Scripts/Models/SomeAbstractClass.cs.meta | 0 .../SomeAbstractClassImplementation1.cs | 0 .../SomeAbstractClassImplementation1.cs.meta | 0 .../SomeAbstractClassImplementation2.cs | 0 .../SomeAbstractClassImplementation2.cs.meta | 0 .../TestSamples/Scripts/Models/SomeClass.cs | 0 .../Scripts/Models/SomeClass.cs.meta | 0 .../Models/SomeInterfaceImplementation17.cs | 0 .../SomeInterfaceImplementation17.cs.meta | 0 .../Models/SomeInterfaceImplementation2.cs | 0 .../SomeInterfaceImplementation2.cs.meta | 0 .../Models/SomeInterfaceImplementation21.cs | 0 .../SomeInterfaceImplementation21.cs.meta | 0 .../Models/SomeInterfaceImplementation3.cs | 0 .../SomeInterfaceImplementation3.cs.meta | 0 .../TestSamples/Scripts/OtherModels.meta | 0 .../SomeInterfaceImplementation1.cs | 0 .../SomeInterfaceImplementation1.cs.meta | 0 .../SomeInterfaceImplementation14.cs | 4 +- .../SomeInterfaceImplementation14.cs.meta | 0 .../SomeInterfaceImplementation15.cs | 0 .../SomeInterfaceImplementation15.cs.meta | 0 .../SomeInterfaceImplementation16.cs | 0 .../SomeInterfaceImplementation16.cs.meta | 0 .../TestSamples/Scripts/PreviewTest.cs | 0 .../TestSamples/Scripts/PreviewTest.cs.meta | 0 .../TestSamples/Scripts/RemovableTest.cs | 0 .../TestSamples/Scripts/RemovableTest.cs.meta | 0 .../TestSamples/Scripts/SingletonTest.cs | 0 .../TestSamples/Scripts/SingletonTest.cs.meta | 0 .../TestSamples/Scripts/Test.cs | 133 ++++++--- .../TestSamples/Scripts/Test.cs.meta | 0 .../TestSamples/Scripts/Test2.cs | 0 .../TestSamples/Scripts/Test2.cs.meta | 0 .../TestSamples/Scripts/TestInherit.cs | 0 .../TestSamples/Scripts/TestInherit.cs.meta | 0 .../TestSamples/Scripts/TestInherit1.cs | 0 .../TestSamples/Scripts/TestInherit1.cs.meta | 0 .../Scripts/TestScriptableObject.cs | 0 .../Scripts/TestScriptableObject.cs.meta | 0 .../TestSamples/TestScriptableObject 1.asset | 0 .../TestScriptableObject 1.asset.meta | 0 .../TestSamples/TestScriptableObject.asset | 6 +- .../TestScriptableObject.asset.meta | 0 .../TestSamples/logo-social.png | Bin .../TestSamples/logo-social.png.meta | 0 Assets/BetterAttributes/package.json | 2 +- BetterAttributes.Editor.csproj.DotSettings | 8 + Packages/manifest.json | 4 +- Packages/packages-lock.json | 13 +- ProjectSettings/PackageManagerSettings.asset | 2 +- 242 files changed, 2158 insertions(+), 3103 deletions(-) create mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/DrawInspector/DrawInspectorHandler.cs rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/DrawInspector/{DrawInspectorWrapper.cs.meta => DrawInspectorHandler.cs.meta} (100%) delete mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/DrawInspector/DrawInspectorWrapper.cs rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/Gizmo/{BaseWrappers.meta => BaseHandlers.meta} (100%) rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/Gizmo/{BaseWrappers/BoundsBaseWrapper.cs => BaseHandlers/BoundsBaseHandler.cs} (66%) rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/Gizmo/{BaseWrappers/BoundsBaseWrapper.cs.meta => BaseHandlers/BoundsBaseHandler.cs.meta} (100%) rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/Gizmo/{BaseWrappers/GizmoWrapper.cs => BaseHandlers/GizmoHandler.cs} (79%) rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/Gizmo/{BaseWrappers/GizmoWrapper.cs.meta => BaseHandlers/GizmoHandler.cs.meta} (100%) rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/Gizmo/{LocalWrappers.meta => LocalHandlers.meta} (100%) rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/Gizmo/{LocalWrappers/BoundsLocalWrapper.cs => LocalHandlers/BoundsLocalHandler.cs} (56%) rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/Gizmo/{LocalWrappers/BoundsLocalWrapper.cs.meta => LocalHandlers/BoundsLocalHandler.cs.meta} (100%) rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/Gizmo/{LocalWrappers/QuaternionLocalWrapper.cs => LocalHandlers/QuaternionLocalHandler.cs} (55%) rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/Gizmo/{LocalWrappers/QuaternionLocalWrapper.cs.meta => LocalHandlers/QuaternionLocalHandler.cs.meta} (100%) rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/Gizmo/{LocalWrappers/Vector3LocalWrapper.cs => LocalHandlers/Vector2LocalHandler.cs} (62%) rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/Gizmo/{LocalWrappers/Vector2LocalWrapper.cs.meta => LocalHandlers/Vector2LocalHandler.cs.meta} (100%) rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/Gizmo/{LocalWrappers/Vector2LocalWrapper.cs => LocalHandlers/Vector3LocalHandler.cs} (62%) rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/Gizmo/{LocalWrappers/Vector3LocalWrapper.cs.meta => LocalHandlers/Vector3LocalHandler.cs.meta} (100%) rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/Gizmo/{WorldWrappers.meta => WorldHandlers.meta} (100%) create mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/Gizmo/WorldHandlers/BoundsHandler.cs rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/Gizmo/{WorldWrappers/BoundsWrapper.cs.meta => WorldHandlers/BoundsHandler.cs.meta} (100%) create mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/Gizmo/WorldHandlers/QuaternionHandler.cs rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/Gizmo/{WorldWrappers/QuaternionWrapper.cs.meta => WorldHandlers/QuaternionHandler.cs.meta} (100%) rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/Gizmo/{WorldWrappers/Vector2Wrapper.cs => WorldHandlers/Vector2Handler.cs} (50%) rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/Gizmo/{WorldWrappers/Vector2Wrapper.cs.meta => WorldHandlers/Vector2Handler.cs.meta} (100%) rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/Gizmo/{WorldWrappers/Vector3Wrapper.cs => WorldHandlers/Vector3Handler.cs} (50%) rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/Gizmo/{WorldWrappers/Vector3Wrapper.cs.meta => WorldHandlers/Vector3Handler.cs.meta} (100%) delete mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/Gizmo/WorldWrappers/BoundsWrapper.cs delete mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/Gizmo/WorldWrappers/QuaternionWrapper.cs rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/{Utility.meta => HandlerMaps.meta} (100%) create mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/HandlerMaps/DrawInspectorTypeHandlerBinder.cs rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/{Utility/DrawInspectorUtility.cs.meta => HandlerMaps/DrawInspectorTypeHandlerBinder.cs.meta} (100%) rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/{Utility/GizmoUtility.cs => HandlerMaps/GizmoTypeHandlerBinder.cs} (53%) rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/{Utility/GizmoUtility.cs.meta => HandlerMaps/GizmoTypeHandlerBinder.cs.meta} (100%) rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/{Utility/ManipulateUtility.cs => HandlerMaps/ManipulateTypeHandlerBinder.cs} (64%) rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/{Utility/ManipulateUtility.cs.meta => HandlerMaps/ManipulateTypeHandlerBinder.cs.meta} (100%) rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/{Utility/MiscUtility.cs => HandlerMaps/MiscBinder.cs} (59%) rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/{Utility/MiscUtility.cs.meta => HandlerMaps/MiscBinder.cs.meta} (100%) rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/{Utility/PreviewUtility.cs => HandlerMaps/PreviewTypeHandlerBinder.cs} (60%) rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/{Utility/PreviewUtility.cs.meta => HandlerMaps/PreviewTypeHandlerBinder.cs.meta} (100%) create mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/HandlerMaps/SelectTypeHandlerBinder.cs rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/{Utility/SelectUtility.cs.meta => HandlerMaps/SelectTypeHandlerBinder.cs.meta} (100%) rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/Manipulation/{Wrappers.meta => Handlers.meta} (100%) rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/Manipulation/{Wrappers/InEditorModeWrapper.cs => Handlers/InEditorModeHandler.cs} (55%) rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/Manipulation/{Wrappers/InEditorModeWrapper.cs.meta => Handlers/InEditorModeHandler.cs.meta} (100%) rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/Manipulation/{Wrappers/InPlayModeWrapper.cs => Handlers/InPlayModeHandler.cs} (55%) rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/Manipulation/{Wrappers/InPlayModeWrapper.cs.meta => Handlers/InPlayModeHandler.cs.meta} (100%) create mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/Manipulation/Handlers/ManipulateHandler.cs rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/Manipulation/{Wrappers/ManipulateWrapper.cs.meta => Handlers/ManipulateHandler.cs.meta} (100%) rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/Manipulation/{Wrappers/ManipulateUserConditionWrapper.cs => Handlers/ManipulateUserConditionHandler.cs} (88%) rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/Manipulation/{Wrappers/ManipulateUserConditionWrapper.cs.meta => Handlers/ManipulateUserConditionHandler.cs.meta} (100%) create mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/Manipulation/Handlers/ReadOnlyFieldAttributeHandler.cs rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/Manipulation/{Wrappers/ReadOnlyFieldAttributeWrapper.cs.meta => Handlers/ReadOnlyFieldAttributeHandler.cs.meta} (100%) delete mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/Manipulation/Wrappers/ManipulateWrapper.cs delete mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/Manipulation/Wrappers/ReadOnlyFieldAttributeWrapper.cs rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/Misc/{Wrappers.meta => Handlers.meta} (100%) create mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/Misc/Handlers/CustomToolTipHandler.cs rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/Misc/{Wrappers/CustomToolTipWrapper.cs.meta => Handlers/CustomToolTipHandler.cs.meta} (100%) create mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/Misc/Handlers/EnumButtonsHandler.cs rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/Misc/{Wrappers/EnumButtonsWrapper.cs.meta => Handlers/EnumButtonsHandler.cs.meta} (100%) create mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/Misc/Handlers/HelpBoxHandler.cs rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/Misc/{Wrappers/HelpBoxWrapper.cs.meta => Handlers/HelpBoxHandler.cs.meta} (100%) create mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/Misc/Handlers/HideLabelHandler.cs rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/Misc/{Wrappers/HideLabelWrapper.cs.meta => Handlers/HideLabelHandler.cs.meta} (100%) create mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/Misc/Handlers/MiscHandler.cs rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/Misc/{Wrappers/MiscWrapper.cs.meta => Handlers/MiscHandler.cs.meta} (100%) create mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/Misc/Handlers/MiscLabelHandler.cs create mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/Misc/Handlers/MiscLabelHandler.cs.meta create mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/Misc/Handlers/RenameFieldHandler.cs create mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/Misc/Handlers/RenameFieldHandler.cs.meta delete mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/Misc/Wrappers/CustomToolTipWrapper.cs delete mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/Misc/Wrappers/EnumButtonsWrapper.cs delete mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/Misc/Wrappers/HelpBoxWrapper.cs delete mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/Misc/Wrappers/HideLabelWrapper.cs delete mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/Misc/Wrappers/MiscWrapper.cs delete mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/Preview/BaseWrappers.meta delete mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/Preview/BaseWrappers/BasePreviewWrapper.cs delete mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/Preview/BaseWrappers/BasePreviewWrapper.cs.meta delete mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/Preview/BaseWrappers/PreviewWrapper.cs rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/Preview/{PopupWrappers.meta => Handlers.meta} (100%) create mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/Preview/Handlers/AssetHandler.cs rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/Preview/{PopupWrappers/AssetWrapper.cs.meta => Handlers/AssetHandler.cs.meta} (100%) create mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/Preview/Handlers/PreviewHandler.cs rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/Preview/{BaseWrappers/PreviewWrapper.cs.meta => Handlers/PreviewHandler.cs.meta} (100%) rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/Preview/{PopupWrappers/SpriteWrapper.cs => Handlers/SpriteHandler.cs} (86%) rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/Preview/{PopupWrappers/SpriteWrapper.cs.meta => Handlers/SpriteHandler.cs.meta} (100%) rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/Preview/{PopupWrappers/TextureWrapper.cs => Handlers/TextureHandler.cs} (56%) rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/Preview/{PopupWrappers/TextureWrapper.cs.meta => Handlers/TextureHandler.cs.meta} (100%) delete mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/Preview/PopupWrappers/AssetWrapper.cs delete mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/Rename.meta delete mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/Rename/RenameFieldDrawer.cs delete mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/Rename/RenameFieldDrawer.cs.meta rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/Select/{Wrappers.meta => Handlers.meta} (100%) create mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/Select/Handlers/BaseSelectHandler.cs rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/Select/{Wrappers/BaseSelectWrapper.cs.meta => Handlers/BaseSelectHandler.cs.meta} (100%) rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/Select/{SetupStrategies/SelectSerializedTypeStrategy.cs => Handlers/BaseSelectTypeHandler.cs} (50%) create mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/Select/Handlers/BaseSelectTypeHandler.cs.meta rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/Select/{SetupStrategies => Handlers}/DropdownCollection.meta (100%) rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/Select/{SetupStrategies => Handlers}/DropdownCollection/DictionaryCollection.cs (92%) rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/Select/{SetupStrategies => Handlers}/DropdownCollection/DictionaryCollection.cs.meta (100%) rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/Select/{SetupStrategies/DropdownCollection/ListCollection.cs => Handlers/DropdownCollection/EnumerableCollection.cs} (55%) rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/Select/{SetupStrategies/DropdownCollection/ListCollection.cs.meta => Handlers/DropdownCollection/EnumerableCollection.cs.meta} (100%) rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/Select/{SetupStrategies => Handlers}/DropdownCollection/IDataCollection.cs (70%) rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/Select/{SetupStrategies => Handlers}/DropdownCollection/IDataCollection.cs.meta (100%) create mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/Select/Handlers/DropdownCollection/KeyTupleComparer.cs create mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/Select/Handlers/DropdownCollection/KeyTupleComparer.cs.meta rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/Select/{SetupStrategies => Handlers}/DropdownCollection/NoneCollection.cs (83%) rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/Select/{SetupStrategies => Handlers}/DropdownCollection/NoneCollection.cs.meta (100%) create mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/Select/Handlers/DropdownHandler.cs rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/Select/{Wrappers/DropdownWrapper.cs.meta => Handlers/DropdownHandler.cs.meta} (100%) rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/Select/{SetupStrategies/SelectEnumStrategy.cs => Handlers/SelectEnumHandler.cs} (58%) rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/Select/{Wrappers/SelectEnumWrapper.cs.meta => Handlers/SelectEnumHandler.cs.meta} (100%) create mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/Select/Handlers/SelectImplementationHandler.cs rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/Select/{Wrappers/SelectTypeWrapper.cs.meta => Handlers/SelectImplementationHandler.cs.meta} (100%) create mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/Select/Handlers/SelectSerializedTypeHandler.cs rename Assets/BetterAttributes/Editor/EditorAddons/Drawers/Select/{Wrappers/SelectSerializedTypeWrapper.cs.meta => Handlers/SelectSerializedTypeHandler.cs.meta} (100%) delete mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/Select/SelectDrawerBase.cs delete mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/Select/SelectDrawerBase.cs.meta delete mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/Select/SelectedItem.cs delete mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/Select/SelectedItem.cs.meta delete mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/Select/SetupStrategies.meta delete mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/Select/SetupStrategies/DropdownStrategy.cs delete mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/Select/SetupStrategies/DropdownStrategy.cs.meta delete mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/Select/SetupStrategies/SelectEnumStrategy.cs.meta delete mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/Select/SetupStrategies/SelectImplementationStrategy.cs delete mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/Select/SetupStrategies/SelectImplementationStrategy.cs.meta delete mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/Select/SetupStrategies/SelectSerializedTypeStrategy.cs.meta delete mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/Select/SetupStrategies/SetupStrategy.cs delete mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/Select/SetupStrategies/SetupStrategy.cs.meta delete mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/Select/Wrappers/BaseSelectWrapper.cs delete mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/Select/Wrappers/DropdownWrapper.cs delete mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/Select/Wrappers/SelectEnumWrapper.cs delete mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/Select/Wrappers/SelectSerializedTypeWrapper.cs delete mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/Select/Wrappers/SelectTypeWrapper.cs delete mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/Utility/DrawInspectorUtility.cs delete mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/Utility/SelectUtility.cs delete mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/WrapperCollections.meta delete mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/WrapperCollections/DrawInspectors.cs delete mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/WrapperCollections/DrawInspectors.cs.meta delete mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/WrapperCollections/GizmoWrappers.cs delete mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/WrapperCollections/GizmoWrappers.cs.meta delete mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/WrapperCollections/PreviewWrappers.cs delete mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/WrapperCollections/PreviewWrappers.cs.meta delete mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/WrapperCollections/SelectWrappers.cs delete mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Drawers/WrapperCollections/SelectWrappers.cs.meta delete mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Extensions/Constants.cs delete mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Extensions/Constants.cs.meta delete mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Extensions/GUIContentExtension.cs delete mode 100644 Assets/BetterAttributes/Editor/EditorAddons/Extensions/GUIContentExtension.cs.meta create mode 100644 Assets/BetterAttributes/Runtime/Attributes/Gizmo/BaseGizmoAttribute.cs create mode 100644 Assets/BetterAttributes/Runtime/Attributes/Gizmo/BaseGizmoAttribute.cs.meta rename Assets/BetterAttributes/Runtime/Attributes/{Rename => Misc}/RenameFieldAttribute.cs (66%) rename Assets/BetterAttributes/Runtime/Attributes/{Rename => Misc}/RenameFieldAttribute.cs.meta (100%) delete mode 100644 Assets/BetterAttributes/Runtime/Attributes/Rename.meta delete mode 100644 Assets/BetterAttributes/Runtime/Attributes/Select/SelectImplementationAttribute.cs delete mode 100644 Assets/BetterAttributes/Runtime/Attributes/Select/SelectImplementationAttribute.cs.meta create mode 100644 Assets/BetterAttributes/Runtime/LabelDefines.cs create mode 100644 Assets/BetterAttributes/Runtime/LabelDefines.cs.meta create mode 100644 Assets/BetterAttributes/Samples.meta rename Assets/BetterAttributes/{Samples~ => Samples}/TestSamples.meta (100%) rename Assets/BetterAttributes/{Samples~ => Samples}/TestSamples/GameObject.prefab (100%) rename Assets/BetterAttributes/{Samples~ => Samples}/TestSamples/GameObject.prefab.meta (100%) rename Assets/BetterAttributes/{Samples~ => Samples}/TestSamples/New Prefab.prefab (100%) rename Assets/BetterAttributes/{Samples~ => Samples}/TestSamples/New Prefab.prefab.meta (100%) rename Assets/BetterAttributes/{Samples~ => Samples}/TestSamples/Scenes.meta (100%) rename Assets/BetterAttributes/{Samples~ => Samples}/TestSamples/Scenes/Sample.unity (91%) rename Assets/BetterAttributes/{Samples~ => Samples}/TestSamples/Scenes/Sample.unity.meta (100%) rename Assets/BetterAttributes/{Samples~ => Samples}/TestSamples/Scripts.meta (100%) rename Assets/BetterAttributes/{Samples~ => Samples}/TestSamples/Scripts/Interfaces.meta (100%) rename Assets/BetterAttributes/{Samples~ => Samples}/TestSamples/Scripts/Interfaces/ISomeInterface.cs (100%) rename Assets/BetterAttributes/{Samples~ => Samples}/TestSamples/Scripts/Interfaces/ISomeInterface.cs.meta (100%) rename Assets/BetterAttributes/{Samples~ => Samples}/TestSamples/Scripts/Models.meta (100%) rename Assets/BetterAttributes/{Samples~ => Samples}/TestSamples/Scripts/Models/SomeAbstractClass.cs (100%) rename Assets/BetterAttributes/{Samples~ => Samples}/TestSamples/Scripts/Models/SomeAbstractClass.cs.meta (100%) rename Assets/BetterAttributes/{Samples~ => Samples}/TestSamples/Scripts/Models/SomeAbstractClassImplementation1.cs (100%) rename Assets/BetterAttributes/{Samples~ => Samples}/TestSamples/Scripts/Models/SomeAbstractClassImplementation1.cs.meta (100%) rename Assets/BetterAttributes/{Samples~ => Samples}/TestSamples/Scripts/Models/SomeAbstractClassImplementation2.cs (100%) rename Assets/BetterAttributes/{Samples~ => Samples}/TestSamples/Scripts/Models/SomeAbstractClassImplementation2.cs.meta (100%) rename Assets/BetterAttributes/{Samples~ => Samples}/TestSamples/Scripts/Models/SomeClass.cs (100%) rename Assets/BetterAttributes/{Samples~ => Samples}/TestSamples/Scripts/Models/SomeClass.cs.meta (100%) rename Assets/BetterAttributes/{Samples~ => Samples}/TestSamples/Scripts/Models/SomeInterfaceImplementation17.cs (100%) rename Assets/BetterAttributes/{Samples~ => Samples}/TestSamples/Scripts/Models/SomeInterfaceImplementation17.cs.meta (100%) rename Assets/BetterAttributes/{Samples~ => Samples}/TestSamples/Scripts/Models/SomeInterfaceImplementation2.cs (100%) rename Assets/BetterAttributes/{Samples~ => Samples}/TestSamples/Scripts/Models/SomeInterfaceImplementation2.cs.meta (100%) rename Assets/BetterAttributes/{Samples~ => Samples}/TestSamples/Scripts/Models/SomeInterfaceImplementation21.cs (100%) rename Assets/BetterAttributes/{Samples~ => Samples}/TestSamples/Scripts/Models/SomeInterfaceImplementation21.cs.meta (100%) rename Assets/BetterAttributes/{Samples~ => Samples}/TestSamples/Scripts/Models/SomeInterfaceImplementation3.cs (100%) rename Assets/BetterAttributes/{Samples~ => Samples}/TestSamples/Scripts/Models/SomeInterfaceImplementation3.cs.meta (100%) rename Assets/BetterAttributes/{Samples~ => Samples}/TestSamples/Scripts/OtherModels.meta (100%) rename Assets/BetterAttributes/{Samples~ => Samples}/TestSamples/Scripts/OtherModels/SomeInterfaceImplementation1.cs (100%) rename Assets/BetterAttributes/{Samples~ => Samples}/TestSamples/Scripts/OtherModels/SomeInterfaceImplementation1.cs.meta (100%) rename Assets/BetterAttributes/{Samples~ => Samples}/TestSamples/Scripts/OtherModels/SomeInterfaceImplementation14.cs (50%) rename Assets/BetterAttributes/{Samples~ => Samples}/TestSamples/Scripts/OtherModels/SomeInterfaceImplementation14.cs.meta (100%) rename Assets/BetterAttributes/{Samples~ => Samples}/TestSamples/Scripts/OtherModels/SomeInterfaceImplementation15.cs (100%) rename Assets/BetterAttributes/{Samples~ => Samples}/TestSamples/Scripts/OtherModels/SomeInterfaceImplementation15.cs.meta (100%) rename Assets/BetterAttributes/{Samples~ => Samples}/TestSamples/Scripts/OtherModels/SomeInterfaceImplementation16.cs (100%) rename Assets/BetterAttributes/{Samples~ => Samples}/TestSamples/Scripts/OtherModels/SomeInterfaceImplementation16.cs.meta (100%) rename Assets/BetterAttributes/{Samples~ => Samples}/TestSamples/Scripts/PreviewTest.cs (100%) rename Assets/BetterAttributes/{Samples~ => Samples}/TestSamples/Scripts/PreviewTest.cs.meta (100%) rename Assets/BetterAttributes/{Samples~ => Samples}/TestSamples/Scripts/RemovableTest.cs (100%) rename Assets/BetterAttributes/{Samples~ => Samples}/TestSamples/Scripts/RemovableTest.cs.meta (100%) rename Assets/BetterAttributes/{Samples~ => Samples}/TestSamples/Scripts/SingletonTest.cs (100%) rename Assets/BetterAttributes/{Samples~ => Samples}/TestSamples/Scripts/SingletonTest.cs.meta (100%) rename Assets/BetterAttributes/{Samples~ => Samples}/TestSamples/Scripts/Test.cs (60%) rename Assets/BetterAttributes/{Samples~ => Samples}/TestSamples/Scripts/Test.cs.meta (100%) rename Assets/BetterAttributes/{Samples~ => Samples}/TestSamples/Scripts/Test2.cs (100%) rename Assets/BetterAttributes/{Samples~ => Samples}/TestSamples/Scripts/Test2.cs.meta (100%) rename Assets/BetterAttributes/{Samples~ => Samples}/TestSamples/Scripts/TestInherit.cs (100%) rename Assets/BetterAttributes/{Samples~ => Samples}/TestSamples/Scripts/TestInherit.cs.meta (100%) rename Assets/BetterAttributes/{Samples~ => Samples}/TestSamples/Scripts/TestInherit1.cs (100%) rename Assets/BetterAttributes/{Samples~ => Samples}/TestSamples/Scripts/TestInherit1.cs.meta (100%) rename Assets/BetterAttributes/{Samples~ => Samples}/TestSamples/Scripts/TestScriptableObject.cs (100%) rename Assets/BetterAttributes/{Samples~ => Samples}/TestSamples/Scripts/TestScriptableObject.cs.meta (100%) rename Assets/BetterAttributes/{Samples~ => Samples}/TestSamples/TestScriptableObject 1.asset (100%) rename Assets/BetterAttributes/{Samples~ => Samples}/TestSamples/TestScriptableObject 1.asset.meta (100%) rename Assets/BetterAttributes/{Samples~ => Samples}/TestSamples/TestScriptableObject.asset (86%) rename Assets/BetterAttributes/{Samples~ => Samples}/TestSamples/TestScriptableObject.asset.meta (100%) rename Assets/BetterAttributes/{Samples~ => Samples}/TestSamples/logo-social.png (100%) rename Assets/BetterAttributes/{Samples~ => Samples}/TestSamples/logo-social.png.meta (100%) diff --git a/Assets/BetterAttributes/Editor/EditorAddons/CustomEditors/BetterButtonsEditor.cs b/Assets/BetterAttributes/Editor/EditorAddons/CustomEditors/BetterButtonsEditor.cs index a9f6d3c..0aaff12 100644 --- a/Assets/BetterAttributes/Editor/EditorAddons/CustomEditors/BetterButtonsEditor.cs +++ b/Assets/BetterAttributes/Editor/EditorAddons/CustomEditors/BetterButtonsEditor.cs @@ -4,9 +4,11 @@ using Better.Attributes.Runtime; using Better.Commons.EditorAddons.CustomEditors.Attributes; using Better.Commons.EditorAddons.CustomEditors.Base; +using Better.Commons.EditorAddons.Extensions; using Better.Commons.Runtime.Extensions; using UnityEditor; using UnityEngine; +using UnityEngine.UIElements; using Object = UnityEngine.Object; namespace Better.Attributes.EditorAddons.CustomEditors @@ -16,7 +18,7 @@ public class BetterButtonsEditor : ExtendedEditor { private Dictionary>> _methodButtonsAttributes = new Dictionary>>(); - + public BetterButtonsEditor(Object target, SerializedObject serializedObject) : base(target, serializedObject) { } @@ -31,75 +33,71 @@ public override void OnEnable() _methodButtonsAttributes = EditorButtonUtility.GetSortedMethodAttributes(type); } - private void DrawButton(KeyValuePair button, GUIStyle guiStyle) + private Button DrawButton(MethodInfo methodInfo, EditorButtonAttribute attribute) { - var attribute = button.Value; - var methodInfo = button.Key; - - if (GUILayout.Button(attribute.GetDisplayName(methodInfo.PrettyMemberName()), guiStyle)) + var button = new Button { - using (var changeScope = new EditorGUI.ChangeCheckScope()) - { - methodInfo.Invoke(_target, attribute.InvokeParams); - if (changeScope.changed) - { - EditorUtility.SetDirty(_target); - _serializedObject.ApplyModifiedProperties(); - } - } - } + text = attribute.GetDisplayName(methodInfo.PrettyMemberName()) + }; + button.RegisterCallback(OnClick, (methodInfo, attribute)); + return button; } - private void DrawButtons(Dictionary>> buttons) + private void OnClick(ClickEvent clickEvent, (MethodInfo methodInfo, EditorButtonAttribute attribute) data) { - var guiStyle = new GUIStyle(GUI.skin.button) - { - stretchWidth = true, - richText = true, - wordWrap = true - }; + _serializedObject.Update(); + data.methodInfo.Invoke(_target, data.attribute.InvokeParams); + EditorUtility.SetDirty(_target); + _serializedObject.ApplyModifiedProperties(); + } + + + private VisualElement DrawButtons(Dictionary>> buttons) + { + var container = new VisualElement(); foreach (var button in buttons) { if (button.Key == -1) { var grouped = button.Value.GroupBy(key => key.Key, pair => pair.Value, - (info, attributes) => - new KeyValuePair>(info, attributes)); - EditorGUILayout.BeginVertical(); + (info, attributes) => new KeyValuePair>(info, attributes)); + var verticalElement = VisualElementUtility.CreateVerticalGroup(); foreach (var group in grouped) { - EditorGUILayout.BeginHorizontal(); + var horizontalElement = VisualElementUtility.CreateHorizontalGroup(); + verticalElement.Add(horizontalElement); foreach (var attribute in group.Value) - DrawButton(new KeyValuePair(group.Key, attribute), - guiStyle); - EditorGUILayout.EndHorizontal(); + { + var buttonElement = DrawButton(group.Key, attribute); + horizontalElement.Add(buttonElement); + } } - - EditorGUILayout.EndVertical(); } else { - EditorGUILayout.BeginHorizontal(); - foreach (var pair in button.Value) DrawButton(pair, guiStyle); - EditorGUILayout.EndHorizontal(); + var horizontalElement = VisualElementUtility.CreateHorizontalGroup(); + foreach (var (key, value) in button.Value) + { + var element = DrawButton(key, value); + horizontalElement.Add(element); + } } } + + return container; } - public override void OnInspectorGUI() + public override VisualElement CreateInspectorGUI() { - _serializedObject.Update(); - DrawButtons(_methodButtonsAttributes); - _serializedObject.ApplyModifiedProperties(); + var buttons = DrawButtons(_methodButtonsAttributes); + return buttons; } - public override void OnChanged() + public override void OnChanged(SerializedObject serializedObject) { - } } } \ No newline at end of file diff --git a/Assets/BetterAttributes/Editor/EditorAddons/CustomEditors/GizmosEditor.cs b/Assets/BetterAttributes/Editor/EditorAddons/CustomEditors/GizmosEditor.cs index b52448c..08a6e7c 100644 --- a/Assets/BetterAttributes/Editor/EditorAddons/CustomEditors/GizmosEditor.cs +++ b/Assets/BetterAttributes/Editor/EditorAddons/CustomEditors/GizmosEditor.cs @@ -6,13 +6,14 @@ using Better.Commons.EditorAddons.Extensions; using UnityEditor; using UnityEngine; +using UnityEngine.UIElements; namespace Better.Attributes.EditorAddons.CustomEditors { [MultiEditor(typeof(Object), true, Order = -999)] public class GizmosEditor : ExtendedEditor { - private HideTransformButtonUtility _hideTransformDrawer; + private HideTransformButtonHelper _hideTransformHelper; public GizmosEditor(Object target, SerializedObject serializedObject) : base(target, serializedObject) { @@ -29,15 +30,15 @@ public override void OnEnable() private void CheckAttribute() { - var attributeFound = AttributeFound(); + var attributeFound = IsAttributeFound(); if (attributeFound && !(_serializedObject.targetObject is ScriptableObject)) { - _hideTransformDrawer = new HideTransformButtonUtility(); + _hideTransformHelper = new HideTransformButtonHelper(); } } - private bool AttributeFound() + private bool IsAttributeFound() { var iterator = _serializedObject.GetIterator().Copy(); var attributeFound = false; @@ -57,15 +58,17 @@ private bool AttributeFound() return attributeFound; } - public override void OnInspectorGUI() + public override VisualElement CreateInspectorGUI() { - if (_hideTransformDrawer != null) + if (_hideTransformHelper != null) { - _hideTransformDrawer.DrawHideTransformButton(); + return _hideTransformHelper.DrawHideTransformButton(); } + + return null; } - public override void OnChanged() + public override void OnChanged(SerializedObject serializedObject) { CheckAttribute(); } diff --git a/Assets/BetterAttributes/Editor/EditorAddons/Drawers/DrawInspector/DrawInspectorDrawer.cs b/Assets/BetterAttributes/Editor/EditorAddons/Drawers/DrawInspector/DrawInspectorDrawer.cs index fcb8479..bbfe965 100644 --- a/Assets/BetterAttributes/Editor/EditorAddons/Drawers/DrawInspector/DrawInspectorDrawer.cs +++ b/Assets/BetterAttributes/Editor/EditorAddons/Drawers/DrawInspector/DrawInspectorDrawer.cs @@ -1,91 +1,59 @@ -using System.Reflection; -using Better.Attributes.EditorAddons.Drawers.Utility; -using Better.Attributes.EditorAddons.Drawers.WrapperCollections; -using Better.Attributes.Runtime.DrawInspector; -using Better.Commons.EditorAddons.Drawers.Attributes; -using Better.Commons.EditorAddons.Drawers.Base; -using Better.Commons.EditorAddons.Drawers.Caching; +using Better.Attributes.Runtime.DrawInspector; +using Better.Commons.EditorAddons.Drawers; using Better.Commons.EditorAddons.Enums; using Better.Commons.EditorAddons.Extensions; -using Better.Commons.EditorAddons.Utility; -using Better.Commons.Runtime.Drawers.Attributes; using UnityEditor; -using UnityEngine; +using UnityEditor.UIElements; +using UnityEngine.UIElements; namespace Better.Attributes.EditorAddons.Drawers.DrawInspector { - [MultiCustomPropertyDrawer(typeof(DrawInspectorAttribute))] - public class DrawInspectorDrawer : MultiFieldDrawer + [CustomPropertyDrawer(typeof(DrawInspectorAttribute), true)] + public class DrawInspectorDrawer : BasePropertyDrawer { - private bool _isOpen; - private DrawInspectors Collection => _wrappers as DrawInspectors; - - protected override void Deconstruct() - { - _wrappers?.Deconstruct(); - } - - protected override bool PreDraw(ref Rect position, SerializedProperty property, GUIContent label) + protected override void PopulateContainer(ElementsContainer container) { var fieldType = GetFieldOrElementType(); - if (!DrawInspectorUtility.Instance.IsSupported(fieldType)) + var property = container.SerializedProperty; + if (!TypeHandlersBinder.IsSupported(fieldType)) { - EditorGUI.BeginChangeCheck(); - DrawField(position, property, label); - ExtendedGUIUtility.NotSupportedAttribute(position, property, label, fieldType, _attribute.GetType()); - return false; + container.AddNotSupportedBox(fieldType, Attribute.GetType()); + return; } - var cache = ValidateCachedProperties(property, DrawInspectorUtility.Instance); - if (!cache.IsValid) - { - Collection.SetProperty(property); - } + container.SerializedPropertyChanged += OnPropertyChanged; + var handler = GetHandler(property); - _isOpen = Collection.IsOpen(property); - if (property.objectReferenceValue) - { - label.image = (_isOpen ? IconType.Minus : IconType.PlusMore).GetIcon(); - } + var inspectorElement = handler.GetInspectorContainer(property); + container.CreateElementFrom(inspectorElement); + handler.SetupInspector(); - var copy = ExtendedGUIUtility.GetClickRect(position, label); - copy.height = EditorGUIUtility.singleLineHeight; - if (ExtendedGUIUtility.IsClickedAt(copy)) - { - Collection.SetOpen(property, !_isOpen); - } - - return true; + var isOpen = handler.IsOpen(); + handler.SetOpen(isOpen); + var iconType = isOpen ? IconType.Minus : IconType.PlusMore; + container.AddClickableIcon(iconType, property, OnIconClickEvent); } - protected override HeightCacheValue GetPropertyHeight(SerializedProperty property, GUIContent label) + private void OnPropertyChanged(ElementsContainer elementsContainer) { - var additionalHeight = 0f; - if (Collection != null && Collection.IsOpen(property)) - { - additionalHeight = Collection.GetHeight(property); - } - - return HeightCacheValue.GetAdditive(additionalHeight); + var handler = GetHandler(elementsContainer.SerializedProperty); + handler.SetupInspector(); } - protected override Rect PreparePropertyRect(Rect original) + private void OnIconClickEvent(ClickEvent clickEvent, (SerializedProperty property, Image icon) data) { - return original; + UpdateState(data.property, data.icon); } - protected override void PostDraw(Rect position, SerializedProperty property, GUIContent label) + private void UpdateState(SerializedProperty property, Image icon) { - Collection.PostDraw(property, position); - } + var handler = GetHandler(property); + if (!handler.CanOpen()) return; + var isOpen = !handler.IsOpen(); - protected override WrapperCollection GenerateCollection() - { - return new DrawInspectors(); - } - - public DrawInspectorDrawer(FieldInfo fieldInfo, MultiPropertyAttribute attribute) : base(fieldInfo, attribute) - { + var iconType = isOpen ? IconType.Minus : IconType.PlusMore; + icon.image = iconType.GetIcon(); + handler.SetOpen(isOpen); } } } \ No newline at end of file diff --git a/Assets/BetterAttributes/Editor/EditorAddons/Drawers/DrawInspector/DrawInspectorHandler.cs b/Assets/BetterAttributes/Editor/EditorAddons/Drawers/DrawInspector/DrawInspectorHandler.cs new file mode 100644 index 0000000..9081788 --- /dev/null +++ b/Assets/BetterAttributes/Editor/EditorAddons/Drawers/DrawInspector/DrawInspectorHandler.cs @@ -0,0 +1,97 @@ +using System; +using Better.Commons.EditorAddons.Drawers.Handlers; +using Better.Commons.EditorAddons.Extensions; +using Better.Commons.Runtime.Extensions; +using Better.Commons.Runtime.Utility; +using UnityEditor; +using UnityEditor.UIElements; +using UnityEngine.UIElements; + +namespace Better.Attributes.EditorAddons.Drawers.DrawInspector +{ + [Serializable] + public class DrawInspectorHandler : SerializedPropertyHandler + { + private SerializedProperty _property; + private bool _isOpen = false; + private VisualElement _rootElement; + + public DrawInspectorHandler() + { + _rootElement = new VisualElement(); + } + + private void UpdateVisible(VisualElement editorElement) + { + editorElement.style.SetVisible(_isOpen); + } + + public void SetOpen(bool value) + { + _isOpen = value; + UpdateVisible(_rootElement); + ReorderableListUtility.RepaintAllInspectors(_property); + } + + public bool IsOpen() + { + return _isOpen; + } + + public VisualElement GetInspectorContainer(SerializedProperty property) + { + if (property == null) + { + DebugUtility.LogException(nameof(property)); + return null; + } + + _property = property; + return _rootElement; + } + + public void SetupInspector() + { + _rootElement.Clear(); + + if (_property == null || _property.IsDisposed()) + { + DebugUtility.LogException(new ObjectDisposedException(nameof(_property))); + return; + } + + var referenceValue = _property.objectReferenceValue; + if (referenceValue == null) + { + return; + } + + var inspectorElement = new InspectorElement(_property.objectReferenceValue); + UpdateVisible(_rootElement); + _rootElement.Add(inspectorElement); + _rootElement.style.PaddingLeft(StyleDefinition.IndentLevelPadding); + } + + public bool CanOpen() + { + if (_property == null || _property.IsDisposed()) + { + DebugUtility.LogException(new ObjectDisposedException(nameof(_property))); + return false; + } + + var referenceValue = _property.objectReferenceValue; + if (referenceValue == null) + { + return false; + } + + return true; + } + + public override void Deconstruct() + { + _property = null; + } + } +} \ No newline at end of file diff --git a/Assets/BetterAttributes/Editor/EditorAddons/Drawers/DrawInspector/DrawInspectorWrapper.cs.meta b/Assets/BetterAttributes/Editor/EditorAddons/Drawers/DrawInspector/DrawInspectorHandler.cs.meta similarity index 100% rename from Assets/BetterAttributes/Editor/EditorAddons/Drawers/DrawInspector/DrawInspectorWrapper.cs.meta rename to Assets/BetterAttributes/Editor/EditorAddons/Drawers/DrawInspector/DrawInspectorHandler.cs.meta diff --git a/Assets/BetterAttributes/Editor/EditorAddons/Drawers/DrawInspector/DrawInspectorWrapper.cs b/Assets/BetterAttributes/Editor/EditorAddons/Drawers/DrawInspector/DrawInspectorWrapper.cs deleted file mode 100644 index 8ff7ff2..0000000 --- a/Assets/BetterAttributes/Editor/EditorAddons/Drawers/DrawInspector/DrawInspectorWrapper.cs +++ /dev/null @@ -1,95 +0,0 @@ -using System; -using Better.Commons.EditorAddons.Drawers.Utility; -using Better.Commons.EditorAddons.Utility; -using UnityEditor; -using UnityEngine; - -namespace Better.Attributes.EditorAddons.Drawers.DrawInspector -{ - [Serializable] - public class DrawInspectorWrapper : UtilityWrapper - { - private SerializedProperty _property; - private bool _isOpen = false; - private SerializedObject _serializedObject; - - public void PostDraw(Rect rect) - { - if (!_isOpen) return; - if (_property == null) return; - if (_serializedObject == null && _property.objectReferenceValue != null) - { - _serializedObject = new SerializedObject(_property.objectReferenceValue); - } - - if (_serializedObject == null) - { - return; - } - - var iterator = _serializedObject.GetIterator(); - var x = rect.position.x + 15f; - var y = rect.position.y + EditorGUI.GetPropertyHeight(_property); - rect.position = new Vector2(x, y); - rect.width -= 15f; - using (var change = new EditorGUI.ChangeCheckScope()) - { - for (var enterChildren = true; iterator.NextVisible(enterChildren); enterChildren = false) - { - using (new EditorGUI.DisabledScope("m_Script" == iterator.propertyPath)) - EditorGUI.PropertyField(rect, iterator, true); - rect.position = new Vector2(rect.position.x, rect.position.y + EditorGUI.GetPropertyHeight(iterator, true)); - } - - if (change.changed) - { - _serializedObject.ApplyModifiedProperties(); - } - } - } - - public void SetOpen(bool value) - { - _isOpen = value; - ReorderableListUtility.RepaintAllInspectors(_property); - } - - public bool IsOpen() - { - return _isOpen; - } - - public void SetProperty(SerializedProperty property) - { - if (property.objectReferenceValue != null) - { - _serializedObject = new SerializedObject(property.objectReferenceValue); - } - - _property = property; - } - - public override void Deconstruct() - { - _property = null; - _serializedObject = null; - } - - private float CalculateHeight(SerializedObject serializedObject) - { - var height = 0f; - var iterator = serializedObject.GetIterator(); - for (var enterChildren = true; iterator.NextVisible(enterChildren); enterChildren = false) - { - height += EditorGUI.GetPropertyHeight(iterator, true); - } - - return height; - } - - public float GetHeight() - { - return _serializedObject != null ? CalculateHeight(_serializedObject) : 0f; - } - } -} \ No newline at end of file diff --git a/Assets/BetterAttributes/Editor/EditorAddons/Drawers/Gizmo/BaseWrappers.meta b/Assets/BetterAttributes/Editor/EditorAddons/Drawers/Gizmo/BaseHandlers.meta similarity index 100% rename from Assets/BetterAttributes/Editor/EditorAddons/Drawers/Gizmo/BaseWrappers.meta rename to Assets/BetterAttributes/Editor/EditorAddons/Drawers/Gizmo/BaseHandlers.meta diff --git a/Assets/BetterAttributes/Editor/EditorAddons/Drawers/Gizmo/BaseWrappers/BoundsBaseWrapper.cs b/Assets/BetterAttributes/Editor/EditorAddons/Drawers/Gizmo/BaseHandlers/BoundsBaseHandler.cs similarity index 66% rename from Assets/BetterAttributes/Editor/EditorAddons/Drawers/Gizmo/BaseWrappers/BoundsBaseWrapper.cs rename to Assets/BetterAttributes/Editor/EditorAddons/Drawers/Gizmo/BaseHandlers/BoundsBaseHandler.cs index d1c9c51..a66bc11 100644 --- a/Assets/BetterAttributes/Editor/EditorAddons/Drawers/Gizmo/BaseWrappers/BoundsBaseWrapper.cs +++ b/Assets/BetterAttributes/Editor/EditorAddons/Drawers/Gizmo/BaseHandlers/BoundsBaseHandler.cs @@ -4,13 +4,13 @@ namespace Better.Attributes.EditorAddons.Drawers.Gizmo { - public abstract class BoundsBaseWrapper : GizmoWrapper + public abstract class BoundsBaseHandler : GizmoHandler { - private protected Bounds _bounds; + private protected Bounds _previousValue; private protected Vector3 DrawSize(Vector3 position) { - return Handles.ScaleHandle(_bounds.size, position, Quaternion.identity, + return Handles.ScaleHandle(_previousValue.size, position, Quaternion.identity, HandleUtility.GetHandleSize(position) * 0.7f); } @@ -29,13 +29,13 @@ private protected void ValidateSize(Vector3 size) public override void SetProperty(SerializedProperty property, Type fieldType) { - _bounds = property.boundsValue; + _previousValue = property.boundsValue; base.SetProperty(property, fieldType); - if (_bounds.size == Vector3.zero) + if (_previousValue.size == Vector3.zero) { - _bounds.size = Vector3.one / 10f; - SetValueAndApply(_bounds); + _previousValue.size = Vector3.one / 10f; + SetValueAndApply(_previousValue); } } } diff --git a/Assets/BetterAttributes/Editor/EditorAddons/Drawers/Gizmo/BaseWrappers/BoundsBaseWrapper.cs.meta b/Assets/BetterAttributes/Editor/EditorAddons/Drawers/Gizmo/BaseHandlers/BoundsBaseHandler.cs.meta similarity index 100% rename from Assets/BetterAttributes/Editor/EditorAddons/Drawers/Gizmo/BaseWrappers/BoundsBaseWrapper.cs.meta rename to Assets/BetterAttributes/Editor/EditorAddons/Drawers/Gizmo/BaseHandlers/BoundsBaseHandler.cs.meta diff --git a/Assets/BetterAttributes/Editor/EditorAddons/Drawers/Gizmo/BaseWrappers/GizmoWrapper.cs b/Assets/BetterAttributes/Editor/EditorAddons/Drawers/Gizmo/BaseHandlers/GizmoHandler.cs similarity index 79% rename from Assets/BetterAttributes/Editor/EditorAddons/Drawers/Gizmo/BaseWrappers/GizmoWrapper.cs rename to Assets/BetterAttributes/Editor/EditorAddons/Drawers/Gizmo/BaseHandlers/GizmoHandler.cs index 17ad08d..d758855 100644 --- a/Assets/BetterAttributes/Editor/EditorAddons/Drawers/Gizmo/BaseWrappers/GizmoWrapper.cs +++ b/Assets/BetterAttributes/Editor/EditorAddons/Drawers/Gizmo/BaseHandlers/GizmoHandler.cs @@ -1,36 +1,30 @@ using System; -using Better.Attributes.EditorAddons.Drawers.Utility; -using Better.Commons.EditorAddons.Drawers.Caching; -using Better.Commons.EditorAddons.Drawers.Utility; +using Better.Commons.EditorAddons.Drawers.Handlers; using Better.Commons.EditorAddons.Extensions; using Better.Commons.Runtime.Utility; using UnityEditor; using UnityEngine; -#if UNITY_2022_1_OR_NEWER -using GizmoUtility = Better.Attributes.EditorAddons.Drawers.Utility.GizmoUtility; -#endif - namespace Better.Attributes.EditorAddons.Drawers.Gizmo { - public abstract class GizmoWrapper : UtilityWrapper + public abstract class GizmoHandler : SerializedPropertyHandler { private protected SerializedProperty _serializedProperty; private protected readonly Quaternion _defaultRotation = Quaternion.identity; private protected readonly Vector3 _defaultPosition = Vector3.zero; - private bool _showInSceneView = true; private Type _fieldType; private string _compiledName; - public bool ShowInSceneView => _showInSceneView; + public bool ShowInSceneView { get; private set; } public virtual void SetProperty(SerializedProperty property, Type fieldType) { _serializedProperty = property; _fieldType = fieldType; _compiledName = GetCompiledName(); + ShowInSceneView = true; } private string GetCompiledName() @@ -48,14 +42,9 @@ private string GetCompiledName() return string.Empty; } - public virtual void DrawField(Rect position, GUIContent label) - { - EditorGUI.PropertyField(position, _serializedProperty, label, true); - } - - public void SwitchShowMode() + public void SetMode(bool value) { - _showInSceneView = !ShowInSceneView; + ShowInSceneView = value; } public abstract void Apply(SceneView sceneView); @@ -74,12 +63,21 @@ public virtual bool Validate() { try { + if (_serializedProperty == null) + { + return false; + } + if (!_serializedProperty.Verify()) { return false; } - if (!GizmoUtility.Instance.IsSupported(_fieldType)) return false; + if (_serializedProperty.IsDisposed()) + { + return false; + } + return _serializedProperty.serializedObject.targetObject != null; } catch @@ -130,10 +128,5 @@ private protected virtual Vector3 GetPosition(Vector3 position, Quaternion rotat return rotation * (position + Vector3.up * HandleUtility.GetHandleSize(position) + sceneView.camera.transform.right * 0.2f * HandleUtility.GetHandleSize(position)); } - - public virtual HeightCacheValue GetHeight(GUIContent label) - { - return HeightCacheValue.GetAdditive(0f); - } } } \ No newline at end of file diff --git a/Assets/BetterAttributes/Editor/EditorAddons/Drawers/Gizmo/BaseWrappers/GizmoWrapper.cs.meta b/Assets/BetterAttributes/Editor/EditorAddons/Drawers/Gizmo/BaseHandlers/GizmoHandler.cs.meta similarity index 100% rename from Assets/BetterAttributes/Editor/EditorAddons/Drawers/Gizmo/BaseWrappers/GizmoWrapper.cs.meta rename to Assets/BetterAttributes/Editor/EditorAddons/Drawers/Gizmo/BaseHandlers/GizmoHandler.cs.meta diff --git a/Assets/BetterAttributes/Editor/EditorAddons/Drawers/Gizmo/GizmoDrawer.cs b/Assets/BetterAttributes/Editor/EditorAddons/Drawers/Gizmo/GizmoDrawer.cs index 862acc8..2b761fd 100644 --- a/Assets/BetterAttributes/Editor/EditorAddons/Drawers/Gizmo/GizmoDrawer.cs +++ b/Assets/BetterAttributes/Editor/EditorAddons/Drawers/Gizmo/GizmoDrawer.cs @@ -1,35 +1,25 @@ -using System.Reflection; -using Better.Attributes.EditorAddons.Drawers.WrapperCollections; +using System.Collections.Generic; using Better.Attributes.Runtime.Gizmo; -using Better.Commons.EditorAddons.Drawers.Attributes; -using Better.Commons.EditorAddons.Drawers.Base; -using Better.Commons.EditorAddons.Drawers.Caching; -using Better.Commons.EditorAddons.Enums; -using Better.Commons.EditorAddons.Utility; -using Better.Commons.Runtime.Drawers.Attributes; +using Better.Commons.EditorAddons.Comparers; +using Better.Commons.EditorAddons.Drawers; +using Better.Commons.EditorAddons.Extensions; using UnityEditor; -using UnityEngine; - -#if UNITY_2022_1_OR_NEWER -using GizmoUtility = Better.Attributes.EditorAddons.Drawers.Utility.GizmoUtility; -#else -using Better.Attributes.EditorAddons.Drawers.Utility; -#endif +using UnityEngine.UIElements; namespace Better.Attributes.EditorAddons.Drawers.Gizmo { - [MultiCustomPropertyDrawer(typeof(GizmoAttribute))] - [MultiCustomPropertyDrawer(typeof(GizmoLocalAttribute))] - public class GizmoDrawer : MultiFieldDrawer + [CustomPropertyDrawer(typeof(BaseGizmoAttribute), true)] + public class GizmoDrawer : BasePropertyDrawer { - public GizmoDrawer(FieldInfo fieldInfo, MultiPropertyAttribute attribute) : base(fieldInfo, attribute) - { - } + public const string Hide = "Hide"; + public const string Show = "Show"; - public override void Initialize(FieldDrawer drawer) + private Dictionary> _behavioredElements; + + public GizmoDrawer() { - base.Initialize(drawer); EditorApplication.delayCall += DelayCall; + _behavioredElements = new Dictionary>(SerializedPropertyComparer.Instance); } private void DelayCall() @@ -39,125 +29,97 @@ private void DelayCall() SceneView.RepaintAll(); } - private GizmoWrappers Collection + private void OnSceneGUIDelegate(SceneView sceneView) { - get + if (sceneView.drawGizmos) { - if (_wrappers == null) - { - _wrappers = GenerateCollection(); - } - - return _wrappers as GizmoWrappers; + ValidationUtility.ValidateCachedProperties(Handlers); + Apply(sceneView); } } - private void OnSceneGUIDelegate(SceneView sceneView) + private void Apply(SceneView sceneView) { - if (sceneView.drawGizmos) + List keysToRemove = null; + foreach (var gizmo in Handlers) { - if (_wrappers == null) + var valueWrapper = gizmo.Value.Handler; + if (valueWrapper.Validate()) { - _wrappers = GenerateCollection(); + valueWrapper.Apply(sceneView); } + else + { + if (keysToRemove == null) + { + keysToRemove = new List(); + } - GizmoUtility.Instance.ValidateCachedProperties(_wrappers); - Collection?.Apply(sceneView); + keysToRemove.Add(gizmo.Key); + } + } + + if (keysToRemove != null) + { + foreach (var property in keysToRemove) + { + Handlers.Remove(property); + } } } protected override void Deconstruct() { + base.Deconstruct(); SceneView.duringSceneGui -= OnSceneGUIDelegate; - _wrappers?.Deconstruct(); } - protected override bool PreDraw(ref Rect position, SerializedProperty property, GUIContent label) + protected override void PopulateContainer(ElementsContainer container) { var fieldType = GetFieldOrElementType(); - var attributeType = _attribute.GetType(); + var serializedProperty = container.SerializedProperty; - EditorGUI.BeginChangeCheck(); - if (!GizmoUtility.Instance.IsSupported(fieldType)) + if (!TypeHandlersBinder.IsSupported(fieldType)) { - var rect = new Rect(position); - ExtendedGUIUtility.NotSupportedAttribute(rect, property, label, fieldType, attributeType); - return true; + container.AddNotSupportedBox(fieldType, Attribute.GetType()); + return; } - var cache = ValidateCachedProperties(property, GizmoUtility.Instance); - if (!cache.IsValid) - { - Collection.SetProperty(property, fieldType); - } - - position = PreparePropertyRect(position); - - return true; - } + var handler = GetHandler(serializedProperty); + handler.SetProperty(serializedProperty, fieldType); - protected override void DrawField(Rect position, SerializedProperty property, GUIContent label) - { - if (!Collection.IsValid(property)) + + if (!_behavioredElements.TryGetValue(serializedProperty, out var element)) { - var cache = ValidateCachedProperties(property, GizmoUtility.Instance); - - if (cache.Value != null) - { - var fieldType = GetFieldOrElementType(); - cache.Value.Wrapper.SetProperty(property, fieldType); - } + element = CreateBehavioredElement(serializedProperty); + _behavioredElements.Add(serializedProperty, element); } - - Collection.DrawField(position, property, label); + + var text = handler.ShowInSceneView ? Hide : Show; + element.SubElement.text = text; + element.Attach(container.RootElement); } - protected override void PostDraw(Rect position, SerializedProperty property, GUIContent label) + private void OnClicked(ClickEvent clickEvent, SerializedProperty property) { - if (EditorGUI.EndChangeCheck()) + var handler = GetHandler(property); + handler.SetMode(!handler.ShowInSceneView); + if (!_behavioredElements.TryGetValue(property, out var element)) { - Collection.SetProperty(property, _fieldInfo.FieldType); + element = CreateBehavioredElement(property); + _behavioredElements.Add(property, element); } - - if (GUI.Button(PrepareButtonRect(position), Collection.ShowInSceneView(property) ? "Hide" : "Show")) - { - Collection.SwitchShowMode(property); - SceneView.RepaintAll(); - } - } - - protected override WrapperCollection GenerateCollection() - { - return new GizmoWrappers(); - } - - protected override Rect PreparePropertyRect(Rect original) - { - var copy = original; - copy.width *= 0.9f; - return copy; - } - - private Rect PrepareButtonRect(Rect original) - { - var copy = original; - copy.x += copy.width + ExtendedGUIUtility.SpaceHeight; - copy.width *= 0.1f; - copy.height = EditorGUIUtility.singleLineHeight; - return copy; + + var text = handler.ShowInSceneView ? Hide : Show; + element.SubElement.text = text; + SceneView.RepaintAll(); } - protected override HeightCacheValue GetPropertyHeight(SerializedProperty property, GUIContent label) + private BehavioredElement