From d7f2bdc57e3983fa85310eeb198c393324f08935 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mi=C5=82osz=20Matkowski?= Date: Wed, 2 Mar 2022 21:01:14 +0100 Subject: [PATCH 01/32] Update README.md --- Assets/Editor Toolbox/README.md | 8 ++++---- README.md | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Assets/Editor Toolbox/README.md b/Assets/Editor Toolbox/README.md index 5378dc53..4c83aeb6 100644 --- a/Assets/Editor Toolbox/README.md +++ b/Assets/Editor Toolbox/README.md @@ -602,14 +602,14 @@ public void Usage() #endif ``` -#### SerializedDateTime - -Allows to serialize DateTime. - ![inspector](https://github.com/arimger/Unity-Editor-Toolbox/blob/develop/Docs/dictionary1.png) ![inspector](https://github.com/arimger/Unity-Editor-Toolbox/blob/develop/Docs/dictionary2.png) +#### SerializedDateTime + +Allows to serialize DateTime. + #### SerializedDirectory Allows to serialize folders in form of assets and retrieve direct paths in runtime. diff --git a/README.md b/README.md index 5378dc53..4c83aeb6 100644 --- a/README.md +++ b/README.md @@ -602,14 +602,14 @@ public void Usage() #endif ``` -#### SerializedDateTime - -Allows to serialize DateTime. - ![inspector](https://github.com/arimger/Unity-Editor-Toolbox/blob/develop/Docs/dictionary1.png) ![inspector](https://github.com/arimger/Unity-Editor-Toolbox/blob/develop/Docs/dictionary2.png) +#### SerializedDateTime + +Allows to serialize DateTime. + #### SerializedDirectory Allows to serialize folders in form of assets and retrieve direct paths in runtime. From b4fd8805c103a3ef620cc1b5c52a6beb69f50881 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mi=C5=82osz=20Matkowski?= Date: Wed, 2 Mar 2022 21:50:15 +0100 Subject: [PATCH 02/32] Add ReferencePickerAttribute --- .../RegularAttributes/ReferencePickerAttribute.cs | 13 +++++++++++++ .../ReferencePickerAttribute.cs.meta | 11 +++++++++++ 2 files changed, 24 insertions(+) create mode 100644 Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/ReferencePickerAttribute.cs create mode 100644 Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/ReferencePickerAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/ReferencePickerAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/ReferencePickerAttribute.cs new file mode 100644 index 00000000..dbe09e40 --- /dev/null +++ b/Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/ReferencePickerAttribute.cs @@ -0,0 +1,13 @@ +using System; +using System.Diagnostics; + +namespace UnityEngine +{ + /// + /// Creates dedicated drawer for fields marked with . + /// + [AttributeUsage(AttributeTargets.Field, AllowMultiple = false)] + [Conditional("UNITY_EDITOR")] + public class ReferencePickerAttribute : PropertyAttribute + { } +} \ No newline at end of file diff --git a/Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/ReferencePickerAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/ReferencePickerAttribute.cs.meta new file mode 100644 index 00000000..95e6b8f0 --- /dev/null +++ b/Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/ReferencePickerAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 99f196ef06b29634cb8bbd2fcde93038 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: From 681e280ae124dd07d6b2429158fbf2a5fb96a981 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mi=C5=82osz=20Matkowski?= Date: Sat, 19 Mar 2022 22:27:02 +0100 Subject: [PATCH 03/32] Fix drawing property handlers with invalid properties --- .../Editor Toolbox/Editor/ToolboxEditorGui.cs | 4 +- .../Editor/ToolboxPropertyHandler.cs | 44 ++++++++++++++++--- 2 files changed, 40 insertions(+), 8 deletions(-) diff --git a/Assets/Editor Toolbox/Editor/ToolboxEditorGui.cs b/Assets/Editor Toolbox/Editor/ToolboxEditorGui.cs index eae6cb97..fafdf210 100644 --- a/Assets/Editor Toolbox/Editor/ToolboxEditorGui.cs +++ b/Assets/Editor Toolbox/Editor/ToolboxEditorGui.cs @@ -434,7 +434,7 @@ public static void DrawToolboxProperty(Rect position, SerializedProperty propert /// public static void DrawToolboxProperty(SerializedProperty property) { - ToolboxDrawerModule.GetPropertyHandler(property)?.OnGuiLayout(); + ToolboxDrawerModule.GetPropertyHandler(property)?.OnGuiLayout(property); } /// @@ -443,7 +443,7 @@ public static void DrawToolboxProperty(SerializedProperty property) /// public static void DrawToolboxProperty(SerializedProperty property, GUIContent label) { - ToolboxDrawerModule.GetPropertyHandler(property)?.OnGuiLayout(label); + ToolboxDrawerModule.GetPropertyHandler(property)?.OnGuiLayout(property, label); } /// diff --git a/Assets/Editor Toolbox/Editor/ToolboxPropertyHandler.cs b/Assets/Editor Toolbox/Editor/ToolboxPropertyHandler.cs index 2590d111..e717ab92 100644 --- a/Assets/Editor Toolbox/Editor/ToolboxPropertyHandler.cs +++ b/Assets/Editor Toolbox/Editor/ToolboxPropertyHandler.cs @@ -87,7 +87,7 @@ internal class ToolboxPropertyHandler /// /// Constructor prepares all property-related data for custom drawing. /// - public ToolboxPropertyHandler(SerializedProperty property) + internal ToolboxPropertyHandler(SerializedProperty property) { this.property = property; @@ -249,7 +249,7 @@ private bool TryAssignConditionAttribute(ToolboxConditionAttribute attribute) } } - private void DrawProperty(GUIContent label) + private void DrawProperty(SerializedProperty property, GUIContent label) { //get toolbox drawer for the property or draw it in the default way if (hasToolboxPropertyDrawer && (!hasBuiltInPropertyDrawer || isArray)) @@ -271,7 +271,7 @@ private void DrawProperty(GUIContent label) } else { - OnGuiDefault(label); + OnGuiDefault(property, label); } } @@ -301,7 +301,7 @@ private void CloseDecoratorDrawers() } } - private PropertyCondition Validate() + private PropertyCondition Validate(SerializedProperty property) { if (!hasToolboxConditionDrawer) { @@ -337,6 +337,22 @@ public void OnGuiLayout() /// Draw property using built-in layout system and cached s. /// public void OnGuiLayout(GUIContent label) + { + OnGuiLayout(property, label); + } + + /// + /// Draw property using built-in layout system and cached s. + /// + public void OnGuiLayout(SerializedProperty property) + { + OnGuiLayout(property, label); + } + + /// + /// Draw property using built-in layout system and cached s. + /// + public void OnGuiLayout(SerializedProperty property, GUIContent label) { //depending on previously gained data we can provide more action //using custom attributes and information about native drawers @@ -346,7 +362,7 @@ public void OnGuiLayout(GUIContent label) BeginDecoratorDrawers(); //handle condition attribute and draw property if possible - var conditionState = Validate(); + var conditionState = Validate(property); var isValid = conditionState != PropertyCondition.NonValid; var disable = conditionState == PropertyCondition.Disabled; if (isValid) @@ -354,7 +370,7 @@ public void OnGuiLayout(GUIContent label) using (new EditorGUI.DisabledScope(disable)) { BeginVerticalLayoutBody(); - DrawProperty(label); + DrawProperty(property, label); CloseVerticalLayoutBody(); } } @@ -375,6 +391,22 @@ public void OnGuiDefault() /// Draws property in the default way, without additional s. /// public void OnGuiDefault(GUIContent label) + { + OnGuiDefault(property, label); + } + + /// + /// Draws property in the default way, without additional s. + /// + public void OnGuiDefault(SerializedProperty property) + { + OnGuiDefault(property, label); + } + + /// + /// Draws property in the default way, without additional s. + /// + public void OnGuiDefault(SerializedProperty property, GUIContent label) { //all "single" properties and native drawers should be drawn in the native way if (hasBuiltInPropertyDrawer) From 38917ab79fc0c633b4aa049135cda314e2a95132 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mi=C5=82osz=20Matkowski?= Date: Sat, 19 Mar 2022 22:27:56 +0100 Subject: [PATCH 04/32] Add basic scripts related to the type picker for SerializeReference properties --- .../Regular/ReferencePickerAttributeDrawer.cs | 9 ++++ .../ReferencePickerAttributeDrawer.cs.meta | 11 ++++ .../ReferencePickerAttribute.cs | 2 +- Assets/Examples/Scenes/SampleScene.unity | 53 +++++++++++++++++++ Assets/Examples/Scripts/SampleReference1.cs | 7 +++ .../Examples/Scripts/SampleReference1.cs.meta | 11 ++++ Assets/Examples/Scripts/SampleReference2.cs | 7 +++ .../Examples/Scripts/SampleReference2.cs.meta | 11 ++++ .../Examples/Scripts/SampleReferenceBase.cs | 7 +++ .../Scripts/SampleReferenceBase.cs.meta | 11 ++++ .../Examples/Scripts/SampleReferenceTest.cs | 20 +++++++ .../Scripts/SampleReferenceTest.cs.meta | 11 ++++ 12 files changed, 159 insertions(+), 1 deletion(-) create mode 100644 Assets/Editor Toolbox/Editor/Drawers/Regular/ReferencePickerAttributeDrawer.cs create mode 100644 Assets/Editor Toolbox/Editor/Drawers/Regular/ReferencePickerAttributeDrawer.cs.meta create mode 100644 Assets/Examples/Scripts/SampleReference1.cs create mode 100644 Assets/Examples/Scripts/SampleReference1.cs.meta create mode 100644 Assets/Examples/Scripts/SampleReference2.cs create mode 100644 Assets/Examples/Scripts/SampleReference2.cs.meta create mode 100644 Assets/Examples/Scripts/SampleReferenceBase.cs create mode 100644 Assets/Examples/Scripts/SampleReferenceBase.cs.meta create mode 100644 Assets/Examples/Scripts/SampleReferenceTest.cs create mode 100644 Assets/Examples/Scripts/SampleReferenceTest.cs.meta diff --git a/Assets/Editor Toolbox/Editor/Drawers/Regular/ReferencePickerAttributeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Regular/ReferencePickerAttributeDrawer.cs new file mode 100644 index 00000000..0ed04560 --- /dev/null +++ b/Assets/Editor Toolbox/Editor/Drawers/Regular/ReferencePickerAttributeDrawer.cs @@ -0,0 +1,9 @@ +using UnityEditor; +using UnityEngine; + +namespace Toolbox.Editor.Drawers +{ + [CustomPropertyDrawer(typeof(ReferencePickerAttribute))] + public class ReferencePickerAttributeDrawer : PropertyDrawerBase + { } +} \ No newline at end of file diff --git a/Assets/Editor Toolbox/Editor/Drawers/Regular/ReferencePickerAttributeDrawer.cs.meta b/Assets/Editor Toolbox/Editor/Drawers/Regular/ReferencePickerAttributeDrawer.cs.meta new file mode 100644 index 00000000..14b790e2 --- /dev/null +++ b/Assets/Editor Toolbox/Editor/Drawers/Regular/ReferencePickerAttributeDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0723cee1c15272540b6ec0bb3f8f5223 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/ReferencePickerAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/ReferencePickerAttribute.cs index dbe09e40..9fa52449 100644 --- a/Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/ReferencePickerAttribute.cs +++ b/Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/ReferencePickerAttribute.cs @@ -4,7 +4,7 @@ namespace UnityEngine { /// - /// Creates dedicated drawer for fields marked with . + /// Creates dedicated drawer for fields marked with the . /// [AttributeUsage(AttributeTargets.Field, AllowMultiple = false)] [Conditional("UNITY_EDITOR")] diff --git a/Assets/Examples/Scenes/SampleScene.unity b/Assets/Examples/Scenes/SampleScene.unity index 16069472..0d2e319b 100644 --- a/Assets/Examples/Scenes/SampleScene.unity +++ b/Assets/Examples/Scenes/SampleScene.unity @@ -986,6 +986,59 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 14 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1566325510 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1566325512} + - component: {fileID: 1566325511} + m_Layer: 0 + m_Name: Test + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1566325511 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1566325510} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a0323e91bfeae1c488545bee770d3fa7, type: 3} + m_Name: + m_EditorClassIdentifier: + isOn: 0 + reference: + id: 0 + references: + version: 1 + 00000000: + type: {class: SampleReference2, ns: , asm: Assembly-CSharp} + data: + var1: 0 + var2: 0 +--- !u!4 &1566325512 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1566325510} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 16 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1661307763 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Examples/Scripts/SampleReference1.cs b/Assets/Examples/Scripts/SampleReference1.cs new file mode 100644 index 00000000..c934a0ba --- /dev/null +++ b/Assets/Examples/Scripts/SampleReference1.cs @@ -0,0 +1,7 @@ +using System; + +[Serializable] +public class SampleReference1 : SampleReferenceBase +{ + public bool var2; +} \ No newline at end of file diff --git a/Assets/Examples/Scripts/SampleReference1.cs.meta b/Assets/Examples/Scripts/SampleReference1.cs.meta new file mode 100644 index 00000000..5fe40e7a --- /dev/null +++ b/Assets/Examples/Scripts/SampleReference1.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f153a97b0fa5f31479d8347b2ac57955 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Examples/Scripts/SampleReference2.cs b/Assets/Examples/Scripts/SampleReference2.cs new file mode 100644 index 00000000..92f90590 --- /dev/null +++ b/Assets/Examples/Scripts/SampleReference2.cs @@ -0,0 +1,7 @@ +using System; + +[Serializable] +public class SampleReference2 : SampleReferenceBase +{ + public float var2; +} diff --git a/Assets/Examples/Scripts/SampleReference2.cs.meta b/Assets/Examples/Scripts/SampleReference2.cs.meta new file mode 100644 index 00000000..eff50574 --- /dev/null +++ b/Assets/Examples/Scripts/SampleReference2.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 526ef825e45b796459dcc7021b1784d8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Examples/Scripts/SampleReferenceBase.cs b/Assets/Examples/Scripts/SampleReferenceBase.cs new file mode 100644 index 00000000..42e1a624 --- /dev/null +++ b/Assets/Examples/Scripts/SampleReferenceBase.cs @@ -0,0 +1,7 @@ +using System; + +[Serializable] +public abstract class SampleReferenceBase +{ + public float var1; +} diff --git a/Assets/Examples/Scripts/SampleReferenceBase.cs.meta b/Assets/Examples/Scripts/SampleReferenceBase.cs.meta new file mode 100644 index 00000000..c46d9bf3 --- /dev/null +++ b/Assets/Examples/Scripts/SampleReferenceBase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 74dec091263855049b8066a558d5c2f5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Examples/Scripts/SampleReferenceTest.cs b/Assets/Examples/Scripts/SampleReferenceTest.cs new file mode 100644 index 00000000..861fcd80 --- /dev/null +++ b/Assets/Examples/Scripts/SampleReferenceTest.cs @@ -0,0 +1,20 @@ +using UnityEngine; + +public class SampleReferenceTest : MonoBehaviour +{ + public bool isOn; + [SerializeReference] + public SampleReferenceBase reference; + + private void OnValidate() + { + if (isOn) + { + reference = new SampleReference1(); + } + else + { + reference = new SampleReference2(); + } + } +} \ No newline at end of file diff --git a/Assets/Examples/Scripts/SampleReferenceTest.cs.meta b/Assets/Examples/Scripts/SampleReferenceTest.cs.meta new file mode 100644 index 00000000..e1bacbf1 --- /dev/null +++ b/Assets/Examples/Scripts/SampleReferenceTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a0323e91bfeae1c488545bee770d3fa7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: From 34a0022c19a61d089844b6637d54e22c975f944a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mi=C5=82osz=20Matkowski?= Date: Sat, 2 Apr 2022 23:18:02 +0200 Subject: [PATCH 05/32] First working version of the ReferencePickerAttribute&Drawer --- .../Regular/ReferencePickerAttributeDrawer.cs | 9 -- .../Drawers/Regular/SerializedTypeDrawer.cs | 6 +- .../ReferencePickerAttributeDrawer.cs | 110 ++++++++++++++++++ .../ReferencePickerAttributeDrawer.cs.meta | 2 +- Assets/Editor Toolbox/EditorSettings.asset | 1 + .../ReferencePickerAttribute.cs | 4 +- .../ReferencePickerAttribute.cs.meta | 0 Assets/Examples/Scenes/SampleScene.unity | 108 ++++++++--------- .../Examples/Scripts/SampleReferenceTest.cs | 14 +-- 9 files changed, 174 insertions(+), 80 deletions(-) delete mode 100644 Assets/Editor Toolbox/Editor/Drawers/Regular/ReferencePickerAttributeDrawer.cs create mode 100644 Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelfDrawers/ReferencePickerAttributeDrawer.cs rename Assets/Editor Toolbox/Editor/Drawers/{Regular => Toolbox/PropertySelfDrawers}/ReferencePickerAttributeDrawer.cs.meta (83%) rename Assets/Editor Toolbox/Scripts/Attributes/{RegularAttributes => ToolboxAttributes/PropertySelfAttributes}/ReferencePickerAttribute.cs (60%) rename Assets/Editor Toolbox/Scripts/Attributes/{RegularAttributes => ToolboxAttributes/PropertySelfAttributes}/ReferencePickerAttribute.cs.meta (100%) diff --git a/Assets/Editor Toolbox/Editor/Drawers/Regular/ReferencePickerAttributeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Regular/ReferencePickerAttributeDrawer.cs deleted file mode 100644 index 0ed04560..00000000 --- a/Assets/Editor Toolbox/Editor/Drawers/Regular/ReferencePickerAttributeDrawer.cs +++ /dev/null @@ -1,9 +0,0 @@ -using UnityEditor; -using UnityEngine; - -namespace Toolbox.Editor.Drawers -{ - [CustomPropertyDrawer(typeof(ReferencePickerAttribute))] - public class ReferencePickerAttributeDrawer : PropertyDrawerBase - { } -} \ No newline at end of file diff --git a/Assets/Editor Toolbox/Editor/Drawers/Regular/SerializedTypeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Regular/SerializedTypeDrawer.cs index 2996059c..f662a20f 100644 --- a/Assets/Editor Toolbox/Editor/Drawers/Regular/SerializedTypeDrawer.cs +++ b/Assets/Editor Toolbox/Editor/Drawers/Regular/SerializedTypeDrawer.cs @@ -57,7 +57,7 @@ private static string FormatGroupedTypeName(Type type, ClassGrouping grouping) /// /// Returns valid equivalent of the referenced . /// - private static string GetClassReferencValue(int selectedType, List types) + private static string GetClassReferenceValue(int selectedType, List types) { return selectedType > 0 ? SerializedType.GetClassReference(types[selectedType - 1]) : string.Empty; } @@ -159,7 +159,7 @@ protected override void OnGUISafe(Rect position, SerializedProperty property, GU try { referenceProperty.serializedObject.Update(); - referenceProperty.stringValue = GetClassReferencValue(i, filteredTypes); + referenceProperty.stringValue = GetClassReferenceValue(i, filteredTypes); referenceProperty.serializedObject.ApplyModifiedProperties(); } catch (Exception e) when (e is ArgumentNullException || e is NullReferenceException) @@ -176,7 +176,7 @@ protected override void OnGUISafe(Rect position, SerializedProperty property, GU index = EditorGUI.Popup(position, index, options); if (EditorGUI.EndChangeCheck()) { - referenceProperty.stringValue = GetClassReferencValue(index, filteredTypes); + referenceProperty.stringValue = GetClassReferenceValue(index, filteredTypes); } } } diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelfDrawers/ReferencePickerAttributeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelfDrawers/ReferencePickerAttributeDrawer.cs new file mode 100644 index 00000000..8492cd54 --- /dev/null +++ b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelfDrawers/ReferencePickerAttributeDrawer.cs @@ -0,0 +1,110 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +using UnityEditor; +using UnityEngine; + +namespace Toolbox.Editor.Drawers +{ + using Toolbox.Editor.Internal; + + public class ReferencePickerAttributeDrawer : ToolboxSelfPropertyDrawer + { + private readonly static Dictionary> cachedfilteredTypes = new Dictionary>(); + + //TODO: additional utility class, something like "EditorTypesUtility" + private static bool TryGetTypeFromManagedReferenceFullTypeName(string managedReferenceFullTypename, out Type managedReferenceInstanceType) + { + managedReferenceInstanceType = null; + + var parts = managedReferenceFullTypename.Split(' '); + if (parts.Length == 2) + { + var assemblyPart = parts[0]; + var nsClassnamePart = parts[1]; + //TODO: cache it + managedReferenceInstanceType = Type.GetType($"{nsClassnamePart}, {assemblyPart}"); + } + + return managedReferenceInstanceType != null; + } + + private static List GetFilteredTypes(Type type) + { + var hashCode = type.GetHashCode(); + if (cachedfilteredTypes.TryGetValue(hashCode, out var filteredTypes)) + { + return filteredTypes; + } + else + { + return cachedfilteredTypes[hashCode] = TypeCache.GetTypesDerivedFrom(type).ToList(); + } + } + + + protected override void OnGuiSafe(SerializedProperty property, GUIContent label, ReferencePickerAttribute attribute) + { + using (var propertyScope = new PropertyScope(property, label)) + { + if (!propertyScope.IsVisible) + { + return; + } + + EditorGUI.indentLevel++; + //TODO: handle null + TryGetTypeFromManagedReferenceFullTypeName(property.managedReferenceFullTypename, out var currentType); + var fieldInfo = property.GetFieldInfo(out Type mainType); + var filteredTypes = GetFilteredTypes(mainType); + + var itemsCount = filteredTypes.Count; + var options = new string[itemsCount]; + var index = 0; + + //create labels for all types + for (var i = 0; i < itemsCount; i++) + { + var menuType = filteredTypes[i]; + var menuLabel = menuType.FullName; + if (menuType == currentType) + { + index = i; + } + + options[i] = menuLabel; + } + + var buttonLabel = new GUIContent(options[index]); + //TODO: move it to ToolboxEditorGui + var position = EditorGUILayout.GetControlRect(false, 16.0f); + ToolboxEditorGui.DrawSearchablePopup(position, buttonLabel, index, options, (i) => + { + try + { + //TODO: handle multiple objects + property.serializedObject.Update(); + var type = i >= 0 ? filteredTypes[i] : null; + var obj = type != null ? Activator.CreateInstance(type) : null; + property.managedReferenceValue = obj; + property.serializedObject.ApplyModifiedProperties(); + } + catch (Exception e) when (e is ArgumentNullException || e is NullReferenceException) + { + ToolboxEditorLog.LogWarning("Invalid attempt to update disposed property."); + } + }); + + ToolboxEditorGui.DrawPropertyChildren(property); + EditorGUI.indentLevel--; + } + } + + public override bool IsPropertyValid(SerializedProperty property) + { + //TODO: validate property (check for the SerializeReferenceAttribute) + return true; + } + } +} \ No newline at end of file diff --git a/Assets/Editor Toolbox/Editor/Drawers/Regular/ReferencePickerAttributeDrawer.cs.meta b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelfDrawers/ReferencePickerAttributeDrawer.cs.meta similarity index 83% rename from Assets/Editor Toolbox/Editor/Drawers/Regular/ReferencePickerAttributeDrawer.cs.meta rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelfDrawers/ReferencePickerAttributeDrawer.cs.meta index 14b790e2..bd3afb89 100644 --- a/Assets/Editor Toolbox/Editor/Drawers/Regular/ReferencePickerAttributeDrawer.cs.meta +++ b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelfDrawers/ReferencePickerAttributeDrawer.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 0723cee1c15272540b6ec0bb3f8f5223 +guid: 79a1b5133682db942818cc3b16b59d6e MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/Editor Toolbox/EditorSettings.asset b/Assets/Editor Toolbox/EditorSettings.asset index 754ef20f..e236cecb 100644 --- a/Assets/Editor Toolbox/EditorSettings.asset +++ b/Assets/Editor Toolbox/EditorSettings.asset @@ -82,6 +82,7 @@ MonoBehaviour: - classReference: Toolbox.Editor.Drawers.DynamicRangeAttributeDrawer, Toolbox.Editor - classReference: Toolbox.Editor.Drawers.IgnoreParentAttributeDrawer, Toolbox.Editor - classReference: Toolbox.Editor.Drawers.InLineEditorAttributeDrawer, Toolbox.Editor + - classReference: Toolbox.Editor.Drawers.ReferencePickerAttributeDrawer, Toolbox.Editor - classReference: Toolbox.Editor.Drawers.RegexValueAttributeDrawer, Toolbox.Editor listPropertyDrawerHandlers: - classReference: Toolbox.Editor.Drawers.ReorderableListAttributeDrawer, Toolbox.Editor diff --git a/Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/ReferencePickerAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/PropertySelfAttributes/ReferencePickerAttribute.cs similarity index 60% rename from Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/ReferencePickerAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/PropertySelfAttributes/ReferencePickerAttribute.cs index 9fa52449..1a5c7700 100644 --- a/Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/ReferencePickerAttribute.cs +++ b/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/PropertySelfAttributes/ReferencePickerAttribute.cs @@ -5,9 +5,11 @@ namespace UnityEngine { /// /// Creates dedicated drawer for fields marked with the . + /// + /// Supported types: any serializable type and field with the attribute. /// [AttributeUsage(AttributeTargets.Field, AllowMultiple = false)] [Conditional("UNITY_EDITOR")] - public class ReferencePickerAttribute : PropertyAttribute + public class ReferencePickerAttribute : ToolboxSelfPropertyAttribute { } } \ No newline at end of file diff --git a/Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/ReferencePickerAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/PropertySelfAttributes/ReferencePickerAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/ReferencePickerAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/PropertySelfAttributes/ReferencePickerAttribute.cs.meta diff --git a/Assets/Examples/Scenes/SampleScene.unity b/Assets/Examples/Scenes/SampleScene.unity index 0d2e319b..1613158f 100644 --- a/Assets/Examples/Scenes/SampleScene.unity +++ b/Assets/Examples/Scenes/SampleScene.unity @@ -588,6 +588,59 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 15 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &752799891 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 752799893} + - component: {fileID: 752799892} + m_Layer: 0 + m_Name: SerializeReferenceTest + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &752799892 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 752799891} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a0323e91bfeae1c488545bee770d3fa7, type: 3} + m_Name: + m_EditorClassIdentifier: + isOn: 0 + reference: + id: 0 + references: + version: 1 + 00000000: + type: {class: SampleReference1, ns: , asm: Assembly-CSharp} + data: + var1: 0 + var2: 0 +--- !u!4 &752799893 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 752799891} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 16 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &758033804 GameObject: m_ObjectHideFlags: 0 @@ -707,10 +760,12 @@ MonoBehaviour: scene1: sceneReference: {fileID: 102900000, guid: f11034f4657f51a47aac14f26410c500, type: 3} sceneName: SampleScene + scenePath: Assets/Examples/Scenes/SampleScene.unity buildIndex: 0 scene2: sceneReference: {fileID: 102900000, guid: f11034f4657f51a47aac14f26410c500, type: 3} sceneName: SampleScene + scenePath: Assets/Examples/Scenes/SampleScene.unity buildIndex: 0 bigNumber: 12345678 currency: 20.41 @@ -986,59 +1041,6 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 14 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1566325510 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1566325512} - - component: {fileID: 1566325511} - m_Layer: 0 - m_Name: Test - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1566325511 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1566325510} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a0323e91bfeae1c488545bee770d3fa7, type: 3} - m_Name: - m_EditorClassIdentifier: - isOn: 0 - reference: - id: 0 - references: - version: 1 - 00000000: - type: {class: SampleReference2, ns: , asm: Assembly-CSharp} - data: - var1: 0 - var2: 0 ---- !u!4 &1566325512 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1566325510} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 16 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1661307763 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Examples/Scripts/SampleReferenceTest.cs b/Assets/Examples/Scripts/SampleReferenceTest.cs index 861fcd80..c35250d8 100644 --- a/Assets/Examples/Scripts/SampleReferenceTest.cs +++ b/Assets/Examples/Scripts/SampleReferenceTest.cs @@ -3,18 +3,6 @@ public class SampleReferenceTest : MonoBehaviour { public bool isOn; - [SerializeReference] + [SerializeReference, ReferencePicker] public SampleReferenceBase reference; - - private void OnValidate() - { - if (isOn) - { - reference = new SampleReference1(); - } - else - { - reference = new SampleReference2(); - } - } } \ No newline at end of file From 7273a9d5a044690e3ed22eada193e9b70ffd6a57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mi=C5=82osz=20Matkowski?= Date: Sun, 3 Apr 2022 00:13:49 +0200 Subject: [PATCH 06/32] WIP TypeUtilities class --- .../Editor/Utilities/TypeUtilities.cs | 31 +++++++++++++++++++ .../Editor/Utilities/TypeUtilities.cs.meta | 11 +++++++ 2 files changed, 42 insertions(+) create mode 100644 Assets/Editor Toolbox/Editor/Utilities/TypeUtilities.cs create mode 100644 Assets/Editor Toolbox/Editor/Utilities/TypeUtilities.cs.meta diff --git a/Assets/Editor Toolbox/Editor/Utilities/TypeUtilities.cs b/Assets/Editor Toolbox/Editor/Utilities/TypeUtilities.cs new file mode 100644 index 00000000..65cf7313 --- /dev/null +++ b/Assets/Editor Toolbox/Editor/Utilities/TypeUtilities.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +using UnityEditor; + +namespace Toolbox.Editor +{ + public static class TypeUtilities + { + private static readonly Dictionary> cachedTypes = new Dictionary>(); + + + public static List GetTypes(Type parentType) + { + var types = TypeCache.GetTypesDerivedFrom(parentType).ToList(); + for (var i = types.Count - 1; i >= 0; i--) + { + var type = types[i]; + //if (IsConstraintSatisfied(type)) + { + continue; + } + + //types.RemoveAt(i); + } + + return types; + } + } +} \ No newline at end of file diff --git a/Assets/Editor Toolbox/Editor/Utilities/TypeUtilities.cs.meta b/Assets/Editor Toolbox/Editor/Utilities/TypeUtilities.cs.meta new file mode 100644 index 00000000..2c07c185 --- /dev/null +++ b/Assets/Editor Toolbox/Editor/Utilities/TypeUtilities.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3688f6c8b9775cf4f80143c85f5b36a1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: From f220fa257974a92b12f5ea0b4f77ca2d5915ae41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mi=C5=82osz=20Matkowski?= Date: Sun, 3 Apr 2022 00:13:57 +0200 Subject: [PATCH 07/32] Minor refactor changes --- .../Editor/Drawers/Regular/SerializedTypeDrawer.cs | 3 ++- .../PropertySelfDrawers/ReferencePickerAttributeDrawer.cs | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Assets/Editor Toolbox/Editor/Drawers/Regular/SerializedTypeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Regular/SerializedTypeDrawer.cs index f662a20f..fcb0a427 100644 --- a/Assets/Editor Toolbox/Editor/Drawers/Regular/SerializedTypeDrawer.cs +++ b/Assets/Editor Toolbox/Editor/Drawers/Regular/SerializedTypeDrawer.cs @@ -15,7 +15,7 @@ public sealed class SerializedTypeDrawer : PropertyDrawerBase /// /// Dictionary used to store all previously filtered types matched to the targt attribute. /// - private readonly static Dictionary> cachedfilteredTypes = new Dictionary>(); + private static readonly Dictionary> cachedfilteredTypes = new Dictionary>(); /// @@ -41,6 +41,7 @@ private static string FormatGroupedTypeName(Type type, ClassGrouping grouping) { name = name.Substring(0, lastPeriodIndex) + "/" + name.Substring(lastPeriodIndex + 1); } + return name; case ClassGrouping.ByAddComponentMenu: diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelfDrawers/ReferencePickerAttributeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelfDrawers/ReferencePickerAttributeDrawer.cs index 8492cd54..e612c55a 100644 --- a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelfDrawers/ReferencePickerAttributeDrawer.cs +++ b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelfDrawers/ReferencePickerAttributeDrawer.cs @@ -11,7 +11,7 @@ namespace Toolbox.Editor.Drawers public class ReferencePickerAttributeDrawer : ToolboxSelfPropertyDrawer { - private readonly static Dictionary> cachedfilteredTypes = new Dictionary>(); + private static readonly Dictionary> cachedfilteredTypes = new Dictionary>(); //TODO: additional utility class, something like "EditorTypesUtility" private static bool TryGetTypeFromManagedReferenceFullTypeName(string managedReferenceFullTypename, out Type managedReferenceInstanceType) From a3f1488255b4336817dc1dcce7a270833fc5327d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mi=C5=82osz=20Matkowski?= Date: Sun, 3 Apr 2022 22:48:01 +0200 Subject: [PATCH 08/32] WIP new type caching&management system --- .../ReferencePickerAttributeDrawer.cs | 110 ++++++++---------- .../Editor/Internal/TypeCachedInfo.cs | 31 +++++ .../Editor/Internal/TypeCachedInfo.cs.meta | 11 ++ .../Editor/Internal/TypeField.cs | 39 +++++++ .../Editor/Internal/TypeField.cs.meta | 11 ++ .../Editor/Utilities/TypeUtilities.cs | 48 +++++++- 6 files changed, 187 insertions(+), 63 deletions(-) create mode 100644 Assets/Editor Toolbox/Editor/Internal/TypeCachedInfo.cs create mode 100644 Assets/Editor Toolbox/Editor/Internal/TypeCachedInfo.cs.meta create mode 100644 Assets/Editor Toolbox/Editor/Internal/TypeField.cs create mode 100644 Assets/Editor Toolbox/Editor/Internal/TypeField.cs.meta diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelfDrawers/ReferencePickerAttributeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelfDrawers/ReferencePickerAttributeDrawer.cs index e612c55a..ec242c58 100644 --- a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelfDrawers/ReferencePickerAttributeDrawer.cs +++ b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelfDrawers/ReferencePickerAttributeDrawer.cs @@ -12,23 +12,7 @@ namespace Toolbox.Editor.Drawers public class ReferencePickerAttributeDrawer : ToolboxSelfPropertyDrawer { private static readonly Dictionary> cachedfilteredTypes = new Dictionary>(); - - //TODO: additional utility class, something like "EditorTypesUtility" - private static bool TryGetTypeFromManagedReferenceFullTypeName(string managedReferenceFullTypename, out Type managedReferenceInstanceType) - { - managedReferenceInstanceType = null; - - var parts = managedReferenceFullTypename.Split(' '); - if (parts.Length == 2) - { - var assemblyPart = parts[0]; - var nsClassnamePart = parts[1]; - //TODO: cache it - managedReferenceInstanceType = Type.GetType($"{nsClassnamePart}, {assemblyPart}"); - } - - return managedReferenceInstanceType != null; - } + private static readonly TypeField typeField = new TypeField(); private static List GetFilteredTypes(Type type) { @@ -43,59 +27,67 @@ private static List GetFilteredTypes(Type type) } } - - protected override void OnGuiSafe(SerializedProperty property, GUIContent label, ReferencePickerAttribute attribute) + private void DrawTypeProperty(SerializedProperty property) { - using (var propertyScope = new PropertyScope(property, label)) + property.GetFieldInfo(out Type propertyType); + + //TODO: handle null + if (!TypeUtilities.TryGetTypeFromManagedReferenceFullTypeName(property.managedReferenceFullTypename, out var currentType)) { - if (!propertyScope.IsVisible) - { - return; - } - EditorGUI.indentLevel++; - //TODO: handle null - TryGetTypeFromManagedReferenceFullTypeName(property.managedReferenceFullTypename, out var currentType); - var fieldInfo = property.GetFieldInfo(out Type mainType); - var filteredTypes = GetFilteredTypes(mainType); + } - var itemsCount = filteredTypes.Count; - var options = new string[itemsCount]; - var index = 0; + var filteredTypes = GetFilteredTypes(propertyType); + var itemsCount = filteredTypes.Count; + var options = new string[itemsCount]; + var index = 0; - //create labels for all types - for (var i = 0; i < itemsCount; i++) + //create labels for all types + for (var i = 0; i < itemsCount; i++) + { + var menuType = filteredTypes[i]; + var menuLabel = menuType.Name; + if (menuType == currentType) { - var menuType = filteredTypes[i]; - var menuLabel = menuType.FullName; - if (menuType == currentType) - { - index = i; - } + index = i; + } + + options[i] = menuLabel; + } - options[i] = menuLabel; + var buttonLabel = new GUIContent(options[index]); + //TODO: move it to ToolboxEditorGui + var position = EditorGUILayout.GetControlRect(false, EditorGUIUtility.singleLineHeight); + ToolboxEditorGui.DrawSearchablePopup(position, buttonLabel, index, options, (i) => + { + try + { + //TODO: handle multiple objects + property.serializedObject.Update(); + var type = i >= 0 ? filteredTypes[i] : null; + var obj = type != null ? Activator.CreateInstance(type) : null; + property.managedReferenceValue = obj; + property.serializedObject.ApplyModifiedProperties(); } + catch (Exception e) when (e is ArgumentNullException || e is NullReferenceException) + { + ToolboxEditorLog.LogWarning("Invalid attempt to update disposed property."); + } + }); + } + - var buttonLabel = new GUIContent(options[index]); - //TODO: move it to ToolboxEditorGui - var position = EditorGUILayout.GetControlRect(false, 16.0f); - ToolboxEditorGui.DrawSearchablePopup(position, buttonLabel, index, options, (i) => + protected override void OnGuiSafe(SerializedProperty property, GUIContent label, ReferencePickerAttribute attribute) + { + using (var propertyScope = new PropertyScope(property, label)) + { + if (!propertyScope.IsVisible) { - try - { - //TODO: handle multiple objects - property.serializedObject.Update(); - var type = i >= 0 ? filteredTypes[i] : null; - var obj = type != null ? Activator.CreateInstance(type) : null; - property.managedReferenceValue = obj; - property.serializedObject.ApplyModifiedProperties(); - } - catch (Exception e) when (e is ArgumentNullException || e is NullReferenceException) - { - ToolboxEditorLog.LogWarning("Invalid attempt to update disposed property."); - } - }); + return; + } + EditorGUI.indentLevel++; + DrawTypeProperty(property); ToolboxEditorGui.DrawPropertyChildren(property); EditorGUI.indentLevel--; } diff --git a/Assets/Editor Toolbox/Editor/Internal/TypeCachedInfo.cs b/Assets/Editor Toolbox/Editor/Internal/TypeCachedInfo.cs new file mode 100644 index 00000000..a090c432 --- /dev/null +++ b/Assets/Editor Toolbox/Editor/Internal/TypeCachedInfo.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; + +namespace Toolbox.Editor.Internal +{ + public class TypeCachedInfo + { + private readonly string[] options; + private readonly List types; + + + public TypeCachedInfo(List types) + { + this.types = types; + var count = types.Count; + options = new string[count]; + for (var i = 0; i < count; i++) + { + var type = types[i]; + var name = type.FullName; + options[i] = name; + } + } + + + public int IndexOf(Type type) + { + return types.IndexOf(type); + } + } +} \ No newline at end of file diff --git a/Assets/Editor Toolbox/Editor/Internal/TypeCachedInfo.cs.meta b/Assets/Editor Toolbox/Editor/Internal/TypeCachedInfo.cs.meta new file mode 100644 index 00000000..7271fc8a --- /dev/null +++ b/Assets/Editor Toolbox/Editor/Internal/TypeCachedInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4e2c636642ede1340892894ce93e86e7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Toolbox/Editor/Internal/TypeField.cs b/Assets/Editor Toolbox/Editor/Internal/TypeField.cs new file mode 100644 index 00000000..2b4b793d --- /dev/null +++ b/Assets/Editor Toolbox/Editor/Internal/TypeField.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; + +using UnityEngine; + +namespace Toolbox.Editor.Internal +{ + public class TypeField + { + private bool allowAbstract; + private bool allowObsolete; + private bool addSearchField; + + + public void OnGui(Rect position, Type parentType) + { + //TODO: + //ToolboxEditorGui.DrawSearchablePopup(position, buttonLabel, index, options, (i) => + //{ + // try + // { + // //TODO: handle multiple objects + // property.serializedObject.Update(); + // var type = i >= 0 ? filteredTypes[i] : null; + // var obj = type != null ? Activator.CreateInstance(type) : null; + // property.managedReferenceValue = obj; + // property.serializedObject.ApplyModifiedProperties(); + // } + // catch (Exception e) when (e is ArgumentNullException || e is NullReferenceException) + // { + // ToolboxEditorLog.LogWarning("Invalid attempt to update disposed property."); + // } + //}); + } + + + public IReadOnlyList CachedTypes { get; private set; } + } +} \ No newline at end of file diff --git a/Assets/Editor Toolbox/Editor/Internal/TypeField.cs.meta b/Assets/Editor Toolbox/Editor/Internal/TypeField.cs.meta new file mode 100644 index 00000000..a1094e7c --- /dev/null +++ b/Assets/Editor Toolbox/Editor/Internal/TypeField.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5870e4659fe35474db2d34642d21d930 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Toolbox/Editor/Utilities/TypeUtilities.cs b/Assets/Editor Toolbox/Editor/Utilities/TypeUtilities.cs index 65cf7313..53e5ba26 100644 --- a/Assets/Editor Toolbox/Editor/Utilities/TypeUtilities.cs +++ b/Assets/Editor Toolbox/Editor/Utilities/TypeUtilities.cs @@ -6,26 +6,66 @@ namespace Toolbox.Editor { + using Toolbox.Editor.Internal; + public static class TypeUtilities { private static readonly Dictionary> cachedTypes = new Dictionary>(); + private static readonly Dictionary managedReferenceTypes = new Dictionary(); + + + public static bool IsConstraintSatisfied(Type type, bool allowAbstract, bool allowObsolete) + { + //NOTE: it's possible to strip out ConstructedGenericTypes, but they are considered valid for now + if (!type.IsVisible || !type.IsClass) + { + return false; + } + return (allowAbstract || !type.IsAbstract) && (allowObsolete || !Attribute.IsDefined(type, typeof(ObsoleteAttribute))); + } - public static List GetTypes(Type parentType) + public static List GetTypes(Type parentType, bool allowAbstract, bool allowObsolete) { - var types = TypeCache.GetTypesDerivedFrom(parentType).ToList(); + var collection = TypeCache.GetTypesDerivedFrom(parentType); + var types = collection.ToList(); for (var i = types.Count - 1; i >= 0; i--) { var type = types[i]; - //if (IsConstraintSatisfied(type)) + if (IsConstraintSatisfied(type, allowAbstract, allowObsolete)) { continue; } - //types.RemoveAt(i); + types.RemoveAt(i); } return types; } + + public static TypeCachedInfo GetCachedInfo(Type parentType, bool allowAbstract, bool allowObsolete) + { + var types = GetTypes(parentType, allowAbstract, allowObsolete); + return new TypeCachedInfo(types); + } + + public static bool TryGetTypeFromManagedReferenceFullTypeName(string managedReferenceFullTypeName, out Type managedReferenceInstanceType) + { + if (managedReferenceTypes.TryGetValue(managedReferenceFullTypeName, out managedReferenceInstanceType)) + { + return true; + } + + var parts = managedReferenceFullTypeName.Split(' '); + managedReferenceInstanceType = parts.Length == 2 + ? Type.GetType($"{parts[1]}, {parts[0]}") : null; + if (managedReferenceInstanceType != null) + { + managedReferenceTypes[managedReferenceFullTypeName] = managedReferenceInstanceType; + return true; + } + + return false; + } } } \ No newline at end of file From b921564cca637f1999ad7b7816240e86e157e8e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mi=C5=82osz=20Matkowski?= Date: Sun, 24 Apr 2022 18:43:10 +0200 Subject: [PATCH 09/32] Minor refactor changes --- Assets/Editor Toolbox/Scripts/Serialization/SerializedType.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Assets/Editor Toolbox/Scripts/Serialization/SerializedType.cs b/Assets/Editor Toolbox/Scripts/Serialization/SerializedType.cs index 2b61f25f..1caa1b16 100644 --- a/Assets/Editor Toolbox/Scripts/Serialization/SerializedType.cs +++ b/Assets/Editor Toolbox/Scripts/Serialization/SerializedType.cs @@ -43,7 +43,7 @@ public SerializedType(string assemblyQualifiedClassName) /// Initializes a new instance of the class. /// /// Class type. - /// + /// /// If is not a class type. /// public SerializedType(Type type) @@ -62,7 +62,6 @@ void ISerializationCallbackReceiver.OnAfterDeserialize() if (!string.IsNullOrEmpty(classReference)) { type = Type.GetType(classReference); - if (type == null) { #if UNITY_EDITOR From 4df60d40e5245fb61ac002dabfc2c1e1b5e3ecb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mi=C5=82osz=20Matkowski?= Date: Wed, 27 Apr 2022 23:51:13 +0200 Subject: [PATCH 10/32] Upgrade sample project to Unity 2020.3.33f1 --- Packages/manifest.json | 10 +++++----- Packages/packages-lock.json | 18 +++++------------- ProjectSettings/ProjectVersion.txt | 4 ++-- 3 files changed, 12 insertions(+), 20 deletions(-) diff --git a/Packages/manifest.json b/Packages/manifest.json index 0dd77a83..a1ac03af 100644 --- a/Packages/manifest.json +++ b/Packages/manifest.json @@ -2,18 +2,18 @@ "dependencies": { "com.unity.2d.sprite": "1.0.0", "com.unity.2d.tilemap": "1.0.0", - "com.unity.analytics": "3.6.11", - "com.unity.collab-proxy": "1.13.5", + "com.unity.analytics": "3.6.12", + "com.unity.collab-proxy": "1.15.15", "com.unity.editorcoroutines": "1.0.0", "com.unity.ide.rider": "2.0.7", "com.unity.ide.visualstudio": "2.0.14", - "com.unity.ide.vscode": "1.2.4", - "com.unity.test-framework": "1.1.29", + "com.unity.ide.vscode": "1.2.5", + "com.unity.test-framework": "1.1.31", "com.unity.textmeshpro": "3.0.6", "com.unity.timeline": "1.4.8", "com.unity.toolchain.win-x86_64-linux-x86_64": "1.0.0", "com.unity.ugui": "1.0.0", - "com.unity.xr.legacyinputhelpers": "2.1.8", + "com.unity.xr.legacyinputhelpers": "2.1.9", "com.unity.modules.ai": "1.0.0", "com.unity.modules.androidjni": "1.0.0", "com.unity.modules.animation": "1.0.0", diff --git a/Packages/packages-lock.json b/Packages/packages-lock.json index a45b4885..dfda880c 100644 --- a/Packages/packages-lock.json +++ b/Packages/packages-lock.json @@ -13,7 +13,7 @@ "dependencies": {} }, "com.unity.analytics": { - "version": "3.6.11", + "version": "3.6.12", "depth": 0, "source": "registry", "dependencies": { @@ -22,11 +22,10 @@ "url": "https://packages.unity.com" }, "com.unity.collab-proxy": { - "version": "1.13.5", + "version": "1.15.15", "depth": 0, "source": "registry", "dependencies": { - "com.unity.nuget.newtonsoft-json": "2.0.0", "com.unity.services.core": "1.0.1" }, "url": "https://packages.unity.com" @@ -64,19 +63,12 @@ "url": "https://packages.unity.com" }, "com.unity.ide.vscode": { - "version": "1.2.4", + "version": "1.2.5", "depth": 0, "source": "registry", "dependencies": {}, "url": "https://packages.unity.com" }, - "com.unity.nuget.newtonsoft-json": { - "version": "2.0.0", - "depth": 1, - "source": "registry", - "dependencies": {}, - "url": "https://packages.unity.com" - }, "com.unity.services.core": { "version": "1.0.1", "depth": 1, @@ -103,7 +95,7 @@ "url": "https://packages.unity.com" }, "com.unity.test-framework": { - "version": "1.1.29", + "version": "1.1.31", "depth": 0, "source": "registry", "dependencies": { @@ -154,7 +146,7 @@ } }, "com.unity.xr.legacyinputhelpers": { - "version": "2.1.8", + "version": "2.1.9", "depth": 0, "source": "registry", "dependencies": { diff --git a/ProjectSettings/ProjectVersion.txt b/ProjectSettings/ProjectVersion.txt index d2eb0053..02057f26 100644 --- a/ProjectSettings/ProjectVersion.txt +++ b/ProjectSettings/ProjectVersion.txt @@ -1,2 +1,2 @@ -m_EditorVersion: 2020.3.21f1 -m_EditorVersionWithRevision: 2020.3.21f1 (a38c86f6690f) +m_EditorVersion: 2020.3.33f1 +m_EditorVersionWithRevision: 2020.3.33f1 (915a7af8b0d5) From 74257560e2e14e24680a947bfb5bca23338c0289 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mi=C5=82osz=20Matkowski?= Date: Wed, 27 Apr 2022 23:55:32 +0200 Subject: [PATCH 11/32] Hotfix for tooltips extraction --- .../Editor/ToolboxPropertyHandler.cs | 2 +- Assets/Examples/Scenes/SampleScene.unity | 45 +++++++++++++++++++ Assets/Examples/Scripts/TooltipTest.cs | 9 ++++ Assets/Examples/Scripts/TooltipTest.cs.meta | 11 +++++ 4 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 Assets/Examples/Scripts/TooltipTest.cs create mode 100644 Assets/Examples/Scripts/TooltipTest.cs.meta diff --git a/Assets/Editor Toolbox/Editor/ToolboxPropertyHandler.cs b/Assets/Editor Toolbox/Editor/ToolboxPropertyHandler.cs index e717ab92..b0b7a2c8 100644 --- a/Assets/Editor Toolbox/Editor/ToolboxPropertyHandler.cs +++ b/Assets/Editor Toolbox/Editor/ToolboxPropertyHandler.cs @@ -96,7 +96,7 @@ internal ToolboxPropertyHandler(SerializedProperty property) //after this we have to retrieve (if possible) all Toolbox-related data - ToolboxAttributes //set basic content for the handled property - label = new GUIContent(property.displayName); + label = null; //get FieldInfo associated to this property, it is needed to cache custom attributes if ((fieldInfo = property.GetFieldInfo(out type)) == null) diff --git a/Assets/Examples/Scenes/SampleScene.unity b/Assets/Examples/Scenes/SampleScene.unity index 1613158f..e9a02be4 100644 --- a/Assets/Examples/Scenes/SampleScene.unity +++ b/Assets/Examples/Scenes/SampleScene.unity @@ -1071,6 +1071,51 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 8 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1821514178 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1821514180} + - component: {fileID: 1821514179} + m_Layer: 0 + m_Name: GameObject (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1821514179 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1821514178} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: abfd755f360ea2942b5e99ed9a8a386e, type: 3} + m_Name: + m_EditorClassIdentifier: + tooltipTest: 0 + inlinedEditor: {fileID: 0} +--- !u!4 &1821514180 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1821514178} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 17 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1972418676 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Examples/Scripts/TooltipTest.cs b/Assets/Examples/Scripts/TooltipTest.cs new file mode 100644 index 00000000..b7878e5b --- /dev/null +++ b/Assets/Examples/Scripts/TooltipTest.cs @@ -0,0 +1,9 @@ +using UnityEngine; + +public class TooltipTest : MonoBehaviour +{ + [Tooltip("Test")] + public int tooltipTest; + [InLineEditor] + public Transform inlinedEditor; +} diff --git a/Assets/Examples/Scripts/TooltipTest.cs.meta b/Assets/Examples/Scripts/TooltipTest.cs.meta new file mode 100644 index 00000000..a6749879 --- /dev/null +++ b/Assets/Examples/Scripts/TooltipTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: abfd755f360ea2942b5e99ed9a8a386e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: From 0504761ed3587e3d0cfdb7aaa060cffc76449f84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mi=C5=82osz=20Matkowski?= Date: Thu, 28 Apr 2022 23:32:19 +0200 Subject: [PATCH 12/32] Change CopyComponents and PasteComponents oder in the ContextMenu --- .../Editor/Utilities/InspectorUtility.cs | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/Assets/Editor Toolbox/Editor/Utilities/InspectorUtility.cs b/Assets/Editor Toolbox/Editor/Utilities/InspectorUtility.cs index b0906b40..3328a35e 100644 --- a/Assets/Editor Toolbox/Editor/Utilities/InspectorUtility.cs +++ b/Assets/Editor Toolbox/Editor/Utilities/InspectorUtility.cs @@ -159,8 +159,8 @@ internal static partial class InspectorUtility private static readonly List copiedComponents = new List(); - [MenuItem("CONTEXT/Component/Copy Components", false, priority = 200)] - private static void Copy() + [MenuItem("CONTEXT/Component/Copy Components", false, priority = 700)] + internal static void Copy() { copiedComponents.Clear(); var selectedGameObjects = Selection.gameObjects; @@ -187,13 +187,13 @@ private static void Copy() } [MenuItem("CONTEXT/Component/Copy Components", true)] - private static bool ValidateCopy() + internal static bool ValidateCopy() { return Selection.gameObjects.Length > 0; } - [MenuItem("CONTEXT/Component/Paste Components", false, priority = 201)] - private static void Paste() + [MenuItem("CONTEXT/Component/Paste Components", false, priority = 701)] + internal static void Paste() { var selectedGameobjects = Selection.gameObjects; @@ -214,13 +214,13 @@ private static void Paste() } [MenuItem("CONTEXT/Component/Paste Components", true)] - private static bool ValidatePaste() + internal static bool ValidatePaste() { return Selection.gameObjects.Length > 0 && copiedComponents.Count > 0; } - [MenuItem("CONTEXT/Component/Hide Component", false, priority = 300)] - private static void Hide(MenuCommand menuCommand) + [MenuItem("CONTEXT/Component/Hide Component", false, priority = 702)] + internal static void Hide(MenuCommand menuCommand) { var component = menuCommand.context as Component; var components = component.gameObject.GetComponents(); @@ -254,7 +254,7 @@ private static void Hide(MenuCommand menuCommand) } [Obsolete] - private static void HideAll(MenuCommand menuCommand) + internal static void HideAll(MenuCommand menuCommand) { var gameObject = (menuCommand.context as Component).gameObject; var components = (menuCommand.context as Component).GetComponents(); @@ -270,7 +270,7 @@ private static void HideAll(MenuCommand menuCommand) } [Obsolete] - private static void ShowAll(MenuCommand menuCommand) + internal static void ShowAll(MenuCommand menuCommand) { var gameObject = (menuCommand.context as Component).gameObject; var components = (menuCommand.context as Component).GetComponents(); From 8015a2a715de185b553fbc7f719ef0afa2345bb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mi=C5=82osz=20Matkowski?= Date: Fri, 29 Apr 2022 00:06:18 +0200 Subject: [PATCH 13/32] WIP new approach for tooltips and overrided labels --- .../Regular/NewLabelAttributeDrawer.cs | 6 +- .../ReorderableListAttributeDrawer.cs | 2 +- .../ReorderableListExposedAttributeDrawer.cs | 2 +- .../Editor/Internal/ReorderableListBase.cs | 9 +++ .../Editor/Internal/ToolboxEditorList.cs | 4 +- .../Editor/ToolboxPropertyHandler.cs | 73 +++++++++++-------- Assets/Examples/Scenes/SampleScene.unity | 2 + Assets/Examples/Scripts/SampleBehaviour1.cs | 11 +++ 8 files changed, 71 insertions(+), 38 deletions(-) diff --git a/Assets/Editor Toolbox/Editor/Drawers/Regular/NewLabelAttributeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Regular/NewLabelAttributeDrawer.cs index 9bd1ecda..5df47c01 100644 --- a/Assets/Editor Toolbox/Editor/Drawers/Regular/NewLabelAttributeDrawer.cs +++ b/Assets/Editor Toolbox/Editor/Drawers/Regular/NewLabelAttributeDrawer.cs @@ -1,9 +1,11 @@ -using UnityEditor; +using System; + +using UnityEditor; using UnityEngine; namespace Toolbox.Editor.Drawers { - [CustomPropertyDrawer(typeof(NewLabelAttribute))] + [Obsolete] public class NewLabelAttributeDrawer : PropertyDrawerBase { protected override float GetPropertyHeightSafe(SerializedProperty property, GUIContent label) diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertyListDrawers/ReorderableListAttributeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertyListDrawers/ReorderableListAttributeDrawer.cs index 6c105f8f..9f315bd8 100644 --- a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertyListDrawers/ReorderableListAttributeDrawer.cs +++ b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertyListDrawers/ReorderableListAttributeDrawer.cs @@ -30,7 +30,7 @@ static ReorderableListAttributeDrawer() /// protected override void OnGuiSafe(SerializedProperty property, GUIContent label, ReorderableListAttribute attribute) { - storage.ReturnItem(property, attribute).DoList(); + storage.ReturnItem(property, attribute).DoList(label); } } } \ No newline at end of file diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertyListDrawers/ReorderableListExposedAttributeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertyListDrawers/ReorderableListExposedAttributeDrawer.cs index 5063f642..afff02d8 100644 --- a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertyListDrawers/ReorderableListExposedAttributeDrawer.cs +++ b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertyListDrawers/ReorderableListExposedAttributeDrawer.cs @@ -83,7 +83,7 @@ private static MethodInfo FindMethod(SerializedObject target, string methodName, protected override void OnGuiSafe(SerializedProperty property, GUIContent label, ReorderableListExposedAttribute attribute) { - storage.ReturnItem(property, attribute).DoList(); + storage.ReturnItem(property, attribute).DoList(label); } } } \ No newline at end of file diff --git a/Assets/Editor Toolbox/Editor/Internal/ReorderableListBase.cs b/Assets/Editor Toolbox/Editor/Internal/ReorderableListBase.cs index 81f02794..2ed5acfd 100644 --- a/Assets/Editor Toolbox/Editor/Internal/ReorderableListBase.cs +++ b/Assets/Editor Toolbox/Editor/Internal/ReorderableListBase.cs @@ -497,6 +497,15 @@ public void RemoveElement(int index) /// public virtual void DoList() { + DoList(null); + } + + /// + /// Draws whole list at once. + /// + public virtual void DoList(GUIContent label) + { + TitleLabel = label; //NOTE: indentation will break some controls //make sure there is no indent while drawing using (new ZeroIndentScope()) diff --git a/Assets/Editor Toolbox/Editor/Internal/ToolboxEditorList.cs b/Assets/Editor Toolbox/Editor/Internal/ToolboxEditorList.cs index dfbb408b..52e69eea 100644 --- a/Assets/Editor Toolbox/Editor/Internal/ToolboxEditorList.cs +++ b/Assets/Editor Toolbox/Editor/Internal/ToolboxEditorList.cs @@ -335,13 +335,13 @@ protected override void HandleHeaderEvents(Rect rect) /// - public override void DoList() + public override void DoList(GUIContent label) { //pack eveything in one, vertical scope //it will keep sections always in order using (new EditorGUILayout.VerticalScope()) { - base.DoList(); + base.DoList(label); } } diff --git a/Assets/Editor Toolbox/Editor/ToolboxPropertyHandler.cs b/Assets/Editor Toolbox/Editor/ToolboxPropertyHandler.cs index b0b7a2c8..c16d6be1 100644 --- a/Assets/Editor Toolbox/Editor/ToolboxPropertyHandler.cs +++ b/Assets/Editor Toolbox/Editor/ToolboxPropertyHandler.cs @@ -95,9 +95,7 @@ internal ToolboxPropertyHandler(SerializedProperty property) //first of all we have to retrieve the native data like FieldInfo, custom native drawer, etc. //after this we have to retrieve (if possible) all Toolbox-related data - ToolboxAttributes - //set basic content for the handled property - label = null; - + label = new GUIContent(property.displayName); //get FieldInfo associated to this property, it is needed to cache custom attributes if ((fieldInfo = property.GetFieldInfo(out type)) == null) { @@ -117,24 +115,24 @@ internal ToolboxPropertyHandler(SerializedProperty property) private void ProcessBuiltInData() { //arrays cannot have custom built-in property drawers - if (isArray) + //if (isArray) + //{ + // return; + //} + + var propertyAttributes = fieldInfo.GetCustomAttributes(); + foreach (var attribute in propertyAttributes) { - return; + HandleSpecialAttribute(attribute); } - //check if this property has built-in property drawer - if (!(hasBuiltInPropertyDrawer = ToolboxDrawerModule.HasNativeTypeDrawer(type))) + if (hasBuiltInPropertyDrawer) { - var propertyAttributes = fieldInfo.GetCustomAttributes(); - foreach (var attribute in propertyAttributes) - { - var attributeType = attribute.GetType(); - if (hasBuiltInPropertyDrawer = ToolboxDrawerModule.HasNativeTypeDrawer(attributeType)) - { - break; - } - } + return; } + + //check if this property has built-in property drawer + hasBuiltInPropertyDrawer = ToolboxDrawerModule.HasNativeTypeDrawer(type); } /// @@ -167,6 +165,29 @@ private void ProcessToolboxData() hasToolboxConditionDrawer = conditionAttribute != null; } + /// + /// + /// + private void HandleSpecialAttribute(PropertyAttribute attribute) + { + switch (attribute) + { + case TooltipAttribute a: + label.tooltip = a.tooltip; + break; + case NewLabelAttribute a: + var name = property.displayName; + label.text = string.IsNullOrEmpty(a.OldLabel) + ? a.NewLabel + : name.Replace(a.OldLabel, a.NewLabel); + break; + default: + var attributeType = attribute.GetType(); + hasBuiltInPropertyDrawer = ToolboxDrawerModule.HasNativeTypeDrawer(attributeType); + break; + } + } + private void HandleNewAttribute(ToolboxAttribute attribute) { switch (attribute) @@ -311,19 +332,6 @@ private PropertyCondition Validate(SerializedProperty property) return ToolboxDrawerModule.GetConditionDrawer(conditionAttribute)?.OnGuiValidate(property, conditionAttribute) ?? PropertyCondition.Valid; } - /// - /// Begins vertical group to "pack" all property-related controls into one body. - /// - private void BeginVerticalLayoutBody() - { - EditorGUILayout.BeginVertical(); - } - - private void CloseVerticalLayoutBody() - { - EditorGUILayout.EndVertical(); - } - /// /// Draw property using built-in layout system and cached s. @@ -369,9 +377,10 @@ public void OnGuiLayout(SerializedProperty property, GUIContent label) { using (new EditorGUI.DisabledScope(disable)) { - BeginVerticalLayoutBody(); - DrawProperty(property, label); - CloseVerticalLayoutBody(); + using (new EditorGUILayout.VerticalScope()) + { + DrawProperty(property, label); + } } } diff --git a/Assets/Examples/Scenes/SampleScene.unity b/Assets/Examples/Scenes/SampleScene.unity index e9a02be4..b2582329 100644 --- a/Assets/Examples/Scenes/SampleScene.unity +++ b/Assets/Examples/Scenes/SampleScene.unity @@ -700,6 +700,8 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: c96bc1945c12e5246b1faac636a63516, type: 3} m_Name: m_EditorClassIdentifier: + dupaaa: 00000000000000000000000000000000 + dupa: {fileID: 0} var1: 82 targetTag: Untagged progressBar: 25.4 diff --git a/Assets/Examples/Scripts/SampleBehaviour1.cs b/Assets/Examples/Scripts/SampleBehaviour1.cs index 4f57a1bb..35375530 100644 --- a/Assets/Examples/Scripts/SampleBehaviour1.cs +++ b/Assets/Examples/Scripts/SampleBehaviour1.cs @@ -4,6 +4,17 @@ [AddComponentMenu("Editor Toolbox/Cheat Sheet 1")] public class SampleBehaviour1 : MonoBehaviour { + void DupaDebug() + { + Debug.Log(1111); + } + + [ContextMenuItem("asdad", nameof(DupaDebug))] + [NewLabel("float1"), Tooltip("!@!##@!#")] + public int[] dupaaa; + + [NewLabel("float"), InLineEditor, Tooltip("!!!")] + public Transform dupa; [Help("This sample component provides additional inspector extensions (drawers and associated attributes) implemented in the Editor Toolbox plugin. " + "Check the SampleBehaviour1.cs script for more details.", Order = -1)] From d2063b3e38f3923ff615c2806515e32953d1cd00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mi=C5=82osz=20Matkowski?= Date: Sat, 30 Apr 2022 00:14:55 +0200 Subject: [PATCH 14/32] Possibility to override property labels independently from ToolboxAttributes --- .../Regular/NewLabelAttributeDrawer.cs | 2 +- .../Editor/ToolboxPropertyHandler.cs | 64 +++++++++---------- 2 files changed, 31 insertions(+), 35 deletions(-) diff --git a/Assets/Editor Toolbox/Editor/Drawers/Regular/NewLabelAttributeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Regular/NewLabelAttributeDrawer.cs index 5df47c01..d2e9ed04 100644 --- a/Assets/Editor Toolbox/Editor/Drawers/Regular/NewLabelAttributeDrawer.cs +++ b/Assets/Editor Toolbox/Editor/Drawers/Regular/NewLabelAttributeDrawer.cs @@ -5,7 +5,7 @@ namespace Toolbox.Editor.Drawers { - [Obsolete] + [Obsolete("For now, NewLabelAttribute is handled internally by the ToolboxPropertyHandler.")] public class NewLabelAttributeDrawer : PropertyDrawerBase { protected override float GetPropertyHeightSafe(SerializedProperty property, GUIContent label) diff --git a/Assets/Editor Toolbox/Editor/ToolboxPropertyHandler.cs b/Assets/Editor Toolbox/Editor/ToolboxPropertyHandler.cs index c16d6be1..e7547efa 100644 --- a/Assets/Editor Toolbox/Editor/ToolboxPropertyHandler.cs +++ b/Assets/Editor Toolbox/Editor/ToolboxPropertyHandler.cs @@ -114,25 +114,13 @@ internal ToolboxPropertyHandler(SerializedProperty property) private void ProcessBuiltInData() { - //arrays cannot have custom built-in property drawers - //if (isArray) - //{ - // return; - //} - - var propertyAttributes = fieldInfo.GetCustomAttributes(); - foreach (var attribute in propertyAttributes) - { - HandleSpecialAttribute(attribute); - } - - if (hasBuiltInPropertyDrawer) + var attributes = fieldInfo.GetCustomAttributes(); + foreach (var attribute in attributes) { - return; + HandleNewAttribute(attribute); } - //check if this property has built-in property drawer - hasBuiltInPropertyDrawer = ToolboxDrawerModule.HasNativeTypeDrawer(type); + CheckIfPropertyHasPropertyDrawer(type); } /// @@ -165,27 +153,35 @@ private void ProcessToolboxData() hasToolboxConditionDrawer = conditionAttribute != null; } - /// - /// - /// - private void HandleSpecialAttribute(PropertyAttribute attribute) + private void CheckIfPropertyHasPropertyDrawer(Type type) { - switch (attribute) + //NOTE: array cannot have built-in property drawers + if (hasBuiltInPropertyDrawer || isArray) { - case TooltipAttribute a: - label.tooltip = a.tooltip; - break; - case NewLabelAttribute a: - var name = property.displayName; - label.text = string.IsNullOrEmpty(a.OldLabel) - ? a.NewLabel - : name.Replace(a.OldLabel, a.NewLabel); - break; - default: - var attributeType = attribute.GetType(); - hasBuiltInPropertyDrawer = ToolboxDrawerModule.HasNativeTypeDrawer(attributeType); - break; + return; + } + + hasBuiltInPropertyDrawer = ToolboxDrawerModule.HasNativeTypeDrawer(type); + } + + private void HandleNewAttribute(PropertyAttribute attribute) + { + if (!isChild) + { + //NOTE: setting tooltip and labels is valid only for parent or single properties + switch (attribute) + { + case TooltipAttribute a: + label.tooltip = a.tooltip; + return; + case NewLabelAttribute a: + label.text = a.NewLabel; + return; + } } + + var attributeType = attribute.GetType(); + CheckIfPropertyHasPropertyDrawer(attributeType); } private void HandleNewAttribute(ToolboxAttribute attribute) From d00c9bb63a7f9cbc67784393ec084819392380d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mi=C5=82osz=20Matkowski?= Date: Sat, 30 Apr 2022 00:15:08 +0200 Subject: [PATCH 15/32] Minor refactor changes --- .../{RegularAttributes.meta => Regular.meta} | 0 .../AssetPreviewAttribute.cs | 0 .../AssetPreviewAttribute.cs.meta | 0 .../ChildObjectOnlyAttribute.cs | 0 .../ChildObjectOnlyAttribute.cs.meta | 0 .../ClampAttribute.cs | 0 .../ClampAttribute.cs.meta | 0 .../DirectoryAttribute.cs | 0 .../DirectoryAttribute.cs.meta | 0 .../EnumFlagAttribute.cs | 0 .../EnumFlagAttribute.cs.meta | 0 .../EnumTogglesAttribute.cs | 0 .../EnumTogglesAttribute.cs.meta | 0 .../FormattedNumberAttribute.cs | 0 .../FormattedNumberAttribute.cs.meta | 0 .../HideLabelAttribute.cs | 0 .../HideLabelAttribute.cs.meta | 0 .../LabelByChildAttribute.cs | 0 .../LabelByChildAttribute.cs.meta | 0 .../LayerAttribute.cs | 0 .../LayerAttribute.cs.meta | 0 .../LeftToggleAttribute.cs | 0 .../LeftToggleAttribute.cs.meta | 0 .../MinMaxSliderAttribute.cs | 0 .../MinMaxSliderAttribute.cs.meta | 0 .../NotNullAttribute.cs | 0 .../NotNullAttribute.cs.meta | 0 .../OnValueChangedAttribute.cs | 0 .../OnValueChangedAttribute.cs.meta | 0 .../PasswordAttribute.cs | 0 .../PasswordAttribute.cs.meta | 0 .../PrefabObjectOnlyAttribute.cs | 0 .../PrefabObjectOnlyAttribute.cs.meta | 0 .../PresetAttribute.cs | 0 .../PresetAttribute.cs.meta | 0 .../ProgressBarAttribute.cs | 0 .../ProgressBarAttribute.cs.meta | 0 .../SceneDetailsAttribute.cs | 0 .../SceneDetailsAttribute.cs.meta | 0 .../SceneNameAttribute.cs | 0 .../SceneNameAttribute.cs.meta | 0 .../SceneObjectOnlyAttribute.cs | 0 .../SceneObjectOnlyAttribute.cs.meta | 0 .../SearchableEnumAttribute.cs | 0 .../SearchableEnumAttribute.cs.meta | 0 .../SuffixAttribute.cs | 0 .../SuffixAttribute.cs.meta | 0 .../TagSelectorAttribute.cs | 0 .../TagSelectorAttribute.cs.meta | 0 .../TypeConstraintAttribute.cs | 0 .../TypeConstraintAttribute.cs.meta | 0 .../Scripts/Attributes/Special.meta | 8 ++++++++ .../NewLabelAttribute.cs | 15 ++++++++++++++- .../NewLabelAttribute.cs.meta | 0 .../{ToolboxAttributes.meta => Toolbox.meta} | 0 .../ArchetypeAttributes.meta | 0 .../ScriptablesListAttribute.cs | 0 .../ScriptablesListAttribute.cs.meta | 0 .../ArchetypeAttributes/TitleAttribute.cs | 0 .../ArchetypeAttributes/TitleAttribute.cs.meta | 0 .../ConditionAttributes.meta | 0 .../ConditionAttributes/ComparisonAttribute.cs | 0 .../ComparisonAttribute.cs.meta | 0 .../ConditionAttributes/DisableAttribute.cs | 0 .../ConditionAttributes/DisableAttribute.cs.meta | 0 .../ConditionAttributes/DisableIfAttribute.cs | 0 .../DisableIfAttribute.cs.meta | 0 .../DisableInPlayModeAttribute.cs | 0 .../DisableInPlayModeAttribute.cs.meta | 0 .../ConditionAttributes/EnableIfAttribute.cs | 0 .../ConditionAttributes/EnableIfAttribute.cs.meta | 0 .../ConditionAttributes/HideAttribute.cs | 0 .../ConditionAttributes/HideAttribute.cs.meta | 0 .../HideDisabledIfAttribute.cs | 0 .../HideDisabledIfAttribute.cs.meta | 0 .../ConditionAttributes/HideIfAttribute.cs | 0 .../ConditionAttributes/HideIfAttribute.cs.meta | 0 .../ShowDisabledIfAttribute.cs | 0 .../ShowDisabledIfAttribute.cs.meta | 0 .../ConditionAttributes/ShowIfAttribute.cs | 0 .../ConditionAttributes/ShowIfAttribute.cs.meta | 0 .../ConditionAttributes/ShowWarningIfAttribute.cs | 0 .../ShowWarningIfAttribute.cs.meta | 0 .../ConditionAttributes/UnityComparisonMethod.cs | 0 .../UnityComparisonMethod.cs.meta | 0 .../DecoratorAttributes.meta | 0 .../DecoratorAttributes/BeginGroupAttribute.cs | 0 .../BeginGroupAttribute.cs.meta | 0 .../BeginHorizontalAttribute.cs | 0 .../BeginHorizontalAttribute.cs.meta | 0 .../BeginHorizontalGroupAttribute.cs | 0 .../BeginHorizontalGroupAttribute.cs.meta | 0 .../DecoratorAttributes/BeginIndentAttribute.cs | 0 .../BeginIndentAttribute.cs.meta | 0 .../DecoratorAttributes/DynamicHelpAttribute.cs | 0 .../DynamicHelpAttribute.cs.meta | 0 .../DecoratorAttributes/EditorButtonAttribute.cs | 0 .../EditorButtonAttribute.cs.meta | 0 .../DecoratorAttributes/EndGroupAttribute.cs | 0 .../DecoratorAttributes/EndGroupAttribute.cs.meta | 0 .../DecoratorAttributes/EndHorizontalAttribute.cs | 0 .../EndHorizontalAttribute.cs.meta | 0 .../EndHorizontalGroupAttribute.cs | 0 .../EndHorizontalGroupAttribute.cs.meta | 0 .../DecoratorAttributes/EndIndentAttribute.cs | 0 .../EndIndentAttribute.cs.meta | 0 .../DecoratorAttributes/GuiColorAttribute.cs | 0 .../DecoratorAttributes/GuiColorAttribute.cs.meta | 0 .../DecoratorAttributes/HelpAttribute.cs | 0 .../DecoratorAttributes/HelpAttribute.cs.meta | 0 .../DecoratorAttributes/HighlightAttribute.cs | 0 .../HighlightAttribute.cs.meta | 0 .../DecoratorAttributes/ImageAreaAttribute.cs | 0 .../ImageAreaAttribute.cs.meta | 0 .../DecoratorAttributes/IndentAreaAttribute.cs | 0 .../IndentAreaAttribute.cs.meta | 0 .../DecoratorAttributes/LabelAttribute.cs | 0 .../DecoratorAttributes/LabelAttribute.cs.meta | 0 .../DecoratorAttributes/LineAttribute.cs | 0 .../DecoratorAttributes/LineAttribute.cs.meta | 0 .../DecoratorAttributes/SpaceAreaAttribute.cs | 0 .../SpaceAreaAttribute.cs.meta | 0 .../DecoratorAttributes/UnityMessageType.cs | 0 .../DecoratorAttributes/UnityMessageType.cs.meta | 0 .../PropertyListAttributes.meta | 0 .../ReorderableListAttribute.cs | 0 .../ReorderableListAttribute.cs.meta | 0 .../ReorderableListExposedAttribute.cs | 0 .../ReorderableListExposedAttribute.cs.meta | 0 .../ScrollableItemsAttribute.cs | 0 .../ScrollableItemsAttribute.cs.meta | 0 .../PropertySelfAttributes.meta | 0 .../DynamicMinMaxBaseAttribute.cs | 0 .../DynamicMinMaxBaseAttribute.cs.meta | 0 .../DynamicMinMaxSliderAttribute.cs | 0 .../DynamicMinMaxSliderAttribute.cs.meta | 0 .../DynamicRangeAttribute.cs | 0 .../DynamicRangeAttribute.cs.meta | 0 .../IgnoreParentAttribute.cs | 0 .../IgnoreParentAttribute.cs.meta | 0 .../InLineEditorAttribute.cs | 0 .../InLineEditorAttribute.cs.meta | 0 .../ReferencePickerAttribute.cs | 0 .../ReferencePickerAttribute.cs.meta | 0 .../PropertySelfAttributes/RegexValueAttribute.cs | 0 .../RegexValueAttribute.cs.meta | 0 .../ToolboxArchetypeAttribute.cs | 0 .../ToolboxArchetypeAttribute.cs.meta | 0 .../ToolboxAttribute.cs | 0 .../ToolboxAttribute.cs.meta | 0 .../ToolboxConditionAttribute.cs | 0 .../ToolboxConditionAttribute.cs.meta | 0 .../ToolboxDecoratorAttribute.cs | 0 .../ToolboxDecoratorAttribute.cs.meta | 0 .../ToolboxListPropertyAttribute.cs | 0 .../ToolboxListPropertyAttribute.cs.meta | 0 .../ToolboxPropertyAttribute.cs | 0 .../ToolboxPropertyAttribute.cs.meta | 0 .../ToolboxSelfPropertyAttribute.cs | 0 .../ToolboxSelfPropertyAttribute.cs.meta | 0 Assets/Examples/Scenes/SampleScene.unity | 2 -- Assets/Examples/Scripts/SampleBehaviour1.cs | 11 ----------- 162 files changed, 22 insertions(+), 14 deletions(-) rename Assets/Editor Toolbox/Scripts/Attributes/{RegularAttributes.meta => Regular.meta} (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{RegularAttributes => Regular}/AssetPreviewAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{RegularAttributes => Regular}/AssetPreviewAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{RegularAttributes => Regular}/ChildObjectOnlyAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{RegularAttributes => Regular}/ChildObjectOnlyAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{RegularAttributes => Regular}/ClampAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{RegularAttributes => Regular}/ClampAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{RegularAttributes => Regular}/DirectoryAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{RegularAttributes => Regular}/DirectoryAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{RegularAttributes => Regular}/EnumFlagAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{RegularAttributes => Regular}/EnumFlagAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{RegularAttributes => Regular}/EnumTogglesAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{RegularAttributes => Regular}/EnumTogglesAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{RegularAttributes => Regular}/FormattedNumberAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{RegularAttributes => Regular}/FormattedNumberAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{RegularAttributes => Regular}/HideLabelAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{RegularAttributes => Regular}/HideLabelAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{RegularAttributes => Regular}/LabelByChildAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{RegularAttributes => Regular}/LabelByChildAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{RegularAttributes => Regular}/LayerAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{RegularAttributes => Regular}/LayerAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{RegularAttributes => Regular}/LeftToggleAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{RegularAttributes => Regular}/LeftToggleAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{RegularAttributes => Regular}/MinMaxSliderAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{RegularAttributes => Regular}/MinMaxSliderAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{RegularAttributes => Regular}/NotNullAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{RegularAttributes => Regular}/NotNullAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{RegularAttributes => Regular}/OnValueChangedAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{RegularAttributes => Regular}/OnValueChangedAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{RegularAttributes => Regular}/PasswordAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{RegularAttributes => Regular}/PasswordAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{RegularAttributes => Regular}/PrefabObjectOnlyAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{RegularAttributes => Regular}/PrefabObjectOnlyAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{RegularAttributes => Regular}/PresetAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{RegularAttributes => Regular}/PresetAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{RegularAttributes => Regular}/ProgressBarAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{RegularAttributes => Regular}/ProgressBarAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{RegularAttributes => Regular}/SceneDetailsAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{RegularAttributes => Regular}/SceneDetailsAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{RegularAttributes => Regular}/SceneNameAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{RegularAttributes => Regular}/SceneNameAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{RegularAttributes => Regular}/SceneObjectOnlyAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{RegularAttributes => Regular}/SceneObjectOnlyAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{RegularAttributes => Regular}/SearchableEnumAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{RegularAttributes => Regular}/SearchableEnumAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{RegularAttributes => Regular}/SuffixAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{RegularAttributes => Regular}/SuffixAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{RegularAttributes => Regular}/TagSelectorAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{RegularAttributes => Regular}/TagSelectorAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{RegularAttributes => Regular}/TypeConstraintAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{RegularAttributes => Regular}/TypeConstraintAttribute.cs.meta (100%) create mode 100644 Assets/Editor Toolbox/Scripts/Attributes/Special.meta rename Assets/Editor Toolbox/Scripts/Attributes/{RegularAttributes => Special}/NewLabelAttribute.cs (61%) rename Assets/Editor Toolbox/Scripts/Attributes/{RegularAttributes => Special}/NewLabelAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes.meta => Toolbox.meta} (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/ArchetypeAttributes.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/ArchetypeAttributes/ScriptablesListAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/ArchetypeAttributes/ScriptablesListAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/ArchetypeAttributes/TitleAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/ArchetypeAttributes/TitleAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/ConditionAttributes.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/ConditionAttributes/ComparisonAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/ConditionAttributes/ComparisonAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/ConditionAttributes/DisableAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/ConditionAttributes/DisableAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/ConditionAttributes/DisableIfAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/ConditionAttributes/DisableIfAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/ConditionAttributes/DisableInPlayModeAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/ConditionAttributes/DisableInPlayModeAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/ConditionAttributes/EnableIfAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/ConditionAttributes/EnableIfAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/ConditionAttributes/HideAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/ConditionAttributes/HideAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/ConditionAttributes/HideDisabledIfAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/ConditionAttributes/HideDisabledIfAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/ConditionAttributes/HideIfAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/ConditionAttributes/HideIfAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/ConditionAttributes/ShowDisabledIfAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/ConditionAttributes/ShowDisabledIfAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/ConditionAttributes/ShowIfAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/ConditionAttributes/ShowIfAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/ConditionAttributes/ShowWarningIfAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/ConditionAttributes/ShowWarningIfAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/ConditionAttributes/UnityComparisonMethod.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/ConditionAttributes/UnityComparisonMethod.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/DecoratorAttributes.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/DecoratorAttributes/BeginGroupAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/DecoratorAttributes/BeginGroupAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/DecoratorAttributes/BeginHorizontalAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/DecoratorAttributes/BeginHorizontalAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/DecoratorAttributes/BeginHorizontalGroupAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/DecoratorAttributes/BeginHorizontalGroupAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/DecoratorAttributes/BeginIndentAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/DecoratorAttributes/BeginIndentAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/DecoratorAttributes/DynamicHelpAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/DecoratorAttributes/DynamicHelpAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/DecoratorAttributes/EditorButtonAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/DecoratorAttributes/EditorButtonAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/DecoratorAttributes/EndGroupAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/DecoratorAttributes/EndGroupAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/DecoratorAttributes/EndHorizontalAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/DecoratorAttributes/EndHorizontalAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/DecoratorAttributes/EndHorizontalGroupAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/DecoratorAttributes/EndHorizontalGroupAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/DecoratorAttributes/EndIndentAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/DecoratorAttributes/EndIndentAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/DecoratorAttributes/GuiColorAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/DecoratorAttributes/GuiColorAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/DecoratorAttributes/HelpAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/DecoratorAttributes/HelpAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/DecoratorAttributes/HighlightAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/DecoratorAttributes/HighlightAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/DecoratorAttributes/ImageAreaAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/DecoratorAttributes/ImageAreaAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/DecoratorAttributes/IndentAreaAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/DecoratorAttributes/IndentAreaAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/DecoratorAttributes/LabelAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/DecoratorAttributes/LabelAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/DecoratorAttributes/LineAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/DecoratorAttributes/LineAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/DecoratorAttributes/SpaceAreaAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/DecoratorAttributes/SpaceAreaAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/DecoratorAttributes/UnityMessageType.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/DecoratorAttributes/UnityMessageType.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/PropertyListAttributes.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/PropertyListAttributes/ReorderableListAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/PropertyListAttributes/ReorderableListAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/PropertyListAttributes/ReorderableListExposedAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/PropertyListAttributes/ReorderableListExposedAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/PropertyListAttributes/ScrollableItemsAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/PropertyListAttributes/ScrollableItemsAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/PropertySelfAttributes.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/PropertySelfAttributes/DynamicMinMaxBaseAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/PropertySelfAttributes/DynamicMinMaxBaseAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/PropertySelfAttributes/DynamicMinMaxSliderAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/PropertySelfAttributes/DynamicMinMaxSliderAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/PropertySelfAttributes/DynamicRangeAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/PropertySelfAttributes/DynamicRangeAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/PropertySelfAttributes/IgnoreParentAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/PropertySelfAttributes/IgnoreParentAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/PropertySelfAttributes/InLineEditorAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/PropertySelfAttributes/InLineEditorAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/PropertySelfAttributes/ReferencePickerAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/PropertySelfAttributes/ReferencePickerAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/PropertySelfAttributes/RegexValueAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/PropertySelfAttributes/RegexValueAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/ToolboxArchetypeAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/ToolboxArchetypeAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/ToolboxAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/ToolboxAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/ToolboxConditionAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/ToolboxConditionAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/ToolboxDecoratorAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/ToolboxDecoratorAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/ToolboxListPropertyAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/ToolboxListPropertyAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/ToolboxPropertyAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/ToolboxPropertyAttribute.cs.meta (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/ToolboxSelfPropertyAttribute.cs (100%) rename Assets/Editor Toolbox/Scripts/Attributes/{ToolboxAttributes => Toolbox}/ToolboxSelfPropertyAttribute.cs.meta (100%) diff --git a/Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes.meta b/Assets/Editor Toolbox/Scripts/Attributes/Regular.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Regular.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/AssetPreviewAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Regular/AssetPreviewAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/AssetPreviewAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Regular/AssetPreviewAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/AssetPreviewAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Regular/AssetPreviewAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/AssetPreviewAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Regular/AssetPreviewAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/ChildObjectOnlyAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Regular/ChildObjectOnlyAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/ChildObjectOnlyAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Regular/ChildObjectOnlyAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/ChildObjectOnlyAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Regular/ChildObjectOnlyAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/ChildObjectOnlyAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Regular/ChildObjectOnlyAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/ClampAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Regular/ClampAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/ClampAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Regular/ClampAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/ClampAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Regular/ClampAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/ClampAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Regular/ClampAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/DirectoryAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Regular/DirectoryAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/DirectoryAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Regular/DirectoryAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/DirectoryAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Regular/DirectoryAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/DirectoryAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Regular/DirectoryAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/EnumFlagAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Regular/EnumFlagAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/EnumFlagAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Regular/EnumFlagAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/EnumFlagAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Regular/EnumFlagAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/EnumFlagAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Regular/EnumFlagAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/EnumTogglesAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Regular/EnumTogglesAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/EnumTogglesAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Regular/EnumTogglesAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/EnumTogglesAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Regular/EnumTogglesAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/EnumTogglesAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Regular/EnumTogglesAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/FormattedNumberAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Regular/FormattedNumberAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/FormattedNumberAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Regular/FormattedNumberAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/FormattedNumberAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Regular/FormattedNumberAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/FormattedNumberAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Regular/FormattedNumberAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/HideLabelAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Regular/HideLabelAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/HideLabelAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Regular/HideLabelAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/HideLabelAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Regular/HideLabelAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/HideLabelAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Regular/HideLabelAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/LabelByChildAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Regular/LabelByChildAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/LabelByChildAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Regular/LabelByChildAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/LabelByChildAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Regular/LabelByChildAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/LabelByChildAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Regular/LabelByChildAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/LayerAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Regular/LayerAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/LayerAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Regular/LayerAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/LayerAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Regular/LayerAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/LayerAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Regular/LayerAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/LeftToggleAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Regular/LeftToggleAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/LeftToggleAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Regular/LeftToggleAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/LeftToggleAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Regular/LeftToggleAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/LeftToggleAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Regular/LeftToggleAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/MinMaxSliderAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Regular/MinMaxSliderAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/MinMaxSliderAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Regular/MinMaxSliderAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/MinMaxSliderAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Regular/MinMaxSliderAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/MinMaxSliderAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Regular/MinMaxSliderAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/NotNullAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Regular/NotNullAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/NotNullAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Regular/NotNullAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/NotNullAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Regular/NotNullAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/NotNullAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Regular/NotNullAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/OnValueChangedAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Regular/OnValueChangedAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/OnValueChangedAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Regular/OnValueChangedAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/OnValueChangedAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Regular/OnValueChangedAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/OnValueChangedAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Regular/OnValueChangedAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/PasswordAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Regular/PasswordAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/PasswordAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Regular/PasswordAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/PasswordAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Regular/PasswordAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/PasswordAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Regular/PasswordAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/PrefabObjectOnlyAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Regular/PrefabObjectOnlyAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/PrefabObjectOnlyAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Regular/PrefabObjectOnlyAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/PrefabObjectOnlyAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Regular/PrefabObjectOnlyAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/PrefabObjectOnlyAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Regular/PrefabObjectOnlyAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/PresetAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Regular/PresetAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/PresetAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Regular/PresetAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/PresetAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Regular/PresetAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/PresetAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Regular/PresetAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/ProgressBarAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Regular/ProgressBarAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/ProgressBarAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Regular/ProgressBarAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/ProgressBarAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Regular/ProgressBarAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/ProgressBarAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Regular/ProgressBarAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/SceneDetailsAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Regular/SceneDetailsAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/SceneDetailsAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Regular/SceneDetailsAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/SceneDetailsAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Regular/SceneDetailsAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/SceneDetailsAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Regular/SceneDetailsAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/SceneNameAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Regular/SceneNameAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/SceneNameAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Regular/SceneNameAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/SceneNameAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Regular/SceneNameAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/SceneNameAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Regular/SceneNameAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/SceneObjectOnlyAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Regular/SceneObjectOnlyAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/SceneObjectOnlyAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Regular/SceneObjectOnlyAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/SceneObjectOnlyAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Regular/SceneObjectOnlyAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/SceneObjectOnlyAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Regular/SceneObjectOnlyAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/SearchableEnumAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Regular/SearchableEnumAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/SearchableEnumAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Regular/SearchableEnumAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/SearchableEnumAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Regular/SearchableEnumAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/SearchableEnumAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Regular/SearchableEnumAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/SuffixAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Regular/SuffixAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/SuffixAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Regular/SuffixAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/SuffixAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Regular/SuffixAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/SuffixAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Regular/SuffixAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/TagSelectorAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Regular/TagSelectorAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/TagSelectorAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Regular/TagSelectorAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/TagSelectorAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Regular/TagSelectorAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/TagSelectorAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Regular/TagSelectorAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/TypeConstraintAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Regular/TypeConstraintAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/TypeConstraintAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Regular/TypeConstraintAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/TypeConstraintAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Regular/TypeConstraintAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/TypeConstraintAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Regular/TypeConstraintAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Special.meta b/Assets/Editor Toolbox/Scripts/Attributes/Special.meta new file mode 100644 index 00000000..5ecc3f69 --- /dev/null +++ b/Assets/Editor Toolbox/Scripts/Attributes/Special.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6c2a4ff6508976b4a8fba531fc8006a8 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/NewLabelAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Special/NewLabelAttribute.cs similarity index 61% rename from Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/NewLabelAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Special/NewLabelAttribute.cs index 2f10fa80..cd9b1003 100644 --- a/Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/NewLabelAttribute.cs +++ b/Assets/Editor Toolbox/Scripts/Attributes/Special/NewLabelAttribute.cs @@ -12,14 +12,27 @@ namespace UnityEngine [Conditional("UNITY_EDITOR")] public class NewLabelAttribute : PropertyAttribute { + public NewLabelAttribute(string newLabel) + { + NewLabel = newLabel; + } + + [Obsolete] public NewLabelAttribute(string newLabel, string oldLabel = null) { NewLabel = newLabel; OldLabel = oldLabel; } + /// + /// New label that will be used in the Inspector. + /// public string NewLabel { get; private set; } - + /// + /// Indicates what name (or part) has to be replaced. + /// Useful to change labels for array elements. + /// + [Obsolete] public string OldLabel { get; private set; } } } \ No newline at end of file diff --git a/Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/NewLabelAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Special/NewLabelAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/RegularAttributes/NewLabelAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Special/NewLabelAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes.meta b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ArchetypeAttributes.meta b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ArchetypeAttributes.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ArchetypeAttributes.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ArchetypeAttributes.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ArchetypeAttributes/ScriptablesListAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ArchetypeAttributes/ScriptablesListAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ArchetypeAttributes/ScriptablesListAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ArchetypeAttributes/ScriptablesListAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ArchetypeAttributes/ScriptablesListAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ArchetypeAttributes/ScriptablesListAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ArchetypeAttributes/ScriptablesListAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ArchetypeAttributes/ScriptablesListAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ArchetypeAttributes/TitleAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ArchetypeAttributes/TitleAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ArchetypeAttributes/TitleAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ArchetypeAttributes/TitleAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ArchetypeAttributes/TitleAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ArchetypeAttributes/TitleAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ArchetypeAttributes/TitleAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ArchetypeAttributes/TitleAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ConditionAttributes.meta b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ConditionAttributes.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ConditionAttributes/ComparisonAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/ComparisonAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ConditionAttributes/ComparisonAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/ComparisonAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ConditionAttributes/ComparisonAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/ComparisonAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ConditionAttributes/ComparisonAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/ComparisonAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ConditionAttributes/DisableAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/DisableAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ConditionAttributes/DisableAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/DisableAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ConditionAttributes/DisableAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/DisableAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ConditionAttributes/DisableAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/DisableAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ConditionAttributes/DisableIfAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/DisableIfAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ConditionAttributes/DisableIfAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/DisableIfAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ConditionAttributes/DisableIfAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/DisableIfAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ConditionAttributes/DisableIfAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/DisableIfAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ConditionAttributes/DisableInPlayModeAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/DisableInPlayModeAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ConditionAttributes/DisableInPlayModeAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/DisableInPlayModeAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ConditionAttributes/DisableInPlayModeAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/DisableInPlayModeAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ConditionAttributes/DisableInPlayModeAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/DisableInPlayModeAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ConditionAttributes/EnableIfAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/EnableIfAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ConditionAttributes/EnableIfAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/EnableIfAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ConditionAttributes/EnableIfAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/EnableIfAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ConditionAttributes/EnableIfAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/EnableIfAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ConditionAttributes/HideAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/HideAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ConditionAttributes/HideAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/HideAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ConditionAttributes/HideAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/HideAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ConditionAttributes/HideAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/HideAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ConditionAttributes/HideDisabledIfAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/HideDisabledIfAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ConditionAttributes/HideDisabledIfAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/HideDisabledIfAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ConditionAttributes/HideDisabledIfAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/HideDisabledIfAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ConditionAttributes/HideDisabledIfAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/HideDisabledIfAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ConditionAttributes/HideIfAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/HideIfAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ConditionAttributes/HideIfAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/HideIfAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ConditionAttributes/HideIfAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/HideIfAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ConditionAttributes/HideIfAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/HideIfAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ConditionAttributes/ShowDisabledIfAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/ShowDisabledIfAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ConditionAttributes/ShowDisabledIfAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/ShowDisabledIfAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ConditionAttributes/ShowDisabledIfAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/ShowDisabledIfAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ConditionAttributes/ShowDisabledIfAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/ShowDisabledIfAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ConditionAttributes/ShowIfAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/ShowIfAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ConditionAttributes/ShowIfAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/ShowIfAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ConditionAttributes/ShowIfAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/ShowIfAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ConditionAttributes/ShowIfAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/ShowIfAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ConditionAttributes/ShowWarningIfAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/ShowWarningIfAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ConditionAttributes/ShowWarningIfAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/ShowWarningIfAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ConditionAttributes/ShowWarningIfAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/ShowWarningIfAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ConditionAttributes/ShowWarningIfAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/ShowWarningIfAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ConditionAttributes/UnityComparisonMethod.cs b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/UnityComparisonMethod.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ConditionAttributes/UnityComparisonMethod.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/UnityComparisonMethod.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ConditionAttributes/UnityComparisonMethod.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/UnityComparisonMethod.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ConditionAttributes/UnityComparisonMethod.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/UnityComparisonMethod.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes.meta b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/BeginGroupAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/BeginGroupAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/BeginGroupAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/BeginGroupAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/BeginGroupAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/BeginGroupAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/BeginGroupAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/BeginGroupAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/BeginHorizontalAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/BeginHorizontalAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/BeginHorizontalAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/BeginHorizontalAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/BeginHorizontalAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/BeginHorizontalAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/BeginHorizontalAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/BeginHorizontalAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/BeginHorizontalGroupAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/BeginHorizontalGroupAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/BeginHorizontalGroupAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/BeginHorizontalGroupAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/BeginHorizontalGroupAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/BeginHorizontalGroupAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/BeginHorizontalGroupAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/BeginHorizontalGroupAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/BeginIndentAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/BeginIndentAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/BeginIndentAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/BeginIndentAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/BeginIndentAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/BeginIndentAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/BeginIndentAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/BeginIndentAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/DynamicHelpAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/DynamicHelpAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/DynamicHelpAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/DynamicHelpAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/DynamicHelpAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/DynamicHelpAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/DynamicHelpAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/DynamicHelpAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/EditorButtonAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/EditorButtonAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/EditorButtonAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/EditorButtonAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/EditorButtonAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/EditorButtonAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/EditorButtonAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/EditorButtonAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/EndGroupAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/EndGroupAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/EndGroupAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/EndGroupAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/EndGroupAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/EndGroupAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/EndGroupAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/EndGroupAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/EndHorizontalAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/EndHorizontalAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/EndHorizontalAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/EndHorizontalAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/EndHorizontalAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/EndHorizontalAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/EndHorizontalAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/EndHorizontalAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/EndHorizontalGroupAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/EndHorizontalGroupAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/EndHorizontalGroupAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/EndHorizontalGroupAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/EndHorizontalGroupAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/EndHorizontalGroupAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/EndHorizontalGroupAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/EndHorizontalGroupAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/EndIndentAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/EndIndentAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/EndIndentAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/EndIndentAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/EndIndentAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/EndIndentAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/EndIndentAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/EndIndentAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/GuiColorAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/GuiColorAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/GuiColorAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/GuiColorAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/GuiColorAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/GuiColorAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/GuiColorAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/GuiColorAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/HelpAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/HelpAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/HelpAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/HelpAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/HelpAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/HelpAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/HelpAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/HelpAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/HighlightAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/HighlightAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/HighlightAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/HighlightAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/HighlightAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/HighlightAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/HighlightAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/HighlightAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/ImageAreaAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/ImageAreaAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/ImageAreaAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/ImageAreaAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/ImageAreaAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/ImageAreaAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/ImageAreaAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/ImageAreaAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/IndentAreaAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/IndentAreaAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/IndentAreaAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/IndentAreaAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/IndentAreaAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/IndentAreaAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/IndentAreaAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/IndentAreaAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/LabelAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/LabelAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/LabelAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/LabelAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/LabelAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/LabelAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/LabelAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/LabelAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/LineAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/LineAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/LineAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/LineAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/LineAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/LineAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/LineAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/LineAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/SpaceAreaAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/SpaceAreaAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/SpaceAreaAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/SpaceAreaAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/SpaceAreaAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/SpaceAreaAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/SpaceAreaAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/SpaceAreaAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/UnityMessageType.cs b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/UnityMessageType.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/UnityMessageType.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/UnityMessageType.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/UnityMessageType.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/UnityMessageType.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/DecoratorAttributes/UnityMessageType.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/UnityMessageType.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/PropertyListAttributes.meta b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertyListAttributes.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/PropertyListAttributes.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertyListAttributes.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/PropertyListAttributes/ReorderableListAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertyListAttributes/ReorderableListAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/PropertyListAttributes/ReorderableListAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertyListAttributes/ReorderableListAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/PropertyListAttributes/ReorderableListAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertyListAttributes/ReorderableListAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/PropertyListAttributes/ReorderableListAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertyListAttributes/ReorderableListAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/PropertyListAttributes/ReorderableListExposedAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertyListAttributes/ReorderableListExposedAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/PropertyListAttributes/ReorderableListExposedAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertyListAttributes/ReorderableListExposedAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/PropertyListAttributes/ReorderableListExposedAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertyListAttributes/ReorderableListExposedAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/PropertyListAttributes/ReorderableListExposedAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertyListAttributes/ReorderableListExposedAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/PropertyListAttributes/ScrollableItemsAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertyListAttributes/ScrollableItemsAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/PropertyListAttributes/ScrollableItemsAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertyListAttributes/ScrollableItemsAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/PropertyListAttributes/ScrollableItemsAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertyListAttributes/ScrollableItemsAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/PropertyListAttributes/ScrollableItemsAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertyListAttributes/ScrollableItemsAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/PropertySelfAttributes.meta b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertySelfAttributes.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/PropertySelfAttributes.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertySelfAttributes.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/PropertySelfAttributes/DynamicMinMaxBaseAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertySelfAttributes/DynamicMinMaxBaseAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/PropertySelfAttributes/DynamicMinMaxBaseAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertySelfAttributes/DynamicMinMaxBaseAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/PropertySelfAttributes/DynamicMinMaxBaseAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertySelfAttributes/DynamicMinMaxBaseAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/PropertySelfAttributes/DynamicMinMaxBaseAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertySelfAttributes/DynamicMinMaxBaseAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/PropertySelfAttributes/DynamicMinMaxSliderAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertySelfAttributes/DynamicMinMaxSliderAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/PropertySelfAttributes/DynamicMinMaxSliderAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertySelfAttributes/DynamicMinMaxSliderAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/PropertySelfAttributes/DynamicMinMaxSliderAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertySelfAttributes/DynamicMinMaxSliderAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/PropertySelfAttributes/DynamicMinMaxSliderAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertySelfAttributes/DynamicMinMaxSliderAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/PropertySelfAttributes/DynamicRangeAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertySelfAttributes/DynamicRangeAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/PropertySelfAttributes/DynamicRangeAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertySelfAttributes/DynamicRangeAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/PropertySelfAttributes/DynamicRangeAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertySelfAttributes/DynamicRangeAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/PropertySelfAttributes/DynamicRangeAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertySelfAttributes/DynamicRangeAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/PropertySelfAttributes/IgnoreParentAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertySelfAttributes/IgnoreParentAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/PropertySelfAttributes/IgnoreParentAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertySelfAttributes/IgnoreParentAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/PropertySelfAttributes/IgnoreParentAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertySelfAttributes/IgnoreParentAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/PropertySelfAttributes/IgnoreParentAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertySelfAttributes/IgnoreParentAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/PropertySelfAttributes/InLineEditorAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertySelfAttributes/InLineEditorAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/PropertySelfAttributes/InLineEditorAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertySelfAttributes/InLineEditorAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/PropertySelfAttributes/InLineEditorAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertySelfAttributes/InLineEditorAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/PropertySelfAttributes/InLineEditorAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertySelfAttributes/InLineEditorAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/PropertySelfAttributes/ReferencePickerAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertySelfAttributes/ReferencePickerAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/PropertySelfAttributes/ReferencePickerAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertySelfAttributes/ReferencePickerAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/PropertySelfAttributes/ReferencePickerAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertySelfAttributes/ReferencePickerAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/PropertySelfAttributes/ReferencePickerAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertySelfAttributes/ReferencePickerAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/PropertySelfAttributes/RegexValueAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertySelfAttributes/RegexValueAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/PropertySelfAttributes/RegexValueAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertySelfAttributes/RegexValueAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/PropertySelfAttributes/RegexValueAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertySelfAttributes/RegexValueAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/PropertySelfAttributes/RegexValueAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertySelfAttributes/RegexValueAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ToolboxArchetypeAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ToolboxArchetypeAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ToolboxArchetypeAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ToolboxArchetypeAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ToolboxArchetypeAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ToolboxArchetypeAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ToolboxArchetypeAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ToolboxArchetypeAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ToolboxAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ToolboxAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ToolboxAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ToolboxAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ToolboxAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ToolboxAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ToolboxAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ToolboxAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ToolboxConditionAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ToolboxConditionAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ToolboxConditionAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ToolboxConditionAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ToolboxConditionAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ToolboxConditionAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ToolboxConditionAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ToolboxConditionAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ToolboxDecoratorAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ToolboxDecoratorAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ToolboxDecoratorAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ToolboxDecoratorAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ToolboxDecoratorAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ToolboxDecoratorAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ToolboxDecoratorAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ToolboxDecoratorAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ToolboxListPropertyAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ToolboxListPropertyAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ToolboxListPropertyAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ToolboxListPropertyAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ToolboxListPropertyAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ToolboxListPropertyAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ToolboxListPropertyAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ToolboxListPropertyAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ToolboxPropertyAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ToolboxPropertyAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ToolboxPropertyAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ToolboxPropertyAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ToolboxPropertyAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ToolboxPropertyAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ToolboxPropertyAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ToolboxPropertyAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ToolboxSelfPropertyAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ToolboxSelfPropertyAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ToolboxSelfPropertyAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ToolboxSelfPropertyAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ToolboxSelfPropertyAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ToolboxSelfPropertyAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ToolboxSelfPropertyAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ToolboxSelfPropertyAttribute.cs.meta diff --git a/Assets/Examples/Scenes/SampleScene.unity b/Assets/Examples/Scenes/SampleScene.unity index b2582329..e9a02be4 100644 --- a/Assets/Examples/Scenes/SampleScene.unity +++ b/Assets/Examples/Scenes/SampleScene.unity @@ -700,8 +700,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: c96bc1945c12e5246b1faac636a63516, type: 3} m_Name: m_EditorClassIdentifier: - dupaaa: 00000000000000000000000000000000 - dupa: {fileID: 0} var1: 82 targetTag: Untagged progressBar: 25.4 diff --git a/Assets/Examples/Scripts/SampleBehaviour1.cs b/Assets/Examples/Scripts/SampleBehaviour1.cs index 35375530..4f57a1bb 100644 --- a/Assets/Examples/Scripts/SampleBehaviour1.cs +++ b/Assets/Examples/Scripts/SampleBehaviour1.cs @@ -4,17 +4,6 @@ [AddComponentMenu("Editor Toolbox/Cheat Sheet 1")] public class SampleBehaviour1 : MonoBehaviour { - void DupaDebug() - { - Debug.Log(1111); - } - - [ContextMenuItem("asdad", nameof(DupaDebug))] - [NewLabel("float1"), Tooltip("!@!##@!#")] - public int[] dupaaa; - - [NewLabel("float"), InLineEditor, Tooltip("!!!")] - public Transform dupa; [Help("This sample component provides additional inspector extensions (drawers and associated attributes) implemented in the Editor Toolbox plugin. " + "Check the SampleBehaviour1.cs script for more details.", Order = -1)] From c792eda4faff1c5f0b07e84e91320d7e0d67ae7d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mi=C5=82osz=20Matkowski?= Date: Sat, 30 Apr 2022 00:19:25 +0200 Subject: [PATCH 16/32] Minor refactor changes --- Assets/Editor Toolbox/Editor/ToolboxPropertyHandler.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Assets/Editor Toolbox/Editor/ToolboxPropertyHandler.cs b/Assets/Editor Toolbox/Editor/ToolboxPropertyHandler.cs index e7547efa..c19fdfb0 100644 --- a/Assets/Editor Toolbox/Editor/ToolboxPropertyHandler.cs +++ b/Assets/Editor Toolbox/Editor/ToolboxPropertyHandler.cs @@ -155,7 +155,7 @@ private void ProcessToolboxData() private void CheckIfPropertyHasPropertyDrawer(Type type) { - //NOTE: array cannot have built-in property drawers + //NOTE: arrays cannot have built-in property drawers if (hasBuiltInPropertyDrawer || isArray) { return; @@ -169,6 +169,7 @@ private void HandleNewAttribute(PropertyAttribute attribute) if (!isChild) { //NOTE: setting tooltip and labels is valid only for parent or single properties + //it's a bit ugly but, it's the only semi-acceptable way to support built-in TooltipAttribute switch (attribute) { case TooltipAttribute a: From a8aeba36f59266a99b1ecc27e895855517b8e606 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mi=C5=82osz=20Matkowski?= Date: Sat, 30 Apr 2022 12:13:01 +0200 Subject: [PATCH 17/32] Update Editor icons --- .../Folder Icons/AudioImporter Icon.png.meta | 88 ----------- .../Folder Icons/Material Icon.png.meta | 88 ----------- .../Folder Icons/Mesh Icon.png.meta | 88 ----------- .../Folder Icons/Prefab Icon.png.meta | 88 ----------- .../Folder Icons/PrefabModel Icon.png.meta | 88 ----------- .../Folder Icons/SceneAsset Icon.png.meta | 88 ----------- .../Folder Icons/Shader Icon.png.meta | 88 ----------- .../Folder Icons/Sprite Icon.png.meta | 88 ----------- .../Folder Icons/TextMesh Icon.png.meta | 88 ----------- .../Folder Icons/Texture Icon.png.meta | 88 ----------- .../Folder Icons/cs Script Icon.png.meta | 88 ----------- .../Resources.meta} | 0 .../Resources}/Folder Icons.meta | 0 .../Folder Icons/AudioImporter Icon.png | Bin .../Folder Icons/AudioImporter Icon.png.meta} | 50 +++--- .../Folder Icons/Editor Folder Icon Small.psd | Bin .../Editor Folder Icon Small.psd.meta | 30 ++-- .../Folder Icons/Editor Folder Icon.psd | Bin .../Folder Icons/Editor Folder Icon.psd.meta | 30 ++-- .../Resources}/Folder Icons/Material Icon.png | Bin .../Folder Icons/Material Icon.png.meta} | 50 +++--- .../Resources}/Folder Icons/Mesh Icon.png | Bin .../Folder Icons/Mesh Icon.png.meta} | 50 +++--- .../Resources}/Folder Icons/Prefab Icon.png | Bin .../Folder Icons/Prefab Icon.png.meta} | 54 ++++--- .../Folder Icons/PrefabModel Icon.png | Bin .../Folder Icons/PrefabModel Icon.png.meta | 108 +++++++++++++ .../Folder Icons/SceneAsset Icon.png | Bin .../Folder Icons/SceneAsset Icon.png.meta | 108 +++++++++++++ .../Folder Icons/ScriptableObject Icon.png | Bin .../ScriptableObject Icon.png.meta | 30 +++- .../Scripts Folder Icon Small.psd | Bin .../Scripts Folder Icon Small.psd.meta | 30 ++-- .../Folder Icons/Scripts Folder Icon.psd | Bin .../Folder Icons/Scripts Folder Icon.psd.meta | 30 ++-- .../Resources}/Folder Icons/Shader Icon.png | Bin .../Folder Icons/Shader Icon.png.meta | 108 +++++++++++++ .../Resources}/Folder Icons/Sprite Icon.png | Bin .../Folder Icons/Sprite Icon.png.meta | 108 +++++++++++++ .../Resources}/Folder Icons/TextMesh Icon.png | Bin .../Folder Icons/TextMesh Icon.png.meta | 108 +++++++++++++ .../Resources}/Folder Icons/Texture Icon.png | Bin .../Folder Icons/Texture Icon.png.meta | 108 +++++++++++++ .../Folder Icons/Toolbox Icon Small.psd | Bin .../Folder Icons/Toolbox Icon Small.psd.meta | 30 ++-- .../Resources}/Folder Icons/Toolbox Icon.psd | Bin .../Folder Icons/Toolbox Icon.psd.meta | 30 ++-- .../Folder Icons/cs Script Icon.png | Bin .../Folder Icons/cs Script Icon.png.meta | 108 +++++++++++++ .../Editor Resources/Editor Brush Icon.png | Bin 8527 -> 0 bytes .../Editor Resources/Editor Bush Icon.png | Bin 32411 -> 0 bytes .../Editor Bush Icon.png.meta | 110 -------------- .../Editor Resources/Editor Camera Icon.png | Bin 5012 -> 563 bytes .../Editor Camera Icon.png.meta | 72 +++------ .../Editor Resources/Editor Canvas Icon.png | Bin 1622 -> 225 bytes .../Editor Canvas Icon.png.meta | 46 +++--- .../Editor Resources/Editor CityHall Icon.png | Bin 2949 -> 0 bytes .../Editor Construction Icon.png | Bin 23580 -> 0 bytes .../Editor Construction Icon.png.meta | 110 -------------- .../Editor Injection Icon.png | Bin 33845 -> 0 bytes .../Editor Resources/Editor Keyboard Icon.png | Bin 3605 -> 0 bytes .../Editor Resources/Editor King Icon.png | Bin 9457 -> 0 bytes .../Editor King Icon.png.meta | 110 -------------- .../Editor Resources/Editor Light Icon.png | Bin 16636 -> 1174 bytes .../Editor Light Icon.png.meta | 46 +++--- .../Editor Resources/Editor Scene Icon.png | Bin 21347 -> 0 bytes .../Editor Scene Icon.png.meta | 132 ---------------- .../Editor Resources/Editor Settings Icon.png | Bin 9507 -> 1492 bytes .../Editor Settings Icon.png.meta | 70 +++------ .../Editor Resources/Editor Terrain Icon.png | Bin 3015 -> 0 bytes .../Editor Terrain Icon.png.meta | 110 -------------- .../Editor Resources/Editor Tree Icon.png | Bin 7612 -> 0 bytes .../Editor Tree Icon.png.meta | 110 -------------- Assets/Examples/Scenes/SampleScene.unity | 143 +++--------------- 74 files changed, 1111 insertions(+), 2086 deletions(-) delete mode 100644 Assets/Editor Toolbox/Editor Resources/Folder Icons/AudioImporter Icon.png.meta delete mode 100644 Assets/Editor Toolbox/Editor Resources/Folder Icons/Material Icon.png.meta delete mode 100644 Assets/Editor Toolbox/Editor Resources/Folder Icons/Mesh Icon.png.meta delete mode 100644 Assets/Editor Toolbox/Editor Resources/Folder Icons/Prefab Icon.png.meta delete mode 100644 Assets/Editor Toolbox/Editor Resources/Folder Icons/PrefabModel Icon.png.meta delete mode 100644 Assets/Editor Toolbox/Editor Resources/Folder Icons/SceneAsset Icon.png.meta delete mode 100644 Assets/Editor Toolbox/Editor Resources/Folder Icons/Shader Icon.png.meta delete mode 100644 Assets/Editor Toolbox/Editor Resources/Folder Icons/Sprite Icon.png.meta delete mode 100644 Assets/Editor Toolbox/Editor Resources/Folder Icons/TextMesh Icon.png.meta delete mode 100644 Assets/Editor Toolbox/Editor Resources/Folder Icons/Texture Icon.png.meta delete mode 100644 Assets/Editor Toolbox/Editor Resources/Folder Icons/cs Script Icon.png.meta rename Assets/Editor Toolbox/{Editor Resources.meta => Editor/Resources.meta} (100%) rename Assets/Editor Toolbox/{Editor Resources => Editor/Resources}/Folder Icons.meta (100%) rename Assets/Editor Toolbox/{Editor Resources => Editor/Resources}/Folder Icons/AudioImporter Icon.png (100%) rename Assets/{Examples/Editor Resources/Editor CityHall Icon.png.meta => Editor Toolbox/Editor/Resources/Folder Icons/AudioImporter Icon.png.meta} (75%) rename Assets/Editor Toolbox/{Editor Resources => Editor/Resources}/Folder Icons/Editor Folder Icon Small.psd (100%) rename Assets/Editor Toolbox/{Editor Resources => Editor/Resources}/Folder Icons/Editor Folder Icon Small.psd.meta (81%) rename Assets/Editor Toolbox/{Editor Resources => Editor/Resources}/Folder Icons/Editor Folder Icon.psd (100%) rename Assets/Editor Toolbox/{Editor Resources => Editor/Resources}/Folder Icons/Editor Folder Icon.psd.meta (81%) rename Assets/Editor Toolbox/{Editor Resources => Editor/Resources}/Folder Icons/Material Icon.png (100%) rename Assets/{Examples/Editor Resources/Editor Injection Icon.png.meta => Editor Toolbox/Editor/Resources/Folder Icons/Material Icon.png.meta} (75%) rename Assets/Editor Toolbox/{Editor Resources => Editor/Resources}/Folder Icons/Mesh Icon.png (100%) rename Assets/{Examples/Editor Resources/Editor Keyboard Icon.png.meta => Editor Toolbox/Editor/Resources/Folder Icons/Mesh Icon.png.meta} (75%) rename Assets/Editor Toolbox/{Editor Resources => Editor/Resources}/Folder Icons/Prefab Icon.png (100%) rename Assets/{Examples/Editor Resources/Editor Brush Icon.png.meta => Editor Toolbox/Editor/Resources/Folder Icons/Prefab Icon.png.meta} (73%) rename Assets/Editor Toolbox/{Editor Resources => Editor/Resources}/Folder Icons/PrefabModel Icon.png (100%) create mode 100644 Assets/Editor Toolbox/Editor/Resources/Folder Icons/PrefabModel Icon.png.meta rename Assets/Editor Toolbox/{Editor Resources => Editor/Resources}/Folder Icons/SceneAsset Icon.png (100%) create mode 100644 Assets/Editor Toolbox/Editor/Resources/Folder Icons/SceneAsset Icon.png.meta rename Assets/Editor Toolbox/{Editor Resources => Editor/Resources}/Folder Icons/ScriptableObject Icon.png (100%) rename Assets/Editor Toolbox/{Editor Resources => Editor/Resources}/Folder Icons/ScriptableObject Icon.png.meta (79%) rename Assets/Editor Toolbox/{Editor Resources => Editor/Resources}/Folder Icons/Scripts Folder Icon Small.psd (100%) rename Assets/Editor Toolbox/{Editor Resources => Editor/Resources}/Folder Icons/Scripts Folder Icon Small.psd.meta (81%) rename Assets/Editor Toolbox/{Editor Resources => Editor/Resources}/Folder Icons/Scripts Folder Icon.psd (100%) rename Assets/Editor Toolbox/{Editor Resources => Editor/Resources}/Folder Icons/Scripts Folder Icon.psd.meta (81%) rename Assets/Editor Toolbox/{Editor Resources => Editor/Resources}/Folder Icons/Shader Icon.png (100%) create mode 100644 Assets/Editor Toolbox/Editor/Resources/Folder Icons/Shader Icon.png.meta rename Assets/Editor Toolbox/{Editor Resources => Editor/Resources}/Folder Icons/Sprite Icon.png (100%) create mode 100644 Assets/Editor Toolbox/Editor/Resources/Folder Icons/Sprite Icon.png.meta rename Assets/Editor Toolbox/{Editor Resources => Editor/Resources}/Folder Icons/TextMesh Icon.png (100%) create mode 100644 Assets/Editor Toolbox/Editor/Resources/Folder Icons/TextMesh Icon.png.meta rename Assets/Editor Toolbox/{Editor Resources => Editor/Resources}/Folder Icons/Texture Icon.png (100%) create mode 100644 Assets/Editor Toolbox/Editor/Resources/Folder Icons/Texture Icon.png.meta rename Assets/Editor Toolbox/{Editor Resources => Editor/Resources}/Folder Icons/Toolbox Icon Small.psd (100%) rename Assets/Editor Toolbox/{Editor Resources => Editor/Resources}/Folder Icons/Toolbox Icon Small.psd.meta (81%) rename Assets/Editor Toolbox/{Editor Resources => Editor/Resources}/Folder Icons/Toolbox Icon.psd (100%) rename Assets/Editor Toolbox/{Editor Resources => Editor/Resources}/Folder Icons/Toolbox Icon.psd.meta (81%) rename Assets/Editor Toolbox/{Editor Resources => Editor/Resources}/Folder Icons/cs Script Icon.png (100%) create mode 100644 Assets/Editor Toolbox/Editor/Resources/Folder Icons/cs Script Icon.png.meta delete mode 100644 Assets/Examples/Editor Resources/Editor Brush Icon.png delete mode 100644 Assets/Examples/Editor Resources/Editor Bush Icon.png delete mode 100644 Assets/Examples/Editor Resources/Editor Bush Icon.png.meta delete mode 100644 Assets/Examples/Editor Resources/Editor CityHall Icon.png delete mode 100644 Assets/Examples/Editor Resources/Editor Construction Icon.png delete mode 100644 Assets/Examples/Editor Resources/Editor Construction Icon.png.meta delete mode 100644 Assets/Examples/Editor Resources/Editor Injection Icon.png delete mode 100644 Assets/Examples/Editor Resources/Editor Keyboard Icon.png delete mode 100644 Assets/Examples/Editor Resources/Editor King Icon.png delete mode 100644 Assets/Examples/Editor Resources/Editor King Icon.png.meta delete mode 100644 Assets/Examples/Editor Resources/Editor Scene Icon.png delete mode 100644 Assets/Examples/Editor Resources/Editor Scene Icon.png.meta delete mode 100644 Assets/Examples/Editor Resources/Editor Terrain Icon.png delete mode 100644 Assets/Examples/Editor Resources/Editor Terrain Icon.png.meta delete mode 100644 Assets/Examples/Editor Resources/Editor Tree Icon.png delete mode 100644 Assets/Examples/Editor Resources/Editor Tree Icon.png.meta diff --git a/Assets/Editor Toolbox/Editor Resources/Folder Icons/AudioImporter Icon.png.meta b/Assets/Editor Toolbox/Editor Resources/Folder Icons/AudioImporter Icon.png.meta deleted file mode 100644 index 31bdbb36..00000000 --- a/Assets/Editor Toolbox/Editor Resources/Folder Icons/AudioImporter Icon.png.meta +++ /dev/null @@ -1,88 +0,0 @@ -fileFormatVersion: 2 -guid: ae1f12b433e81f44fbb1d21847810a49 -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 9 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: -1 - mipBias: -100 - wrapU: -1 - wrapV: -1 - wrapW: -1 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 2 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - vertices: [] - indices: - edges: [] - weights: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Editor Toolbox/Editor Resources/Folder Icons/Material Icon.png.meta b/Assets/Editor Toolbox/Editor Resources/Folder Icons/Material Icon.png.meta deleted file mode 100644 index b7ee535c..00000000 --- a/Assets/Editor Toolbox/Editor Resources/Folder Icons/Material Icon.png.meta +++ /dev/null @@ -1,88 +0,0 @@ -fileFormatVersion: 2 -guid: 1d71361930da3bc40a6e31097daf97e1 -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 9 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: -1 - mipBias: -100 - wrapU: -1 - wrapV: -1 - wrapW: -1 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 2 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - vertices: [] - indices: - edges: [] - weights: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Editor Toolbox/Editor Resources/Folder Icons/Mesh Icon.png.meta b/Assets/Editor Toolbox/Editor Resources/Folder Icons/Mesh Icon.png.meta deleted file mode 100644 index 09bc6d5e..00000000 --- a/Assets/Editor Toolbox/Editor Resources/Folder Icons/Mesh Icon.png.meta +++ /dev/null @@ -1,88 +0,0 @@ -fileFormatVersion: 2 -guid: ca2ff7d64fd4a2a469b445cd07005538 -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 9 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: -1 - mipBias: -100 - wrapU: -1 - wrapV: -1 - wrapW: -1 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 2 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - vertices: [] - indices: - edges: [] - weights: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Editor Toolbox/Editor Resources/Folder Icons/Prefab Icon.png.meta b/Assets/Editor Toolbox/Editor Resources/Folder Icons/Prefab Icon.png.meta deleted file mode 100644 index 9d1393ad..00000000 --- a/Assets/Editor Toolbox/Editor Resources/Folder Icons/Prefab Icon.png.meta +++ /dev/null @@ -1,88 +0,0 @@ -fileFormatVersion: 2 -guid: ac0d89f30426603488c8db8a86ab9861 -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 9 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: -1 - mipBias: -100 - wrapU: -1 - wrapV: -1 - wrapW: -1 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 2 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - vertices: [] - indices: - edges: [] - weights: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Editor Toolbox/Editor Resources/Folder Icons/PrefabModel Icon.png.meta b/Assets/Editor Toolbox/Editor Resources/Folder Icons/PrefabModel Icon.png.meta deleted file mode 100644 index 12aee3c5..00000000 --- a/Assets/Editor Toolbox/Editor Resources/Folder Icons/PrefabModel Icon.png.meta +++ /dev/null @@ -1,88 +0,0 @@ -fileFormatVersion: 2 -guid: d24774c462a41f14c9d6e7e13f371ab9 -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 9 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: -1 - mipBias: -100 - wrapU: -1 - wrapV: -1 - wrapW: -1 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 2 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - vertices: [] - indices: - edges: [] - weights: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Editor Toolbox/Editor Resources/Folder Icons/SceneAsset Icon.png.meta b/Assets/Editor Toolbox/Editor Resources/Folder Icons/SceneAsset Icon.png.meta deleted file mode 100644 index 7a7d7ca0..00000000 --- a/Assets/Editor Toolbox/Editor Resources/Folder Icons/SceneAsset Icon.png.meta +++ /dev/null @@ -1,88 +0,0 @@ -fileFormatVersion: 2 -guid: 20665ef8fafc05f4cb2e71502884a0b7 -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 9 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: -1 - mipBias: -100 - wrapU: -1 - wrapV: -1 - wrapW: -1 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 2 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - vertices: [] - indices: - edges: [] - weights: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Editor Toolbox/Editor Resources/Folder Icons/Shader Icon.png.meta b/Assets/Editor Toolbox/Editor Resources/Folder Icons/Shader Icon.png.meta deleted file mode 100644 index 5cd4e487..00000000 --- a/Assets/Editor Toolbox/Editor Resources/Folder Icons/Shader Icon.png.meta +++ /dev/null @@ -1,88 +0,0 @@ -fileFormatVersion: 2 -guid: 904349cb6c97417499aa097e0b5dd3a6 -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 9 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: -1 - mipBias: -100 - wrapU: -1 - wrapV: -1 - wrapW: -1 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 2 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - vertices: [] - indices: - edges: [] - weights: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Editor Toolbox/Editor Resources/Folder Icons/Sprite Icon.png.meta b/Assets/Editor Toolbox/Editor Resources/Folder Icons/Sprite Icon.png.meta deleted file mode 100644 index 5c924cde..00000000 --- a/Assets/Editor Toolbox/Editor Resources/Folder Icons/Sprite Icon.png.meta +++ /dev/null @@ -1,88 +0,0 @@ -fileFormatVersion: 2 -guid: b464f3e13fd5d97439a5b85dd353cde8 -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 9 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: -1 - mipBias: -100 - wrapU: -1 - wrapV: -1 - wrapW: -1 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 2 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - vertices: [] - indices: - edges: [] - weights: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Editor Toolbox/Editor Resources/Folder Icons/TextMesh Icon.png.meta b/Assets/Editor Toolbox/Editor Resources/Folder Icons/TextMesh Icon.png.meta deleted file mode 100644 index dc857134..00000000 --- a/Assets/Editor Toolbox/Editor Resources/Folder Icons/TextMesh Icon.png.meta +++ /dev/null @@ -1,88 +0,0 @@ -fileFormatVersion: 2 -guid: ac9d86076d39cac45ade86ec37d1e068 -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 9 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: -1 - mipBias: -100 - wrapU: -1 - wrapV: -1 - wrapW: -1 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 2 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - vertices: [] - indices: - edges: [] - weights: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Editor Toolbox/Editor Resources/Folder Icons/Texture Icon.png.meta b/Assets/Editor Toolbox/Editor Resources/Folder Icons/Texture Icon.png.meta deleted file mode 100644 index 61f682ec..00000000 --- a/Assets/Editor Toolbox/Editor Resources/Folder Icons/Texture Icon.png.meta +++ /dev/null @@ -1,88 +0,0 @@ -fileFormatVersion: 2 -guid: 06d8a123e01d2ff44a2af3a1a35564cb -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 9 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: -1 - mipBias: -100 - wrapU: -1 - wrapV: -1 - wrapW: -1 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 2 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - vertices: [] - indices: - edges: [] - weights: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Editor Toolbox/Editor Resources/Folder Icons/cs Script Icon.png.meta b/Assets/Editor Toolbox/Editor Resources/Folder Icons/cs Script Icon.png.meta deleted file mode 100644 index 001ca92d..00000000 --- a/Assets/Editor Toolbox/Editor Resources/Folder Icons/cs Script Icon.png.meta +++ /dev/null @@ -1,88 +0,0 @@ -fileFormatVersion: 2 -guid: d5f5f953f8e2fd549b269b884c145d2c -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 9 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: -1 - mipBias: -100 - wrapU: -1 - wrapV: -1 - wrapW: -1 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: 0 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 2 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - vertices: [] - indices: - edges: [] - weights: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Editor Toolbox/Editor Resources.meta b/Assets/Editor Toolbox/Editor/Resources.meta similarity index 100% rename from Assets/Editor Toolbox/Editor Resources.meta rename to Assets/Editor Toolbox/Editor/Resources.meta diff --git a/Assets/Editor Toolbox/Editor Resources/Folder Icons.meta b/Assets/Editor Toolbox/Editor/Resources/Folder Icons.meta similarity index 100% rename from Assets/Editor Toolbox/Editor Resources/Folder Icons.meta rename to Assets/Editor Toolbox/Editor/Resources/Folder Icons.meta diff --git a/Assets/Editor Toolbox/Editor Resources/Folder Icons/AudioImporter Icon.png b/Assets/Editor Toolbox/Editor/Resources/Folder Icons/AudioImporter Icon.png similarity index 100% rename from Assets/Editor Toolbox/Editor Resources/Folder Icons/AudioImporter Icon.png rename to Assets/Editor Toolbox/Editor/Resources/Folder Icons/AudioImporter Icon.png diff --git a/Assets/Examples/Editor Resources/Editor CityHall Icon.png.meta b/Assets/Editor Toolbox/Editor/Resources/Folder Icons/AudioImporter Icon.png.meta similarity index 75% rename from Assets/Examples/Editor Resources/Editor CityHall Icon.png.meta rename to Assets/Editor Toolbox/Editor/Resources/Folder Icons/AudioImporter Icon.png.meta index 2efc33bb..b9c54a84 100644 --- a/Assets/Examples/Editor Resources/Editor CityHall Icon.png.meta +++ b/Assets/Editor Toolbox/Editor/Resources/Folder Icons/AudioImporter Icon.png.meta @@ -1,9 +1,9 @@ fileFormatVersion: 2 -guid: 23acab7563472f84e998cd7af8f0d79d +guid: ae1f12b433e81f44fbb1d21847810a49 TextureImporter: - fileIDToRecycleName: {} + internalIDToNameTable: [] externalObjects: {} - serializedVersion: 9 + serializedVersion: 11 mipmaps: mipMapMode: 0 enableMipMap: 1 @@ -23,6 +23,7 @@ TextureImporter: isReadable: 0 streamingMipmaps: 0 streamingMipmapsPriority: 0 + vTOnly: 0 grayScaleToAlpha: 0 generateCubemap: 6 cubemapConvolution: 0 @@ -31,13 +32,13 @@ TextureImporter: maxTextureSize: 2048 textureSettings: serializedVersion: 2 - filterMode: 2 + filterMode: 1 aniso: 1 - mipBias: -100 - wrapU: 1 - wrapV: 1 - wrapW: -1 - nPOTScale: 0 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 spriteMode: 0 @@ -49,18 +50,22 @@ TextureImporter: spriteBorder: {x: 0, y: 0, z: 0, w: 0} spriteGenerateFallbackPhysicsShape: 1 alphaUsage: 1 - alphaIsTransparency: 1 + alphaIsTransparency: 0 spriteTessellationDetail: -1 - textureType: 2 + textureType: 0 textureShape: 1 singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 maxTextureSizeSet: 0 compressionQualitySet: 0 textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 platformSettings: - - serializedVersion: 2 + - serializedVersion: 3 buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 + maxTextureSize: 32 resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 @@ -69,20 +74,10 @@ TextureImporter: allowsAlphaSplitting: 0 overridden: 0 androidETC2FallbackOverride: 0 - - serializedVersion: 2 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Android - maxTextureSize: 2048 + maxTextureSize: 32 resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 @@ -91,6 +86,7 @@ TextureImporter: allowsAlphaSplitting: 0 overridden: 0 androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 spriteSheet: serializedVersion: 2 sprites: [] @@ -98,10 +94,12 @@ TextureImporter: physicsShape: [] bones: [] spriteID: + internalID: 0 vertices: [] indices: edges: [] weights: [] + secondaryTextures: [] spritePackingTag: pSDRemoveMatte: 0 pSDShowRemoveMatteOption: 0 diff --git a/Assets/Editor Toolbox/Editor Resources/Folder Icons/Editor Folder Icon Small.psd b/Assets/Editor Toolbox/Editor/Resources/Folder Icons/Editor Folder Icon Small.psd similarity index 100% rename from Assets/Editor Toolbox/Editor Resources/Folder Icons/Editor Folder Icon Small.psd rename to Assets/Editor Toolbox/Editor/Resources/Folder Icons/Editor Folder Icon Small.psd diff --git a/Assets/Editor Toolbox/Editor Resources/Folder Icons/Editor Folder Icon Small.psd.meta b/Assets/Editor Toolbox/Editor/Resources/Folder Icons/Editor Folder Icon Small.psd.meta similarity index 81% rename from Assets/Editor Toolbox/Editor Resources/Folder Icons/Editor Folder Icon Small.psd.meta rename to Assets/Editor Toolbox/Editor/Resources/Folder Icons/Editor Folder Icon Small.psd.meta index b4adaf83..ccde05d9 100644 --- a/Assets/Editor Toolbox/Editor Resources/Folder Icons/Editor Folder Icon Small.psd.meta +++ b/Assets/Editor Toolbox/Editor/Resources/Folder Icons/Editor Folder Icon Small.psd.meta @@ -1,9 +1,9 @@ fileFormatVersion: 2 guid: fd9a2277d1ea8144b9c8a4085b82092f TextureImporter: - fileIDToRecycleName: {} + internalIDToNameTable: [] externalObjects: {} - serializedVersion: 9 + serializedVersion: 11 mipmaps: mipMapMode: 0 enableMipMap: 0 @@ -23,6 +23,7 @@ TextureImporter: isReadable: 0 streamingMipmaps: 0 streamingMipmapsPriority: 0 + vTOnly: 0 grayScaleToAlpha: 0 generateCubemap: 6 cubemapConvolution: 0 @@ -31,12 +32,12 @@ TextureImporter: maxTextureSize: 2048 textureSettings: serializedVersion: 2 - filterMode: -1 + filterMode: 1 aniso: 1 - mipBias: -100 + mipBias: 0 wrapU: 1 wrapV: 1 - wrapW: -1 + wrapW: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 @@ -54,13 +55,17 @@ TextureImporter: textureType: 2 textureShape: 1 singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 maxTextureSizeSet: 0 compressionQualitySet: 0 textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 platformSettings: - - serializedVersion: 2 + - serializedVersion: 3 buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 + maxTextureSize: 32 resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 @@ -69,9 +74,10 @@ TextureImporter: allowsAlphaSplitting: 0 overridden: 0 androidETC2FallbackOverride: 0 - - serializedVersion: 2 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 buildTarget: Standalone - maxTextureSize: 2048 + maxTextureSize: 32 resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 @@ -80,7 +86,8 @@ TextureImporter: allowsAlphaSplitting: 0 overridden: 0 androidETC2FallbackOverride: 0 - - serializedVersion: 2 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 buildTarget: Android maxTextureSize: 2048 resizeAlgorithm: 0 @@ -91,6 +98,7 @@ TextureImporter: allowsAlphaSplitting: 0 overridden: 0 androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 spriteSheet: serializedVersion: 2 sprites: [] @@ -98,10 +106,12 @@ TextureImporter: physicsShape: [] bones: [] spriteID: + internalID: 0 vertices: [] indices: edges: [] weights: [] + secondaryTextures: [] spritePackingTag: pSDRemoveMatte: 0 pSDShowRemoveMatteOption: 1 diff --git a/Assets/Editor Toolbox/Editor Resources/Folder Icons/Editor Folder Icon.psd b/Assets/Editor Toolbox/Editor/Resources/Folder Icons/Editor Folder Icon.psd similarity index 100% rename from Assets/Editor Toolbox/Editor Resources/Folder Icons/Editor Folder Icon.psd rename to Assets/Editor Toolbox/Editor/Resources/Folder Icons/Editor Folder Icon.psd diff --git a/Assets/Editor Toolbox/Editor Resources/Folder Icons/Editor Folder Icon.psd.meta b/Assets/Editor Toolbox/Editor/Resources/Folder Icons/Editor Folder Icon.psd.meta similarity index 81% rename from Assets/Editor Toolbox/Editor Resources/Folder Icons/Editor Folder Icon.psd.meta rename to Assets/Editor Toolbox/Editor/Resources/Folder Icons/Editor Folder Icon.psd.meta index 35cebe2d..c45c8722 100644 --- a/Assets/Editor Toolbox/Editor Resources/Folder Icons/Editor Folder Icon.psd.meta +++ b/Assets/Editor Toolbox/Editor/Resources/Folder Icons/Editor Folder Icon.psd.meta @@ -1,9 +1,9 @@ fileFormatVersion: 2 guid: e22085615aa223c4e929f704dadf7736 TextureImporter: - fileIDToRecycleName: {} + internalIDToNameTable: [] externalObjects: {} - serializedVersion: 9 + serializedVersion: 11 mipmaps: mipMapMode: 0 enableMipMap: 0 @@ -23,6 +23,7 @@ TextureImporter: isReadable: 0 streamingMipmaps: 0 streamingMipmapsPriority: 0 + vTOnly: 0 grayScaleToAlpha: 0 generateCubemap: 6 cubemapConvolution: 0 @@ -31,12 +32,12 @@ TextureImporter: maxTextureSize: 2048 textureSettings: serializedVersion: 2 - filterMode: -1 + filterMode: 1 aniso: 1 - mipBias: -100 + mipBias: 0 wrapU: 1 wrapV: 1 - wrapW: -1 + wrapW: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 @@ -54,13 +55,17 @@ TextureImporter: textureType: 2 textureShape: 1 singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 maxTextureSizeSet: 0 compressionQualitySet: 0 textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 platformSettings: - - serializedVersion: 2 + - serializedVersion: 3 buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 + maxTextureSize: 64 resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 @@ -69,9 +74,10 @@ TextureImporter: allowsAlphaSplitting: 0 overridden: 0 androidETC2FallbackOverride: 0 - - serializedVersion: 2 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 buildTarget: Standalone - maxTextureSize: 2048 + maxTextureSize: 64 resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 @@ -80,7 +86,8 @@ TextureImporter: allowsAlphaSplitting: 0 overridden: 0 androidETC2FallbackOverride: 0 - - serializedVersion: 2 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 buildTarget: Android maxTextureSize: 2048 resizeAlgorithm: 0 @@ -91,6 +98,7 @@ TextureImporter: allowsAlphaSplitting: 0 overridden: 0 androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 spriteSheet: serializedVersion: 2 sprites: [] @@ -98,10 +106,12 @@ TextureImporter: physicsShape: [] bones: [] spriteID: + internalID: 0 vertices: [] indices: edges: [] weights: [] + secondaryTextures: [] spritePackingTag: pSDRemoveMatte: 0 pSDShowRemoveMatteOption: 1 diff --git a/Assets/Editor Toolbox/Editor Resources/Folder Icons/Material Icon.png b/Assets/Editor Toolbox/Editor/Resources/Folder Icons/Material Icon.png similarity index 100% rename from Assets/Editor Toolbox/Editor Resources/Folder Icons/Material Icon.png rename to Assets/Editor Toolbox/Editor/Resources/Folder Icons/Material Icon.png diff --git a/Assets/Examples/Editor Resources/Editor Injection Icon.png.meta b/Assets/Editor Toolbox/Editor/Resources/Folder Icons/Material Icon.png.meta similarity index 75% rename from Assets/Examples/Editor Resources/Editor Injection Icon.png.meta rename to Assets/Editor Toolbox/Editor/Resources/Folder Icons/Material Icon.png.meta index ac55a75d..7baa31c3 100644 --- a/Assets/Examples/Editor Resources/Editor Injection Icon.png.meta +++ b/Assets/Editor Toolbox/Editor/Resources/Folder Icons/Material Icon.png.meta @@ -1,9 +1,9 @@ fileFormatVersion: 2 -guid: e87de8db71153644ca6e2c573d3f9951 +guid: 1d71361930da3bc40a6e31097daf97e1 TextureImporter: - fileIDToRecycleName: {} + internalIDToNameTable: [] externalObjects: {} - serializedVersion: 9 + serializedVersion: 11 mipmaps: mipMapMode: 0 enableMipMap: 1 @@ -23,6 +23,7 @@ TextureImporter: isReadable: 0 streamingMipmaps: 0 streamingMipmapsPriority: 0 + vTOnly: 0 grayScaleToAlpha: 0 generateCubemap: 6 cubemapConvolution: 0 @@ -31,13 +32,13 @@ TextureImporter: maxTextureSize: 2048 textureSettings: serializedVersion: 2 - filterMode: -1 + filterMode: 1 aniso: 1 - mipBias: -100 - wrapU: 1 - wrapV: 1 - wrapW: -1 - nPOTScale: 0 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 spriteMode: 0 @@ -49,18 +50,22 @@ TextureImporter: spriteBorder: {x: 0, y: 0, z: 0, w: 0} spriteGenerateFallbackPhysicsShape: 1 alphaUsage: 1 - alphaIsTransparency: 1 + alphaIsTransparency: 0 spriteTessellationDetail: -1 - textureType: 2 + textureType: 0 textureShape: 1 singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 maxTextureSizeSet: 0 compressionQualitySet: 0 textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 platformSettings: - - serializedVersion: 2 + - serializedVersion: 3 buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 + maxTextureSize: 32 resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 @@ -69,20 +74,10 @@ TextureImporter: allowsAlphaSplitting: 0 overridden: 0 androidETC2FallbackOverride: 0 - - serializedVersion: 2 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Android - maxTextureSize: 2048 + maxTextureSize: 32 resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 @@ -91,6 +86,7 @@ TextureImporter: allowsAlphaSplitting: 0 overridden: 0 androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 spriteSheet: serializedVersion: 2 sprites: [] @@ -98,10 +94,12 @@ TextureImporter: physicsShape: [] bones: [] spriteID: + internalID: 0 vertices: [] indices: edges: [] weights: [] + secondaryTextures: [] spritePackingTag: pSDRemoveMatte: 0 pSDShowRemoveMatteOption: 0 diff --git a/Assets/Editor Toolbox/Editor Resources/Folder Icons/Mesh Icon.png b/Assets/Editor Toolbox/Editor/Resources/Folder Icons/Mesh Icon.png similarity index 100% rename from Assets/Editor Toolbox/Editor Resources/Folder Icons/Mesh Icon.png rename to Assets/Editor Toolbox/Editor/Resources/Folder Icons/Mesh Icon.png diff --git a/Assets/Examples/Editor Resources/Editor Keyboard Icon.png.meta b/Assets/Editor Toolbox/Editor/Resources/Folder Icons/Mesh Icon.png.meta similarity index 75% rename from Assets/Examples/Editor Resources/Editor Keyboard Icon.png.meta rename to Assets/Editor Toolbox/Editor/Resources/Folder Icons/Mesh Icon.png.meta index a55bcb31..bbe36bdd 100644 --- a/Assets/Examples/Editor Resources/Editor Keyboard Icon.png.meta +++ b/Assets/Editor Toolbox/Editor/Resources/Folder Icons/Mesh Icon.png.meta @@ -1,9 +1,9 @@ fileFormatVersion: 2 -guid: 5391afb6695a4a04884f5b3648e00c36 +guid: ca2ff7d64fd4a2a469b445cd07005538 TextureImporter: - fileIDToRecycleName: {} + internalIDToNameTable: [] externalObjects: {} - serializedVersion: 9 + serializedVersion: 11 mipmaps: mipMapMode: 0 enableMipMap: 1 @@ -23,6 +23,7 @@ TextureImporter: isReadable: 0 streamingMipmaps: 0 streamingMipmapsPriority: 0 + vTOnly: 0 grayScaleToAlpha: 0 generateCubemap: 6 cubemapConvolution: 0 @@ -31,13 +32,13 @@ TextureImporter: maxTextureSize: 2048 textureSettings: serializedVersion: 2 - filterMode: -1 + filterMode: 1 aniso: 1 - mipBias: -100 - wrapU: 1 - wrapV: 1 - wrapW: -1 - nPOTScale: 0 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 spriteMode: 0 @@ -49,18 +50,22 @@ TextureImporter: spriteBorder: {x: 0, y: 0, z: 0, w: 0} spriteGenerateFallbackPhysicsShape: 1 alphaUsage: 1 - alphaIsTransparency: 1 + alphaIsTransparency: 0 spriteTessellationDetail: -1 - textureType: 2 + textureType: 0 textureShape: 1 singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 maxTextureSizeSet: 0 compressionQualitySet: 0 textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 platformSettings: - - serializedVersion: 2 + - serializedVersion: 3 buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 + maxTextureSize: 32 resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 @@ -69,20 +74,10 @@ TextureImporter: allowsAlphaSplitting: 0 overridden: 0 androidETC2FallbackOverride: 0 - - serializedVersion: 2 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Android - maxTextureSize: 2048 + maxTextureSize: 32 resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 @@ -91,6 +86,7 @@ TextureImporter: allowsAlphaSplitting: 0 overridden: 0 androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 spriteSheet: serializedVersion: 2 sprites: [] @@ -98,10 +94,12 @@ TextureImporter: physicsShape: [] bones: [] spriteID: + internalID: 0 vertices: [] indices: edges: [] weights: [] + secondaryTextures: [] spritePackingTag: pSDRemoveMatte: 0 pSDShowRemoveMatteOption: 0 diff --git a/Assets/Editor Toolbox/Editor Resources/Folder Icons/Prefab Icon.png b/Assets/Editor Toolbox/Editor/Resources/Folder Icons/Prefab Icon.png similarity index 100% rename from Assets/Editor Toolbox/Editor Resources/Folder Icons/Prefab Icon.png rename to Assets/Editor Toolbox/Editor/Resources/Folder Icons/Prefab Icon.png diff --git a/Assets/Examples/Editor Resources/Editor Brush Icon.png.meta b/Assets/Editor Toolbox/Editor/Resources/Folder Icons/Prefab Icon.png.meta similarity index 73% rename from Assets/Examples/Editor Resources/Editor Brush Icon.png.meta rename to Assets/Editor Toolbox/Editor/Resources/Folder Icons/Prefab Icon.png.meta index 7b96b574..628f563b 100644 --- a/Assets/Examples/Editor Resources/Editor Brush Icon.png.meta +++ b/Assets/Editor Toolbox/Editor/Resources/Folder Icons/Prefab Icon.png.meta @@ -1,9 +1,9 @@ fileFormatVersion: 2 -guid: 3ec5bead7c5e0004194533a3464755a7 +guid: ac0d89f30426603488c8db8a86ab9861 TextureImporter: - fileIDToRecycleName: {} + internalIDToNameTable: [] externalObjects: {} - serializedVersion: 9 + serializedVersion: 11 mipmaps: mipMapMode: 0 enableMipMap: 1 @@ -23,6 +23,7 @@ TextureImporter: isReadable: 0 streamingMipmaps: 0 streamingMipmapsPriority: 0 + vTOnly: 0 grayScaleToAlpha: 0 generateCubemap: 6 cubemapConvolution: 0 @@ -31,13 +32,13 @@ TextureImporter: maxTextureSize: 2048 textureSettings: serializedVersion: 2 - filterMode: 2 + filterMode: 1 aniso: 1 - mipBias: -100 - wrapU: 1 - wrapV: 1 - wrapW: -1 - nPOTScale: 0 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 lightmap: 0 compressionQuality: 50 spriteMode: 0 @@ -49,48 +50,43 @@ TextureImporter: spriteBorder: {x: 0, y: 0, z: 0, w: 0} spriteGenerateFallbackPhysicsShape: 1 alphaUsage: 1 - alphaIsTransparency: 1 + alphaIsTransparency: 0 spriteTessellationDetail: -1 - textureType: 2 + textureType: 0 textureShape: 1 singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 maxTextureSizeSet: 0 compressionQualitySet: 0 textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 platformSettings: - - serializedVersion: 2 + - serializedVersion: 3 buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 + maxTextureSize: 32 resizeAlgorithm: 0 textureFormat: -1 - textureCompression: 0 + textureCompression: 1 compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 androidETC2FallbackOverride: 0 - - serializedVersion: 2 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 buildTarget: Standalone - maxTextureSize: 2048 + maxTextureSize: 32 resizeAlgorithm: 0 textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Android - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 + textureCompression: 1 compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 spriteSheet: serializedVersion: 2 sprites: [] @@ -98,10 +94,12 @@ TextureImporter: physicsShape: [] bones: [] spriteID: + internalID: 0 vertices: [] indices: edges: [] weights: [] + secondaryTextures: [] spritePackingTag: pSDRemoveMatte: 0 pSDShowRemoveMatteOption: 0 diff --git a/Assets/Editor Toolbox/Editor Resources/Folder Icons/PrefabModel Icon.png b/Assets/Editor Toolbox/Editor/Resources/Folder Icons/PrefabModel Icon.png similarity index 100% rename from Assets/Editor Toolbox/Editor Resources/Folder Icons/PrefabModel Icon.png rename to Assets/Editor Toolbox/Editor/Resources/Folder Icons/PrefabModel Icon.png diff --git a/Assets/Editor Toolbox/Editor/Resources/Folder Icons/PrefabModel Icon.png.meta b/Assets/Editor Toolbox/Editor/Resources/Folder Icons/PrefabModel Icon.png.meta new file mode 100644 index 00000000..cea7364b --- /dev/null +++ b/Assets/Editor Toolbox/Editor/Resources/Folder Icons/PrefabModel Icon.png.meta @@ -0,0 +1,108 @@ +fileFormatVersion: 2 +guid: d24774c462a41f14c9d6e7e13f371ab9 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Toolbox/Editor Resources/Folder Icons/SceneAsset Icon.png b/Assets/Editor Toolbox/Editor/Resources/Folder Icons/SceneAsset Icon.png similarity index 100% rename from Assets/Editor Toolbox/Editor Resources/Folder Icons/SceneAsset Icon.png rename to Assets/Editor Toolbox/Editor/Resources/Folder Icons/SceneAsset Icon.png diff --git a/Assets/Editor Toolbox/Editor/Resources/Folder Icons/SceneAsset Icon.png.meta b/Assets/Editor Toolbox/Editor/Resources/Folder Icons/SceneAsset Icon.png.meta new file mode 100644 index 00000000..8a59a1a0 --- /dev/null +++ b/Assets/Editor Toolbox/Editor/Resources/Folder Icons/SceneAsset Icon.png.meta @@ -0,0 +1,108 @@ +fileFormatVersion: 2 +guid: 20665ef8fafc05f4cb2e71502884a0b7 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Toolbox/Editor Resources/Folder Icons/ScriptableObject Icon.png b/Assets/Editor Toolbox/Editor/Resources/Folder Icons/ScriptableObject Icon.png similarity index 100% rename from Assets/Editor Toolbox/Editor Resources/Folder Icons/ScriptableObject Icon.png rename to Assets/Editor Toolbox/Editor/Resources/Folder Icons/ScriptableObject Icon.png diff --git a/Assets/Editor Toolbox/Editor Resources/Folder Icons/ScriptableObject Icon.png.meta b/Assets/Editor Toolbox/Editor/Resources/Folder Icons/ScriptableObject Icon.png.meta similarity index 79% rename from Assets/Editor Toolbox/Editor Resources/Folder Icons/ScriptableObject Icon.png.meta rename to Assets/Editor Toolbox/Editor/Resources/Folder Icons/ScriptableObject Icon.png.meta index 36fc2dae..7d6aabda 100644 --- a/Assets/Editor Toolbox/Editor Resources/Folder Icons/ScriptableObject Icon.png.meta +++ b/Assets/Editor Toolbox/Editor/Resources/Folder Icons/ScriptableObject Icon.png.meta @@ -23,6 +23,7 @@ TextureImporter: isReadable: 0 streamingMipmaps: 0 streamingMipmapsPriority: 0 + vTOnly: 0 grayScaleToAlpha: 0 generateCubemap: 6 cubemapConvolution: 0 @@ -31,12 +32,12 @@ TextureImporter: maxTextureSize: 2048 textureSettings: serializedVersion: 2 - filterMode: -1 - aniso: -1 - mipBias: -100 - wrapU: -1 - wrapV: -1 - wrapW: -1 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 nPOTScale: 1 lightmap: 0 compressionQuality: 50 @@ -54,14 +55,29 @@ TextureImporter: textureType: 0 textureShape: 1 singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 maxTextureSizeSet: 0 compressionQualitySet: 0 textureFormatSet: 0 + ignorePngGamma: 0 applyGammaDecoding: 0 platformSettings: - serializedVersion: 3 buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 32 resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 diff --git a/Assets/Editor Toolbox/Editor Resources/Folder Icons/Scripts Folder Icon Small.psd b/Assets/Editor Toolbox/Editor/Resources/Folder Icons/Scripts Folder Icon Small.psd similarity index 100% rename from Assets/Editor Toolbox/Editor Resources/Folder Icons/Scripts Folder Icon Small.psd rename to Assets/Editor Toolbox/Editor/Resources/Folder Icons/Scripts Folder Icon Small.psd diff --git a/Assets/Editor Toolbox/Editor Resources/Folder Icons/Scripts Folder Icon Small.psd.meta b/Assets/Editor Toolbox/Editor/Resources/Folder Icons/Scripts Folder Icon Small.psd.meta similarity index 81% rename from Assets/Editor Toolbox/Editor Resources/Folder Icons/Scripts Folder Icon Small.psd.meta rename to Assets/Editor Toolbox/Editor/Resources/Folder Icons/Scripts Folder Icon Small.psd.meta index dee11781..d2f3229e 100644 --- a/Assets/Editor Toolbox/Editor Resources/Folder Icons/Scripts Folder Icon Small.psd.meta +++ b/Assets/Editor Toolbox/Editor/Resources/Folder Icons/Scripts Folder Icon Small.psd.meta @@ -1,9 +1,9 @@ fileFormatVersion: 2 guid: e99d63b63394eba4aaf10385704d0ef3 TextureImporter: - fileIDToRecycleName: {} + internalIDToNameTable: [] externalObjects: {} - serializedVersion: 9 + serializedVersion: 11 mipmaps: mipMapMode: 0 enableMipMap: 0 @@ -23,6 +23,7 @@ TextureImporter: isReadable: 0 streamingMipmaps: 0 streamingMipmapsPriority: 0 + vTOnly: 0 grayScaleToAlpha: 0 generateCubemap: 6 cubemapConvolution: 0 @@ -31,12 +32,12 @@ TextureImporter: maxTextureSize: 2048 textureSettings: serializedVersion: 2 - filterMode: -1 + filterMode: 1 aniso: 1 - mipBias: -100 + mipBias: 0 wrapU: 1 wrapV: 1 - wrapW: -1 + wrapW: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 @@ -54,13 +55,17 @@ TextureImporter: textureType: 2 textureShape: 1 singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 maxTextureSizeSet: 0 compressionQualitySet: 0 textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 platformSettings: - - serializedVersion: 2 + - serializedVersion: 3 buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 + maxTextureSize: 32 resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 @@ -69,9 +74,10 @@ TextureImporter: allowsAlphaSplitting: 0 overridden: 0 androidETC2FallbackOverride: 0 - - serializedVersion: 2 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 buildTarget: Standalone - maxTextureSize: 2048 + maxTextureSize: 32 resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 @@ -80,7 +86,8 @@ TextureImporter: allowsAlphaSplitting: 0 overridden: 0 androidETC2FallbackOverride: 0 - - serializedVersion: 2 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 buildTarget: Android maxTextureSize: 2048 resizeAlgorithm: 0 @@ -91,6 +98,7 @@ TextureImporter: allowsAlphaSplitting: 0 overridden: 0 androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 spriteSheet: serializedVersion: 2 sprites: [] @@ -98,10 +106,12 @@ TextureImporter: physicsShape: [] bones: [] spriteID: + internalID: 0 vertices: [] indices: edges: [] weights: [] + secondaryTextures: [] spritePackingTag: pSDRemoveMatte: 0 pSDShowRemoveMatteOption: 1 diff --git a/Assets/Editor Toolbox/Editor Resources/Folder Icons/Scripts Folder Icon.psd b/Assets/Editor Toolbox/Editor/Resources/Folder Icons/Scripts Folder Icon.psd similarity index 100% rename from Assets/Editor Toolbox/Editor Resources/Folder Icons/Scripts Folder Icon.psd rename to Assets/Editor Toolbox/Editor/Resources/Folder Icons/Scripts Folder Icon.psd diff --git a/Assets/Editor Toolbox/Editor Resources/Folder Icons/Scripts Folder Icon.psd.meta b/Assets/Editor Toolbox/Editor/Resources/Folder Icons/Scripts Folder Icon.psd.meta similarity index 81% rename from Assets/Editor Toolbox/Editor Resources/Folder Icons/Scripts Folder Icon.psd.meta rename to Assets/Editor Toolbox/Editor/Resources/Folder Icons/Scripts Folder Icon.psd.meta index a32a552c..0fab3288 100644 --- a/Assets/Editor Toolbox/Editor Resources/Folder Icons/Scripts Folder Icon.psd.meta +++ b/Assets/Editor Toolbox/Editor/Resources/Folder Icons/Scripts Folder Icon.psd.meta @@ -1,9 +1,9 @@ fileFormatVersion: 2 guid: 6315862a85e61a44e947fbd4b1b23e11 TextureImporter: - fileIDToRecycleName: {} + internalIDToNameTable: [] externalObjects: {} - serializedVersion: 9 + serializedVersion: 11 mipmaps: mipMapMode: 0 enableMipMap: 0 @@ -23,6 +23,7 @@ TextureImporter: isReadable: 0 streamingMipmaps: 0 streamingMipmapsPriority: 0 + vTOnly: 0 grayScaleToAlpha: 0 generateCubemap: 6 cubemapConvolution: 0 @@ -31,12 +32,12 @@ TextureImporter: maxTextureSize: 2048 textureSettings: serializedVersion: 2 - filterMode: -1 + filterMode: 1 aniso: 1 - mipBias: -100 + mipBias: 0 wrapU: 1 wrapV: 1 - wrapW: -1 + wrapW: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 @@ -54,13 +55,17 @@ TextureImporter: textureType: 2 textureShape: 1 singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 maxTextureSizeSet: 0 compressionQualitySet: 0 textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 platformSettings: - - serializedVersion: 2 + - serializedVersion: 3 buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 + maxTextureSize: 64 resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 @@ -69,9 +74,10 @@ TextureImporter: allowsAlphaSplitting: 0 overridden: 0 androidETC2FallbackOverride: 0 - - serializedVersion: 2 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 buildTarget: Standalone - maxTextureSize: 2048 + maxTextureSize: 64 resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 @@ -80,7 +86,8 @@ TextureImporter: allowsAlphaSplitting: 0 overridden: 0 androidETC2FallbackOverride: 0 - - serializedVersion: 2 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 buildTarget: Android maxTextureSize: 2048 resizeAlgorithm: 0 @@ -91,6 +98,7 @@ TextureImporter: allowsAlphaSplitting: 0 overridden: 0 androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 spriteSheet: serializedVersion: 2 sprites: [] @@ -98,10 +106,12 @@ TextureImporter: physicsShape: [] bones: [] spriteID: + internalID: 0 vertices: [] indices: edges: [] weights: [] + secondaryTextures: [] spritePackingTag: pSDRemoveMatte: 0 pSDShowRemoveMatteOption: 1 diff --git a/Assets/Editor Toolbox/Editor Resources/Folder Icons/Shader Icon.png b/Assets/Editor Toolbox/Editor/Resources/Folder Icons/Shader Icon.png similarity index 100% rename from Assets/Editor Toolbox/Editor Resources/Folder Icons/Shader Icon.png rename to Assets/Editor Toolbox/Editor/Resources/Folder Icons/Shader Icon.png diff --git a/Assets/Editor Toolbox/Editor/Resources/Folder Icons/Shader Icon.png.meta b/Assets/Editor Toolbox/Editor/Resources/Folder Icons/Shader Icon.png.meta new file mode 100644 index 00000000..e5478d70 --- /dev/null +++ b/Assets/Editor Toolbox/Editor/Resources/Folder Icons/Shader Icon.png.meta @@ -0,0 +1,108 @@ +fileFormatVersion: 2 +guid: 904349cb6c97417499aa097e0b5dd3a6 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Toolbox/Editor Resources/Folder Icons/Sprite Icon.png b/Assets/Editor Toolbox/Editor/Resources/Folder Icons/Sprite Icon.png similarity index 100% rename from Assets/Editor Toolbox/Editor Resources/Folder Icons/Sprite Icon.png rename to Assets/Editor Toolbox/Editor/Resources/Folder Icons/Sprite Icon.png diff --git a/Assets/Editor Toolbox/Editor/Resources/Folder Icons/Sprite Icon.png.meta b/Assets/Editor Toolbox/Editor/Resources/Folder Icons/Sprite Icon.png.meta new file mode 100644 index 00000000..6d827108 --- /dev/null +++ b/Assets/Editor Toolbox/Editor/Resources/Folder Icons/Sprite Icon.png.meta @@ -0,0 +1,108 @@ +fileFormatVersion: 2 +guid: b464f3e13fd5d97439a5b85dd353cde8 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Toolbox/Editor Resources/Folder Icons/TextMesh Icon.png b/Assets/Editor Toolbox/Editor/Resources/Folder Icons/TextMesh Icon.png similarity index 100% rename from Assets/Editor Toolbox/Editor Resources/Folder Icons/TextMesh Icon.png rename to Assets/Editor Toolbox/Editor/Resources/Folder Icons/TextMesh Icon.png diff --git a/Assets/Editor Toolbox/Editor/Resources/Folder Icons/TextMesh Icon.png.meta b/Assets/Editor Toolbox/Editor/Resources/Folder Icons/TextMesh Icon.png.meta new file mode 100644 index 00000000..161a6ca3 --- /dev/null +++ b/Assets/Editor Toolbox/Editor/Resources/Folder Icons/TextMesh Icon.png.meta @@ -0,0 +1,108 @@ +fileFormatVersion: 2 +guid: ac9d86076d39cac45ade86ec37d1e068 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Toolbox/Editor Resources/Folder Icons/Texture Icon.png b/Assets/Editor Toolbox/Editor/Resources/Folder Icons/Texture Icon.png similarity index 100% rename from Assets/Editor Toolbox/Editor Resources/Folder Icons/Texture Icon.png rename to Assets/Editor Toolbox/Editor/Resources/Folder Icons/Texture Icon.png diff --git a/Assets/Editor Toolbox/Editor/Resources/Folder Icons/Texture Icon.png.meta b/Assets/Editor Toolbox/Editor/Resources/Folder Icons/Texture Icon.png.meta new file mode 100644 index 00000000..b5a34d49 --- /dev/null +++ b/Assets/Editor Toolbox/Editor/Resources/Folder Icons/Texture Icon.png.meta @@ -0,0 +1,108 @@ +fileFormatVersion: 2 +guid: 06d8a123e01d2ff44a2af3a1a35564cb +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Toolbox/Editor Resources/Folder Icons/Toolbox Icon Small.psd b/Assets/Editor Toolbox/Editor/Resources/Folder Icons/Toolbox Icon Small.psd similarity index 100% rename from Assets/Editor Toolbox/Editor Resources/Folder Icons/Toolbox Icon Small.psd rename to Assets/Editor Toolbox/Editor/Resources/Folder Icons/Toolbox Icon Small.psd diff --git a/Assets/Editor Toolbox/Editor Resources/Folder Icons/Toolbox Icon Small.psd.meta b/Assets/Editor Toolbox/Editor/Resources/Folder Icons/Toolbox Icon Small.psd.meta similarity index 81% rename from Assets/Editor Toolbox/Editor Resources/Folder Icons/Toolbox Icon Small.psd.meta rename to Assets/Editor Toolbox/Editor/Resources/Folder Icons/Toolbox Icon Small.psd.meta index 2639cbbb..0a741de9 100644 --- a/Assets/Editor Toolbox/Editor Resources/Folder Icons/Toolbox Icon Small.psd.meta +++ b/Assets/Editor Toolbox/Editor/Resources/Folder Icons/Toolbox Icon Small.psd.meta @@ -1,9 +1,9 @@ fileFormatVersion: 2 guid: ae0310c2e6a193f4f935eef57508cd40 TextureImporter: - fileIDToRecycleName: {} + internalIDToNameTable: [] externalObjects: {} - serializedVersion: 9 + serializedVersion: 11 mipmaps: mipMapMode: 0 enableMipMap: 0 @@ -23,6 +23,7 @@ TextureImporter: isReadable: 0 streamingMipmaps: 0 streamingMipmapsPriority: 0 + vTOnly: 0 grayScaleToAlpha: 0 generateCubemap: 6 cubemapConvolution: 0 @@ -31,12 +32,12 @@ TextureImporter: maxTextureSize: 2048 textureSettings: serializedVersion: 2 - filterMode: -1 + filterMode: 1 aniso: 1 - mipBias: -100 + mipBias: 0 wrapU: 1 wrapV: 1 - wrapW: -1 + wrapW: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 @@ -54,13 +55,17 @@ TextureImporter: textureType: 2 textureShape: 1 singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 maxTextureSizeSet: 0 compressionQualitySet: 0 textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 platformSettings: - - serializedVersion: 2 + - serializedVersion: 3 buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 + maxTextureSize: 32 resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 @@ -69,9 +74,10 @@ TextureImporter: allowsAlphaSplitting: 0 overridden: 0 androidETC2FallbackOverride: 0 - - serializedVersion: 2 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 buildTarget: Standalone - maxTextureSize: 2048 + maxTextureSize: 32 resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 @@ -80,7 +86,8 @@ TextureImporter: allowsAlphaSplitting: 0 overridden: 0 androidETC2FallbackOverride: 0 - - serializedVersion: 2 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 buildTarget: Android maxTextureSize: 2048 resizeAlgorithm: 0 @@ -91,6 +98,7 @@ TextureImporter: allowsAlphaSplitting: 0 overridden: 0 androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 spriteSheet: serializedVersion: 2 sprites: [] @@ -98,10 +106,12 @@ TextureImporter: physicsShape: [] bones: [] spriteID: + internalID: 0 vertices: [] indices: edges: [] weights: [] + secondaryTextures: [] spritePackingTag: pSDRemoveMatte: 0 pSDShowRemoveMatteOption: 1 diff --git a/Assets/Editor Toolbox/Editor Resources/Folder Icons/Toolbox Icon.psd b/Assets/Editor Toolbox/Editor/Resources/Folder Icons/Toolbox Icon.psd similarity index 100% rename from Assets/Editor Toolbox/Editor Resources/Folder Icons/Toolbox Icon.psd rename to Assets/Editor Toolbox/Editor/Resources/Folder Icons/Toolbox Icon.psd diff --git a/Assets/Editor Toolbox/Editor Resources/Folder Icons/Toolbox Icon.psd.meta b/Assets/Editor Toolbox/Editor/Resources/Folder Icons/Toolbox Icon.psd.meta similarity index 81% rename from Assets/Editor Toolbox/Editor Resources/Folder Icons/Toolbox Icon.psd.meta rename to Assets/Editor Toolbox/Editor/Resources/Folder Icons/Toolbox Icon.psd.meta index 570fef93..130631ac 100644 --- a/Assets/Editor Toolbox/Editor Resources/Folder Icons/Toolbox Icon.psd.meta +++ b/Assets/Editor Toolbox/Editor/Resources/Folder Icons/Toolbox Icon.psd.meta @@ -1,9 +1,9 @@ fileFormatVersion: 2 guid: ee4ce20abd2621b4687047a8e4e03f96 TextureImporter: - fileIDToRecycleName: {} + internalIDToNameTable: [] externalObjects: {} - serializedVersion: 9 + serializedVersion: 11 mipmaps: mipMapMode: 0 enableMipMap: 0 @@ -23,6 +23,7 @@ TextureImporter: isReadable: 0 streamingMipmaps: 0 streamingMipmapsPriority: 0 + vTOnly: 0 grayScaleToAlpha: 0 generateCubemap: 6 cubemapConvolution: 0 @@ -31,12 +32,12 @@ TextureImporter: maxTextureSize: 2048 textureSettings: serializedVersion: 2 - filterMode: -1 + filterMode: 1 aniso: 1 - mipBias: -100 + mipBias: 0 wrapU: 1 wrapV: 1 - wrapW: -1 + wrapW: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 @@ -54,13 +55,17 @@ TextureImporter: textureType: 2 textureShape: 1 singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 maxTextureSizeSet: 0 compressionQualitySet: 0 textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 platformSettings: - - serializedVersion: 2 + - serializedVersion: 3 buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 + maxTextureSize: 64 resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 @@ -69,9 +74,10 @@ TextureImporter: allowsAlphaSplitting: 0 overridden: 0 androidETC2FallbackOverride: 0 - - serializedVersion: 2 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 buildTarget: Standalone - maxTextureSize: 2048 + maxTextureSize: 64 resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 @@ -80,7 +86,8 @@ TextureImporter: allowsAlphaSplitting: 0 overridden: 0 androidETC2FallbackOverride: 0 - - serializedVersion: 2 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 buildTarget: Android maxTextureSize: 2048 resizeAlgorithm: 0 @@ -91,6 +98,7 @@ TextureImporter: allowsAlphaSplitting: 0 overridden: 0 androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 spriteSheet: serializedVersion: 2 sprites: [] @@ -98,10 +106,12 @@ TextureImporter: physicsShape: [] bones: [] spriteID: + internalID: 0 vertices: [] indices: edges: [] weights: [] + secondaryTextures: [] spritePackingTag: pSDRemoveMatte: 0 pSDShowRemoveMatteOption: 1 diff --git a/Assets/Editor Toolbox/Editor Resources/Folder Icons/cs Script Icon.png b/Assets/Editor Toolbox/Editor/Resources/Folder Icons/cs Script Icon.png similarity index 100% rename from Assets/Editor Toolbox/Editor Resources/Folder Icons/cs Script Icon.png rename to Assets/Editor Toolbox/Editor/Resources/Folder Icons/cs Script Icon.png diff --git a/Assets/Editor Toolbox/Editor/Resources/Folder Icons/cs Script Icon.png.meta b/Assets/Editor Toolbox/Editor/Resources/Folder Icons/cs Script Icon.png.meta new file mode 100644 index 00000000..29427006 --- /dev/null +++ b/Assets/Editor Toolbox/Editor/Resources/Folder Icons/cs Script Icon.png.meta @@ -0,0 +1,108 @@ +fileFormatVersion: 2 +guid: d5f5f953f8e2fd549b269b884c145d2c +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Examples/Editor Resources/Editor Brush Icon.png b/Assets/Examples/Editor Resources/Editor Brush Icon.png deleted file mode 100644 index 84e6190d4e4e97af730aa77bbfe46262acd44385..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8527 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 Q6&SJGec+GMUF1Li1J=2%T>t<8 diff --git a/Assets/Examples/Editor Resources/Editor Bush Icon.png b/Assets/Examples/Editor Resources/Editor Bush Icon.png deleted file mode 100644 index d3ef290d68b74369995fa5e46ec6ce8e7ed04262..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32411 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 diff --git a/Assets/Examples/Editor Resources/Editor Bush Icon.png.meta b/Assets/Examples/Editor Resources/Editor Bush Icon.png.meta deleted file mode 100644 index fd0b271f..00000000 --- a/Assets/Examples/Editor Resources/Editor Bush Icon.png.meta +++ /dev/null @@ -1,110 +0,0 @@ -fileFormatVersion: 2 -guid: 8f09f7d88997aea4fa7d121270338880 -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 9 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: 1 - mipBias: -100 - wrapU: 1 - wrapV: 1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 2 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Android - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - vertices: [] - indices: - edges: [] - weights: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Examples/Editor Resources/Editor Camera Icon.png b/Assets/Examples/Editor Resources/Editor Camera Icon.png index 7240c2a6da2893486f79264df35e931feeda381b..9a48b12c73b7151e9023ff8c747ec0be59ba6209 100644 GIT binary patch delta 556 zcmV+{0@MAJC$j`0iBL{Q4GJ0x0000DNk~Le0000m0000m2nGNE09OL}hmj!^e*x%8 zL_t(&f$f(+Z__{+hkvj0MSvVV7HK%>!UG#X8I zkhrKdJENaeButDFS{s!1nhpIzgEF+!90le-67+1ghmC7N)A0zBz_M zZm3gpB+@cKAl#~yU|ubz8e-}DK;AHL$13B&R2Ac618uhP^QBPJP+TeGaBuS3pMVcb z<~#9eJ}O|sa{yk_@tF$%f2a9yZR;H$6=sO|HGqM)XC(v#?p*a(-M;aX`?ya;?*|#9 zlz_m!YqjdO`HYF40JIg?S4jbZYn$u2-HFAxd?+md02_}ejLV1e0s@f_BAO@Qqi9#+ uk1Ppw+iU=MD(*+-4QMnPjYgwUkrVU~nq#Df>2Lr5002ovPDHLk0$_sPj{%?n literal 5012 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 diff --git a/Assets/Examples/Editor Resources/Editor Camera Icon.png.meta b/Assets/Examples/Editor Resources/Editor Camera Icon.png.meta index 420cd890..09861755 100644 --- a/Assets/Examples/Editor Resources/Editor Camera Icon.png.meta +++ b/Assets/Examples/Editor Resources/Editor Camera Icon.png.meta @@ -1,20 +1,20 @@ fileFormatVersion: 2 -guid: 4394cc95954ebb04897a83c077777530 +guid: 45980f2b5045fab4a95e80d4cd1d91a8 TextureImporter: - fileIDToRecycleName: {} + internalIDToNameTable: [] externalObjects: {} - serializedVersion: 9 + serializedVersion: 11 mipmaps: mipMapMode: 0 - enableMipMap: 1 + enableMipMap: 0 sRGBTexture: 1 linearTexture: 0 fadeOut: 0 borderMipMap: 0 mipMapsPreserveCoverage: 0 alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 10 - mipMapFadeDistanceEnd: 10 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 bumpmap: convertToNormalMap: 0 externalNormalMap: 0 @@ -23,6 +23,7 @@ TextureImporter: isReadable: 0 streamingMipmaps: 0 streamingMipmapsPriority: 0 + vTOnly: 0 grayScaleToAlpha: 0 generateCubemap: 6 cubemapConvolution: 0 @@ -31,12 +32,12 @@ TextureImporter: maxTextureSize: 2048 textureSettings: serializedVersion: 2 - filterMode: 2 + filterMode: 1 aniso: 1 - mipBias: -100 + mipBias: 0 wrapU: 1 wrapV: 1 - wrapW: -1 + wrapW: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 @@ -54,65 +55,38 @@ TextureImporter: textureType: 2 textureShape: 1 singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 maxTextureSizeSet: 0 compressionQualitySet: 0 textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 platformSettings: - - serializedVersion: 2 + - serializedVersion: 3 buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 + maxTextureSize: 64 resizeAlgorithm: 0 textureFormat: -1 - textureCompression: 0 + textureCompression: 1 compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 androidETC2FallbackOverride: 0 - - serializedVersion: 2 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 buildTarget: Standalone - maxTextureSize: 2048 + maxTextureSize: 64 resizeAlgorithm: 0 textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Android - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: iPhone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Windows Store Apps - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 + textureCompression: 1 compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 spriteSheet: serializedVersion: 2 sprites: [] @@ -120,10 +94,12 @@ TextureImporter: physicsShape: [] bones: [] spriteID: + internalID: 0 vertices: [] indices: edges: [] weights: [] + secondaryTextures: [] spritePackingTag: pSDRemoveMatte: 0 pSDShowRemoveMatteOption: 0 diff --git a/Assets/Examples/Editor Resources/Editor Canvas Icon.png b/Assets/Examples/Editor Resources/Editor Canvas Icon.png index 1ca7988d27af9fecf0230ba7e3b02ad6f969c722..ae879d24d460ae2e2e2940128347e24fe1e3ba1c 100644 GIT binary patch literal 225 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTCwj^(N7l!{JxM1({$v}~5o-U3d z8I5nRALMLMkZ4Qn4SOL_@_%{8;$xXp)jHZf+*_;oMn^?MZr`HsJ6$#R&X{nHv0>8r zyE6`pMyuKBs$37=Fzw}?yu*)om-%kq$H16X`?7gwzCpTV@}~B%&!LaKzdv{$-oRkW zbcG{8*`b$V>!bRGw>}?CbHDr}Xns5+(-jN;6@m-g8l)JrSb&UUl|VHNKekKP`>G24 T(_%CQx{$%s)z4*}Q$iB}^S)VB literal 1622 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 diff --git a/Assets/Examples/Editor Resources/Editor Construction Icon.png b/Assets/Examples/Editor Resources/Editor Construction Icon.png deleted file mode 100644 index c99db4ab10523b4c973f57302bc340be26fbe158..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23580 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%0DT>{!8^8^UN?}*V2O;=_JaGt~ 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 P@Owh-lxp%Z!<+vX<}Bqf diff --git a/Assets/Examples/Editor Resources/Editor Construction Icon.png.meta b/Assets/Examples/Editor Resources/Editor Construction Icon.png.meta deleted file mode 100644 index b43a04a3..00000000 --- a/Assets/Examples/Editor Resources/Editor Construction Icon.png.meta +++ /dev/null @@ -1,110 +0,0 @@ -fileFormatVersion: 2 -guid: 9c58b9af28ca46b4ba5d1b48c1374400 -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 9 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 2 - aniso: 1 - mipBias: -100 - wrapU: 1 - wrapV: 1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 1 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 8 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 2 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Android - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: f84f22f888d069240b9e5d6f1aee9439 - vertices: [] - indices: - edges: [] - weights: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Examples/Editor Resources/Editor Injection Icon.png b/Assets/Examples/Editor Resources/Editor Injection Icon.png deleted file mode 100644 index 75fa693c854f65e8438bf04bde2dc003910c7943..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33845 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 C=4H76 diff --git a/Assets/Examples/Editor Resources/Editor Keyboard Icon.png b/Assets/Examples/Editor Resources/Editor Keyboard Icon.png deleted file mode 100644 index ad9a84b08f3da9aeb6e069241e503a637613ea16..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3605 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 literal 16636 zcmeIaWn7fqw=jIoFu>45m%tE$q$u43f}o@z(qW=B0umB4v><{aouU$w(#cPtk)RX=##5tNCSFsnHERFPQloTs|Et~mnd@% zVhshi0Am(GdvXYLF&PX2rNZGS;LxMFXe3$>?3^L}m?a4F7|`If#w8@~0E{hmT%zvP zg`-@z}hxLeSOaKIRJ>NSF zmribYjoh+S`Z0j2_z9RTLGzj+<%n`-wT2~CT%Xb{dXuS7fWYS=5AwiM;h8bbnQgS! z@u{o|cQ`xX69u%(H9DLXMY?e1EB{6&RlJhAN#-jVI1+N@XZ{oYVN)r(&(BrjB8gKE z2UW#Y!YHtYz4XD@+)(hRQ%Tpt6W=}i{a3!b>%|d(vm&CG8$0qgx6}OO>u#KOKS6rN z10jxvscQXE#WjS{y-)F=;fy6`ow(f_6qBNYr51IML!Qkk0A}{aOuiaL z_{or;G?u7EUJUAp%kwsyQE>$a&+7kbdsEP}?@i$S6vMcxw|E{4~!uUz6D| zb#%^iPb80nn)_VH?tQ#g<$H)YLbTsPMSO8ntPO025*KHC1z zsxTm_;L+-m>zWf3ALNeT3owSid8^Od)IJUNipj>mCun3+G+RmOJZvQ88fPVOxFbLd z$b+}|*^gPzz;^RP?2)q@m(nFMVE}5`kwS%Ex9Hy3`M}L|60Y%NX8XHmcfhD5Jkwra zy~%jA5c;%m!|&2jnE98FX3xQ+GA#btc=0h1 zq3aFQ))wOT{QalbhHKL1S7^VSen-O_q~1`8*Pn^+tMOGg^yUm2lx=uMIhEu`i5TkU zuK^iOdowV8MAWBZxEu2)o{)OYm!M%h07!JLF$$r2WgGEP5v6l-3M}&fPQDv&p+tVN zD@nI&i-IYMP8*aKqMw;%b%V4Sg;}1v()wFKOqKc0qKQyklLt-E4*M*Ab zMLZU2RJOS{%Bz$jO2KQo{1<3~_+@sY(<^Mv-q!#ePsZ(HMYy2W?BCt2Zdd0DHkxSL z-e$J^#jBy;faC48#`L$+rx(Jo>Czk3EJoB&_dET{ao;_0ZS~572f1E%+#CdEfnoUV zT3_h$Qpl&%6UE_?i5a_@>};9MY8DT$;QdD6ud>R!USm9pN?x+}%IZkKHHR#wWN)u2 z{a_C1i)iGN+pHEio0?@1HKTCHl#!_NgeZ6Y^{4Wj=ola&_$&@9lmtW+zcnPwdF@@@ zAG_A>Q`l~Sz;E%_8=HIfZ#j~0jJrSHHX!~zKA8fDLS|vG;+WcH^;3n#aEsgnnn)gU zm^C*w2ZI#*ou=4POXt->sSke`xu6nm$pL(5b6#lDmc48CD3`zYE3x!EcSgYLlSL9%XhRyIIDyljG)??2^dp<9G3wuJYy_ z3Ow3;O)~iYyB!c=gNqdGeUzz!{N5^Nk4iX%;rLrG+$4$|QCpCiqr10jg}ICAoS}Ji z43_=8!u|c;*O5{^JH$M_Z&O;@DkiVehCs#fOhp}=j*PE6%0g+Q(0UZO-D^DRauKsW z>$}o6ic(V|aQuT0MSPA6%hbk-O*=G+oWEtNc)~-JOXQ%8OP4N(y8D07!-y715Dz58x*7=~N4kI_Inq zuXAQQxxk6U{hQG66`70|!J7U?DV{h&^)(n=2RVP&^{ec<`)pR4^P;iz1l5-#=THU)zw2l)hlY z&1|2}DH$);-@=2aqwT!%SjU+mDDB?jvb3vB*k(-x^sP-Qd)qevS!H(y$Sqig3KkAS znqR?0ecgVdl9pz@xXk2wFeD2!=$OTwF*KagjUi-|w9^buhb+?>kA#n_+Mu?k^_{+= z1u|Qy$+hxqEAE96#-_KyJxuC~LtdH&#!1Za4^U07|GIA>Q16Yiz4s>>R~Y6 zj;AwQmTYHga`npeHm!}{)CvP40hW{Z^ypR4TLU+b#|&|f%=u=-253DwoY6I`t_Q>P z`N<-k!_)r6v8o|uU>sX9R=*E=7lj<{GI{9j8O_e6io+Bj+T-v#E)2u(!SOG_@s-2? zPAUz`izYxrQnvf_-3{87zD%lx*N`E$+xc%tM2n?`2fwfHCmZUObxIJ<8;CAj=wG2MGCK=Yu!{xmDF0=h6hRi=ALwa&%B%3L8M3jE&P$COF^+?%|tmOt;=qldT*pLyis0br# z_wi5K%ahB#fwoS?Yc?y747VEWZ;I}n*79YqyMul4o*|<`M@iE8hloFOKU_v64R>|2 zF?a!(!uVqFt<<6BqKWyQ9aCI~busVXc_6n*r3zt_Co>l25K_!_8T zSH3)|_mQm2Zg3pAan$yYGANg92+`N-qvE0x^t@Z zuD}6ksEW;^t|jWvHKJ=-L^qD^G97JOks|6)owPFUycpg2vRj47)!ZUeS91SW;7q-? zas1dahU74ox->nk6iW5sBFhGe5xO%T+cHqz5xm=DbU^gU-5t#ANgdHYjC4pbV%|O<&QU=8w zx8F+O8A*&2EDlvXb=MJ*yQ8oB{SlZu8T1K<>9={uztA>sT$~78+@vkjjzN7>8^^Du z4N4ginDzfQ5w}>&{+tBIrGkf?N3l{@B_HYAz#VU*qDJF;Y+h|EoN6d{A^^r5pKni#wy#u13^3-7lW6I{d3mjCFn=5}q+S z{37xX`vieq(Z>+)p3||%k(4J!J5_O-g`A?S^NcfdgkB5y!Xp0G58@v(t%Z*wMEj-5 zh=X@;J~OkISCng!`(%=ggltFz|E$!1Chn!UTya<~y0=vN{q;|h`SHTBKkoQ+ii0?> zT(sWpjEnS71Sl^IRV@5TYDfG@r4Ct1eA9g*ub52zm?DcBlDK!tiF}t~(_3zQ?y~sX z+UNx-|B=||C1SAS5dY%37twv0bqpy4NhARgJTH1}kSpw}m@%_USM)okO0PVW@Dqk- ztW$Q1`LJQP%-YfvidJ0*qyWnp`HDDBv#?E5rL%6?QJD2n<+p0K;9E9q*O7xyLw0*8 zXn7OA+R%Qs|3nAR2o}nIwyp^95rvp-U?%ccc$UANIRqEB^E&33SdeY zjDNM9UDr~wy z$0aQ+Db98JJ%K5in$za|pTUGPBo3+Qen)Y`(F8rM+M^eJtd|+6=PH}VPZz>!ByM&& z9m>uxRUQYkz+0J`Y*7Sr_wAd)7h2ZR!mC@pOqJd$neU`RV4L1CJMW)N28xg$4Zs?F zfQg*WqL&?~>0Yd)W~sT+`f)9fL5H>FBX6U;nWX^2)>6<}!&8^ypDiSIkKi9UAyQ0X z*|Vn4m2pd3VXIGp2)!3&XIG<2eA3;7w=ys{XwD35B!$&0=;fi99!ErewaK0jjxB!% z2ak0-W|1?YkEGz00`Oi z+v8CtcjYm4$w!mKx7VzGE(I_zksrA`KLBc&V7feWl%xqcSIUlmSDs*Pi2bzad4I!+S{Dxbur4ck;c4al;NC|3Rc zYE!?hEOo*K4ZmxReCyqRZJFcdfyP)#UBXJ`fN)=P!PHE-ZFl`A%aI$lK7P)^0+@_I z5Kjgg&p@^j#$us?r0P4O5j*#Tb$lkQLP(+9}RJJzE z>>R+FG9Yigqzgy@j)t}DPMLi&{#8}>*b%=wwJ{kN)(q}G6Z?=0JPudJjrZPg*|j_< zqel~yPGg)aCC?RzkpfCbio5V(D0X!9^sd)JkJ5WTxBzq$sfX_50b?QG4YBtZoW;&M>TG%-G`|BsQ*8_s@0f z8YM+Z<3`Fs3=E+&?y3vwVW}GwYi@JOci2#V+s_E zt%0VsD}w20f$}ag2Ptj+9JZ)}=K@ZAOa8dQb-4X%@~a266}NcYDkvPKP7SZVfO0Mu zASBesAMYnF`!3M%BU8Aq>S*6avZ9JX*w~trY%e+j%08Ik8Y;BVp|+RW{jCPph`dM8 zA?KyampieTJ8*gS1f~nKS-_J`c%dLX$DLttBD<}N!%)KQ?%ZS~d>mj+S<^3c71%`N z5)|}Y84)K9LKi7_`4M$p4@6#7Z4X1Fh+#l5RoZMXoK!GU2PQ$32vU@^_MmhvMot`t z69N}DDZb;z1s~o`NBT7VTr7YnDQ&9=JSo{=<1$b86m_vb{SLN61!qdOcMFYXJiOcP z9Z$U?+o(N0NOaf{ctUC~xqU*Q4()YtQk!4F&K-NKkjQo};R^%nPih$~FCD7|oRkDf0=o7gWeqT?pwhvn1qS4__~$-RW7=q|pI1yNt;H2jwlr$@gVDUW2U z=JBiV=Rd3beA!@14X*^;SI2`?8sY_s2)Wa=w@&w)IHCwn5Bz?=LK(-7yDLD1@LAw? z{m4cVOL1nf7N_W6N?i?cYENre_jrGo7h!8v{5=3)n1&zI1~i+XL7+pmfTN%6h*$lcYp1NxWM)vGiHO#mI?J4{d!$oo?RFjM96vj|w!Eq`AX@{w>ELX98xGShqang-iGzD(Nx_-=CZw$RDNY9Ed(vAigvw zR|>`Qlzb6IK@tzj+Y@XLb~@l63l4L_A>SXHRirhSOCfrmkG&`qRQ{l%q3V_ZGwMaW zv^c|cDcIxDpJ9S%lr}JdBVU9Qk_c&-NyzVZj4Rc3_n_guJoY<;OlePT?}5koM$WVe z+$T}MJY|219*TZ z=vl51BCdI{+C(V+(ubjgMX{CF>j<|{)ec=^XZ`U#MQre26ZMV&8LqA6gCfVu$F&@* z!F(@&Rn(<~3MFd?AnNcM*qa^KF~olK5PQVR(yC#V@oYW1eL)NRb(5gC*@=O`bj2ca zKLmOxG|~Rqg4$m}k*sj&aB;kdWAF7AIR9PWkctqI))+@I69|-`NM6{gA$`nDyB=9N z1yk)GF>eY`Rtvvwbm~<38+ob9mxd{z=RQvsyl{#>teaxq`3UF_yFy;&kq%W8!K(oo zKBoQRCj^TcTPu8J?Y@}av&8JopSX0K}_g<4m)r6 zgL);=7`}IA#ysQ8W^8#U*~@C0zv?Qp;R(V?6&;;5fY>`JglN_(_Ni(i~YA9$Y1UN5UqE z3IjqfZ0c%(4?tO2_JVoC@!S&G72&7JgyZ(uH_WpK|B3}67>@qq#Qj~RhGRYrPZiqH zX6|fNUM3py8n;P=ni401I`3vTYAxO zl^&jPKvzrZY*ME%^6cwyV|j88z01!w*;iMZ`wVL@tmi)fiX*9X>7wK@dTUKcD&o|B zS6ElztC;eqy3@Z`6iIAWgA>Oq>dg=$2g-_&`B_ja?@vM}OO?)=j5Ku$~xksjZVL|Juf{;M@4iAWsHAHbklLPL(^0x{*)x=&; zAlhFGTx7Q_Fs4wTv9)gu<4fUF~%)X!5Bb z9Gzxiqm97uaRL7~vpq?^bmZB$VZxf9E0(i$g9Ds)pJ`yIvD;v`KeBdQkSujI9Yi)+ zo(6wdZ=C$0yuB^JKW{Q+mn!39aRxRe5U8}gk?eb@4@x@H>pXM zl8BPB3Iq&wdh*{F2!g`YdrZ0qHwRNGT|ZUazdb&&t`A}%sr0buOHtr%RdMO?wa1oHFvcOZ|I`8i2ZUV&Y@gbz3O%2ay6=F% ziyr)d$fqRyCI0KwOzn$j$hZPMzboYqW)zd7p^$X|`6kOvT9_!ZPlxf0G&rFzACqe& z;nv1PD5%Mk6Pom*`0xy33L=A{qU_?6hT$5>(u`cfM{P}#-TAN!{rs0DTZFOCovER9 z=R{bTO}50gUSj>%#EcyTg5kY(MIt*<8Z-8GT>>m@P9ldFZjBOo08P3$7{~ZRGz7xd zlrYhAm%-&rO(?+cfHYMhH?F}gc$*lcIk{cE{)Rs98FV2;*5ryM0$;#0S$^+Elo&ws zTqqP~(`P~p>wNa@J+!vLSx^aW-GW-EV9hgY=A2N7*j*xYn#n34kHQ_bi`-xaTW^{vfB@j ztcLqbU7iMrR%AY7gTGVFNg?;arqV&1u=In-SCgUmnaK~^V(0P|?u0{Ot7HE?5m0rQ ztexp$#)?}4nK@F^?wAyi%@^hWBAe-3Q2w*I!4%wg%w-2Qxoe- zO!NHT2M?2C4cCVc>P>^~7F-JUMmw+mJWtZyH1)pMQ5d|~7{`Af4W`nsn~%x&wyjTQ z99;jXJI>{@?tJLzD5vjp)2e_Df$`z}A52FNXs$Z+Yk51ZQv75$=4Sw+LD<2>)S}U3 zzL))?8r19oc;-Kh=SYaBp4<;!pP~c7!u-r zU6~y5vw0w>TJjt`vz-O>@E-dPTu*5Lb)kVH?!&^wzW@E(%hY)N{Woj`h`M&@s1uTN z5~));=l9Vi+o(l}N*A90EPa@$cqnm;bvu5!rZUE+Hw|(QppY^^t?@$o&Ce-n5x1Hp zz{Crm2&UbGEnaIsoxOix71L~RUfbjMqd;{?t1Z3PgLix(aAgB_;4QUapVVvyR88Jr zPuHJ%L?h>$eN7hyX=jbNb+%2WhO)tIP>F=a-Kp}vheo!&PoT1xYx4Xmz>z?RMUtb( z7uX9!-it9DDC;D~VJn?ZhfmWh8vk3nmr-J!9!q+64orUGmo#6PA>2KEdV4bSZ$jjb zTpT|9=2l6x=G~rS$ju6B6-U&8W3CU&CS?_ME}jF$3nQPnaOYiGn`Blt|MYh`)TC{F z{k1je_EWw5$L8sc{+!n!uZKRbZU3GtL%nM8Mqyg`Xho+9Rzg?DXgn|8fM@Q875`~h zxdpBpA{C+HB0eH2I%BECm{q!ie*-{%1!wZXVl*rlx#@Cf>Nb-Jz0Cz#+Hb>v9 zpz&o%tiI7%!2DG@wldgXj7#fuZk4sH6IcQn#5^L2LD;WD5b1R%!g=Dl6V31H_^F=8 zU)BdoR_XW+3=qgTd{x~ASX3p9uJc1(KP%eG$OP3byIsW9Wp?{u%!7vX zOy4?&Mf?rkzO|)>TQYj{pQFDBeCoI8R!?}EO^~=ZL)eQ|0%HxZPc(`*s|00?%1hJn zG^4^D!+yDutp=VN1}Gn1CWJo##PQ=DT)hHaEa1QSSat2{?Rj!+J7Vn~#$2lJ@VI6u z{i~XPX_yHuP5e{a`)BzzBxCn?q^Iw+9XrH@E|lv55xp}*jRVHiN1PK2N@vit#y@!Z zig_7!H66?Il~wVgqY~sNEbCqyrYsDyMpw{Ez!&%XQWhP8^}~Am@;D!BVbc&_KjRAy zgJ+-C*2(K0c5qF1HHxRhjIV(#Of>LuOQ<_>7#rA5Yp;q-lRR6e!d@SGXK%-9ML|uI z8d#>(ojI48arYk$EQyUTy~#y(CPM8L{fW1=8=59>5+v z`sGXM_O!n@Vs=NxOZXNd;OQy-`O+_X|F|bB2|BTBTcgg}YJCLryqD}G2qn-AY+LSY zMH7CfKK(w29GxUpWoLnQuh}x`G%V%o(R8G-uCfzJPF0svWC0!9n(oWK$HB18<;KtN zdKqZo85Pefs5@Q-nY3|z+-5e5wVEG<=w&1rM~0Mb9y16~ymC5?<*mpn2FKqoEiiV= z*s7DWHmcY%TbJ4R;IPTWw&p%=1kPbh?9O1eN$8xvR zkp$IIsbfy1Q<;@M+ByyRmOkOm&SY>2MTRQF&+cpKBrtlyxCqCoJhG!WA-Tl<%C_dw zJ9m;30x^<+)a@T$G7rND_QP9KYN<>*LGzCwA8!?=;ci$Ji)11E*J^LskJ- z#yM6bWh4NTR|!9GBc)fDHOTmkY5Ox)u($}K4ugNJ*tWLS24eBB4Z-_bIIJLuKN&52 z9-xHF7MFVqV%slKz!bhJGd|EqkDsO8En1yD$>0SF^cb6jI0$$&GrCLMz^A$je^(;| zuR&>3#l69x`Cub!>P|27XY3I}sBge=i;fYg$mS{*qF9<0qeD(}IfpS>{=9##7Ion) zMHO(_K}#8E6l1WI@qRP#*_{#BE3S&9yM6FiWf#dQ)SHHJe&75hnv zTH{AQkPgL(jCHM=m~7YWVQ*4|BsYFscPs~x6>x-T$B7VbQBZ2H8lqD{k_(J9J`4aO z&%|k`c@Z}e#iG$Gmvlkk?xd3(94eN}tEUS2f>3CnlEpiIKx|pRw2Q-_13d3pn2qJE zh)6vCF?=)#pSy9m-1+DQlzepdLmC+9WJEg);T`UOm)p9npJS51z4xhVrQ+DVI4$}>=uAQAe zE{DwjHs+;OoaUIhd+1&eItz5`S&S!X6%Ng#Gj_w=@%?1_g(UN@8~v8%{2G_UCw;C1 zuwRRRG!(=Ul4w;@&BkFn$kVwUFSaeoDUN)#Lr!x7f!ai$=T6h9JiR4*CGWC8>PDZ_ z@wpkZ``#qBpnM8%9MIzwiB&vb{MjD6UuJcV$iHDbS(lzt2h{J0(t8bV>tF|4s-mrl0tvvccFeg==|-ANx@L^m^EixuAfK;x7x+x2zpT+=I-**_?E38= za(|g>QON_l7d%k38ZM&g)*Wm1Y2z>!Kx~Z`w38Ma7h9cnxA@jnmAqF!*b*~gJW?p; z$aGkZSz;g9G!+TN>wvXxVXqNeO*M9{$yE6cLkz*)uj-^9KI|LK?miN{J#M8rAd}jE z5Vp5Jj%#QzD)isN%bHW-9FUN#vH*OjC0fL1$zTs(6Y{E^GzZmbv@}OPzxd=ht0>Sv zZ>EW6?+RC-e^k#?t$P+9B!HRH`EZgp)HkmG=`1FBHExMRu2|=1{6!6C?+A?AO~Fc} zTeuam58IyEScwr~XTQzS*m=npx%=8G_KyG+{@Sqb8eG-vY@}!2lY2ip#kJIH?!ZfQ z6V+4JmZ7s+6auq4waAlsMsUXf_ImM#$*2JVzS55$p0Uj?DsmF9xos0A_HlVx|Fr+5 zq-|kgB?-fv<)|b5e5DWDADf~iS9;oHMYfoOM88pkONkGQDbK2$`AGM7o7 zO|IX|BNP);&fudJ`PLSGq4SfUwxv-JIQ6}~&N#tF_S?&_NrhMvd+i4xnRma`Ttc=7B2;woIt!dJ zEK#3zuTFbVmNRn5I5!f=oQmhOk#io+M`Rn4AD4yioL);D!pkGFxH6)a6h1glA(uYm z>%~K%wO6?d$MOc|p0_!rMtPRytM$yp32^#|t**XY$vsMsR&X)8< zwoZ@aPZcyh&LfOdkaY{4Z*adHE{DXDzDl@+IPNVPJINL*dih04&ivu^#)qtMUu4Qf zMumosV8SA0W5ytdYJLQE=8x9WP{h0aQ;7mHInzE`qFPGk%aa0*7;9pfFT>a(uTc^G zSTDzb_96?Ae<1Xz(DXa@q-JtVzbl4Fw{#lSfUzcn3vNg)Wh*q8`uGr;*vA7jjSM?6 z>~GFcUAz=N6FX`2r<&mEmCpsFB=e=amXhPQpA>wi?3dy}V65~V%(H6`7exHyBG?th zcaC6f>l4XN@Pi-qm2AR^7Mmk;nf2f5}+NmriCc$sI5^piFpT#+e3&y#hKe?XS5ugNy81Z3pHI1_brh(^x!c!5p&+N} zcPM0|IJJTVf`@udAos&=kGtuJ!9KCe&Zmt7zO!No1H=wFmvxs(&yPYG&3-0OM00n3 zzvxhlMA@)0J2S9>@UILJIJ9I=2)fszr+cGSFghIzK1?3EiuwMeYDYpvnEn%ozKN82|WgxVLSP8&C; z#T!&G$UpR|c!iX%&bN)O=_d>1*DOHA(qgMk`a?G}3*VhSgK7ct6RWkexz;c6qX3Sd z%=9C)?|S$%+B^3=faRnVdWEaAK*@dgqV9|p$f0_Hn+YN$(av}GM>xJMp>5o@F0B2^ z#>rlp?zTW+JL+0IeM@fsI&M^mEdn)pu4yTtro>*^nqxnCh1S`~=Jl3&bgmAedq`_k zEfP|yW|>+rcvq4J&F1<5JKf0hF^d&vXCS^o8F8+E%2YF6C_>C2oznJM=u;~cv|`ZD zjE|WiRUjBP*f(W5y14rf&V+m4!qKzGEv#}y zCGMa4KsnSx0ST%LdbXbmx3NU+dD(_Roiv zp#0?hS+x-SBf^ng6@T)Pi1$Nw6!GHS0J^_YpfY%g@7vhuq)?d?DEbov6*v~i=jWXx z0GWvQ>P;MYyH#y>Um@dO|9uXQH)=TW%$ti|@|sR-Z3IP`9SSm$MJNr8@i>6@OK*PC zWNl$Y6cQpPK^q7D_OA+OuWKhy3QMCKxK9>$8q%N4O0B4%C2+xD^XNh62T#2nv6bDb zV%+Pu+0V*5eCysG;W{3OG&Vb~$v1y$7{?{`&|25Q`& z^YcjI883VkEk8?-nOqnHH935#pe6_PO?&*Ta7e`C%CqIAuE`=TdsgcC%D&5fb}OI)e3Se%W3-NDSDm z5$juI9~*s5d?ShYz?UHg)#zf|k)8tHJ$sq^=H^p*v15g2*O~@eX;R~!HeFm5H zCzEOKtv$Px{o&Vu!2B2df~tIQVwL{qK$iWi?g&+^g4re3qs}-a1REo&D-ARh*4btR z;ns8wld(~83}Z%hzg;L!K=G-PVmo;`XQw=DgkKL70G*r9oxd?%v^(uA*uVuH-8;D8 zvQ6MOTtC>I4j%vRKaX#GKEsA62iYlxkdKXNHgO`3@tR}>o1;n1)~~B;L@+Wqx%&jx z3|d9WzXu&S3&{BeoB(`FTp46Ec>QDeLhW|xVb)4bp%D>`10Jr7R2%}0`(alaU6|qQ z$l>#0OUa(jPujooeeW2h6mSixY6RSWlAl$jPuxYN-L>{jl7n|!N&Xkn?@;P~kNz2x z!jr2Ec}yeE@wg4*RFdN8Lr#-lZ(GM?-@*H4|1tk0f`5lfv#D-BX=&kytnZ>=3dzS_ zfwu4Jjde46?&g3L%dkWk*0)tsuBMzXjL?ZVK9X`U3Fw^i=jKyUjxl+yqh>Pt=XN}6 zKeNt79;rb+(JfU>l&@@SdS}15{N~Fm=MjD?hqu3MEW>gYn$D1IpCxD-Ulo?3Vr*2B z7ICwU0^LYVu%dtu9%SjPPvs(Jq}Tg~lpnOCoK^}em9tpZk`Wu&HQo~w8{Fco>Z-@A zs{@c>wr%rko-5RfN;@o;?!Q>PlX5Ewe)1B=eQ-fw1YS)o4=dGq70Hd>yg?TAy0^|j z=O&%rn=hcM9K-4~YdPUMP4wm1e06kcnsJm;(lx}>2nc6Meb2GAtok$x5AUaMh-vC8 zcYm8F{H?pSs#s-H)Gb_XUQQ27ud(^YA+uh|A_XdSvo|`|9*p>U8xeVBs8c_ci*(k* zwu@Yaq&1BncrZ52wWcKwG25jTeEv#v?gj@;6mFUM;cGaXli=+r>h!VL3w}S|fmhII z`p7G|OTuMM^;Y@VXm9p3^y+cms4xN>Nw;*ppPseQ&HGb8s*Y-mImopmYWJ@ScZil4 z?lq4PpB0JDCMj9^_5Qpm#K=DIF_{g49U0bI9ytE2g?BWNyWFQ}7R;(a1jl1&X3aZO zd-7Le>UkQxY7K7-)_T<|L(?-$BQ@{UpAQHOYdEPuOxK!ISZj25k|V2IDpJ4Dl;Gr$ z(4kDyU{e#=(4E&UsNgeSP-DX*1oq9nAJvaDkL+ju*i)_)52*J(4TjcUX6M$YJWh70 zAWfG&TpCn|m^8no$N_RKO7B;Av63PUBS=z*$g#io-W!|~|8i@BNRADTx7MFE_YOZg zs(EJaQ&M)A^=vR}U;Miesguo9m5~qG{y{={iPgPD*{xAU{C~1Yqon8@ zV`jeqkK_4N-<{>A^Yg>m9wmlV6KTPaXiADqUz&(g-xK214;G4Bg>wuV2^(1+_b zAFa0puedMF4cQS~w8v!7SaO3UGyR%%W;6tr|5K-pThIL2RF050RS;+0g&^n92u!} zex>x-euq?x3+@q|AD0ry&g}Z&kBBY5VS8cnjv(MxfkHTrTC zf!eS}i;9fB#*Q{}cn|W;1xf$WLqeg~l3n*@Ha6S1u5_9N^;FVuS%9JuV74Gomp%q! zN5A^3>#}=C4_xoCtNwukoc-pWYR!gxZZ^lsl~$*=mRv_p@<;J@n*htxcZWXQS2#F4 zdND4;*X**2fuwatQ zz2I}h{%?+a9;i#pnxUSyWw7hJUk!kA#EKX)O=+K*z{|t>(#5IcE{%7xFZOh;Zj!_x-ME4Vl^$poHhNC$zb!Y;ME|3C4{$~X)%ijkgm`im zx?o1@oz*k5dGU}U>41fQAtWgT9UTic5VU-LB|{OA+QH-Ns{bht3&Dtk+2XPSDtJ0T zZMkmasGi73kH3 z!QBDgdtRz%VlkHhxOZ|MA>k%qgObS>X~ZIUf}D%lsy)2m*kmt0Tcj$$uIk&jTnH_2 zY{GTob_`w-VE*{r1SjGE?6mc!SptQ{14Kiz1c*g|_Z;phRT%CL0JlZ28-*wVB`Wt? zB3zI?XOTB6oo6}P;8@8`ogP#epzpA&>T1XY5d0L4rA)zLeZfA5GM}#?w*WWHUwLMS zhHz(yb|d;KMMN$$pc7B14(P}Zy)wWa1qPP!Rh~Y zcK=(HL;AO`dOR3d?wVO^w0}RNfgD70YH5KM-?Qm;0M(w~>HGk@pMCyY_rw3UjT_4d zuy!%=v+mzdj0!+-kmx1Czm4K+KvImKH`pWj`}zN?%N~|7(?AfEclQ4R{D0!&drsTa WF}CWDXG{Uu&^0w3)j}2Pfd2yv3Lm}z diff --git a/Assets/Examples/Editor Resources/Editor Light Icon.png.meta b/Assets/Examples/Editor Resources/Editor Light Icon.png.meta index 86e2a805..f5a8803c 100644 --- a/Assets/Examples/Editor Resources/Editor Light Icon.png.meta +++ b/Assets/Examples/Editor Resources/Editor Light Icon.png.meta @@ -1,12 +1,12 @@ fileFormatVersion: 2 -guid: fca81f71956d02344b55614c6a5a763a +guid: 8b3b6694837c51e4fa984da506b3cd54 TextureImporter: - fileIDToRecycleName: {} + internalIDToNameTable: [] externalObjects: {} - serializedVersion: 9 + serializedVersion: 11 mipmaps: mipMapMode: 0 - enableMipMap: 1 + enableMipMap: 0 sRGBTexture: 1 linearTexture: 0 fadeOut: 0 @@ -23,6 +23,7 @@ TextureImporter: isReadable: 0 streamingMipmaps: 0 streamingMipmapsPriority: 0 + vTOnly: 0 grayScaleToAlpha: 0 generateCubemap: 6 cubemapConvolution: 0 @@ -31,12 +32,12 @@ TextureImporter: maxTextureSize: 2048 textureSettings: serializedVersion: 2 - filterMode: 2 + filterMode: 1 aniso: 1 - mipBias: -100 + mipBias: 0 wrapU: 1 wrapV: 1 - wrapW: -1 + wrapW: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 @@ -54,43 +55,38 @@ TextureImporter: textureType: 2 textureShape: 1 singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 maxTextureSizeSet: 0 compressionQualitySet: 0 textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 platformSettings: - - serializedVersion: 2 + - serializedVersion: 3 buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 + maxTextureSize: 64 resizeAlgorithm: 0 textureFormat: -1 - textureCompression: 0 + textureCompression: 1 compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 androidETC2FallbackOverride: 0 - - serializedVersion: 2 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 buildTarget: Standalone - maxTextureSize: 2048 + maxTextureSize: 64 resizeAlgorithm: 0 textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Android - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 + textureCompression: 1 compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 spriteSheet: serializedVersion: 2 sprites: [] @@ -98,10 +94,12 @@ TextureImporter: physicsShape: [] bones: [] spriteID: + internalID: 0 vertices: [] indices: edges: [] weights: [] + secondaryTextures: [] spritePackingTag: pSDRemoveMatte: 0 pSDShowRemoveMatteOption: 0 diff --git a/Assets/Examples/Editor Resources/Editor Scene Icon.png b/Assets/Examples/Editor Resources/Editor Scene Icon.png deleted file mode 100644 index b39f52eb1cd994570c75ec89ebb11de30e4d1cf5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21347 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 WTD78-zogd$$EL4?)vnOQhy4!*U^|ik diff --git a/Assets/Examples/Editor Resources/Editor Scene Icon.png.meta b/Assets/Examples/Editor Resources/Editor Scene Icon.png.meta deleted file mode 100644 index 63ddf2ed..00000000 --- a/Assets/Examples/Editor Resources/Editor Scene Icon.png.meta +++ /dev/null @@ -1,132 +0,0 @@ -fileFormatVersion: 2 -guid: f9d733b7a74802540ba14ffc10194797 -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 9 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: 2 - aniso: -1 - mipBias: -100 - wrapU: 1 - wrapV: 1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 1 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 8 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 2 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: iPhone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Android - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Windows Store Apps - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: 8405be17065a5ea4cabed654a22a05c0 - vertices: [] - indices: - edges: [] - weights: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Examples/Editor Resources/Editor Settings Icon.png b/Assets/Examples/Editor Resources/Editor Settings Icon.png index 914a8a523ffd8bf51424e483376fd4da808edfbb..c070a7cd910cba0199f2e664b651961c7325a705 100644 GIT binary patch literal 1492 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 JRKp)f{|^)1e@_4a diff --git a/Assets/Examples/Editor Resources/Editor Settings Icon.png.meta b/Assets/Examples/Editor Resources/Editor Settings Icon.png.meta index 332ad814..c7a3df0d 100644 --- a/Assets/Examples/Editor Resources/Editor Settings Icon.png.meta +++ b/Assets/Examples/Editor Resources/Editor Settings Icon.png.meta @@ -1,12 +1,12 @@ fileFormatVersion: 2 -guid: 3d0e0a2631bdc5b4a966fbc73129806f +guid: b105bf1fb7fe62e4baba0ffd7b433e7b TextureImporter: - fileIDToRecycleName: {} + internalIDToNameTable: [] externalObjects: {} - serializedVersion: 9 + serializedVersion: 11 mipmaps: mipMapMode: 0 - enableMipMap: 1 + enableMipMap: 0 sRGBTexture: 1 linearTexture: 0 fadeOut: 0 @@ -23,6 +23,7 @@ TextureImporter: isReadable: 0 streamingMipmaps: 0 streamingMipmapsPriority: 0 + vTOnly: 0 grayScaleToAlpha: 0 generateCubemap: 6 cubemapConvolution: 0 @@ -31,16 +32,16 @@ TextureImporter: maxTextureSize: 2048 textureSettings: serializedVersion: 2 - filterMode: 2 + filterMode: 1 aniso: 1 - mipBias: -100 + mipBias: 0 wrapU: 1 wrapV: 1 - wrapW: -1 + wrapW: 0 nPOTScale: 0 lightmap: 0 compressionQuality: 50 - spriteMode: 1 + spriteMode: 0 spriteExtrude: 1 spriteMeshType: 1 alignment: 0 @@ -54,65 +55,38 @@ TextureImporter: textureType: 2 textureShape: 1 singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 maxTextureSizeSet: 0 compressionQualitySet: 0 textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 platformSettings: - - serializedVersion: 2 + - serializedVersion: 3 buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 + maxTextureSize: 64 resizeAlgorithm: 0 textureFormat: -1 - textureCompression: 0 + textureCompression: 1 compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 androidETC2FallbackOverride: 0 - - serializedVersion: 2 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 buildTarget: Standalone - maxTextureSize: 2048 + maxTextureSize: 64 resizeAlgorithm: 0 textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: iPhone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Android - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Windows Store Apps - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 + textureCompression: 1 compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 spriteSheet: serializedVersion: 2 sprites: [] @@ -120,10 +94,12 @@ TextureImporter: physicsShape: [] bones: [] spriteID: + internalID: 0 vertices: [] indices: edges: [] weights: [] + secondaryTextures: [] spritePackingTag: pSDRemoveMatte: 0 pSDShowRemoveMatteOption: 0 diff --git a/Assets/Examples/Editor Resources/Editor Terrain Icon.png b/Assets/Examples/Editor Resources/Editor Terrain Icon.png deleted file mode 100644 index 8a81f6bc3acdd45a8fc5751ce3323a4115d64ea8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3015 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 diff --git a/Assets/Examples/Editor Resources/Editor Tree Icon.png.meta b/Assets/Examples/Editor Resources/Editor Tree Icon.png.meta deleted file mode 100644 index 703c4fcc..00000000 --- a/Assets/Examples/Editor Resources/Editor Tree Icon.png.meta +++ /dev/null @@ -1,110 +0,0 @@ -fileFormatVersion: 2 -guid: 09d89c4f3fca0724e8d154491f13b63f -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 9 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - streamingMipmaps: 0 - streamingMipmapsPriority: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: 1 - mipBias: -100 - wrapU: 1 - wrapV: 1 - wrapW: -1 - nPOTScale: 0 - lightmap: 0 - compressionQuality: 50 - spriteMode: 1 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 1 - spriteTessellationDetail: -1 - textureType: 2 - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 2 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Android - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 0 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: 54a4667d073ddb4459819bb4ed1a5757 - vertices: [] - indices: - edges: [] - weights: [] - spritePackingTag: - pSDRemoveMatte: 0 - pSDShowRemoveMatteOption: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Examples/Scenes/SampleScene.unity b/Assets/Examples/Scenes/SampleScene.unity index e9a02be4..e0df89e1 100644 --- a/Assets/Examples/Scenes/SampleScene.unity +++ b/Assets/Examples/Scenes/SampleScene.unity @@ -204,7 +204,7 @@ GameObject: m_Layer: 0 m_Name: Directional Light m_TagString: Untagged - m_Icon: {fileID: 2800000, guid: fca81f71956d02344b55614c6a5a763a, type: 3} + m_Icon: {fileID: 2800000, guid: 8b3b6694837c51e4fa984da506b3cd54, type: 3} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 @@ -294,9 +294,9 @@ GameObject: m_Component: - component: {fileID: 315584342} m_Layer: 0 - m_Name: '#hAttributes' + m_Name: '#hExamples' m_TagString: EditorOnly - m_Icon: {fileID: 0} + m_Icon: {fileID: 2800000, guid: b105bf1fb7fe62e4baba0ffd7b433e7b, type: 3} m_NavMeshLayer: 0 m_StaticEditorFlags: 4294967295 m_IsActive: 1 @@ -328,7 +328,7 @@ GameObject: m_Layer: 0 m_Name: Main Camera m_TagString: MainCamera - m_Icon: {fileID: 2800000, guid: 4394cc95954ebb04897a83c077777530, type: 3} + m_Icon: {fileID: 2800000, guid: 45980f2b5045fab4a95e80d4cd1d91a8, type: 3} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 @@ -523,8 +523,7 @@ Transform: m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 977748988} + m_Children: [] m_Father: {fileID: 0} m_RootOrder: 7 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -556,7 +555,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 12 + m_RootOrder: 15 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &685318310 GameObject: @@ -586,7 +585,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 15 + m_RootOrder: 18 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &752799891 GameObject: @@ -639,7 +638,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 16 + m_RootOrder: 8 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &758033804 GameObject: @@ -669,7 +668,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 13 + m_RootOrder: 16 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &959025297 GameObject: @@ -712,8 +711,8 @@ MonoBehaviour: var6: 0 toggle2: 1 var7: 21.44 - var8: {fileID: 2133702603} - var9: {fileID: 2133702603} + var8: {fileID: 977748987} + var9: {fileID: 977748987} preview: {fileID: 5059060190599569102, guid: 5573ca52cac7c2d4cb2536e37e9be1f1, type: 3} var10: 2.16 type1: @@ -781,8 +780,7 @@ Transform: m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 2133702607} + m_Children: [] m_Father: {fileID: 0} m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -816,8 +814,8 @@ Transform: m_LocalPosition: {x: 0, y: 0.5, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] - m_Father: {fileID: 661896459} - m_RootOrder: 0 + m_Father: {fileID: 0} + m_RootOrder: 11 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!65 &977748989 BoxCollider: @@ -896,7 +894,7 @@ GameObject: m_Layer: 5 m_Name: Main Canvas m_TagString: Untagged - m_Icon: {fileID: 2800000, guid: 944a8e7523b24474383ee2dc61c3bbf1, type: 3} + m_Icon: {fileID: 2800000, guid: 902de9e125722044e9e8771af5c1b865, type: 3} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 @@ -1009,7 +1007,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 11 + m_RootOrder: 14 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1414023086 GameObject: @@ -1039,7 +1037,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 14 + m_RootOrder: 17 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1661307763 GameObject: @@ -1069,7 +1067,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 8 + m_RootOrder: 10 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1821514178 GameObject: @@ -1082,7 +1080,7 @@ GameObject: - component: {fileID: 1821514180} - component: {fileID: 1821514179} m_Layer: 0 - m_Name: GameObject (7) + m_Name: TooltipTest m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -1114,7 +1112,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 17 + m_RootOrder: 9 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1972418676 GameObject: @@ -1144,7 +1142,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 10 + m_RootOrder: 13 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &2033477348 GameObject: @@ -1158,7 +1156,7 @@ GameObject: m_Layer: 0 m_Name: '#hUI' m_TagString: EditorOnly - m_Icon: {fileID: 2800000, guid: 944a8e7523b24474383ee2dc61c3bbf1, type: 3} + m_Icon: {fileID: 2800000, guid: 902de9e125722044e9e8771af5c1b865, type: 3} m_NavMeshLayer: 0 m_StaticEditorFlags: 4294967295 m_IsActive: 1 @@ -1204,7 +1202,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 9 + m_RootOrder: 12 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &2113405571 GameObject: @@ -1278,98 +1276,3 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2113405571} m_CullTransparentMesh: 0 ---- !u!1 &2133702603 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2133702607} - - component: {fileID: 2133702606} - - component: {fileID: 2133702605} - - component: {fileID: 2133702604} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!65 &2133702604 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2133702603} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!23 &2133702605 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2133702603} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &2133702606 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2133702603} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!4 &2133702607 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2133702603} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0.5, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 959025299} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} From 0485aba382a36b33565f013c52c818dc1fa8b690 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mi=C5=82osz=20Matkowski?= Date: Sat, 30 Apr 2022 12:42:14 +0200 Subject: [PATCH 18/32] Minor refactor changes --- .../Drawers/Toolbox/{ConditionDrawers.meta => Condition.meta} | 0 .../ComparisonAttributeDrawer.cs | 0 .../ComparisonAttributeDrawer.cs.meta | 0 .../{ConditionDrawers => Condition}/DisableAttributeDrawer.cs | 0 .../DisableAttributeDrawer.cs.meta | 0 .../{ConditionDrawers => Condition}/DisableIfAttributeDrawer.cs | 0 .../DisableIfAttributeDrawer.cs.meta | 0 .../DisableInPlayModeAttributeDrawer.cs | 0 .../DisableInPlayModeAttributeDrawer.cs.meta | 0 .../{ConditionDrawers => Condition}/EnableIfAttributeDrawer.cs | 0 .../EnableIfAttributeDrawer.cs.meta | 0 .../{ConditionDrawers => Condition}/HideAttributeDrawer.cs | 0 .../{ConditionDrawers => Condition}/HideAttributeDrawer.cs.meta | 0 .../HideDisabledIfAttributeDrawer.cs | 0 .../HideDisabledIfAttributeDrawer.cs.meta | 0 .../{ConditionDrawers => Condition}/HideIfAttributeDrawer.cs | 0 .../HideIfAttributeDrawer.cs.meta | 0 .../ShowDisabledIfAttributeDrawer.cs | 0 .../ShowDisabledIfAttributeDrawer.cs.meta | 0 .../{ConditionDrawers => Condition}/ShowIfAttributeDrawer.cs | 0 .../ShowIfAttributeDrawer.cs.meta | 0 .../ShowWarningIfAttributeDrawer.cs | 0 .../ShowWarningIfAttributeDrawer.cs.meta | 0 .../Drawers/Toolbox/{DecoratorDrawers.meta => Decorator.meta} | 0 .../BeginGroupAttributeDrawer.cs | 0 .../BeginGroupAttributeDrawer.cs.meta | 0 .../BeginHorizontalAttributeDrawer.cs | 0 .../BeginHorizontalAttributeDrawer.cs.meta | 0 .../BeginHorizontalGroupAttributeDrawer.cs | 2 +- .../BeginHorizontalGroupAttributeDrawer.cs.meta | 0 .../BeginIndentAttributeDrawer.cs | 0 .../BeginIndentAttributeDrawer.cs.meta | 0 .../DynamicHelpAttributeDrawer.cs | 0 .../DynamicHelpAttributeDrawer.cs.meta | 0 .../EditorButtonAttributeDrawer.cs | 0 .../EditorButtonAttributeDrawer.cs.meta | 0 .../{DecoratorDrawers => Decorator}/EndGroupAttributeDrawer.cs | 0 .../EndGroupAttributeDrawer.cs.meta | 0 .../EndHorizontalAttributeDrawer.cs | 0 .../EndHorizontalAttributeDrawer.cs.meta | 0 .../EndHorizontalGroupAttributeDrawer.cs | 0 .../EndHorizontalGroupAttributeDrawer.cs.meta | 0 .../{DecoratorDrawers => Decorator}/EndIndentAttributeDrawer.cs | 0 .../EndIndentAttributeDrawer.cs.meta | 0 .../{DecoratorDrawers => Decorator}/GuiColorAttributeDrawer.cs | 0 .../GuiColorAttributeDrawer.cs.meta | 0 .../{DecoratorDrawers => Decorator}/HelpAttributeDrawer.cs | 0 .../{DecoratorDrawers => Decorator}/HelpAttributeDrawer.cs.meta | 0 .../{DecoratorDrawers => Decorator}/HighlightAttributeDrawer.cs | 0 .../HighlightAttributeDrawer.cs.meta | 0 .../{DecoratorDrawers => Decorator}/ImageAreaAttributeDrawer.cs | 0 .../ImageAreaAttributeDrawer.cs.meta | 0 .../IndentAreaAttributeDrawer.cs | 0 .../IndentAreaAttributeDrawer.cs.meta | 0 .../{DecoratorDrawers => Decorator}/LabelAttributeDrawer.cs | 0 .../LabelAttributeDrawer.cs.meta | 0 .../{DecoratorDrawers => Decorator}/LineAttributeDrawer.cs | 0 .../{DecoratorDrawers => Decorator}/LineAttributeDrawer.cs.meta | 0 .../{DecoratorDrawers => Decorator}/SpaceAreaAttributeDrawer.cs | 0 .../SpaceAreaAttributeDrawer.cs.meta | 0 .../Toolbox/{PropertyListDrawers.meta => PropertyList.meta} | 0 .../ReorderableListAttributeDrawer.cs | 0 .../ReorderableListAttributeDrawer.cs.meta | 0 .../ReorderableListExposedAttributeDrawer.cs | 0 .../ReorderableListExposedAttributeDrawer.cs.meta | 0 .../ScrollableItemsAttributeDrawer.cs | 0 .../ScrollableItemsAttributeDrawer.cs.meta | 0 .../Toolbox/{PropertySelfDrawers.meta => PropertySelf.meta} | 0 .../DynamicMinMaxBaseDrawer.cs | 0 .../DynamicMinMaxBaseDrawer.cs.meta | 0 .../DynamicMinMaxSliderAttributeDrawer.cs | 0 .../DynamicMinMaxSliderAttributeDrawer.cs.meta | 0 .../DynamicRangeAttributeDrawer.cs | 0 .../DynamicRangeAttributeDrawer.cs.meta | 0 .../IgnoreParentAttributeDrawer.cs | 0 .../IgnoreParentAttributeDrawer.cs.meta | 0 .../InLineEditorAttributeDrawer.cs | 0 .../InLineEditorAttributeDrawer.cs.meta | 0 .../ReferencePickerAttributeDrawer.cs | 0 .../ReferencePickerAttributeDrawer.cs.meta | 0 .../RegexValueAttributeDrawer.cs | 0 .../RegexValueAttributeDrawer.cs.meta | 0 .../Drawers/Toolbox/{TargetTypeDrawers.meta => TargetType.meta} | 0 .../SerializedDictionaryDrawer.cs | 0 .../SerializedDictionaryDrawer.cs.meta | 0 Assets/Editor Toolbox/EditorSettings.asset | 1 + 86 files changed, 2 insertions(+), 1 deletion(-) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{ConditionDrawers.meta => Condition.meta} (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{ConditionDrawers => Condition}/ComparisonAttributeDrawer.cs (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{ConditionDrawers => Condition}/ComparisonAttributeDrawer.cs.meta (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{ConditionDrawers => Condition}/DisableAttributeDrawer.cs (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{ConditionDrawers => Condition}/DisableAttributeDrawer.cs.meta (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{ConditionDrawers => Condition}/DisableIfAttributeDrawer.cs (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{ConditionDrawers => Condition}/DisableIfAttributeDrawer.cs.meta (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{ConditionDrawers => Condition}/DisableInPlayModeAttributeDrawer.cs (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{ConditionDrawers => Condition}/DisableInPlayModeAttributeDrawer.cs.meta (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{ConditionDrawers => Condition}/EnableIfAttributeDrawer.cs (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{ConditionDrawers => Condition}/EnableIfAttributeDrawer.cs.meta (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{ConditionDrawers => Condition}/HideAttributeDrawer.cs (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{ConditionDrawers => Condition}/HideAttributeDrawer.cs.meta (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{ConditionDrawers => Condition}/HideDisabledIfAttributeDrawer.cs (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{ConditionDrawers => Condition}/HideDisabledIfAttributeDrawer.cs.meta (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{ConditionDrawers => Condition}/HideIfAttributeDrawer.cs (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{ConditionDrawers => Condition}/HideIfAttributeDrawer.cs.meta (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{ConditionDrawers => Condition}/ShowDisabledIfAttributeDrawer.cs (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{ConditionDrawers => Condition}/ShowDisabledIfAttributeDrawer.cs.meta (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{ConditionDrawers => Condition}/ShowIfAttributeDrawer.cs (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{ConditionDrawers => Condition}/ShowIfAttributeDrawer.cs.meta (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{ConditionDrawers => Condition}/ShowWarningIfAttributeDrawer.cs (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{ConditionDrawers => Condition}/ShowWarningIfAttributeDrawer.cs.meta (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{DecoratorDrawers.meta => Decorator.meta} (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{DecoratorDrawers => Decorator}/BeginGroupAttributeDrawer.cs (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{DecoratorDrawers => Decorator}/BeginGroupAttributeDrawer.cs.meta (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{DecoratorDrawers => Decorator}/BeginHorizontalAttributeDrawer.cs (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{DecoratorDrawers => Decorator}/BeginHorizontalAttributeDrawer.cs.meta (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{DecoratorDrawers => Decorator}/BeginHorizontalGroupAttributeDrawer.cs (99%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{DecoratorDrawers => Decorator}/BeginHorizontalGroupAttributeDrawer.cs.meta (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{DecoratorDrawers => Decorator}/BeginIndentAttributeDrawer.cs (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{DecoratorDrawers => Decorator}/BeginIndentAttributeDrawer.cs.meta (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{DecoratorDrawers => Decorator}/DynamicHelpAttributeDrawer.cs (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{DecoratorDrawers => Decorator}/DynamicHelpAttributeDrawer.cs.meta (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{DecoratorDrawers => Decorator}/EditorButtonAttributeDrawer.cs (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{DecoratorDrawers => Decorator}/EditorButtonAttributeDrawer.cs.meta (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{DecoratorDrawers => Decorator}/EndGroupAttributeDrawer.cs (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{DecoratorDrawers => Decorator}/EndGroupAttributeDrawer.cs.meta (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{DecoratorDrawers => Decorator}/EndHorizontalAttributeDrawer.cs (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{DecoratorDrawers => Decorator}/EndHorizontalAttributeDrawer.cs.meta (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{DecoratorDrawers => Decorator}/EndHorizontalGroupAttributeDrawer.cs (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{DecoratorDrawers => Decorator}/EndHorizontalGroupAttributeDrawer.cs.meta (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{DecoratorDrawers => Decorator}/EndIndentAttributeDrawer.cs (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{DecoratorDrawers => Decorator}/EndIndentAttributeDrawer.cs.meta (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{DecoratorDrawers => Decorator}/GuiColorAttributeDrawer.cs (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{DecoratorDrawers => Decorator}/GuiColorAttributeDrawer.cs.meta (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{DecoratorDrawers => Decorator}/HelpAttributeDrawer.cs (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{DecoratorDrawers => Decorator}/HelpAttributeDrawer.cs.meta (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{DecoratorDrawers => Decorator}/HighlightAttributeDrawer.cs (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{DecoratorDrawers => Decorator}/HighlightAttributeDrawer.cs.meta (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{DecoratorDrawers => Decorator}/ImageAreaAttributeDrawer.cs (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{DecoratorDrawers => Decorator}/ImageAreaAttributeDrawer.cs.meta (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{DecoratorDrawers => Decorator}/IndentAreaAttributeDrawer.cs (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{DecoratorDrawers => Decorator}/IndentAreaAttributeDrawer.cs.meta (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{DecoratorDrawers => Decorator}/LabelAttributeDrawer.cs (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{DecoratorDrawers => Decorator}/LabelAttributeDrawer.cs.meta (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{DecoratorDrawers => Decorator}/LineAttributeDrawer.cs (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{DecoratorDrawers => Decorator}/LineAttributeDrawer.cs.meta (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{DecoratorDrawers => Decorator}/SpaceAreaAttributeDrawer.cs (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{DecoratorDrawers => Decorator}/SpaceAreaAttributeDrawer.cs.meta (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{PropertyListDrawers.meta => PropertyList.meta} (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{PropertyListDrawers => PropertyList}/ReorderableListAttributeDrawer.cs (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{PropertyListDrawers => PropertyList}/ReorderableListAttributeDrawer.cs.meta (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{PropertyListDrawers => PropertyList}/ReorderableListExposedAttributeDrawer.cs (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{PropertyListDrawers => PropertyList}/ReorderableListExposedAttributeDrawer.cs.meta (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{PropertyListDrawers => PropertyList}/ScrollableItemsAttributeDrawer.cs (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{PropertyListDrawers => PropertyList}/ScrollableItemsAttributeDrawer.cs.meta (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{PropertySelfDrawers.meta => PropertySelf.meta} (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{PropertySelfDrawers => PropertySelf}/DynamicMinMaxBaseDrawer.cs (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{PropertySelfDrawers => PropertySelf}/DynamicMinMaxBaseDrawer.cs.meta (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{PropertySelfDrawers => PropertySelf}/DynamicMinMaxSliderAttributeDrawer.cs (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{PropertySelfDrawers => PropertySelf}/DynamicMinMaxSliderAttributeDrawer.cs.meta (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{PropertySelfDrawers => PropertySelf}/DynamicRangeAttributeDrawer.cs (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{PropertySelfDrawers => PropertySelf}/DynamicRangeAttributeDrawer.cs.meta (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{PropertySelfDrawers => PropertySelf}/IgnoreParentAttributeDrawer.cs (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{PropertySelfDrawers => PropertySelf}/IgnoreParentAttributeDrawer.cs.meta (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{PropertySelfDrawers => PropertySelf}/InLineEditorAttributeDrawer.cs (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{PropertySelfDrawers => PropertySelf}/InLineEditorAttributeDrawer.cs.meta (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{PropertySelfDrawers => PropertySelf}/ReferencePickerAttributeDrawer.cs (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{PropertySelfDrawers => PropertySelf}/ReferencePickerAttributeDrawer.cs.meta (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{PropertySelfDrawers => PropertySelf}/RegexValueAttributeDrawer.cs (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{PropertySelfDrawers => PropertySelf}/RegexValueAttributeDrawer.cs.meta (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{TargetTypeDrawers.meta => TargetType.meta} (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{TargetTypeDrawers => TargetType}/SerializedDictionaryDrawer.cs (100%) rename Assets/Editor Toolbox/Editor/Drawers/Toolbox/{TargetTypeDrawers => TargetType}/SerializedDictionaryDrawer.cs.meta (100%) diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/ConditionDrawers.meta b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/Condition.meta similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/ConditionDrawers.meta rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/Condition.meta diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/ConditionDrawers/ComparisonAttributeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/Condition/ComparisonAttributeDrawer.cs similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/ConditionDrawers/ComparisonAttributeDrawer.cs rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/Condition/ComparisonAttributeDrawer.cs diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/ConditionDrawers/ComparisonAttributeDrawer.cs.meta b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/Condition/ComparisonAttributeDrawer.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/ConditionDrawers/ComparisonAttributeDrawer.cs.meta rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/Condition/ComparisonAttributeDrawer.cs.meta diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/ConditionDrawers/DisableAttributeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/Condition/DisableAttributeDrawer.cs similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/ConditionDrawers/DisableAttributeDrawer.cs rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/Condition/DisableAttributeDrawer.cs diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/ConditionDrawers/DisableAttributeDrawer.cs.meta b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/Condition/DisableAttributeDrawer.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/ConditionDrawers/DisableAttributeDrawer.cs.meta rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/Condition/DisableAttributeDrawer.cs.meta diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/ConditionDrawers/DisableIfAttributeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/Condition/DisableIfAttributeDrawer.cs similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/ConditionDrawers/DisableIfAttributeDrawer.cs rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/Condition/DisableIfAttributeDrawer.cs diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/ConditionDrawers/DisableIfAttributeDrawer.cs.meta b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/Condition/DisableIfAttributeDrawer.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/ConditionDrawers/DisableIfAttributeDrawer.cs.meta rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/Condition/DisableIfAttributeDrawer.cs.meta diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/ConditionDrawers/DisableInPlayModeAttributeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/Condition/DisableInPlayModeAttributeDrawer.cs similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/ConditionDrawers/DisableInPlayModeAttributeDrawer.cs rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/Condition/DisableInPlayModeAttributeDrawer.cs diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/ConditionDrawers/DisableInPlayModeAttributeDrawer.cs.meta b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/Condition/DisableInPlayModeAttributeDrawer.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/ConditionDrawers/DisableInPlayModeAttributeDrawer.cs.meta rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/Condition/DisableInPlayModeAttributeDrawer.cs.meta diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/ConditionDrawers/EnableIfAttributeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/Condition/EnableIfAttributeDrawer.cs similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/ConditionDrawers/EnableIfAttributeDrawer.cs rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/Condition/EnableIfAttributeDrawer.cs diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/ConditionDrawers/EnableIfAttributeDrawer.cs.meta b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/Condition/EnableIfAttributeDrawer.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/ConditionDrawers/EnableIfAttributeDrawer.cs.meta rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/Condition/EnableIfAttributeDrawer.cs.meta diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/ConditionDrawers/HideAttributeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/Condition/HideAttributeDrawer.cs similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/ConditionDrawers/HideAttributeDrawer.cs rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/Condition/HideAttributeDrawer.cs diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/ConditionDrawers/HideAttributeDrawer.cs.meta b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/Condition/HideAttributeDrawer.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/ConditionDrawers/HideAttributeDrawer.cs.meta rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/Condition/HideAttributeDrawer.cs.meta diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/ConditionDrawers/HideDisabledIfAttributeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/Condition/HideDisabledIfAttributeDrawer.cs similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/ConditionDrawers/HideDisabledIfAttributeDrawer.cs rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/Condition/HideDisabledIfAttributeDrawer.cs diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/ConditionDrawers/HideDisabledIfAttributeDrawer.cs.meta b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/Condition/HideDisabledIfAttributeDrawer.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/ConditionDrawers/HideDisabledIfAttributeDrawer.cs.meta rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/Condition/HideDisabledIfAttributeDrawer.cs.meta diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/ConditionDrawers/HideIfAttributeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/Condition/HideIfAttributeDrawer.cs similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/ConditionDrawers/HideIfAttributeDrawer.cs rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/Condition/HideIfAttributeDrawer.cs diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/ConditionDrawers/HideIfAttributeDrawer.cs.meta b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/Condition/HideIfAttributeDrawer.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/ConditionDrawers/HideIfAttributeDrawer.cs.meta rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/Condition/HideIfAttributeDrawer.cs.meta diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/ConditionDrawers/ShowDisabledIfAttributeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/Condition/ShowDisabledIfAttributeDrawer.cs similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/ConditionDrawers/ShowDisabledIfAttributeDrawer.cs rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/Condition/ShowDisabledIfAttributeDrawer.cs diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/ConditionDrawers/ShowDisabledIfAttributeDrawer.cs.meta b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/Condition/ShowDisabledIfAttributeDrawer.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/ConditionDrawers/ShowDisabledIfAttributeDrawer.cs.meta rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/Condition/ShowDisabledIfAttributeDrawer.cs.meta diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/ConditionDrawers/ShowIfAttributeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/Condition/ShowIfAttributeDrawer.cs similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/ConditionDrawers/ShowIfAttributeDrawer.cs rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/Condition/ShowIfAttributeDrawer.cs diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/ConditionDrawers/ShowIfAttributeDrawer.cs.meta b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/Condition/ShowIfAttributeDrawer.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/ConditionDrawers/ShowIfAttributeDrawer.cs.meta rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/Condition/ShowIfAttributeDrawer.cs.meta diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/ConditionDrawers/ShowWarningIfAttributeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/Condition/ShowWarningIfAttributeDrawer.cs similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/ConditionDrawers/ShowWarningIfAttributeDrawer.cs rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/Condition/ShowWarningIfAttributeDrawer.cs diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/ConditionDrawers/ShowWarningIfAttributeDrawer.cs.meta b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/Condition/ShowWarningIfAttributeDrawer.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/ConditionDrawers/ShowWarningIfAttributeDrawer.cs.meta rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/Condition/ShowWarningIfAttributeDrawer.cs.meta diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers.meta b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator.meta similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers.meta rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator.meta diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/BeginGroupAttributeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/BeginGroupAttributeDrawer.cs similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/BeginGroupAttributeDrawer.cs rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/BeginGroupAttributeDrawer.cs diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/BeginGroupAttributeDrawer.cs.meta b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/BeginGroupAttributeDrawer.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/BeginGroupAttributeDrawer.cs.meta rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/BeginGroupAttributeDrawer.cs.meta diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/BeginHorizontalAttributeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/BeginHorizontalAttributeDrawer.cs similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/BeginHorizontalAttributeDrawer.cs rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/BeginHorizontalAttributeDrawer.cs diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/BeginHorizontalAttributeDrawer.cs.meta b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/BeginHorizontalAttributeDrawer.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/BeginHorizontalAttributeDrawer.cs.meta rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/BeginHorizontalAttributeDrawer.cs.meta diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/BeginHorizontalGroupAttributeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/BeginHorizontalGroupAttributeDrawer.cs similarity index 99% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/BeginHorizontalGroupAttributeDrawer.cs rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/BeginHorizontalGroupAttributeDrawer.cs index a64b86e3..c38fcb31 100644 --- a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/BeginHorizontalGroupAttributeDrawer.cs +++ b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/BeginHorizontalGroupAttributeDrawer.cs @@ -72,4 +72,4 @@ static Style() } } } -} +} \ No newline at end of file diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/BeginHorizontalGroupAttributeDrawer.cs.meta b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/BeginHorizontalGroupAttributeDrawer.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/BeginHorizontalGroupAttributeDrawer.cs.meta rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/BeginHorizontalGroupAttributeDrawer.cs.meta diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/BeginIndentAttributeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/BeginIndentAttributeDrawer.cs similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/BeginIndentAttributeDrawer.cs rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/BeginIndentAttributeDrawer.cs diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/BeginIndentAttributeDrawer.cs.meta b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/BeginIndentAttributeDrawer.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/BeginIndentAttributeDrawer.cs.meta rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/BeginIndentAttributeDrawer.cs.meta diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/DynamicHelpAttributeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/DynamicHelpAttributeDrawer.cs similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/DynamicHelpAttributeDrawer.cs rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/DynamicHelpAttributeDrawer.cs diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/DynamicHelpAttributeDrawer.cs.meta b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/DynamicHelpAttributeDrawer.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/DynamicHelpAttributeDrawer.cs.meta rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/DynamicHelpAttributeDrawer.cs.meta diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/EditorButtonAttributeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/EditorButtonAttributeDrawer.cs similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/EditorButtonAttributeDrawer.cs rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/EditorButtonAttributeDrawer.cs diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/EditorButtonAttributeDrawer.cs.meta b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/EditorButtonAttributeDrawer.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/EditorButtonAttributeDrawer.cs.meta rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/EditorButtonAttributeDrawer.cs.meta diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/EndGroupAttributeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/EndGroupAttributeDrawer.cs similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/EndGroupAttributeDrawer.cs rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/EndGroupAttributeDrawer.cs diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/EndGroupAttributeDrawer.cs.meta b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/EndGroupAttributeDrawer.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/EndGroupAttributeDrawer.cs.meta rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/EndGroupAttributeDrawer.cs.meta diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/EndHorizontalAttributeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/EndHorizontalAttributeDrawer.cs similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/EndHorizontalAttributeDrawer.cs rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/EndHorizontalAttributeDrawer.cs diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/EndHorizontalAttributeDrawer.cs.meta b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/EndHorizontalAttributeDrawer.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/EndHorizontalAttributeDrawer.cs.meta rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/EndHorizontalAttributeDrawer.cs.meta diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/EndHorizontalGroupAttributeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/EndHorizontalGroupAttributeDrawer.cs similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/EndHorizontalGroupAttributeDrawer.cs rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/EndHorizontalGroupAttributeDrawer.cs diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/EndHorizontalGroupAttributeDrawer.cs.meta b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/EndHorizontalGroupAttributeDrawer.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/EndHorizontalGroupAttributeDrawer.cs.meta rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/EndHorizontalGroupAttributeDrawer.cs.meta diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/EndIndentAttributeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/EndIndentAttributeDrawer.cs similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/EndIndentAttributeDrawer.cs rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/EndIndentAttributeDrawer.cs diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/EndIndentAttributeDrawer.cs.meta b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/EndIndentAttributeDrawer.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/EndIndentAttributeDrawer.cs.meta rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/EndIndentAttributeDrawer.cs.meta diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/GuiColorAttributeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/GuiColorAttributeDrawer.cs similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/GuiColorAttributeDrawer.cs rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/GuiColorAttributeDrawer.cs diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/GuiColorAttributeDrawer.cs.meta b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/GuiColorAttributeDrawer.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/GuiColorAttributeDrawer.cs.meta rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/GuiColorAttributeDrawer.cs.meta diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/HelpAttributeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/HelpAttributeDrawer.cs similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/HelpAttributeDrawer.cs rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/HelpAttributeDrawer.cs diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/HelpAttributeDrawer.cs.meta b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/HelpAttributeDrawer.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/HelpAttributeDrawer.cs.meta rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/HelpAttributeDrawer.cs.meta diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/HighlightAttributeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/HighlightAttributeDrawer.cs similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/HighlightAttributeDrawer.cs rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/HighlightAttributeDrawer.cs diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/HighlightAttributeDrawer.cs.meta b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/HighlightAttributeDrawer.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/HighlightAttributeDrawer.cs.meta rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/HighlightAttributeDrawer.cs.meta diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/ImageAreaAttributeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/ImageAreaAttributeDrawer.cs similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/ImageAreaAttributeDrawer.cs rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/ImageAreaAttributeDrawer.cs diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/ImageAreaAttributeDrawer.cs.meta b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/ImageAreaAttributeDrawer.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/ImageAreaAttributeDrawer.cs.meta rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/ImageAreaAttributeDrawer.cs.meta diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/IndentAreaAttributeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/IndentAreaAttributeDrawer.cs similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/IndentAreaAttributeDrawer.cs rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/IndentAreaAttributeDrawer.cs diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/IndentAreaAttributeDrawer.cs.meta b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/IndentAreaAttributeDrawer.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/IndentAreaAttributeDrawer.cs.meta rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/IndentAreaAttributeDrawer.cs.meta diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/LabelAttributeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/LabelAttributeDrawer.cs similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/LabelAttributeDrawer.cs rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/LabelAttributeDrawer.cs diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/LabelAttributeDrawer.cs.meta b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/LabelAttributeDrawer.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/LabelAttributeDrawer.cs.meta rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/LabelAttributeDrawer.cs.meta diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/LineAttributeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/LineAttributeDrawer.cs similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/LineAttributeDrawer.cs rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/LineAttributeDrawer.cs diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/LineAttributeDrawer.cs.meta b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/LineAttributeDrawer.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/LineAttributeDrawer.cs.meta rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/LineAttributeDrawer.cs.meta diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/SpaceAreaAttributeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/SpaceAreaAttributeDrawer.cs similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/SpaceAreaAttributeDrawer.cs rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/SpaceAreaAttributeDrawer.cs diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/SpaceAreaAttributeDrawer.cs.meta b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/SpaceAreaAttributeDrawer.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/DecoratorDrawers/SpaceAreaAttributeDrawer.cs.meta rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/Decorator/SpaceAreaAttributeDrawer.cs.meta diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertyListDrawers.meta b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertyList.meta similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertyListDrawers.meta rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertyList.meta diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertyListDrawers/ReorderableListAttributeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertyList/ReorderableListAttributeDrawer.cs similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertyListDrawers/ReorderableListAttributeDrawer.cs rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertyList/ReorderableListAttributeDrawer.cs diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertyListDrawers/ReorderableListAttributeDrawer.cs.meta b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertyList/ReorderableListAttributeDrawer.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertyListDrawers/ReorderableListAttributeDrawer.cs.meta rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertyList/ReorderableListAttributeDrawer.cs.meta diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertyListDrawers/ReorderableListExposedAttributeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertyList/ReorderableListExposedAttributeDrawer.cs similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertyListDrawers/ReorderableListExposedAttributeDrawer.cs rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertyList/ReorderableListExposedAttributeDrawer.cs diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertyListDrawers/ReorderableListExposedAttributeDrawer.cs.meta b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertyList/ReorderableListExposedAttributeDrawer.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertyListDrawers/ReorderableListExposedAttributeDrawer.cs.meta rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertyList/ReorderableListExposedAttributeDrawer.cs.meta diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertyListDrawers/ScrollableItemsAttributeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertyList/ScrollableItemsAttributeDrawer.cs similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertyListDrawers/ScrollableItemsAttributeDrawer.cs rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertyList/ScrollableItemsAttributeDrawer.cs diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertyListDrawers/ScrollableItemsAttributeDrawer.cs.meta b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertyList/ScrollableItemsAttributeDrawer.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertyListDrawers/ScrollableItemsAttributeDrawer.cs.meta rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertyList/ScrollableItemsAttributeDrawer.cs.meta diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelfDrawers.meta b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelf.meta similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelfDrawers.meta rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelf.meta diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelfDrawers/DynamicMinMaxBaseDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelf/DynamicMinMaxBaseDrawer.cs similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelfDrawers/DynamicMinMaxBaseDrawer.cs rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelf/DynamicMinMaxBaseDrawer.cs diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelfDrawers/DynamicMinMaxBaseDrawer.cs.meta b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelf/DynamicMinMaxBaseDrawer.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelfDrawers/DynamicMinMaxBaseDrawer.cs.meta rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelf/DynamicMinMaxBaseDrawer.cs.meta diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelfDrawers/DynamicMinMaxSliderAttributeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelf/DynamicMinMaxSliderAttributeDrawer.cs similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelfDrawers/DynamicMinMaxSliderAttributeDrawer.cs rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelf/DynamicMinMaxSliderAttributeDrawer.cs diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelfDrawers/DynamicMinMaxSliderAttributeDrawer.cs.meta b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelf/DynamicMinMaxSliderAttributeDrawer.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelfDrawers/DynamicMinMaxSliderAttributeDrawer.cs.meta rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelf/DynamicMinMaxSliderAttributeDrawer.cs.meta diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelfDrawers/DynamicRangeAttributeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelf/DynamicRangeAttributeDrawer.cs similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelfDrawers/DynamicRangeAttributeDrawer.cs rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelf/DynamicRangeAttributeDrawer.cs diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelfDrawers/DynamicRangeAttributeDrawer.cs.meta b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelf/DynamicRangeAttributeDrawer.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelfDrawers/DynamicRangeAttributeDrawer.cs.meta rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelf/DynamicRangeAttributeDrawer.cs.meta diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelfDrawers/IgnoreParentAttributeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelf/IgnoreParentAttributeDrawer.cs similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelfDrawers/IgnoreParentAttributeDrawer.cs rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelf/IgnoreParentAttributeDrawer.cs diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelfDrawers/IgnoreParentAttributeDrawer.cs.meta b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelf/IgnoreParentAttributeDrawer.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelfDrawers/IgnoreParentAttributeDrawer.cs.meta rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelf/IgnoreParentAttributeDrawer.cs.meta diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelfDrawers/InLineEditorAttributeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelf/InLineEditorAttributeDrawer.cs similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelfDrawers/InLineEditorAttributeDrawer.cs rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelf/InLineEditorAttributeDrawer.cs diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelfDrawers/InLineEditorAttributeDrawer.cs.meta b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelf/InLineEditorAttributeDrawer.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelfDrawers/InLineEditorAttributeDrawer.cs.meta rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelf/InLineEditorAttributeDrawer.cs.meta diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelfDrawers/ReferencePickerAttributeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelf/ReferencePickerAttributeDrawer.cs similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelfDrawers/ReferencePickerAttributeDrawer.cs rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelf/ReferencePickerAttributeDrawer.cs diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelfDrawers/ReferencePickerAttributeDrawer.cs.meta b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelf/ReferencePickerAttributeDrawer.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelfDrawers/ReferencePickerAttributeDrawer.cs.meta rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelf/ReferencePickerAttributeDrawer.cs.meta diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelfDrawers/RegexValueAttributeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelf/RegexValueAttributeDrawer.cs similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelfDrawers/RegexValueAttributeDrawer.cs rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelf/RegexValueAttributeDrawer.cs diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelfDrawers/RegexValueAttributeDrawer.cs.meta b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelf/RegexValueAttributeDrawer.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelfDrawers/RegexValueAttributeDrawer.cs.meta rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelf/RegexValueAttributeDrawer.cs.meta diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/TargetTypeDrawers.meta b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/TargetType.meta similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/TargetTypeDrawers.meta rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/TargetType.meta diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/TargetTypeDrawers/SerializedDictionaryDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/TargetType/SerializedDictionaryDrawer.cs similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/TargetTypeDrawers/SerializedDictionaryDrawer.cs rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/TargetType/SerializedDictionaryDrawer.cs diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/TargetTypeDrawers/SerializedDictionaryDrawer.cs.meta b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/TargetType/SerializedDictionaryDrawer.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Editor/Drawers/Toolbox/TargetTypeDrawers/SerializedDictionaryDrawer.cs.meta rename to Assets/Editor Toolbox/Editor/Drawers/Toolbox/TargetType/SerializedDictionaryDrawer.cs.meta diff --git a/Assets/Editor Toolbox/EditorSettings.asset b/Assets/Editor Toolbox/EditorSettings.asset index e236cecb..2694870e 100644 --- a/Assets/Editor Toolbox/EditorSettings.asset +++ b/Assets/Editor Toolbox/EditorSettings.asset @@ -48,6 +48,7 @@ MonoBehaviour: iconName: useToolboxDrawers: 1 decoratorDrawerHandlers: + - classReference: SampleDrawer, Assembly-CSharp-Editor - classReference: Toolbox.Editor.Drawers.BeginGroupAttributeDrawer, Toolbox.Editor - classReference: Toolbox.Editor.Drawers.BeginHorizontalAttributeDrawer, Toolbox.Editor - classReference: Toolbox.Editor.Drawers.BeginHorizontalGroupAttributeDrawer, Toolbox.Editor From 85c3e66337eebc31baf0cc6fe09634ee12b44252 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mi=C5=82osz=20Matkowski?= Date: Sat, 30 Apr 2022 13:43:17 +0200 Subject: [PATCH 19/32] New samples [WIP] --- Assets/Examples/Scenes/SampleScene.unity | 167 +++++++++++++++++- Assets/Examples/Scripts/SampleBehaviour1.cs | 2 +- Assets/Examples/Scripts/SampleBehaviour2.cs | 2 +- Assets/Examples/Scripts/SampleBehaviour3.cs | 53 ++++++ .../Examples/Scripts/SampleBehaviour3.cs.meta | 11 ++ Assets/Examples/Scripts/SampleBehaviour4.cs | 108 +++++++++++ .../Examples/Scripts/SampleBehaviour4.cs.meta | 11 ++ 7 files changed, 343 insertions(+), 11 deletions(-) create mode 100644 Assets/Examples/Scripts/SampleBehaviour3.cs create mode 100644 Assets/Examples/Scripts/SampleBehaviour3.cs.meta create mode 100644 Assets/Examples/Scripts/SampleBehaviour4.cs create mode 100644 Assets/Examples/Scripts/SampleBehaviour4.cs.meta diff --git a/Assets/Examples/Scenes/SampleScene.unity b/Assets/Examples/Scenes/SampleScene.unity index e0df89e1..49c98e85 100644 --- a/Assets/Examples/Scenes/SampleScene.unity +++ b/Assets/Examples/Scenes/SampleScene.unity @@ -294,7 +294,7 @@ GameObject: m_Component: - component: {fileID: 315584342} m_Layer: 0 - m_Name: '#hExamples' + m_Name: '#hSamples' m_TagString: EditorOnly m_Icon: {fileID: 2800000, guid: b105bf1fb7fe62e4baba0ffd7b433e7b, type: 3} m_NavMeshLayer: 0 @@ -555,7 +555,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 15 + m_RootOrder: 18 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &685318310 GameObject: @@ -585,7 +585,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 18 + m_RootOrder: 21 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &752799891 GameObject: @@ -668,7 +668,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 16 + m_RootOrder: 19 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &959025297 GameObject: @@ -815,7 +815,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 11 + m_RootOrder: 14 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!65 &977748989 BoxCollider: @@ -979,6 +979,36 @@ RectTransform: m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0, y: 0} +--- !u!1 &1220714190 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1220714191} + m_Layer: 0 + m_Name: SerializedTypes[Sample] + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1220714191 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1220714190} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 12 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1221429486 GameObject: m_ObjectHideFlags: 0 @@ -1007,7 +1037,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 14 + m_RootOrder: 17 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1414023086 GameObject: @@ -1037,7 +1067,74 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 17 + m_RootOrder: 20 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1438743617 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1438743619} + - component: {fileID: 1438743618} + m_Layer: 0 + m_Name: DecoratorDrawers[Sample] + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1438743618 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1438743617} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 288fcefaca2ef1e41a33e74640d04833, type: 3} + m_Name: + m_EditorClassIdentifier: + y: 0 + var14: 0 + var15: 0 + var16: 0 + var17: 0 + var18: 0 + go: {fileID: 0} + var19: 0 + var20: 0 + x: 0 + var29: 0 + var30: 0 + var31: 0 + gameObjects: + - {fileID: 0} + - {fileID: 0} + floats: [] + var2: 0 + var3: 0 + var4: 0 + var5: 0 + var28: {fileID: 0} + var39: 18 + var1: 0 +--- !u!4 &1438743619 +Transform: + m_ObjectHideFlags: 2 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1438743617} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 11 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1661307763 GameObject: @@ -1067,8 +1164,60 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} + m_RootOrder: 13 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1670253091 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1670253092} + - component: {fileID: 1670253093} + m_Layer: 0 + m_Name: ConditionDrawers[Sample] + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1670253092 +Transform: + m_ObjectHideFlags: 2 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1670253091} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} m_RootOrder: 10 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1670253093 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1670253091} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b063741cf66f777438ae67b7df2b87bd, type: 3} + m_Name: + m_EditorClassIdentifier: + stringValue: sho + var33: 0 + objectValue: {fileID: 0} + var36: 0 + floatValue: 0.46 + var37: 0 + enumValue: 97 + var35: 0 + var38: 0 --- !u!1 &1821514178 GameObject: m_ObjectHideFlags: 0 @@ -1142,7 +1291,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 13 + m_RootOrder: 16 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &2033477348 GameObject: @@ -1202,7 +1351,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 12 + m_RootOrder: 15 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &2113405571 GameObject: diff --git a/Assets/Examples/Scripts/SampleBehaviour1.cs b/Assets/Examples/Scripts/SampleBehaviour1.cs index 4f57a1bb..6b843a82 100644 --- a/Assets/Examples/Scripts/SampleBehaviour1.cs +++ b/Assets/Examples/Scripts/SampleBehaviour1.cs @@ -1,7 +1,7 @@ using UnityEngine; [ExecuteAlways] -[AddComponentMenu("Editor Toolbox/Cheat Sheet 1")] +[AddComponentMenu("Editor Toolbox/Cheat Sheet 1 (Regular)")] public class SampleBehaviour1 : MonoBehaviour { [Help("This sample component provides additional inspector extensions (drawers and associated attributes) implemented in the Editor Toolbox plugin. " + diff --git a/Assets/Examples/Scripts/SampleBehaviour2.cs b/Assets/Examples/Scripts/SampleBehaviour2.cs index 7fadaf3e..cb3ab9cc 100644 --- a/Assets/Examples/Scripts/SampleBehaviour2.cs +++ b/Assets/Examples/Scripts/SampleBehaviour2.cs @@ -2,7 +2,7 @@ using UnityEngine; [ExecuteAlways] -[AddComponentMenu("Editor Toolbox/Cheat Sheet 2")] +[AddComponentMenu("Editor Toolbox/Cheat Sheet 2 (Tooolbox Property)")] public class SampleBehaviour2 : MonoBehaviour { private void TestMethod() diff --git a/Assets/Examples/Scripts/SampleBehaviour3.cs b/Assets/Examples/Scripts/SampleBehaviour3.cs new file mode 100644 index 00000000..4c14bcd5 --- /dev/null +++ b/Assets/Examples/Scripts/SampleBehaviour3.cs @@ -0,0 +1,53 @@ +using UnityEngine; + +[ExecuteAlways] +[AddComponentMenu("Editor Toolbox/Cheat Sheet 3 (Condition)")] +public class SampleBehaviour3 : MonoBehaviour +{ + [Label("Show If", skinStyle: SkinStyle.Box)] + + [Help("Type 'show'")] + public string stringValue = "sho"; + [ShowIf(nameof(GetStringValue), "show")] + public int var33; + + public string GetStringValue() + { + return stringValue; + } + + [Label("Hide If", skinStyle: SkinStyle.Box)] + + [Help("Assign any GameObject")] + public GameObject objectValue; + [HideIf(nameof(ObjectValue), false)] + public int var36; + + private GameObject ObjectValue + { + get => objectValue; + } + + [Label("Enable If", skinStyle: SkinStyle.Box)] + + [Help("Set value to > 0.5")] + public float floatValue = 1.0f; + [EnableIf(nameof(floatValue), 0.5f, Comparison = UnityComparisonMethod.Greater)] + public int var37; + + [Label("Disable If", skinStyle: SkinStyle.Box)] + + public KeyCode enumValue = KeyCode.A; + [DisableIf(nameof(enumValue), KeyCode.A)] + public int var35; + + [Label("Disable", skinStyle: SkinStyle.Box)] + + [Disable] + public int var39; + + [Label("Disable In Playmode", skinStyle: SkinStyle.Box)] + + [DisableInPlayMode] + public int var38; +} \ No newline at end of file diff --git a/Assets/Examples/Scripts/SampleBehaviour3.cs.meta b/Assets/Examples/Scripts/SampleBehaviour3.cs.meta new file mode 100644 index 00000000..f29444d9 --- /dev/null +++ b/Assets/Examples/Scripts/SampleBehaviour3.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b063741cf66f777438ae67b7df2b87bd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Examples/Scripts/SampleBehaviour4.cs b/Assets/Examples/Scripts/SampleBehaviour4.cs new file mode 100644 index 00000000..181f0549 --- /dev/null +++ b/Assets/Examples/Scripts/SampleBehaviour4.cs @@ -0,0 +1,108 @@ +using System.Collections; +using UnityEngine; + +[ExecuteAlways] +[AddComponentMenu("Editor Toolbox/Cheat Sheet 4 (Decorator)")] +public class SampleBehaviour4 : MonoBehaviour +{ + [Label("Help", skinStyle: SkinStyle.Box)] + + [Help("Very useful information", UnityMessageType.Warning)] + public int var0; + + [Label("Button", skinStyle: SkinStyle.Box)] + + [EditorButton(nameof(TestMethod), Tooltip = "Custom Tooltip")] + [EditorButton(nameof(TestCoroutine), "Test Coroutine", activityType: ButtonActivityType.OnPlayMode)] + [EditorButton(nameof(TestStaticMethod), activityType: ButtonActivityType.OnEditMode)] + public int var1; + + private void TestMethod() + { + Debug.Log(nameof(TestMethod) + " is called"); + } + + private IEnumerator TestCoroutine() + { + Debug.Log("Coroutine started"); + yield return new WaitForSecondsRealtime(1); + Debug.Log("Log after 1s"); + yield return new WaitForSecondsRealtime(2); + Debug.Log("Log after 2s"); + } + + private static void TestStaticMethod() + { + Debug.Log(nameof(TestStaticMethod) + " is called"); + } + + [Label("Vertical Layout", skinStyle: SkinStyle.Box)] + + [BeginGroup("Parent group")] + public int y; + [BeginGroup("Nested group")] + public int var14; + [Line] + public int var15; + [SpaceArea(20, 20)] + public int var16; + [BeginIndent] + public int var17; + public int var18; + [Title("Standard Header")] + public GameObject go; + [Label("Custom Header")] + [EndIndent] + public int var19; + [EndGroup] + [Line] + [Line(HexColor = "#9800FF")] + public int var20; + [EndGroup] + public int x; + + [Label("Horizontal Layout", skinStyle: SkinStyle.Box)] + + [BeginHorizontal(labelToWidthRatio: 0.1f)] + public int var29; + public int var30; + [EndHorizontal] + public int var31; + + [Label("Horizontal Layout (Group)", skinStyle: SkinStyle.Box)] + + [BeginHorizontalGroup(label: "Horizontal Group")] + [ReorderableList(Foldable = true), InLineEditor] + public GameObject[] gameObjects; + [SpaceArea] + [EndHorizontalGroup] + [ReorderableList] + public float[] floats; + + [Label("Indentation", skinStyle: SkinStyle.Box)] + + public int var2; + [BeginIndent] + public int var3; + [EndIndent] + public int var4; + [IndentArea(3)] + public int var5; + + [Label("Highlight", skinStyle: SkinStyle.Box)] + + [Highlight(0.8f, 1.0f, 0.2f)] + public GameObject var28; + + [Label("Dynamic Help", skinStyle: SkinStyle.Box)] + + [DynamicHelp(nameof(MessageSource))] + public int var39; + + public string MessageSource => string.Format("Dynamic Message Source. {0} = {1}", nameof(var39), var39); + + [Label("Image Area", skinStyle: SkinStyle.Box)] + + [ImageArea("https://img.itch.zone/aW1nLzE5Mjc3NzUucG5n/original/Viawjm.png", 180.0f)] + public int var55; +} \ No newline at end of file diff --git a/Assets/Examples/Scripts/SampleBehaviour4.cs.meta b/Assets/Examples/Scripts/SampleBehaviour4.cs.meta new file mode 100644 index 00000000..464b9324 --- /dev/null +++ b/Assets/Examples/Scripts/SampleBehaviour4.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 288fcefaca2ef1e41a33e74640d04833 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: From 76b54b6e6b7adc7e34cf11bc8bea1b499131b941 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mi=C5=82osz=20Matkowski?= Date: Sat, 30 Apr 2022 15:14:23 +0200 Subject: [PATCH 20/32] Update README.md --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 4c83aeb6..bca77bd8 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,6 @@ Unity 2018.x or newer - [Project](#project) - [Toolbar](#toolbar) - [Utilities](#utilities) -- [Editor Extras](#editor-extras) ## Settings From cc1848ba97cd4b285c9f7f483816231e9d40773e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mi=C5=82osz=20Matkowski?= Date: Sat, 30 Apr 2022 19:02:05 +0200 Subject: [PATCH 21/32] Handle HideLabelAttribute internally by the ToolboxEditor --- .../Regular/HideLabelAttributeDrawer.cs | 6 +++-- .../HideLabelAttribute.cs | 7 ++++-- .../HideLabelAttribute.cs.meta | 0 Assets/Examples/Scenes/SampleScene.unity | 23 +++++++++++-------- Assets/Examples/Scripts/SampleBehaviour2.cs | 2 +- 5 files changed, 23 insertions(+), 15 deletions(-) rename Assets/Editor Toolbox/Scripts/Attributes/{Regular => Special}/HideLabelAttribute.cs (67%) rename Assets/Editor Toolbox/Scripts/Attributes/{Regular => Special}/HideLabelAttribute.cs.meta (100%) diff --git a/Assets/Editor Toolbox/Editor/Drawers/Regular/HideLabelAttributeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Regular/HideLabelAttributeDrawer.cs index f9317dac..84d49a56 100644 --- a/Assets/Editor Toolbox/Editor/Drawers/Regular/HideLabelAttributeDrawer.cs +++ b/Assets/Editor Toolbox/Editor/Drawers/Regular/HideLabelAttributeDrawer.cs @@ -1,9 +1,11 @@ -using UnityEditor; +using System; + +using UnityEditor; using UnityEngine; namespace Toolbox.Editor.Drawers { - [CustomPropertyDrawer(typeof(HideLabelAttribute))] + [Obsolete("For now, HideLabelAttribute is handled internally by the ToolboxPropertyHandler.")] public class HideLabelAttributeDrawer : PropertyDrawerBase { protected override float GetPropertyHeightSafe(SerializedProperty property, GUIContent label) diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Regular/HideLabelAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Special/HideLabelAttribute.cs similarity index 67% rename from Assets/Editor Toolbox/Scripts/Attributes/Regular/HideLabelAttribute.cs rename to Assets/Editor Toolbox/Scripts/Attributes/Special/HideLabelAttribute.cs index edf7fb7a..8795c32e 100644 --- a/Assets/Editor Toolbox/Scripts/Attributes/Regular/HideLabelAttribute.cs +++ b/Assets/Editor Toolbox/Scripts/Attributes/Special/HideLabelAttribute.cs @@ -10,6 +10,9 @@ namespace UnityEngine /// [AttributeUsage(AttributeTargets.Field, AllowMultiple = false)] [Conditional("UNITY_EDITOR")] - public class HideLabelAttribute : PropertyAttribute - { } + public class HideLabelAttribute : NewLabelAttribute + { + public HideLabelAttribute() : base(string.Empty) + { } + } } \ No newline at end of file diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Regular/HideLabelAttribute.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Special/HideLabelAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Regular/HideLabelAttribute.cs.meta rename to Assets/Editor Toolbox/Scripts/Attributes/Special/HideLabelAttribute.cs.meta diff --git a/Assets/Examples/Scenes/SampleScene.unity b/Assets/Examples/Scenes/SampleScene.unity index 49c98e85..d0f0d132 100644 --- a/Assets/Examples/Scenes/SampleScene.unity +++ b/Assets/Examples/Scenes/SampleScene.unity @@ -409,8 +409,8 @@ GameObject: - component: {fileID: 661896458} m_Layer: 0 m_Name: Sample GameObject2 - m_TagString: GameController - m_Icon: {fileID: 2800000, guid: 3d0e0a2631bdc5b4a966fbc73129806f, type: 3} + m_TagString: Untagged + m_Icon: {fileID: 2800000, guid: b105bf1fb7fe62e4baba0ffd7b433e7b, type: 3} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 @@ -600,7 +600,7 @@ GameObject: m_Layer: 0 m_Name: SerializeReferenceTest m_TagString: Untagged - m_Icon: {fileID: 0} + m_Icon: {fileID: 2800000, guid: b105bf1fb7fe62e4baba0ffd7b433e7b, type: 3} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 @@ -682,8 +682,8 @@ GameObject: - component: {fileID: 959025298} m_Layer: 0 m_Name: Sample GameObject1 - m_TagString: GameController - m_Icon: {fileID: 2800000, guid: 3d0e0a2631bdc5b4a966fbc73129806f, type: 3} + m_TagString: Untagged + m_Icon: {fileID: 2800000, guid: b105bf1fb7fe62e4baba0ffd7b433e7b, type: 3} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 @@ -991,7 +991,7 @@ GameObject: m_Layer: 0 m_Name: SerializedTypes[Sample] m_TagString: Untagged - m_Icon: {fileID: 0} + m_Icon: {fileID: 2800000, guid: b105bf1fb7fe62e4baba0ffd7b433e7b, type: 3} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 @@ -1082,7 +1082,7 @@ GameObject: m_Layer: 0 m_Name: DecoratorDrawers[Sample] m_TagString: Untagged - m_Icon: {fileID: 0} + m_Icon: {fileID: 2800000, guid: b105bf1fb7fe62e4baba0ffd7b433e7b, type: 3} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 @@ -1098,6 +1098,8 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 288fcefaca2ef1e41a33e74640d04833, type: 3} m_Name: m_EditorClassIdentifier: + var0: 0 + var1: 0 y: 0 var14: 0 var15: 0 @@ -1121,7 +1123,7 @@ MonoBehaviour: var5: 0 var28: {fileID: 0} var39: 18 - var1: 0 + var55: 0 --- !u!4 &1438743619 Transform: m_ObjectHideFlags: 2 @@ -1179,7 +1181,7 @@ GameObject: m_Layer: 0 m_Name: ConditionDrawers[Sample] m_TagString: Untagged - m_Icon: {fileID: 0} + m_Icon: {fileID: 2800000, guid: b105bf1fb7fe62e4baba0ffd7b433e7b, type: 3} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 @@ -1217,6 +1219,7 @@ MonoBehaviour: var37: 0 enumValue: 97 var35: 0 + var39: 0 var38: 0 --- !u!1 &1821514178 GameObject: @@ -1231,7 +1234,7 @@ GameObject: m_Layer: 0 m_Name: TooltipTest m_TagString: Untagged - m_Icon: {fileID: 0} + m_Icon: {fileID: 2800000, guid: b105bf1fb7fe62e4baba0ffd7b433e7b, type: 3} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 diff --git a/Assets/Examples/Scripts/SampleBehaviour2.cs b/Assets/Examples/Scripts/SampleBehaviour2.cs index cb3ab9cc..4bdf4719 100644 --- a/Assets/Examples/Scripts/SampleBehaviour2.cs +++ b/Assets/Examples/Scripts/SampleBehaviour2.cs @@ -2,7 +2,7 @@ using UnityEngine; [ExecuteAlways] -[AddComponentMenu("Editor Toolbox/Cheat Sheet 2 (Tooolbox Property)")] +[AddComponentMenu("Editor Toolbox/Cheat Sheet 2 (Toolbox Property)")] public class SampleBehaviour2 : MonoBehaviour { private void TestMethod() From f76644618e8eada58c5bd7235263f5acd65c11f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mi=C5=82osz=20Matkowski?= Date: Sun, 1 May 2022 00:38:26 +0200 Subject: [PATCH 22/32] Basic implementation of the TypeField class --- .../ReferencePickerAttributeDrawer.cs | 41 +----------- .../Editor/Internal/TypeCachedInfo.cs | 2 +- .../Editor/Internal/TypeConstraint.cs | 41 ++++++++++++ .../Editor/Internal/TypeConstraint.cs.meta | 11 ++++ .../Editor/Internal/TypeConstraintStandard.cs | 45 ++++++++++++++ .../Internal/TypeConstraintStandard.cs.meta | 11 ++++ .../Editor/Internal/TypeField.cs | 62 ++++++++++++------- .../Editor/Utilities/TypeUtilities.cs | 33 +++++----- 8 files changed, 168 insertions(+), 78 deletions(-) create mode 100644 Assets/Editor Toolbox/Editor/Internal/TypeConstraint.cs create mode 100644 Assets/Editor Toolbox/Editor/Internal/TypeConstraint.cs.meta create mode 100644 Assets/Editor Toolbox/Editor/Internal/TypeConstraintStandard.cs create mode 100644 Assets/Editor Toolbox/Editor/Internal/TypeConstraintStandard.cs.meta diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelf/ReferencePickerAttributeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelf/ReferencePickerAttributeDrawer.cs index ec242c58..1c3ce535 100644 --- a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelf/ReferencePickerAttributeDrawer.cs +++ b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelf/ReferencePickerAttributeDrawer.cs @@ -1,6 +1,4 @@ using System; -using System.Collections.Generic; -using System.Linq; using UnityEditor; using UnityEngine; @@ -11,60 +9,25 @@ namespace Toolbox.Editor.Drawers public class ReferencePickerAttributeDrawer : ToolboxSelfPropertyDrawer { - private static readonly Dictionary> cachedfilteredTypes = new Dictionary>(); - private static readonly TypeField typeField = new TypeField(); + private static readonly TypeField typeField = new TypeField(true, true, false, false); - private static List GetFilteredTypes(Type type) - { - var hashCode = type.GetHashCode(); - if (cachedfilteredTypes.TryGetValue(hashCode, out var filteredTypes)) - { - return filteredTypes; - } - else - { - return cachedfilteredTypes[hashCode] = TypeCache.GetTypesDerivedFrom(type).ToList(); - } - } private void DrawTypeProperty(SerializedProperty property) { property.GetFieldInfo(out Type propertyType); - //TODO: handle null if (!TypeUtilities.TryGetTypeFromManagedReferenceFullTypeName(property.managedReferenceFullTypename, out var currentType)) { } - var filteredTypes = GetFilteredTypes(propertyType); - var itemsCount = filteredTypes.Count; - var options = new string[itemsCount]; - var index = 0; - - //create labels for all types - for (var i = 0; i < itemsCount; i++) - { - var menuType = filteredTypes[i]; - var menuLabel = menuType.Name; - if (menuType == currentType) - { - index = i; - } - - options[i] = menuLabel; - } - - var buttonLabel = new GUIContent(options[index]); - //TODO: move it to ToolboxEditorGui var position = EditorGUILayout.GetControlRect(false, EditorGUIUtility.singleLineHeight); - ToolboxEditorGui.DrawSearchablePopup(position, buttonLabel, index, options, (i) => + typeField.OnGui(position, propertyType, currentType, (type) => { try { //TODO: handle multiple objects property.serializedObject.Update(); - var type = i >= 0 ? filteredTypes[i] : null; var obj = type != null ? Activator.CreateInstance(type) : null; property.managedReferenceValue = obj; property.serializedObject.ApplyModifiedProperties(); diff --git a/Assets/Editor Toolbox/Editor/Internal/TypeCachedInfo.cs b/Assets/Editor Toolbox/Editor/Internal/TypeCachedInfo.cs index a090c432..faac2b1a 100644 --- a/Assets/Editor Toolbox/Editor/Internal/TypeCachedInfo.cs +++ b/Assets/Editor Toolbox/Editor/Internal/TypeCachedInfo.cs @@ -9,7 +9,7 @@ public class TypeCachedInfo private readonly List types; - public TypeCachedInfo(List types) + public TypeCachedInfo(Type parentType, List types, int overridedHash = -1) { this.types = types; var count = types.Count; diff --git a/Assets/Editor Toolbox/Editor/Internal/TypeConstraint.cs b/Assets/Editor Toolbox/Editor/Internal/TypeConstraint.cs new file mode 100644 index 00000000..6ba0cc44 --- /dev/null +++ b/Assets/Editor Toolbox/Editor/Internal/TypeConstraint.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; + +namespace Toolbox.Editor.Internal +{ + public class TypeConstraint + { + protected Type targetType; + + + public TypeConstraint(Type targetType) + { + this.targetType = targetType; + } + + + public virtual bool IsSatisfied(Type type) + { + return type.IsVisible; + } + + public virtual void ApplyTarget(Type type) + { + targetType = type; + } + + public override bool Equals(object obj) + { + return obj is TypeConstraint constraint && + EqualityComparer.Default.Equals(targetType, constraint.targetType); + } + + public override int GetHashCode() + { + return 1673078848 + EqualityComparer.Default.GetHashCode(targetType); + } + + + public Type TargetType => targetType; + } +} \ No newline at end of file diff --git a/Assets/Editor Toolbox/Editor/Internal/TypeConstraint.cs.meta b/Assets/Editor Toolbox/Editor/Internal/TypeConstraint.cs.meta new file mode 100644 index 00000000..e34720ee --- /dev/null +++ b/Assets/Editor Toolbox/Editor/Internal/TypeConstraint.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 55638a3b7b220d3428d5b48c5c7292de +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Toolbox/Editor/Internal/TypeConstraintStandard.cs b/Assets/Editor Toolbox/Editor/Internal/TypeConstraintStandard.cs new file mode 100644 index 00000000..e40982b4 --- /dev/null +++ b/Assets/Editor Toolbox/Editor/Internal/TypeConstraintStandard.cs @@ -0,0 +1,45 @@ +using System; + +namespace Toolbox.Editor.Internal +{ + public class TypeConstraintStandard : TypeConstraint + { + private readonly bool allowAbstract; + private readonly bool allowObsolete; + + + public TypeConstraintStandard(Type targetType, bool allowAbstract, bool allowObsolete) : base(targetType) + { + this.allowAbstract = allowAbstract; + this.allowObsolete = allowObsolete; + } + + + public override bool IsSatisfied(Type type) + { + if (!base.IsSatisfied(type)) + { + return false; + } + + return (allowAbstract || !type.IsAbstract) && (allowObsolete || !Attribute.IsDefined(type, typeof(ObsoleteAttribute))); + } + + public override bool Equals(object obj) + { + return obj is TypeConstraintStandard standard && + base.Equals(obj) && + allowAbstract == standard.allowAbstract && + allowObsolete == standard.allowObsolete; + } + + public override int GetHashCode() + { + var hashCode = 433750135; + hashCode = hashCode * -1521134295 + base.GetHashCode(); + hashCode = hashCode * -1521134295 + allowAbstract.GetHashCode(); + hashCode = hashCode * -1521134295 + allowObsolete.GetHashCode(); + return hashCode; + } + } +} \ No newline at end of file diff --git a/Assets/Editor Toolbox/Editor/Internal/TypeConstraintStandard.cs.meta b/Assets/Editor Toolbox/Editor/Internal/TypeConstraintStandard.cs.meta new file mode 100644 index 00000000..1cf1fc2f --- /dev/null +++ b/Assets/Editor Toolbox/Editor/Internal/TypeConstraintStandard.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3b7a7e43ed392854f9bbcb7381c02e34 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Toolbox/Editor/Internal/TypeField.cs b/Assets/Editor Toolbox/Editor/Internal/TypeField.cs index 2b4b793d..2856b2e4 100644 --- a/Assets/Editor Toolbox/Editor/Internal/TypeField.cs +++ b/Assets/Editor Toolbox/Editor/Internal/TypeField.cs @@ -1,5 +1,4 @@ using System; -using System.Collections.Generic; using UnityEngine; @@ -7,33 +6,50 @@ namespace Toolbox.Editor.Internal { public class TypeField { - private bool allowAbstract; - private bool allowObsolete; - private bool addSearchField; + private readonly bool addEmptyValue; + private readonly bool addSearchField; + private readonly TypeConstraint typeConstraint; - public void OnGui(Rect position, Type parentType) + public TypeField(bool addEmptyValue = true, bool addSearchField = true, bool allowAbstract = false, bool allowObsolete = false) + : this(addEmptyValue, addSearchField, new TypeConstraintStandard(null, allowAbstract, allowObsolete)) + { } + + public TypeField(bool addEmptyValue = true, bool addSearchField = true, TypeConstraint typeConstraint = null) { - //TODO: - //ToolboxEditorGui.DrawSearchablePopup(position, buttonLabel, index, options, (i) => - //{ - // try - // { - // //TODO: handle multiple objects - // property.serializedObject.Update(); - // var type = i >= 0 ? filteredTypes[i] : null; - // var obj = type != null ? Activator.CreateInstance(type) : null; - // property.managedReferenceValue = obj; - // property.serializedObject.ApplyModifiedProperties(); - // } - // catch (Exception e) when (e is ArgumentNullException || e is NullReferenceException) - // { - // ToolboxEditorLog.LogWarning("Invalid attempt to update disposed property."); - // } - //}); + this.addEmptyValue = addEmptyValue; + this.addSearchField = addSearchField; + this.typeConstraint = typeConstraint ?? new TypeConstraintStandard(null, false, false); } - public IReadOnlyList CachedTypes { get; private set; } + public void OnGui(Rect position, Type parentType, Type activeType, Action onSelect) + { + typeConstraint.ApplyTarget(parentType); + var types = TypeUtilities.GetTypes(typeConstraint); + + //TODO: cache options + //TODO: add empty option + var itemsCount = types.Count; + var options = new string[itemsCount]; + var index = 0; + for (var i = 0; i < itemsCount; i++) + { + var menuType = types[i]; + var menuName = menuType.Name; + if (menuType == activeType) + { + index = i; + } + + options[i] = menuName; + } + + var buttonLabel = new GUIContent(options[index]); + ToolboxEditorGui.DrawSearchablePopup(position, buttonLabel, index, options, (i) => + { + onSelect?.Invoke(i >= 0 ? types[i] : null); + }); + } } } \ No newline at end of file diff --git a/Assets/Editor Toolbox/Editor/Utilities/TypeUtilities.cs b/Assets/Editor Toolbox/Editor/Utilities/TypeUtilities.cs index 53e5ba26..98fafebc 100644 --- a/Assets/Editor Toolbox/Editor/Utilities/TypeUtilities.cs +++ b/Assets/Editor Toolbox/Editor/Utilities/TypeUtilities.cs @@ -12,27 +12,30 @@ public static class TypeUtilities { private static readonly Dictionary> cachedTypes = new Dictionary>(); private static readonly Dictionary managedReferenceTypes = new Dictionary(); + private static readonly TypeConstraint defaultConstraint = new TypeConstraint(null); - public static bool IsConstraintSatisfied(Type type, bool allowAbstract, bool allowObsolete) + public static List GetTypes(Type parentType) { - //NOTE: it's possible to strip out ConstructedGenericTypes, but they are considered valid for now - if (!type.IsVisible || !type.IsClass) - { - return false; - } - - return (allowAbstract || !type.IsAbstract) && (allowObsolete || !Attribute.IsDefined(type, typeof(ObsoleteAttribute))); + defaultConstraint.ApplyTarget(parentType); + return GetTypes(defaultConstraint); } - public static List GetTypes(Type parentType, bool allowAbstract, bool allowObsolete) + public static List GetTypes(TypeConstraint constraint) { + var key = constraint.GetHashCode(); + if (cachedTypes.TryGetValue(key, out var types)) + { + return types; + } + + var parentType = constraint.TargetType; var collection = TypeCache.GetTypesDerivedFrom(parentType); - var types = collection.ToList(); + types = collection.ToList(); for (var i = types.Count - 1; i >= 0; i--) { var type = types[i]; - if (IsConstraintSatisfied(type, allowAbstract, allowObsolete)) + if (constraint.IsSatisfied(type)) { continue; } @@ -40,13 +43,13 @@ public static List GetTypes(Type parentType, bool allowAbstract, bool allo types.RemoveAt(i); } - return types; + return cachedTypes[key] = types; } - public static TypeCachedInfo GetCachedInfo(Type parentType, bool allowAbstract, bool allowObsolete) + public static TypeCachedInfo GetCachedInfo(Type parentType) { - var types = GetTypes(parentType, allowAbstract, allowObsolete); - return new TypeCachedInfo(types); + var types = GetTypes(parentType); + return new TypeCachedInfo(parentType, types); } public static bool TryGetTypeFromManagedReferenceFullTypeName(string managedReferenceFullTypeName, out Type managedReferenceInstanceType) From dc35a3dffd94e1f160ae222c266e09c3240b616a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mi=C5=82osz=20Matkowski?= Date: Sun, 1 May 2022 22:31:05 +0200 Subject: [PATCH 23/32] Unified and optimized approach for caching types --- .../Drawers/Regular/SerializedTypeDrawer.cs | 2 +- .../Regular/TagSelectorAttributeDrawer.cs | 2 +- .../ReferencePickerAttributeDrawer.cs | 47 ++++++--- .../Editor/Internal/TypeCachedInfo.cs | 31 ------ .../Internal/TypeConstraintReference.cs | 40 ++++++++ .../Internal/TypeConstraintReference.cs.meta | 11 +++ .../Editor/Internal/TypeConstraintStandard.cs | 10 +- .../Editor/Internal/TypeField.cs | 64 ++++++++---- .../Editor/Internal/TypesCollection.cs | 19 ++++ .../Editor/Internal/TypesCollection.cs.meta | 11 +++ .../Editor/Internal/TypesGroupInfo.cs | 99 +++++++++++++++++++ ...hedInfo.cs.meta => TypesGroupInfo.cs.meta} | 0 .../Editor/Internal/TypesGroupSettings.cs | 38 +++++++ .../Internal/TypesGroupSettings.cs.meta | 11 +++ .../Editor/Utilities/TypeUtilities.cs | 36 +++++-- Assets/Examples/Scenes/SampleScene.unity | 63 ++++++++++-- Assets/Examples/Scripts/SampleReference2.cs | 2 +- .../Examples/Scripts/SampleReferenceTest.cs | 1 - 18 files changed, 397 insertions(+), 90 deletions(-) delete mode 100644 Assets/Editor Toolbox/Editor/Internal/TypeCachedInfo.cs create mode 100644 Assets/Editor Toolbox/Editor/Internal/TypeConstraintReference.cs create mode 100644 Assets/Editor Toolbox/Editor/Internal/TypeConstraintReference.cs.meta create mode 100644 Assets/Editor Toolbox/Editor/Internal/TypesCollection.cs create mode 100644 Assets/Editor Toolbox/Editor/Internal/TypesCollection.cs.meta create mode 100644 Assets/Editor Toolbox/Editor/Internal/TypesGroupInfo.cs rename Assets/Editor Toolbox/Editor/Internal/{TypeCachedInfo.cs.meta => TypesGroupInfo.cs.meta} (100%) create mode 100644 Assets/Editor Toolbox/Editor/Internal/TypesGroupSettings.cs create mode 100644 Assets/Editor Toolbox/Editor/Internal/TypesGroupSettings.cs.meta diff --git a/Assets/Editor Toolbox/Editor/Drawers/Regular/SerializedTypeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Regular/SerializedTypeDrawer.cs index fcb0a427..e596a497 100644 --- a/Assets/Editor Toolbox/Editor/Drawers/Regular/SerializedTypeDrawer.cs +++ b/Assets/Editor Toolbox/Editor/Drawers/Regular/SerializedTypeDrawer.cs @@ -132,7 +132,7 @@ protected override void OnGUISafe(Rect position, SerializedProperty property, GU var index = 0; //create labels for all types - options[0] = ""; + options[0] = ""; for (var i = 1; i < itemsCount; i++) { var menuType = filteredTypes[i - 1]; diff --git a/Assets/Editor Toolbox/Editor/Drawers/Regular/TagSelectorAttributeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Regular/TagSelectorAttributeDrawer.cs index 4a9ad5ca..d129ebbb 100644 --- a/Assets/Editor Toolbox/Editor/Drawers/Regular/TagSelectorAttributeDrawer.cs +++ b/Assets/Editor Toolbox/Editor/Drawers/Regular/TagSelectorAttributeDrawer.cs @@ -19,7 +19,7 @@ protected override void OnGUISafe(Rect position, SerializedProperty property, GU { var tags = new List { - "" + "" }; tags.AddRange(InternalEditorUtility.tags); var value = property.stringValue; diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelf/ReferencePickerAttributeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelf/ReferencePickerAttributeDrawer.cs index 1c3ce535..43834c0d 100644 --- a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelf/ReferencePickerAttributeDrawer.cs +++ b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelf/ReferencePickerAttributeDrawer.cs @@ -9,28 +9,35 @@ namespace Toolbox.Editor.Drawers public class ReferencePickerAttributeDrawer : ToolboxSelfPropertyDrawer { - private static readonly TypeField typeField = new TypeField(true, true, false, false); + private readonly TypeField typeField = new TypeField(true, true, new TypeConstraintReference(null)); - private void DrawTypeProperty(SerializedProperty property) + private void CreateTypeProperty(SerializedProperty property) { property.GetFieldInfo(out Type propertyType); - //TODO: handle null - if (!TypeUtilities.TryGetTypeFromManagedReferenceFullTypeName(property.managedReferenceFullTypename, out var currentType)) - { - - } - + TypeUtilities.TryGetTypeFromManagedReferenceFullTypeName(property.managedReferenceFullTypename, out var currentType); var position = EditorGUILayout.GetControlRect(false, EditorGUIUtility.singleLineHeight); + position = EditorGUI.IndentedRect(position); typeField.OnGui(position, propertyType, currentType, (type) => { try { - //TODO: handle multiple objects - property.serializedObject.Update(); - var obj = type != null ? Activator.CreateInstance(type) : null; - property.managedReferenceValue = obj; - property.serializedObject.ApplyModifiedProperties(); + if (!property.serializedObject.isEditingMultipleObjects) + { + UpdateTypeProperty(property, type); + } + else + { + var targets = property.serializedObject.targetObjects; + foreach (var target in targets) + { + using (var so = new SerializedObject(target)) + { + SerializedProperty sp = so.FindProperty(property.propertyPath); + UpdateTypeProperty(sp, type); + } + } + } } catch (Exception e) when (e is ArgumentNullException || e is NullReferenceException) { @@ -39,6 +46,14 @@ private void DrawTypeProperty(SerializedProperty property) }); } + private void UpdateTypeProperty(SerializedProperty property, Type referenceType) + { + var obj = referenceType != null ? Activator.CreateInstance(referenceType) : null; + property.serializedObject.Update(); + property.managedReferenceValue = obj; + property.serializedObject.ApplyModifiedProperties(); + } + protected override void OnGuiSafe(SerializedProperty property, GUIContent label, ReferencePickerAttribute attribute) { @@ -50,16 +65,16 @@ protected override void OnGuiSafe(SerializedProperty property, GUIContent label, } EditorGUI.indentLevel++; - DrawTypeProperty(property); + CreateTypeProperty(property); ToolboxEditorGui.DrawPropertyChildren(property); EditorGUI.indentLevel--; } } + public override bool IsPropertyValid(SerializedProperty property) { - //TODO: validate property (check for the SerializeReferenceAttribute) - return true; + return property.propertyType == SerializedPropertyType.ManagedReference; } } } \ No newline at end of file diff --git a/Assets/Editor Toolbox/Editor/Internal/TypeCachedInfo.cs b/Assets/Editor Toolbox/Editor/Internal/TypeCachedInfo.cs deleted file mode 100644 index faac2b1a..00000000 --- a/Assets/Editor Toolbox/Editor/Internal/TypeCachedInfo.cs +++ /dev/null @@ -1,31 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace Toolbox.Editor.Internal -{ - public class TypeCachedInfo - { - private readonly string[] options; - private readonly List types; - - - public TypeCachedInfo(Type parentType, List types, int overridedHash = -1) - { - this.types = types; - var count = types.Count; - options = new string[count]; - for (var i = 0; i < count; i++) - { - var type = types[i]; - var name = type.FullName; - options[i] = name; - } - } - - - public int IndexOf(Type type) - { - return types.IndexOf(type); - } - } -} \ No newline at end of file diff --git a/Assets/Editor Toolbox/Editor/Internal/TypeConstraintReference.cs b/Assets/Editor Toolbox/Editor/Internal/TypeConstraintReference.cs new file mode 100644 index 00000000..ecca13e4 --- /dev/null +++ b/Assets/Editor Toolbox/Editor/Internal/TypeConstraintReference.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; + +using Object = UnityEngine.Object; + +namespace Toolbox.Editor.Internal +{ + public class TypeConstraintReference : TypeConstraint + { + public TypeConstraintReference(Type targetType) : base(targetType) + { } + + + public override bool IsSatisfied(Type type) + { + return base.IsSatisfied(type) && + !type.IsInterface && + !type.IsAbstract && + !type.IsPointer && + !type.IsArray && + !type.IsSubclassOf(typeof(Object)) && + !type.ContainsGenericParameters && + !Attribute.IsDefined(type, typeof(ObsoleteAttribute)); + } + + public override bool Equals(object other) + { + return other is TypeConstraintReference constraint && + base.Equals(other) && + EqualityComparer.Default.Equals(targetType, constraint.targetType); + } + + public override int GetHashCode() + { + var hashCode = 1038385366; + hashCode = hashCode * -1521134295 + base.GetHashCode(); + return hashCode; + } + } +} \ No newline at end of file diff --git a/Assets/Editor Toolbox/Editor/Internal/TypeConstraintReference.cs.meta b/Assets/Editor Toolbox/Editor/Internal/TypeConstraintReference.cs.meta new file mode 100644 index 00000000..3df95e93 --- /dev/null +++ b/Assets/Editor Toolbox/Editor/Internal/TypeConstraintReference.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7a47d5ab7d6588a4b82a5b97925f44b0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Toolbox/Editor/Internal/TypeConstraintStandard.cs b/Assets/Editor Toolbox/Editor/Internal/TypeConstraintStandard.cs index e40982b4..e7e23f56 100644 --- a/Assets/Editor Toolbox/Editor/Internal/TypeConstraintStandard.cs +++ b/Assets/Editor Toolbox/Editor/Internal/TypeConstraintStandard.cs @@ -25,12 +25,12 @@ public override bool IsSatisfied(Type type) return (allowAbstract || !type.IsAbstract) && (allowObsolete || !Attribute.IsDefined(type, typeof(ObsoleteAttribute))); } - public override bool Equals(object obj) + public override bool Equals(object other) { - return obj is TypeConstraintStandard standard && - base.Equals(obj) && - allowAbstract == standard.allowAbstract && - allowObsolete == standard.allowObsolete; + return other is TypeConstraintStandard constraint && + base.Equals(other) && + allowAbstract == constraint.allowAbstract && + allowObsolete == constraint.allowObsolete; } public override int GetHashCode() diff --git a/Assets/Editor Toolbox/Editor/Internal/TypeField.cs b/Assets/Editor Toolbox/Editor/Internal/TypeField.cs index 2856b2e4..c9bbec21 100644 --- a/Assets/Editor Toolbox/Editor/Internal/TypeField.cs +++ b/Assets/Editor Toolbox/Editor/Internal/TypeField.cs @@ -1,14 +1,18 @@ using System; +using System.Collections.Generic; +using UnityEditor; using UnityEngine; namespace Toolbox.Editor.Internal { + //TODO: refactor public class TypeField { private readonly bool addEmptyValue; private readonly bool addSearchField; private readonly TypeConstraint typeConstraint; + private readonly TypesGroupSettings groupingSettings; public TypeField(bool addEmptyValue = true, bool addSearchField = true, bool allowAbstract = false, bool allowObsolete = false) @@ -20,36 +24,56 @@ public TypeField(bool addEmptyValue = true, bool addSearchField = true, TypeCons this.addEmptyValue = addEmptyValue; this.addSearchField = addSearchField; this.typeConstraint = typeConstraint ?? new TypeConstraintStandard(null, false, false); + groupingSettings = new TypesGroupSettings(Grouping, typeConstraint, addEmptyValue); + } + + + private Type RetriveSelectedType(IReadOnlyList types, int selectedIndex) + { + if (addEmptyValue) + { + selectedIndex -= 1; + } + + return selectedIndex >= 0 ? types[selectedIndex] : null; } public void OnGui(Rect position, Type parentType, Type activeType, Action onSelect) { typeConstraint.ApplyTarget(parentType); - var types = TypeUtilities.GetTypes(typeConstraint); - - //TODO: cache options - //TODO: add empty option - var itemsCount = types.Count; - var options = new string[itemsCount]; - var index = 0; - for (var i = 0; i < itemsCount; i++) - { - var menuType = types[i]; - var menuName = menuType.Name; - if (menuType == activeType) - { - index = i; - } + groupingSettings.Grouping = Grouping; - options[i] = menuName; - } + var info = TypeUtilities.GetGroupedInfo(groupingSettings); + var types = info.Types; + var options = info.Options; + var index = info.IndexOf(activeType); var buttonLabel = new GUIContent(options[index]); - ToolboxEditorGui.DrawSearchablePopup(position, buttonLabel, index, options, (i) => + if (addSearchField) { - onSelect?.Invoke(i >= 0 ? types[i] : null); - }); + ToolboxEditorGui.DrawSearchablePopup(position, buttonLabel, index, options, (i) => + { + var type = RetriveSelectedType(types, i); + onSelect?.Invoke(type); + }); + } + else + { + using (new ZeroIndentScope()) + { + EditorGUI.BeginChangeCheck(); + index = EditorGUI.Popup(position, index, options); + if (EditorGUI.EndChangeCheck()) + { + var type = RetriveSelectedType(types, index); + onSelect?.Invoke(type); + } + } + } } + + + public ClassGrouping Grouping { get; set; } = ClassGrouping.None; } } \ No newline at end of file diff --git a/Assets/Editor Toolbox/Editor/Internal/TypesCollection.cs b/Assets/Editor Toolbox/Editor/Internal/TypesCollection.cs new file mode 100644 index 00000000..919f244b --- /dev/null +++ b/Assets/Editor Toolbox/Editor/Internal/TypesCollection.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections; +using System.Collections.Generic; + +namespace Toolbox.Editor.Internal +{ + public class TypesCollection : IEnumerable + { + public IEnumerator GetEnumerator() + { + throw new NotImplementedException(); + } + + IEnumerator IEnumerable.GetEnumerator() + { + throw new NotImplementedException(); + } + } +} \ No newline at end of file diff --git a/Assets/Editor Toolbox/Editor/Internal/TypesCollection.cs.meta b/Assets/Editor Toolbox/Editor/Internal/TypesCollection.cs.meta new file mode 100644 index 00000000..3a97281c --- /dev/null +++ b/Assets/Editor Toolbox/Editor/Internal/TypesCollection.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2c13ae41dd9ca444fbab3d954167c674 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Toolbox/Editor/Internal/TypesGroupInfo.cs b/Assets/Editor Toolbox/Editor/Internal/TypesGroupInfo.cs new file mode 100644 index 00000000..f514fbda --- /dev/null +++ b/Assets/Editor Toolbox/Editor/Internal/TypesGroupInfo.cs @@ -0,0 +1,99 @@ +using System; +using System.Collections.Generic; + +using UnityEngine; + +namespace Toolbox.Editor.Internal +{ + //TODO: refactor + public class TypesGroupInfo + { + private readonly string[] options; + private readonly List types; + private readonly ClassGrouping grouping; + private readonly TypeConstraint constraint; + private readonly bool addEmptyValue; + + + public TypesGroupInfo(TypeConstraint constraint, List types, bool addEmptyValue = true, ClassGrouping grouping = ClassGrouping.None) + { + this.constraint = constraint; + this.types = types; + this.addEmptyValue = addEmptyValue; + this.grouping = grouping; + + var count = types.Count; + var shift = 0; + if (addEmptyValue) + { + shift = 1; + count += 1; + options = new string[count]; + options[0] = ""; + } + else + { + options = new string[count]; + } + + + for (var i = 0; i < count - shift; i++) + { + var type = types[i]; + var name = FormatGroupedTypeName(type, grouping); + options[i + shift] = name; + } + } + + + private static string FormatGroupedTypeName(Type type, ClassGrouping grouping) + { + var name = type.FullName; + switch (grouping) + { + default: + case ClassGrouping.None: + return name; + + case ClassGrouping.ByNamespace: + return name.Replace('.', '/'); + + case ClassGrouping.ByNamespaceFlat: + var lastPeriodIndex = name.LastIndexOf('.'); + if (lastPeriodIndex != -1) + { + name = name.Substring(0, lastPeriodIndex) + "/" + name.Substring(lastPeriodIndex + 1); + } + + return name; + + case ClassGrouping.ByAddComponentMenu: + var addComponentMenuAttributes = type.GetCustomAttributes(typeof(AddComponentMenu), false); + if (addComponentMenuAttributes.Length == 1) + { + return ((AddComponentMenu)addComponentMenuAttributes[0]).componentMenu; + } + + return "Scripts/" + type.FullName.Replace('.', '/'); + } + } + + + public int IndexOf(Type type) + { + var index = -1; + if (type != null) + { + index = types.IndexOf(type); + } + + return addEmptyValue + ? index + 1 + : index; + } + + + public string[] Options => options; + public IReadOnlyList Types => types; + } +} \ No newline at end of file diff --git a/Assets/Editor Toolbox/Editor/Internal/TypeCachedInfo.cs.meta b/Assets/Editor Toolbox/Editor/Internal/TypesGroupInfo.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Editor/Internal/TypeCachedInfo.cs.meta rename to Assets/Editor Toolbox/Editor/Internal/TypesGroupInfo.cs.meta diff --git a/Assets/Editor Toolbox/Editor/Internal/TypesGroupSettings.cs b/Assets/Editor Toolbox/Editor/Internal/TypesGroupSettings.cs new file mode 100644 index 00000000..8d9a7abc --- /dev/null +++ b/Assets/Editor Toolbox/Editor/Internal/TypesGroupSettings.cs @@ -0,0 +1,38 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace Toolbox.Editor.Internal +{ + public class TypesGroupSettings + { + public TypesGroupSettings(ClassGrouping grouping, TypeConstraint constraint, bool addEmptyValue) + { + Grouping = grouping; + Constraint = constraint; + AddEmptyValue = addEmptyValue; + } + + + public override bool Equals(object obj) + { + return obj is TypesGroupSettings settings && + Grouping == settings.Grouping && + EqualityComparer.Default.Equals(Constraint, settings.Constraint) && + AddEmptyValue == settings.AddEmptyValue; + } + + public override int GetHashCode() + { + var hashCode = -8527728; + hashCode = hashCode * -1521134295 + Grouping.GetHashCode(); + hashCode = hashCode * -1521134295 + EqualityComparer.Default.GetHashCode(Constraint); + hashCode = hashCode * -1521134295 + AddEmptyValue.GetHashCode(); + return hashCode; + } + + + public ClassGrouping Grouping { get; set; } + public TypeConstraint Constraint { get; set; } + public bool AddEmptyValue { get; set; } + } +} \ No newline at end of file diff --git a/Assets/Editor Toolbox/Editor/Internal/TypesGroupSettings.cs.meta b/Assets/Editor Toolbox/Editor/Internal/TypesGroupSettings.cs.meta new file mode 100644 index 00000000..75b54940 --- /dev/null +++ b/Assets/Editor Toolbox/Editor/Internal/TypesGroupSettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f1a815b391c465f4396792283bed792e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Toolbox/Editor/Utilities/TypeUtilities.cs b/Assets/Editor Toolbox/Editor/Utilities/TypeUtilities.cs index 98fafebc..50156beb 100644 --- a/Assets/Editor Toolbox/Editor/Utilities/TypeUtilities.cs +++ b/Assets/Editor Toolbox/Editor/Utilities/TypeUtilities.cs @@ -3,6 +3,7 @@ using System.Linq; using UnityEditor; +using UnityEngine; namespace Toolbox.Editor { @@ -10,15 +11,14 @@ namespace Toolbox.Editor public static class TypeUtilities { - private static readonly Dictionary> cachedTypes = new Dictionary>(); - private static readonly Dictionary managedReferenceTypes = new Dictionary(); - private static readonly TypeConstraint defaultConstraint = new TypeConstraint(null); + public static readonly Dictionary> cachedTypes = new Dictionary>(); + public static readonly Dictionary cachedInfo = new Dictionary(); + public static readonly Dictionary managedReferenceTypes = new Dictionary(); public static List GetTypes(Type parentType) { - defaultConstraint.ApplyTarget(parentType); - return GetTypes(defaultConstraint); + return GetTypes(new TypeConstraint(parentType)); } public static List GetTypes(TypeConstraint constraint) @@ -46,10 +46,30 @@ public static List GetTypes(TypeConstraint constraint) return cachedTypes[key] = types; } - public static TypeCachedInfo GetCachedInfo(Type parentType) + public static TypesGroupInfo GetGroupedInfo(Type parentType) { - var types = GetTypes(parentType); - return new TypeCachedInfo(parentType, types); + return GetGroupedInfo(new TypeConstraint(parentType), true, ClassGrouping.None); + } + + public static TypesGroupInfo GetGroupedInfo(TypeConstraint constraint, bool addEmptyValue, ClassGrouping grouping) + { + var types = GetTypes(constraint); + return new TypesGroupInfo(constraint, types, addEmptyValue, grouping); + } + + public static TypesGroupInfo GetGroupedInfo(TypesGroupSettings settings) + { + var key = settings.GetHashCode(); + if (cachedInfo.TryGetValue(key, out var info)) + { + return info; + } + else + { + var types = GetTypes(settings.Constraint); + return cachedInfo[key] = new TypesGroupInfo(settings.Constraint, types, + settings.AddEmptyValue, settings.Grouping); + } } public static bool TryGetTypeFromManagedReferenceFullTypeName(string managedReferenceFullTypeName, out Type managedReferenceInstanceType) diff --git a/Assets/Examples/Scenes/SampleScene.unity b/Assets/Examples/Scenes/SampleScene.unity index d0f0d132..3ad42bb0 100644 --- a/Assets/Examples/Scenes/SampleScene.unity +++ b/Assets/Examples/Scenes/SampleScene.unity @@ -616,7 +616,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: a0323e91bfeae1c488545bee770d3fa7, type: 3} m_Name: m_EditorClassIdentifier: - isOn: 0 reference: id: 0 references: @@ -638,7 +637,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 8 + m_RootOrder: 12 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &758033804 GameObject: @@ -1007,7 +1006,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 12 + m_RootOrder: 11 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1221429486 GameObject: @@ -1136,7 +1135,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 11 + m_RootOrder: 10 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1661307763 GameObject: @@ -1197,7 +1196,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 10 + m_RootOrder: 9 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &1670253093 MonoBehaviour: @@ -1264,7 +1263,59 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 9 + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1953917836 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1953917838} + - component: {fileID: 1953917837} + m_Layer: 0 + m_Name: SerializeReferenceTest (1) + m_TagString: Untagged + m_Icon: {fileID: 2800000, guid: b105bf1fb7fe62e4baba0ffd7b433e7b, type: 3} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1953917837 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1953917836} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a0323e91bfeae1c488545bee770d3fa7, type: 3} + m_Name: + m_EditorClassIdentifier: + reference: + id: 0 + references: + version: 1 + 00000000: + type: {class: SampleReference2, ns: , asm: Assembly-CSharp} + data: + var1: 1.36 + var2: 1.04 +--- !u!4 &1953917838 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1953917836} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 22 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1972418676 GameObject: diff --git a/Assets/Examples/Scripts/SampleReference2.cs b/Assets/Examples/Scripts/SampleReference2.cs index 92f90590..63184c01 100644 --- a/Assets/Examples/Scripts/SampleReference2.cs +++ b/Assets/Examples/Scripts/SampleReference2.cs @@ -1,4 +1,4 @@ -using System; +using System; [Serializable] public class SampleReference2 : SampleReferenceBase diff --git a/Assets/Examples/Scripts/SampleReferenceTest.cs b/Assets/Examples/Scripts/SampleReferenceTest.cs index c35250d8..66e95239 100644 --- a/Assets/Examples/Scripts/SampleReferenceTest.cs +++ b/Assets/Examples/Scripts/SampleReferenceTest.cs @@ -2,7 +2,6 @@ public class SampleReferenceTest : MonoBehaviour { - public bool isOn; [SerializeReference, ReferencePicker] public SampleReferenceBase reference; } \ No newline at end of file From 2adb2326f9c2ed21afb60519542660290db8f4ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mi=C5=82osz=20Matkowski?= Date: Sun, 1 May 2022 23:35:58 +0200 Subject: [PATCH 24/32] Minor refactor changes --- .../Drawers/Regular/SerializedTypeDrawer.cs | 128 ++---------------- .../Editor/Internal/TypesGroupSettings.cs | 4 +- Assets/Editor Toolbox/EditorSettings.asset | 1 - .../Regular/TypeConstraintAttribute.cs | 62 --------- Assets/Examples/Scenes/SampleScene.unity | 44 ++++++ 5 files changed, 56 insertions(+), 183 deletions(-) diff --git a/Assets/Editor Toolbox/Editor/Drawers/Regular/SerializedTypeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Regular/SerializedTypeDrawer.cs index e596a497..64d8d215 100644 --- a/Assets/Editor Toolbox/Editor/Drawers/Regular/SerializedTypeDrawer.cs +++ b/Assets/Editor Toolbox/Editor/Drawers/Regular/SerializedTypeDrawer.cs @@ -12,56 +12,8 @@ namespace Toolbox.Editor.Drawers [CustomPropertyDrawer(typeof(SerializedType))] public sealed class SerializedTypeDrawer : PropertyDrawerBase { - /// - /// Dictionary used to store all previously filtered types matched to the targt attribute. - /// - private static readonly Dictionary> cachedfilteredTypes = new Dictionary>(); - - - /// - /// Creates formatted type name depending on value. - /// - /// Type to display. - /// Format grouping type. - private static string FormatGroupedTypeName(Type type, ClassGrouping grouping) - { - var name = type.FullName; - switch (grouping) - { - default: - case ClassGrouping.None: - return name; - - case ClassGrouping.ByNamespace: - return name.Replace('.', '/'); - - case ClassGrouping.ByNamespaceFlat: - var lastPeriodIndex = name.LastIndexOf('.'); - if (lastPeriodIndex != -1) - { - name = name.Substring(0, lastPeriodIndex) + "/" + name.Substring(lastPeriodIndex + 1); - } - - return name; - - case ClassGrouping.ByAddComponentMenu: - var addComponentMenuAttributes = type.GetCustomAttributes(typeof(AddComponentMenu), false); - if (addComponentMenuAttributes.Length == 1) - { - return ((AddComponentMenu)addComponentMenuAttributes[0]).componentMenu; - } - - return "Scripts/" + type.FullName.Replace('.', '/'); - } - } + private static readonly TypeField typeField = new TypeField(true, true, new TypeConstraintStandard(null, true, true)); - /// - /// Returns valid equivalent of the referenced . - /// - private static string GetClassReferenceValue(int selectedType, List types) - { - return selectedType > 0 ? SerializedType.GetClassReference(types[selectedType - 1]) : string.Empty; - } private bool IsDefaultField(TypeConstraintAttribute attribute) { @@ -95,22 +47,6 @@ private TypeConstraintAttribute GetDefaultConstraint() }; } - /// - /// Returns all s associated to the given constraint. - /// - private List GetFilteredTypes(TypeConstraintAttribute attribute) - { - var hashCode = attribute.GetHashCode(); - if (cachedfilteredTypes.TryGetValue(hashCode, out var filteredTypes)) - { - return filteredTypes; - } - else - { - return cachedfilteredTypes[hashCode] = attribute.GetFilteredTypes(); - } - } - protected override float GetPropertyHeightSafe(SerializedProperty property, GUIContent label) { @@ -121,66 +57,22 @@ protected override void OnGUISafe(Rect position, SerializedProperty property, GU { var validAttribute = GetVerifiedAttribute(attribute); + typeField.Grouping = validAttribute.Grouping; + //TODO: update constraints + var referenceProperty = property.FindPropertyRelative("classReference"); var referenceValue = referenceProperty.stringValue; - var currentType = !string.IsNullOrEmpty(referenceValue) ? Type.GetType(referenceValue) : null; + var activeType = !string.IsNullOrEmpty(referenceValue) ? Type.GetType(referenceValue) : null; - var filteredTypes = GetFilteredTypes(validAttribute); - - var itemsCount = filteredTypes.Count + 1; - var options = new string[itemsCount]; - var index = 0; - - //create labels for all types - options[0] = ""; - for (var i = 1; i < itemsCount; i++) - { - var menuType = filteredTypes[i - 1]; - var menuLabel = FormatGroupedTypeName(menuType, validAttribute.Grouping); - if (menuType == currentType) - { - index = i; - } - - options[i] = menuLabel; - } - - //draw the reference property label = EditorGUI.BeginProperty(position, label, property); label = property.name != "data" ? label : GUIContent.none; - //draw the proper label field position = EditorGUI.PrefixLabel(position, label); - - //try to draw associated popup - if (validAttribute.AddTextSearchField) - { - var buttonLabel = new GUIContent(options[index]); - ToolboxEditorGui.DrawSearchablePopup(position, buttonLabel, index, options, (i) => - { - try - { - referenceProperty.serializedObject.Update(); - referenceProperty.stringValue = GetClassReferenceValue(i, filteredTypes); - referenceProperty.serializedObject.ApplyModifiedProperties(); - } - catch (Exception e) when (e is ArgumentNullException || e is NullReferenceException) - { - ToolboxEditorLog.LogWarning("Invalid attempt to update disposed property."); - } - }); - } - else + typeField.OnGui(position, validAttribute.AssemblyType, activeType, (type) => { - using (new ZeroIndentScope()) - { - EditorGUI.BeginChangeCheck(); - index = EditorGUI.Popup(position, index, options); - if (EditorGUI.EndChangeCheck()) - { - referenceProperty.stringValue = GetClassReferenceValue(index, filteredTypes); - } - } - } + referenceProperty.serializedObject.Update(); + referenceProperty.stringValue = SerializedType.GetClassReference(type); + referenceProperty.serializedObject.ApplyModifiedProperties(); + }); EditorGUI.EndProperty(); } diff --git a/Assets/Editor Toolbox/Editor/Internal/TypesGroupSettings.cs b/Assets/Editor Toolbox/Editor/Internal/TypesGroupSettings.cs index 8d9a7abc..07e69b86 100644 --- a/Assets/Editor Toolbox/Editor/Internal/TypesGroupSettings.cs +++ b/Assets/Editor Toolbox/Editor/Internal/TypesGroupSettings.cs @@ -13,9 +13,9 @@ public TypesGroupSettings(ClassGrouping grouping, TypeConstraint constraint, boo } - public override bool Equals(object obj) + public override bool Equals(object other) { - return obj is TypesGroupSettings settings && + return other is TypesGroupSettings settings && Grouping == settings.Grouping && EqualityComparer.Default.Equals(Constraint, settings.Constraint) && AddEmptyValue == settings.AddEmptyValue; diff --git a/Assets/Editor Toolbox/EditorSettings.asset b/Assets/Editor Toolbox/EditorSettings.asset index 2694870e..e236cecb 100644 --- a/Assets/Editor Toolbox/EditorSettings.asset +++ b/Assets/Editor Toolbox/EditorSettings.asset @@ -48,7 +48,6 @@ MonoBehaviour: iconName: useToolboxDrawers: 1 decoratorDrawerHandlers: - - classReference: SampleDrawer, Assembly-CSharp-Editor - classReference: Toolbox.Editor.Drawers.BeginGroupAttributeDrawer, Toolbox.Editor - classReference: Toolbox.Editor.Drawers.BeginHorizontalAttributeDrawer, Toolbox.Editor - classReference: Toolbox.Editor.Drawers.BeginHorizontalGroupAttributeDrawer, Toolbox.Editor diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Regular/TypeConstraintAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Regular/TypeConstraintAttribute.cs index cb601e4f..4b3423fa 100644 --- a/Assets/Editor Toolbox/Scripts/Attributes/Regular/TypeConstraintAttribute.cs +++ b/Assets/Editor Toolbox/Scripts/Attributes/Regular/TypeConstraintAttribute.cs @@ -23,68 +23,6 @@ protected TypeConstraintAttribute(Type assemblyType) } - /// - /// Get all proper types from executing assembly. - /// - public virtual List GetFilteredTypes() - { -#if UNITY_EDITOR - var types = TypeCache.GetTypesDerivedFrom(AssemblyType).ToList(); - for (var i = types.Count - 1; i >= 0; i--) - { - var type = types[i]; - if (IsConstraintSatisfied(type)) - { - continue; - } - - types.RemoveAt(i); - } - - return types; -#else - return new List(); -#endif - } - - /// - /// Get all filtered type from provided assembly. - /// - public virtual List GetFilteredTypes(Assembly assembly) - { - var types = new List(); - foreach (var type in assembly.GetTypes()) - { - if (!IsConstraintSatisfied(type)) - { - continue; - } - - types.Add(type); - } - - return types; - } - - /// - /// Determines whether the specified satisfies filter constraint. - /// - /// Type to test. - /// - /// A value indicating if the type specified by - /// satisfies this constraint and should thus be selectable. - /// - public virtual bool IsConstraintSatisfied(Type type) - { - //NOTE: it's possible to strip out ConstructedGenericTypes, but they are considered valid for now - if (!type.IsVisible || !type.IsClass) - { - return false; - } - - return (AllowAbstract || !type.IsAbstract) && (AllowObsolete || !IsDefined(type, typeof(ObsoleteAttribute))); - } - /// public override int GetHashCode() { diff --git a/Assets/Examples/Scenes/SampleScene.unity b/Assets/Examples/Scenes/SampleScene.unity index 3ad42bb0..a5ccc7ac 100644 --- a/Assets/Examples/Scenes/SampleScene.unity +++ b/Assets/Examples/Scenes/SampleScene.unity @@ -1275,6 +1275,8 @@ GameObject: m_Component: - component: {fileID: 1953917838} - component: {fileID: 1953917837} + - component: {fileID: 1953917840} + - component: {fileID: 1953917839} m_Layer: 0 m_Name: SerializeReferenceTest (1) m_TagString: Untagged @@ -1317,6 +1319,48 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 22 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1953917839 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1953917836} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a0323e91bfeae1c488545bee770d3fa7, type: 3} + m_Name: + m_EditorClassIdentifier: + reference: + id: 0 + references: + version: 1 + 00000000: + type: {class: SampleReference1, ns: , asm: Assembly-CSharp} + data: + var1: 0 + var2: 0 +--- !u!114 &1953917840 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1953917836} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a0323e91bfeae1c488545bee770d3fa7, type: 3} + m_Name: + m_EditorClassIdentifier: + reference: + id: 0 + references: + version: 1 + 00000000: + type: {class: SampleReference1, ns: , asm: Assembly-CSharp} + data: + var1: 0 + var2: 0 --- !u!1 &1972418676 GameObject: m_ObjectHideFlags: 0 From 1f59db4003d3f882bf06fcc240e1219f17b87da2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mi=C5=82osz=20Matkowski?= Date: Mon, 2 May 2022 21:34:15 +0200 Subject: [PATCH 25/32] Add more advanced type filtering settings [WIP] --- .../Drawers/Regular/SerializedTypeDrawer.cs | 10 +-- .../Editor/Internal/SearchablePopup.cs | 17 +++-- .../Internal/TypeConstraintReference.cs | 2 +- .../Editor/Internal/TypeConstraintStandard.cs | 41 ++++++----- .../Editor/Internal/TypeField.cs | 16 +++-- .../Editor/Internal/TypesGroupInfo.cs | 14 ++-- .../Editor/Internal/TypesGroupSettings.cs | 7 +- .../Editor/Utilities/TypeUtilities.cs | 5 +- .../Regular/TypeConstraintAttribute.cs | 69 ++++++------------- .../Attributes/Regular/TypeGrouping.cs | 55 +++++++++++++++ .../Attributes/Regular/TypeGrouping.cs.meta | 11 +++ .../Attributes/Regular/TypeSettings.cs | 11 +++ .../Attributes/Regular/TypeSettings.cs.meta | 11 +++ Assets/Examples/Scripts/SampleBehaviour1.cs | 2 +- .../Examples/Scripts/SampleReferenceTest.cs | 16 ++++- 15 files changed, 193 insertions(+), 94 deletions(-) create mode 100644 Assets/Editor Toolbox/Scripts/Attributes/Regular/TypeGrouping.cs create mode 100644 Assets/Editor Toolbox/Scripts/Attributes/Regular/TypeGrouping.cs.meta create mode 100644 Assets/Editor Toolbox/Scripts/Attributes/Regular/TypeSettings.cs create mode 100644 Assets/Editor Toolbox/Scripts/Attributes/Regular/TypeSettings.cs.meta diff --git a/Assets/Editor Toolbox/Editor/Drawers/Regular/SerializedTypeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Regular/SerializedTypeDrawer.cs index 64d8d215..1c50660d 100644 --- a/Assets/Editor Toolbox/Editor/Drawers/Regular/SerializedTypeDrawer.cs +++ b/Assets/Editor Toolbox/Editor/Drawers/Regular/SerializedTypeDrawer.cs @@ -12,7 +12,7 @@ namespace Toolbox.Editor.Drawers [CustomPropertyDrawer(typeof(SerializedType))] public sealed class SerializedTypeDrawer : PropertyDrawerBase { - private static readonly TypeField typeField = new TypeField(true, true, new TypeConstraintStandard(null, true, true)); + private static readonly TypeField typeField = new TypeField(true, true, new TypeConstraintStandard()); private bool IsDefaultField(TypeConstraintAttribute attribute) @@ -41,7 +41,7 @@ private TypeConstraintAttribute GetVerifiedAttribute(TypeConstraintAttribute att /// private TypeConstraintAttribute GetDefaultConstraint() { - return new ClassExtendsAttribute() + return new ClassExtendsAttribute(typeof(object)) { AddTextSearchField = true }; @@ -57,9 +57,11 @@ protected override void OnGUISafe(Rect position, SerializedProperty property, GU { var validAttribute = GetVerifiedAttribute(attribute); - typeField.Grouping = validAttribute.Grouping; //TODO: update constraints - + typeField.TypeGrouping = validAttribute.TypeGrouping; + typeField.TypeConstraint = new TypeConstraintStandard(validAttribute.AssemblyType, + validAttribute.TypeSettings, validAttribute.AllowAbstract, validAttribute.AllowObsolete); + var referenceProperty = property.FindPropertyRelative("classReference"); var referenceValue = referenceProperty.stringValue; var activeType = !string.IsNullOrEmpty(referenceValue) ? Type.GetType(referenceValue) : null; diff --git a/Assets/Editor Toolbox/Editor/Internal/SearchablePopup.cs b/Assets/Editor Toolbox/Editor/Internal/SearchablePopup.cs index 0bd93613..101d8757 100644 --- a/Assets/Editor Toolbox/Editor/Internal/SearchablePopup.cs +++ b/Assets/Editor Toolbox/Editor/Internal/SearchablePopup.cs @@ -19,7 +19,7 @@ public class SearchablePopup : PopupWindowContent /// public static void Show(Rect activatorRect, int current, string[] options, Action onSelect) { - PopupWindow.Show(activatorRect, new SearchablePopup(current, options, onSelect)); + PopupWindow.Show(activatorRect, new SearchablePopup(activatorRect, current, options, onSelect)); } @@ -32,16 +32,18 @@ public static void Show(Rect activatorRect, int current, string[] options, Actio private int scrollIndex = -1; private Vector2 scroll; - + private Rect activatorRect; private Rect toolbarRect; private Rect contentRect; - + /// /// Constructor should be called only internally by the method. /// - private SearchablePopup(int startIndex, string[] options, Action onSelect) + private SearchablePopup(Rect activatorRect, int startIndex, string[] options, Action onSelect) { + this.activatorRect = activatorRect; + searchArray = new SearchArray(options); searchField = new SearchField(); @@ -186,6 +188,13 @@ private GUIContent GetElementContent(Rect rect, int index) } + public override Vector2 GetWindowSize() + { + var size = base.GetWindowSize(); + size.x = activatorRect.width; + return size; + } + /// /// Called each time new is created. /// diff --git a/Assets/Editor Toolbox/Editor/Internal/TypeConstraintReference.cs b/Assets/Editor Toolbox/Editor/Internal/TypeConstraintReference.cs index ecca13e4..c233fe0a 100644 --- a/Assets/Editor Toolbox/Editor/Internal/TypeConstraintReference.cs +++ b/Assets/Editor Toolbox/Editor/Internal/TypeConstraintReference.cs @@ -13,7 +13,7 @@ public TypeConstraintReference(Type targetType) : base(targetType) public override bool IsSatisfied(Type type) { - return base.IsSatisfied(type) && + return base.IsSatisfied(type) && !type.IsInterface && !type.IsAbstract && !type.IsPointer && diff --git a/Assets/Editor Toolbox/Editor/Internal/TypeConstraintStandard.cs b/Assets/Editor Toolbox/Editor/Internal/TypeConstraintStandard.cs index e7e23f56..b71836b0 100644 --- a/Assets/Editor Toolbox/Editor/Internal/TypeConstraintStandard.cs +++ b/Assets/Editor Toolbox/Editor/Internal/TypeConstraintStandard.cs @@ -1,45 +1,54 @@ using System; +using UnityEngine; + namespace Toolbox.Editor.Internal { public class TypeConstraintStandard : TypeConstraint { - private readonly bool allowAbstract; - private readonly bool allowObsolete; - + public TypeConstraintStandard() : base(null) + { } - public TypeConstraintStandard(Type targetType, bool allowAbstract, bool allowObsolete) : base(targetType) + public TypeConstraintStandard(Type targetType, TypeSettings settings, bool allowAbstract, bool allowObsolete) : base(targetType) { - this.allowAbstract = allowAbstract; - this.allowObsolete = allowObsolete; + Settings = settings; + AllowAbstract = allowAbstract; + AllowObsolete = allowObsolete; } public override bool IsSatisfied(Type type) { - if (!base.IsSatisfied(type)) - { - return false; - } - - return (allowAbstract || !type.IsAbstract) && (allowObsolete || !Attribute.IsDefined(type, typeof(ObsoleteAttribute))); + return base.IsSatisfied(type) && + //NOTE: consider moving allowAbstract && allowObsolete properties to the TypeSettings enum + (!type.IsClass || Settings.HasFlag(TypeSettings.Class)) && + (!type.IsAbstract || Settings.HasFlag(TypeSettings.Interface) || AllowAbstract) && + (!type.IsInterface || Settings.HasFlag(TypeSettings.Interface)) && + (!Attribute.IsDefined(type, typeof(ObsoleteAttribute)) || AllowObsolete); } public override bool Equals(object other) { return other is TypeConstraintStandard constraint && base.Equals(other) && - allowAbstract == constraint.allowAbstract && - allowObsolete == constraint.allowObsolete; + Settings == constraint.Settings && + AllowAbstract == constraint.AllowAbstract && + AllowObsolete == constraint.AllowObsolete; } public override int GetHashCode() { var hashCode = 433750135; hashCode = hashCode * -1521134295 + base.GetHashCode(); - hashCode = hashCode * -1521134295 + allowAbstract.GetHashCode(); - hashCode = hashCode * -1521134295 + allowObsolete.GetHashCode(); + hashCode = hashCode * -1521134295 + Settings.GetHashCode(); + hashCode = hashCode * -1521134295 + AllowAbstract.GetHashCode(); + hashCode = hashCode * -1521134295 + AllowObsolete.GetHashCode(); return hashCode; } + + + public TypeSettings Settings { get; set; } + public bool AllowAbstract { get; set; } + public bool AllowObsolete { get; set; } } } \ No newline at end of file diff --git a/Assets/Editor Toolbox/Editor/Internal/TypeField.cs b/Assets/Editor Toolbox/Editor/Internal/TypeField.cs index c9bbec21..90ccdb67 100644 --- a/Assets/Editor Toolbox/Editor/Internal/TypeField.cs +++ b/Assets/Editor Toolbox/Editor/Internal/TypeField.cs @@ -11,20 +11,19 @@ public class TypeField { private readonly bool addEmptyValue; private readonly bool addSearchField; - private readonly TypeConstraint typeConstraint; private readonly TypesGroupSettings groupingSettings; public TypeField(bool addEmptyValue = true, bool addSearchField = true, bool allowAbstract = false, bool allowObsolete = false) - : this(addEmptyValue, addSearchField, new TypeConstraintStandard(null, allowAbstract, allowObsolete)) + : this(addEmptyValue, addSearchField, new TypeConstraintStandard(null, TypeSettings.Class, allowAbstract, allowObsolete)) { } public TypeField(bool addEmptyValue = true, bool addSearchField = true, TypeConstraint typeConstraint = null) { this.addEmptyValue = addEmptyValue; this.addSearchField = addSearchField; - this.typeConstraint = typeConstraint ?? new TypeConstraintStandard(null, false, false); - groupingSettings = new TypesGroupSettings(Grouping, typeConstraint, addEmptyValue); + TypeConstraint = typeConstraint ?? new TypeConstraintStandard(null, TypeSettings.Class, false, false); + groupingSettings = new TypesGroupSettings(TypeGrouping, typeConstraint, addEmptyValue); } @@ -39,10 +38,12 @@ private Type RetriveSelectedType(IReadOnlyList types, int selectedIndex) } + //TODO: assign constraint here public void OnGui(Rect position, Type parentType, Type activeType, Action onSelect) { - typeConstraint.ApplyTarget(parentType); - groupingSettings.Grouping = Grouping; + TypeConstraint.ApplyTarget(parentType); + groupingSettings.Constraint = TypeConstraint; + groupingSettings.Grouping = TypeGrouping; var info = TypeUtilities.GetGroupedInfo(groupingSettings); var types = info.Types; @@ -74,6 +75,7 @@ public void OnGui(Rect position, Type parentType, Type activeType, Action } - public ClassGrouping Grouping { get; set; } = ClassGrouping.None; + public TypeConstraint TypeConstraint { get; set; } + public TypeGrouping TypeGrouping { get; set; } = TypeGrouping.None; } } \ No newline at end of file diff --git a/Assets/Editor Toolbox/Editor/Internal/TypesGroupInfo.cs b/Assets/Editor Toolbox/Editor/Internal/TypesGroupInfo.cs index f514fbda..916b14d9 100644 --- a/Assets/Editor Toolbox/Editor/Internal/TypesGroupInfo.cs +++ b/Assets/Editor Toolbox/Editor/Internal/TypesGroupInfo.cs @@ -10,12 +10,12 @@ public class TypesGroupInfo { private readonly string[] options; private readonly List types; - private readonly ClassGrouping grouping; + private readonly TypeGrouping grouping; private readonly TypeConstraint constraint; private readonly bool addEmptyValue; - public TypesGroupInfo(TypeConstraint constraint, List types, bool addEmptyValue = true, ClassGrouping grouping = ClassGrouping.None) + public TypesGroupInfo(TypeConstraint constraint, List types, bool addEmptyValue = true, TypeGrouping grouping = TypeGrouping.None) { this.constraint = constraint; this.types = types; @@ -46,19 +46,19 @@ public TypesGroupInfo(TypeConstraint constraint, List types, bool addEmpty } - private static string FormatGroupedTypeName(Type type, ClassGrouping grouping) + private static string FormatGroupedTypeName(Type type, TypeGrouping grouping) { var name = type.FullName; switch (grouping) { default: - case ClassGrouping.None: + case TypeGrouping.None: return name; - case ClassGrouping.ByNamespace: + case TypeGrouping.ByNamespace: return name.Replace('.', '/'); - case ClassGrouping.ByNamespaceFlat: + case TypeGrouping.ByNamespaceFlat: var lastPeriodIndex = name.LastIndexOf('.'); if (lastPeriodIndex != -1) { @@ -67,7 +67,7 @@ private static string FormatGroupedTypeName(Type type, ClassGrouping grouping) return name; - case ClassGrouping.ByAddComponentMenu: + case TypeGrouping.ByAddComponentMenu: var addComponentMenuAttributes = type.GetCustomAttributes(typeof(AddComponentMenu), false); if (addComponentMenuAttributes.Length == 1) { diff --git a/Assets/Editor Toolbox/Editor/Internal/TypesGroupSettings.cs b/Assets/Editor Toolbox/Editor/Internal/TypesGroupSettings.cs index 07e69b86..49f36e47 100644 --- a/Assets/Editor Toolbox/Editor/Internal/TypesGroupSettings.cs +++ b/Assets/Editor Toolbox/Editor/Internal/TypesGroupSettings.cs @@ -3,12 +3,13 @@ namespace Toolbox.Editor.Internal { + //TODO: refactor public class TypesGroupSettings { - public TypesGroupSettings(ClassGrouping grouping, TypeConstraint constraint, bool addEmptyValue) + public TypesGroupSettings(TypeGrouping grouping, TypeConstraint constraint, bool addEmptyValue) { - Grouping = grouping; Constraint = constraint; + Grouping = grouping; AddEmptyValue = addEmptyValue; } @@ -31,8 +32,8 @@ public override int GetHashCode() } - public ClassGrouping Grouping { get; set; } public TypeConstraint Constraint { get; set; } + public TypeGrouping Grouping { get; set; } public bool AddEmptyValue { get; set; } } } \ No newline at end of file diff --git a/Assets/Editor Toolbox/Editor/Utilities/TypeUtilities.cs b/Assets/Editor Toolbox/Editor/Utilities/TypeUtilities.cs index 50156beb..885b3e8d 100644 --- a/Assets/Editor Toolbox/Editor/Utilities/TypeUtilities.cs +++ b/Assets/Editor Toolbox/Editor/Utilities/TypeUtilities.cs @@ -9,6 +9,7 @@ namespace Toolbox.Editor { using Toolbox.Editor.Internal; + //TODO: refactor public static class TypeUtilities { public static readonly Dictionary> cachedTypes = new Dictionary>(); @@ -48,10 +49,10 @@ public static List GetTypes(TypeConstraint constraint) public static TypesGroupInfo GetGroupedInfo(Type parentType) { - return GetGroupedInfo(new TypeConstraint(parentType), true, ClassGrouping.None); + return GetGroupedInfo(new TypeConstraint(parentType), true, TypeGrouping.None); } - public static TypesGroupInfo GetGroupedInfo(TypeConstraint constraint, bool addEmptyValue, ClassGrouping grouping) + public static TypesGroupInfo GetGroupedInfo(TypeConstraint constraint, bool addEmptyValue, TypeGrouping grouping) { var types = GetTypes(constraint); return new TypesGroupInfo(constraint, types, addEmptyValue, grouping); diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Regular/TypeConstraintAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Regular/TypeConstraintAttribute.cs index 4b3423fa..8eb4f416 100644 --- a/Assets/Editor Toolbox/Scripts/Attributes/Regular/TypeConstraintAttribute.cs +++ b/Assets/Editor Toolbox/Scripts/Attributes/Regular/TypeConstraintAttribute.cs @@ -1,10 +1,5 @@ using System; -using System.Collections.Generic; using System.Diagnostics; -using System.Linq; -using System.Reflection; - -using UnityEditor; namespace UnityEngine { @@ -15,28 +10,14 @@ namespace UnityEngine /// [AttributeUsage(AttributeTargets.Field, AllowMultiple = false)] [Conditional("UNITY_EDITOR")] - public abstract class TypeConstraintAttribute : PropertyAttribute + public class TypeConstraintAttribute : PropertyAttribute { - protected TypeConstraintAttribute(Type assemblyType) + public TypeConstraintAttribute(Type assemblyType) { AssemblyType = assemblyType; } - /// - public override int GetHashCode() - { - unchecked - { - var result = 0; - result = (result * 397) ^ AssemblyType.GetHashCode(); - result = (result * 397) ^ AllowAbstract.GetHashCode(); - result = (result * 397) ^ AllowObsolete.GetHashCode(); - return result; - } - } - - /// /// Associated type which will define what type we are looking for. /// @@ -62,7 +43,18 @@ public override int GetHashCode() /// Gets or sets grouping of selectable classes. /// Defaults to unless explicitly specified. /// + [Obsolete("Use TypeGrouping instead.")] public ClassGrouping Grouping { get; set; } = ClassGrouping.None; + + /// + /// Gets or sets grouping of selectable classes. + /// Defaults to unless explicitly specified. + /// + public TypeGrouping TypeGrouping { get; set; } = TypeGrouping.None; + /// + /// Indicates what kind of types are accepted. + /// + public TypeSettings TypeSettings { get; set; } = TypeSettings.Class | TypeSettings.Interface; } /// @@ -73,6 +65,7 @@ public sealed class ClassExtendsAttribute : TypeConstraintAttribute /// /// Initializes a new instance of the class. /// + [Obsolete] public ClassExtendsAttribute() : base(typeof(object)) { } @@ -81,7 +74,9 @@ public ClassExtendsAttribute() : base(typeof(object)) /// /// Type of class that selectable classes must derive from. public ClassExtendsAttribute(Type baseType) : base(baseType) - { } + { + TypeSettings = TypeSettings.Class; + } } /// @@ -92,6 +87,7 @@ public sealed class ClassImplementsAttribute : TypeConstraintAttribute /// /// Initializes a new instance of the class. /// + [Obsolete] public ClassImplementsAttribute() : base(null) { } @@ -100,31 +96,8 @@ public ClassImplementsAttribute() : base(null) /// /// Type of interface that selectable classes must implement. public ClassImplementsAttribute(Type interfaceType) : base(interfaceType) - { } - } - - /// - /// Indicates how selectable classes should be collated in drop-down menu. - /// - public enum ClassGrouping - { - /// - /// No grouping, just show type names in a list; for instance, "Some.Nested.Namespace.SpecialClass". - /// - None, - /// - /// Group classes by namespace and show foldout menus for nested namespaces; for - /// instance, "Some > Nested > Namespace > SpecialClass". - /// - ByNamespace, - /// - /// Group classes by namespace; for instance, "Some.Nested.Namespace > SpecialClass". - /// - ByNamespaceFlat, - /// - /// Group classes in the same way as Unity does for its component menu. This - /// grouping method must only be used for types. - /// - ByAddComponentMenu, + { + TypeSettings = TypeSettings.Class; + } } } \ No newline at end of file diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Regular/TypeGrouping.cs b/Assets/Editor Toolbox/Scripts/Attributes/Regular/TypeGrouping.cs new file mode 100644 index 00000000..637d3566 --- /dev/null +++ b/Assets/Editor Toolbox/Scripts/Attributes/Regular/TypeGrouping.cs @@ -0,0 +1,55 @@ +using System; + +namespace UnityEngine +{ + /// + /// Indicates how selectable classes should be collated in drop-down menu. + /// + public enum TypeGrouping + { + /// + /// No grouping, just show type names in a list; for instance, "Some.Nested.Namespace.SpecialClass". + /// + None, + /// + /// Group classes by namespace and show foldout menus for nested namespaces; for + /// instance, "Some > Nested > Namespace > SpecialClass". + /// + ByNamespace, + /// + /// Group classes by namespace; for instance, "Some.Nested.Namespace > SpecialClass". + /// + ByNamespaceFlat, + /// + /// Group classes in the same way as Unity does for its component menu. This + /// grouping method must only be used for types. + /// + ByAddComponentMenu, + } + + /// + /// Indicates how selectable classes should be collated in drop-down menu. + /// + [Obsolete("Use TypeGrouping instead.")] + public enum ClassGrouping + { + /// + /// No grouping, just show type names in a list; for instance, "Some.Nested.Namespace.SpecialClass". + /// + None, + /// + /// Group classes by namespace and show foldout menus for nested namespaces; for + /// instance, "Some > Nested > Namespace > SpecialClass". + /// + ByNamespace, + /// + /// Group classes by namespace; for instance, "Some.Nested.Namespace > SpecialClass". + /// + ByNamespaceFlat, + /// + /// Group classes in the same way as Unity does for its component menu. This + /// grouping method must only be used for types. + /// + ByAddComponentMenu, + } +} \ No newline at end of file diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Regular/TypeGrouping.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Regular/TypeGrouping.cs.meta new file mode 100644 index 00000000..942c4271 --- /dev/null +++ b/Assets/Editor Toolbox/Scripts/Attributes/Regular/TypeGrouping.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 014909f1ed98e9f4e9cf5b5850e44e35 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Regular/TypeSettings.cs b/Assets/Editor Toolbox/Scripts/Attributes/Regular/TypeSettings.cs new file mode 100644 index 00000000..3fa2dc35 --- /dev/null +++ b/Assets/Editor Toolbox/Scripts/Attributes/Regular/TypeSettings.cs @@ -0,0 +1,11 @@ +using System; + +namespace UnityEngine +{ + [Flags] + public enum TypeSettings + { + Class = 1, + Interface = 2 + } +} \ No newline at end of file diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Regular/TypeSettings.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Regular/TypeSettings.cs.meta new file mode 100644 index 00000000..e5c6101a --- /dev/null +++ b/Assets/Editor Toolbox/Scripts/Attributes/Regular/TypeSettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 895a263c3a6e14640bfcd8652591cc36 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Examples/Scripts/SampleBehaviour1.cs b/Assets/Examples/Scripts/SampleBehaviour1.cs index 6b843a82..fb3ad47f 100644 --- a/Assets/Examples/Scripts/SampleBehaviour1.cs +++ b/Assets/Examples/Scripts/SampleBehaviour1.cs @@ -73,7 +73,7 @@ public class SampleBehaviour1 : MonoBehaviour [Label("11", skinStyle: SkinStyle.Box)] - [ClassExtends(typeof(Object), Grouping = ClassGrouping.ByNamespace)] + [ClassExtends(typeof(Object), TypeGrouping = TypeGrouping.ByNamespace)] [Tooltip("This variable is able to serialize Type.")] public SerializedType type1; [ClassImplements(typeof(UnityEngine.UI.IMaskable), AddTextSearchField = true)] diff --git a/Assets/Examples/Scripts/SampleReferenceTest.cs b/Assets/Examples/Scripts/SampleReferenceTest.cs index 66e95239..cadaf566 100644 --- a/Assets/Examples/Scripts/SampleReferenceTest.cs +++ b/Assets/Examples/Scripts/SampleReferenceTest.cs @@ -2,6 +2,20 @@ public class SampleReferenceTest : MonoBehaviour { + [TypeConstraint(typeof(Interface1))] + public SerializedType type1; + [TypeConstraint(typeof(Interface1), TypeSettings = TypeSettings.Interface)] + public SerializedType type2; + [ClassExtends(typeof(Interface1))] + public SerializedType type3; [SerializeReference, ReferencePicker] public SampleReferenceBase reference; -} \ No newline at end of file +} + +public interface Interface1 { } +public interface Interface2 : Interface1 { } +public interface Interface3 : Interface1 { } +public interface Interface4 : Interface2 { } +public interface Interface4 : Interface3 { } + +public class ClassWithInterface : Interface1 { } \ No newline at end of file From 3c113806638e6a7103121da945216c4475904bca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mi=C5=82osz=20Matkowski?= Date: Tue, 3 May 2022 20:29:16 +0200 Subject: [PATCH 26/32] Minor refactor changes --- .../Drawers/Regular/SerializedTypeDrawer.cs | 42 +++-- .../ReferencePickerAttributeDrawer.cs | 7 +- ...ypesGroupSettings.cs => TypeAppearance.cs} | 9 +- ...ettings.cs.meta => TypeAppearance.cs.meta} | 0 .../Editor/Internal/TypeField.cs | 79 +++++--- .../Editor/Internal/TypesGroupInfo.cs | 4 +- .../Editor/Utilities/TypeUtilities.cs | 7 +- .../Scripts/Serialization/SerializedType.cs | 46 +++-- Assets/Examples/Scenes/SampleScene.unity | 177 +++--------------- .../Examples/Scripts/SampleReferenceTest.cs | 2 +- 10 files changed, 143 insertions(+), 230 deletions(-) rename Assets/Editor Toolbox/Editor/Internal/{TypesGroupSettings.cs => TypeAppearance.cs} (78%) rename Assets/Editor Toolbox/Editor/Internal/{TypesGroupSettings.cs.meta => TypeAppearance.cs.meta} (100%) diff --git a/Assets/Editor Toolbox/Editor/Drawers/Regular/SerializedTypeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Regular/SerializedTypeDrawer.cs index 1c50660d..a074b0c6 100644 --- a/Assets/Editor Toolbox/Editor/Drawers/Regular/SerializedTypeDrawer.cs +++ b/Assets/Editor Toolbox/Editor/Drawers/Regular/SerializedTypeDrawer.cs @@ -1,5 +1,4 @@ using System; -using System.Collections.Generic; using UnityEditor; using UnityEngine; @@ -12,7 +11,9 @@ namespace Toolbox.Editor.Drawers [CustomPropertyDrawer(typeof(SerializedType))] public sealed class SerializedTypeDrawer : PropertyDrawerBase { - private static readonly TypeField typeField = new TypeField(true, true, new TypeConstraintStandard()); + private static readonly TypeConstraintStandard sharedConstraint = new TypeConstraintStandard(); + private static readonly TypeAppearance sharedAppearance = new TypeAppearance(sharedConstraint, TypeGrouping.None, true); + private static readonly TypeField typeField = new TypeField(sharedConstraint, sharedAppearance); private bool IsDefaultField(TypeConstraintAttribute attribute) @@ -47,6 +48,19 @@ private TypeConstraintAttribute GetDefaultConstraint() }; } + private void UpdateConstraint(TypeConstraintAttribute attribute) + { + sharedConstraint.ApplyTarget(attribute.AssemblyType); + sharedConstraint.AllowAbstract = attribute.AllowAbstract; + sharedConstraint.AllowObsolete = attribute.AllowObsolete; + sharedConstraint.Settings = attribute.TypeSettings; + } + + private void UpdateAppearance(TypeConstraintAttribute attribute) + { + sharedAppearance.Grouping = attribute.TypeGrouping; + } + protected override float GetPropertyHeightSafe(SerializedProperty property, GUIContent label) { @@ -55,26 +69,24 @@ protected override float GetPropertyHeightSafe(SerializedProperty property, GUIC protected override void OnGUISafe(Rect position, SerializedProperty property, GUIContent label) { - var validAttribute = GetVerifiedAttribute(attribute); - - //TODO: update constraints - typeField.TypeGrouping = validAttribute.TypeGrouping; - typeField.TypeConstraint = new TypeConstraintStandard(validAttribute.AssemblyType, - validAttribute.TypeSettings, validAttribute.AllowAbstract, validAttribute.AllowObsolete); - - var referenceProperty = property.FindPropertyRelative("classReference"); - var referenceValue = referenceProperty.stringValue; - var activeType = !string.IsNullOrEmpty(referenceValue) ? Type.GetType(referenceValue) : null; + var referenceProperty = property.FindPropertyRelative("typeReference"); label = EditorGUI.BeginProperty(position, label, property); label = property.name != "data" ? label : GUIContent.none; position = EditorGUI.PrefixLabel(position, label); - typeField.OnGui(position, validAttribute.AssemblyType, activeType, (type) => + + var validAttribute = GetVerifiedAttribute(attribute); + var addSearchField = validAttribute.AddTextSearchField; + UpdateConstraint(validAttribute); + UpdateAppearance(validAttribute); + typeField.OnSelect = (type) => { referenceProperty.serializedObject.Update(); - referenceProperty.stringValue = SerializedType.GetClassReference(type); + referenceProperty.stringValue = SerializedType.GetReferenceValue(type); referenceProperty.serializedObject.ApplyModifiedProperties(); - }); + }; + var activeType = SerializedType.GetReferenceType(referenceProperty.stringValue); + typeField.OnGui(position, addSearchField, activeType); EditorGUI.EndProperty(); } diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelf/ReferencePickerAttributeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelf/ReferencePickerAttributeDrawer.cs index 43834c0d..e4c9f6fc 100644 --- a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelf/ReferencePickerAttributeDrawer.cs +++ b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelf/ReferencePickerAttributeDrawer.cs @@ -9,7 +9,7 @@ namespace Toolbox.Editor.Drawers public class ReferencePickerAttributeDrawer : ToolboxSelfPropertyDrawer { - private readonly TypeField typeField = new TypeField(true, true, new TypeConstraintReference(null)); + private readonly TypeField typeField = new TypeField(new TypeConstraintReference(null)); private void CreateTypeProperty(SerializedProperty property) @@ -18,7 +18,7 @@ private void CreateTypeProperty(SerializedProperty property) TypeUtilities.TryGetTypeFromManagedReferenceFullTypeName(property.managedReferenceFullTypename, out var currentType); var position = EditorGUILayout.GetControlRect(false, EditorGUIUtility.singleLineHeight); position = EditorGUI.IndentedRect(position); - typeField.OnGui(position, propertyType, currentType, (type) => + typeField.OnSelect = (type) => { try { @@ -43,7 +43,8 @@ private void CreateTypeProperty(SerializedProperty property) { ToolboxEditorLog.LogWarning("Invalid attempt to update disposed property."); } - }); + }; + typeField.OnGui(position, true, currentType, propertyType); } private void UpdateTypeProperty(SerializedProperty property, Type referenceType) diff --git a/Assets/Editor Toolbox/Editor/Internal/TypesGroupSettings.cs b/Assets/Editor Toolbox/Editor/Internal/TypeAppearance.cs similarity index 78% rename from Assets/Editor Toolbox/Editor/Internal/TypesGroupSettings.cs rename to Assets/Editor Toolbox/Editor/Internal/TypeAppearance.cs index 49f36e47..f3d234d9 100644 --- a/Assets/Editor Toolbox/Editor/Internal/TypesGroupSettings.cs +++ b/Assets/Editor Toolbox/Editor/Internal/TypeAppearance.cs @@ -4,9 +4,12 @@ namespace Toolbox.Editor.Internal { //TODO: refactor - public class TypesGroupSettings + public class TypeAppearance { - public TypesGroupSettings(TypeGrouping grouping, TypeConstraint constraint, bool addEmptyValue) + public TypeAppearance(TypeConstraint constraint) : this(constraint, TypeGrouping.None, true) + { } + + public TypeAppearance(TypeConstraint constraint, TypeGrouping grouping, bool addEmptyValue) { Constraint = constraint; Grouping = grouping; @@ -16,7 +19,7 @@ public TypesGroupSettings(TypeGrouping grouping, TypeConstraint constraint, bool public override bool Equals(object other) { - return other is TypesGroupSettings settings && + return other is TypeAppearance settings && Grouping == settings.Grouping && EqualityComparer.Default.Equals(Constraint, settings.Constraint) && AddEmptyValue == settings.AddEmptyValue; diff --git a/Assets/Editor Toolbox/Editor/Internal/TypesGroupSettings.cs.meta b/Assets/Editor Toolbox/Editor/Internal/TypeAppearance.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Editor/Internal/TypesGroupSettings.cs.meta rename to Assets/Editor Toolbox/Editor/Internal/TypeAppearance.cs.meta diff --git a/Assets/Editor Toolbox/Editor/Internal/TypeField.cs b/Assets/Editor Toolbox/Editor/Internal/TypeField.cs index 90ccdb67..c36d65da 100644 --- a/Assets/Editor Toolbox/Editor/Internal/TypeField.cs +++ b/Assets/Editor Toolbox/Editor/Internal/TypeField.cs @@ -9,27 +9,26 @@ namespace Toolbox.Editor.Internal //TODO: refactor public class TypeField { - private readonly bool addEmptyValue; - private readonly bool addSearchField; - private readonly TypesGroupSettings groupingSettings; + private TypeConstraint constraint; + private TypeAppearance appearance; - public TypeField(bool addEmptyValue = true, bool addSearchField = true, bool allowAbstract = false, bool allowObsolete = false) - : this(addEmptyValue, addSearchField, new TypeConstraintStandard(null, TypeSettings.Class, allowAbstract, allowObsolete)) + public TypeField() : this(null, null) { } - public TypeField(bool addEmptyValue = true, bool addSearchField = true, TypeConstraint typeConstraint = null) + public TypeField(TypeConstraint constraint) : this(constraint, null) + { } + + public TypeField(TypeConstraint constraint, TypeAppearance appearance) { - this.addEmptyValue = addEmptyValue; - this.addSearchField = addSearchField; - TypeConstraint = typeConstraint ?? new TypeConstraintStandard(null, TypeSettings.Class, false, false); - groupingSettings = new TypesGroupSettings(TypeGrouping, typeConstraint, addEmptyValue); + this.constraint = constraint ?? new TypeConstraintStandard(null, TypeSettings.Class, false, false); + this.appearance = appearance ?? new TypeAppearance(this.constraint, TypeGrouping.None , true); } - private Type RetriveSelectedType(IReadOnlyList types, int selectedIndex) + private Type RetriveSelectedType(IReadOnlyList types, int selectedIndex, bool includeEmptyValue) { - if (addEmptyValue) + if (includeEmptyValue) { selectedIndex -= 1; } @@ -38,25 +37,21 @@ private Type RetriveSelectedType(IReadOnlyList types, int selectedIndex) } - //TODO: assign constraint here - public void OnGui(Rect position, Type parentType, Type activeType, Action onSelect) + public void OnGui(Rect position, bool addSearchField, Type activeType) { - TypeConstraint.ApplyTarget(parentType); - groupingSettings.Constraint = TypeConstraint; - groupingSettings.Grouping = TypeGrouping; - - var info = TypeUtilities.GetGroupedInfo(groupingSettings); - var types = info.Types; - var options = info.Options; + var info = TypeUtilities.GetGroupedInfo(Appearance); + var values = info.Types; + var labels = info.Labels; var index = info.IndexOf(activeType); - var buttonLabel = new GUIContent(options[index]); + var addEmptyValue = Appearance.AddEmptyValue; if (addSearchField) { - ToolboxEditorGui.DrawSearchablePopup(position, buttonLabel, index, options, (i) => + var buttonLabel = new GUIContent(labels[index]); + ToolboxEditorGui.DrawSearchablePopup(position, buttonLabel, index, labels, (i) => { - var type = RetriveSelectedType(types, i); - onSelect?.Invoke(type); + var type = RetriveSelectedType(values, i, addEmptyValue); + OnSelect?.Invoke(type); }); } else @@ -64,18 +59,42 @@ public void OnGui(Rect position, Type parentType, Type activeType, Action using (new ZeroIndentScope()) { EditorGUI.BeginChangeCheck(); - index = EditorGUI.Popup(position, index, options); + index = EditorGUI.Popup(position, index, labels); if (EditorGUI.EndChangeCheck()) { - var type = RetriveSelectedType(types, index); - onSelect?.Invoke(type); + var type = RetriveSelectedType(values, index, addEmptyValue); + OnSelect?.Invoke(type); } } } } + public void OnGui(Rect position, bool addSearchField, Type activeType, Type parentType) + { + Constraint.ApplyTarget(parentType); + OnGui(position, addSearchField, activeType); + } + + + public TypeConstraint Constraint + { + get => constraint; + set + { + if (value == null) + { + throw new NullReferenceException($"Cannot assign null constraint to the {nameof(TypeField)}."); + } + + Appearance.Constraint = constraint = value; + } + } + + public TypeAppearance Appearance + { + get => appearance; + } - public TypeConstraint TypeConstraint { get; set; } - public TypeGrouping TypeGrouping { get; set; } = TypeGrouping.None; + public Action OnSelect { get; set; } } } \ No newline at end of file diff --git a/Assets/Editor Toolbox/Editor/Internal/TypesGroupInfo.cs b/Assets/Editor Toolbox/Editor/Internal/TypesGroupInfo.cs index 916b14d9..5944613c 100644 --- a/Assets/Editor Toolbox/Editor/Internal/TypesGroupInfo.cs +++ b/Assets/Editor Toolbox/Editor/Internal/TypesGroupInfo.cs @@ -36,7 +36,7 @@ public TypesGroupInfo(TypeConstraint constraint, List types, bool addEmpty options = new string[count]; } - + for (var i = 0; i < count - shift; i++) { var type = types[i]; @@ -93,7 +93,7 @@ public int IndexOf(Type type) } - public string[] Options => options; + public string[] Labels => options; public IReadOnlyList Types => types; } } \ No newline at end of file diff --git a/Assets/Editor Toolbox/Editor/Utilities/TypeUtilities.cs b/Assets/Editor Toolbox/Editor/Utilities/TypeUtilities.cs index 885b3e8d..8456ecb4 100644 --- a/Assets/Editor Toolbox/Editor/Utilities/TypeUtilities.cs +++ b/Assets/Editor Toolbox/Editor/Utilities/TypeUtilities.cs @@ -31,6 +31,11 @@ public static List GetTypes(TypeConstraint constraint) } var parentType = constraint.TargetType; + if (parentType == null) + { + return new List(); + } + var collection = TypeCache.GetTypesDerivedFrom(parentType); types = collection.ToList(); for (var i = types.Count - 1; i >= 0; i--) @@ -58,7 +63,7 @@ public static TypesGroupInfo GetGroupedInfo(TypeConstraint constraint, bool addE return new TypesGroupInfo(constraint, types, addEmptyValue, grouping); } - public static TypesGroupInfo GetGroupedInfo(TypesGroupSettings settings) + public static TypesGroupInfo GetGroupedInfo(TypeAppearance settings) { var key = settings.GetHashCode(); if (cachedInfo.TryGetValue(key, out var info)) diff --git a/Assets/Editor Toolbox/Scripts/Serialization/SerializedType.cs b/Assets/Editor Toolbox/Scripts/Serialization/SerializedType.cs index 1caa1b16..56906d55 100644 --- a/Assets/Editor Toolbox/Scripts/Serialization/SerializedType.cs +++ b/Assets/Editor Toolbox/Scripts/Serialization/SerializedType.cs @@ -2,22 +2,16 @@ namespace UnityEngine { + using UnityEngine.Serialization; + /// /// Reference to a class with support for Unity serialization. /// [Serializable] public sealed class SerializedType : ISerializationCallbackReceiver { - public static string GetClassReference(Type type) - { - return type != null - ? type.FullName + ", " + type.Assembly.GetName().Name - : string.Empty; - } - - - [SerializeField] - private string classReference; + [SerializeField, FormerlySerializedAs("classReference")] + private string typeReference; private Type type; @@ -31,11 +25,11 @@ public SerializedType() /// /// Initializes a new instance of the class. /// - /// Assembly qualified class name. - public SerializedType(string assemblyQualifiedClassName) + /// Assembly qualified class name. + public SerializedType(string assemblyQualifiedTypeName) { - Type = !string.IsNullOrEmpty(assemblyQualifiedClassName) - ? Type.GetType(assemblyQualifiedClassName) + Type = !string.IsNullOrEmpty(assemblyQualifiedTypeName) + ? Type.GetType(assemblyQualifiedTypeName) : null; } @@ -52,6 +46,20 @@ public SerializedType(Type type) } + public static string GetReferenceValue(Type type) + { + return type != null + ? type.FullName + ", " + type.Assembly.GetName().Name + : string.Empty; + } + + public static Type GetReferenceType(string referenceValue) + { + return !string.IsNullOrEmpty(referenceValue) + ? Type.GetType(referenceValue) + : null; + } + public override string ToString() { return Type != null ? Type.FullName : $"(None)"; @@ -59,13 +67,13 @@ public override string ToString() void ISerializationCallbackReceiver.OnAfterDeserialize() { - if (!string.IsNullOrEmpty(classReference)) + if (!string.IsNullOrEmpty(typeReference)) { - type = Type.GetType(classReference); + type = Type.GetType(typeReference); if (type == null) { #if UNITY_EDITOR - Debug.LogWarning($"'{classReference}' was referenced but class type was not found."); + Debug.LogWarning($"'{typeReference}' was referenced but class type was not found."); #endif } } @@ -96,12 +104,12 @@ public Type Type } type = value; - classReference = GetClassReference(value); + typeReference = GetReferenceValue(value); } } - public static implicit operator string(SerializedType typeReference) => typeReference.classReference; + public static implicit operator string(SerializedType typeReference) => typeReference.typeReference; public static implicit operator Type(SerializedType typeReference) => typeReference.Type; diff --git a/Assets/Examples/Scenes/SampleScene.unity b/Assets/Examples/Scenes/SampleScene.unity index a5ccc7ac..aa7dd799 100644 --- a/Assets/Examples/Scenes/SampleScene.unity +++ b/Assets/Examples/Scenes/SampleScene.unity @@ -555,7 +555,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 18 + m_RootOrder: 17 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &685318310 GameObject: @@ -585,7 +585,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 21 + m_RootOrder: 20 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &752799891 GameObject: @@ -616,6 +616,12 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: a0323e91bfeae1c488545bee770d3fa7, type: 3} m_Name: m_EditorClassIdentifier: + type1: + typeReference: Interface4`1, Assembly-CSharp + type2: + typeReference: Interface2, Assembly-CSharp + type3: + typeReference: ClassWithInterface, Assembly-CSharp reference: id: 0 references: @@ -637,7 +643,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 12 + m_RootOrder: 11 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &758033804 GameObject: @@ -667,7 +673,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 19 + m_RootOrder: 18 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &959025297 GameObject: @@ -715,9 +721,9 @@ MonoBehaviour: preview: {fileID: 5059060190599569102, guid: 5573ca52cac7c2d4cb2536e37e9be1f1, type: 3} var10: 2.16 type1: - classReference: + typeReference: type2: - classReference: TMPro.TMP_SubMeshUI, Unity.TextMeshPro + typeReference: TMPro.TMP_SubMeshUI, Unity.TextMeshPro var11: Im read only var12: 0 enumFlag: 12 @@ -814,7 +820,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 14 + m_RootOrder: 13 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!65 &977748989 BoxCollider: @@ -1006,7 +1012,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 11 + m_RootOrder: 10 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1221429486 GameObject: @@ -1036,7 +1042,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 17 + m_RootOrder: 16 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1414023086 GameObject: @@ -1066,7 +1072,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 20 + m_RootOrder: 19 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1438743617 GameObject: @@ -1135,7 +1141,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 10 + m_RootOrder: 9 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1661307763 GameObject: @@ -1165,7 +1171,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 13 + m_RootOrder: 12 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1670253091 GameObject: @@ -1196,7 +1202,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 9 + m_RootOrder: 8 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &1670253093 MonoBehaviour: @@ -1220,147 +1226,6 @@ MonoBehaviour: var35: 0 var39: 0 var38: 0 ---- !u!1 &1821514178 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1821514180} - - component: {fileID: 1821514179} - m_Layer: 0 - m_Name: TooltipTest - m_TagString: Untagged - m_Icon: {fileID: 2800000, guid: b105bf1fb7fe62e4baba0ffd7b433e7b, type: 3} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1821514179 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1821514178} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: abfd755f360ea2942b5e99ed9a8a386e, type: 3} - m_Name: - m_EditorClassIdentifier: - tooltipTest: 0 - inlinedEditor: {fileID: 0} ---- !u!4 &1821514180 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1821514178} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 8 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1953917836 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1953917838} - - component: {fileID: 1953917837} - - component: {fileID: 1953917840} - - component: {fileID: 1953917839} - m_Layer: 0 - m_Name: SerializeReferenceTest (1) - m_TagString: Untagged - m_Icon: {fileID: 2800000, guid: b105bf1fb7fe62e4baba0ffd7b433e7b, type: 3} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1953917837 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1953917836} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a0323e91bfeae1c488545bee770d3fa7, type: 3} - m_Name: - m_EditorClassIdentifier: - reference: - id: 0 - references: - version: 1 - 00000000: - type: {class: SampleReference2, ns: , asm: Assembly-CSharp} - data: - var1: 1.36 - var2: 1.04 ---- !u!4 &1953917838 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1953917836} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 22 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1953917839 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1953917836} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a0323e91bfeae1c488545bee770d3fa7, type: 3} - m_Name: - m_EditorClassIdentifier: - reference: - id: 0 - references: - version: 1 - 00000000: - type: {class: SampleReference1, ns: , asm: Assembly-CSharp} - data: - var1: 0 - var2: 0 ---- !u!114 &1953917840 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1953917836} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a0323e91bfeae1c488545bee770d3fa7, type: 3} - m_Name: - m_EditorClassIdentifier: - reference: - id: 0 - references: - version: 1 - 00000000: - type: {class: SampleReference1, ns: , asm: Assembly-CSharp} - data: - var1: 0 - var2: 0 --- !u!1 &1972418676 GameObject: m_ObjectHideFlags: 0 @@ -1389,7 +1254,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 16 + m_RootOrder: 15 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &2033477348 GameObject: @@ -1449,7 +1314,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 15 + m_RootOrder: 14 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &2113405571 GameObject: diff --git a/Assets/Examples/Scripts/SampleReferenceTest.cs b/Assets/Examples/Scripts/SampleReferenceTest.cs index cadaf566..5ed68045 100644 --- a/Assets/Examples/Scripts/SampleReferenceTest.cs +++ b/Assets/Examples/Scripts/SampleReferenceTest.cs @@ -2,7 +2,7 @@ public class SampleReferenceTest : MonoBehaviour { - [TypeConstraint(typeof(Interface1))] + [TypeConstraint(typeof(Interface1), AddTextSearchField = true)] public SerializedType type1; [TypeConstraint(typeof(Interface1), TypeSettings = TypeSettings.Interface)] public SerializedType type2; From c430a086656293e841a73e167decf1a3021fba42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mi=C5=82osz=20Matkowski?= Date: Wed, 4 May 2022 23:45:12 +0200 Subject: [PATCH 27/32] Minor refactor changes --- .../Editor/Internal/TypeField.cs | 14 +++++- .../Editor/Internal/TypesCachedCollection.cs | 39 +++++++++++++++ ....cs.meta => TypesCachedCollection.cs.meta} | 0 .../Editor/Internal/TypesCollection.cs | 19 ------- .../Editor/Internal/TypesEditorCollection.cs | 11 ++++ .../Internal/TypesEditorCollection.cs.meta | 11 ++++ .../Editor/Internal/TypesGroupInfo.cs | 14 +++--- .../Editor/Utilities/TypeUtilities.cs | 50 ++++++++++--------- Assets/Examples/Scenes/SampleScene.unity | 6 +-- 9 files changed, 111 insertions(+), 53 deletions(-) create mode 100644 Assets/Editor Toolbox/Editor/Internal/TypesCachedCollection.cs rename Assets/Editor Toolbox/Editor/Internal/{TypesCollection.cs.meta => TypesCachedCollection.cs.meta} (100%) delete mode 100644 Assets/Editor Toolbox/Editor/Internal/TypesCollection.cs create mode 100644 Assets/Editor Toolbox/Editor/Internal/TypesEditorCollection.cs create mode 100644 Assets/Editor Toolbox/Editor/Internal/TypesEditorCollection.cs.meta diff --git a/Assets/Editor Toolbox/Editor/Internal/TypeField.cs b/Assets/Editor Toolbox/Editor/Internal/TypeField.cs index c36d65da..81590304 100644 --- a/Assets/Editor Toolbox/Editor/Internal/TypeField.cs +++ b/Assets/Editor Toolbox/Editor/Internal/TypeField.cs @@ -9,6 +9,8 @@ namespace Toolbox.Editor.Internal //TODO: refactor public class TypeField { + // Constraint -> ConstraintContext + // Appearance -> AppearanceContext private TypeConstraint constraint; private TypeAppearance appearance; @@ -40,7 +42,7 @@ private Type RetriveSelectedType(IReadOnlyList types, int selectedIndex, b public void OnGui(Rect position, bool addSearchField, Type activeType) { var info = TypeUtilities.GetGroupedInfo(Appearance); - var values = info.Types; + var values = info.Values; var labels = info.Labels; var index = info.IndexOf(activeType); @@ -93,6 +95,16 @@ public TypeConstraint Constraint public TypeAppearance Appearance { get => appearance; + set + { + if (value == null) + { + throw new NullReferenceException($"Cannot assign null appearance to the {nameof(TypeField)}."); + } + + appearance = value; + Constraint = appearance.Constraint; + } } public Action OnSelect { get; set; } diff --git a/Assets/Editor Toolbox/Editor/Internal/TypesCachedCollection.cs b/Assets/Editor Toolbox/Editor/Internal/TypesCachedCollection.cs new file mode 100644 index 00000000..4a95798e --- /dev/null +++ b/Assets/Editor Toolbox/Editor/Internal/TypesCachedCollection.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections; +using System.Collections.Generic; + +namespace Toolbox.Editor.Internal +{ + public class TypesCachedCollection : IEnumerable + { + private readonly List values; + + + public TypesCachedCollection() : this(new List()) + { } + + public TypesCachedCollection(List values) + { + this.values = values; + } + + + public int IndexOf(Type type) + { + return values.IndexOf(type); + } + + public IEnumerator GetEnumerator() + { + return values.GetEnumerator(); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return values.GetEnumerator(); + } + + + public IReadOnlyList Values => values; + } +} \ No newline at end of file diff --git a/Assets/Editor Toolbox/Editor/Internal/TypesCollection.cs.meta b/Assets/Editor Toolbox/Editor/Internal/TypesCachedCollection.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Editor/Internal/TypesCollection.cs.meta rename to Assets/Editor Toolbox/Editor/Internal/TypesCachedCollection.cs.meta diff --git a/Assets/Editor Toolbox/Editor/Internal/TypesCollection.cs b/Assets/Editor Toolbox/Editor/Internal/TypesCollection.cs deleted file mode 100644 index 919f244b..00000000 --- a/Assets/Editor Toolbox/Editor/Internal/TypesCollection.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; - -namespace Toolbox.Editor.Internal -{ - public class TypesCollection : IEnumerable - { - public IEnumerator GetEnumerator() - { - throw new NotImplementedException(); - } - - IEnumerator IEnumerable.GetEnumerator() - { - throw new NotImplementedException(); - } - } -} \ No newline at end of file diff --git a/Assets/Editor Toolbox/Editor/Internal/TypesEditorCollection.cs b/Assets/Editor Toolbox/Editor/Internal/TypesEditorCollection.cs new file mode 100644 index 00000000..bc5353bf --- /dev/null +++ b/Assets/Editor Toolbox/Editor/Internal/TypesEditorCollection.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; + +namespace Toolbox.Editor.Internal +{ + public class TypesEditorCollection : TypesCachedCollection + { + public TypesEditorCollection(List values) : base(values) + { } + } +} \ No newline at end of file diff --git a/Assets/Editor Toolbox/Editor/Internal/TypesEditorCollection.cs.meta b/Assets/Editor Toolbox/Editor/Internal/TypesEditorCollection.cs.meta new file mode 100644 index 00000000..9534b36b --- /dev/null +++ b/Assets/Editor Toolbox/Editor/Internal/TypesEditorCollection.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 51cefceaf65b2ea479dd3abb2c3db1c5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Toolbox/Editor/Internal/TypesGroupInfo.cs b/Assets/Editor Toolbox/Editor/Internal/TypesGroupInfo.cs index 5944613c..c0f7a335 100644 --- a/Assets/Editor Toolbox/Editor/Internal/TypesGroupInfo.cs +++ b/Assets/Editor Toolbox/Editor/Internal/TypesGroupInfo.cs @@ -9,24 +9,25 @@ namespace Toolbox.Editor.Internal public class TypesGroupInfo { private readonly string[] options; - private readonly List types; + private readonly TypesCachedCollection types; private readonly TypeGrouping grouping; private readonly TypeConstraint constraint; private readonly bool addEmptyValue; - public TypesGroupInfo(TypeConstraint constraint, List types, bool addEmptyValue = true, TypeGrouping grouping = TypeGrouping.None) + public TypesGroupInfo(TypeConstraint constraint, TypesCachedCollection types, bool addEmptyValue = true, TypeGrouping grouping = TypeGrouping.None) { this.constraint = constraint; this.types = types; this.addEmptyValue = addEmptyValue; this.grouping = grouping; - var count = types.Count; + var values = types.Values; + var count = values.Count; var shift = 0; if (addEmptyValue) { - shift = 1; + shift += 1; count += 1; options = new string[count]; options[0] = ""; @@ -36,10 +37,9 @@ public TypesGroupInfo(TypeConstraint constraint, List types, bool addEmpty options = new string[count]; } - for (var i = 0; i < count - shift; i++) { - var type = types[i]; + var type = values[i]; var name = FormatGroupedTypeName(type, grouping); options[i + shift] = name; } @@ -94,6 +94,6 @@ public int IndexOf(Type type) public string[] Labels => options; - public IReadOnlyList Types => types; + public IReadOnlyList Values => types.Values; } } \ No newline at end of file diff --git a/Assets/Editor Toolbox/Editor/Utilities/TypeUtilities.cs b/Assets/Editor Toolbox/Editor/Utilities/TypeUtilities.cs index 8456ecb4..7f61f2ee 100644 --- a/Assets/Editor Toolbox/Editor/Utilities/TypeUtilities.cs +++ b/Assets/Editor Toolbox/Editor/Utilities/TypeUtilities.cs @@ -12,75 +12,79 @@ namespace Toolbox.Editor //TODO: refactor public static class TypeUtilities { - public static readonly Dictionary> cachedTypes = new Dictionary>(); - public static readonly Dictionary cachedInfo = new Dictionary(); - public static readonly Dictionary managedReferenceTypes = new Dictionary(); + private static readonly Dictionary cachedCollections = new Dictionary(); + private static readonly Dictionary editorCollections = new Dictionary(); + private static readonly Dictionary cachedInfo = new Dictionary(); + private static readonly Dictionary referenceTypesByNames = new Dictionary(); - public static List GetTypes(Type parentType) + + public static TypesCachedCollection GetCollection(Type parentType) { - return GetTypes(new TypeConstraint(parentType)); + return GetCollection(new TypeConstraint(parentType)); } - public static List GetTypes(TypeConstraint constraint) + public static TypesCachedCollection GetCollection(TypeConstraint constraint) { var key = constraint.GetHashCode(); - if (cachedTypes.TryGetValue(key, out var types)) + if (cachedCollections.TryGetValue(key, out var cachedCollection)) { - return types; + return cachedCollection; } var parentType = constraint.TargetType; if (parentType == null) { - return new List(); + return new TypesCachedCollection(); } - var collection = TypeCache.GetTypesDerivedFrom(parentType); - types = collection.ToList(); - for (var i = types.Count - 1; i >= 0; i--) + var typesCache = TypeCache.GetTypesDerivedFrom(parentType); + var typesList = typesCache.ToList(); + for (var i = typesList.Count - 1; i >= 0; i--) { - var type = types[i]; + var type = typesList[i]; if (constraint.IsSatisfied(type)) { continue; } - types.RemoveAt(i); + typesList.RemoveAt(i); } - return cachedTypes[key] = types; + return cachedCollections[key] = new TypesCachedCollection(typesList); } + [Obsolete] public static TypesGroupInfo GetGroupedInfo(Type parentType) { return GetGroupedInfo(new TypeConstraint(parentType), true, TypeGrouping.None); } + [Obsolete] public static TypesGroupInfo GetGroupedInfo(TypeConstraint constraint, bool addEmptyValue, TypeGrouping grouping) { - var types = GetTypes(constraint); + var types = GetCollection(constraint); return new TypesGroupInfo(constraint, types, addEmptyValue, grouping); } - public static TypesGroupInfo GetGroupedInfo(TypeAppearance settings) + public static TypesGroupInfo GetGroupedInfo(TypeAppearance appearance) { - var key = settings.GetHashCode(); + var key = appearance.GetHashCode(); if (cachedInfo.TryGetValue(key, out var info)) { return info; } else { - var types = GetTypes(settings.Constraint); - return cachedInfo[key] = new TypesGroupInfo(settings.Constraint, types, - settings.AddEmptyValue, settings.Grouping); + var types = GetCollection(appearance.Constraint); + return cachedInfo[key] = new TypesGroupInfo(appearance.Constraint, types, + appearance.AddEmptyValue, appearance.Grouping); } } public static bool TryGetTypeFromManagedReferenceFullTypeName(string managedReferenceFullTypeName, out Type managedReferenceInstanceType) { - if (managedReferenceTypes.TryGetValue(managedReferenceFullTypeName, out managedReferenceInstanceType)) + if (referenceTypesByNames.TryGetValue(managedReferenceFullTypeName, out managedReferenceInstanceType)) { return true; } @@ -90,7 +94,7 @@ public static bool TryGetTypeFromManagedReferenceFullTypeName(string managedRefe ? Type.GetType($"{parts[1]}, {parts[0]}") : null; if (managedReferenceInstanceType != null) { - managedReferenceTypes[managedReferenceFullTypeName] = managedReferenceInstanceType; + referenceTypesByNames[managedReferenceFullTypeName] = managedReferenceInstanceType; return true; } diff --git a/Assets/Examples/Scenes/SampleScene.unity b/Assets/Examples/Scenes/SampleScene.unity index aa7dd799..8c9208e9 100644 --- a/Assets/Examples/Scenes/SampleScene.unity +++ b/Assets/Examples/Scenes/SampleScene.unity @@ -619,7 +619,7 @@ MonoBehaviour: type1: typeReference: Interface4`1, Assembly-CSharp type2: - typeReference: Interface2, Assembly-CSharp + typeReference: Interface3, Assembly-CSharp type3: typeReference: ClassWithInterface, Assembly-CSharp reference: @@ -629,8 +629,8 @@ MonoBehaviour: 00000000: type: {class: SampleReference1, ns: , asm: Assembly-CSharp} data: - var1: 0 - var2: 0 + var1: 0.68 + var2: 1 --- !u!4 &752799893 Transform: m_ObjectHideFlags: 0 From 7f71b6f7315e657dce4683b5f76c9485c1a6da18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mi=C5=82osz=20Matkowski?= Date: Sat, 7 May 2022 13:11:21 +0200 Subject: [PATCH 28/32] Minor refactor changes to the types-related scripts --- .../Drawers/Regular/SerializedTypeDrawer.cs | 4 +- .../Editor/Internal/TypeAppearance.cs | 42 -------- .../Editor/Internal/TypeAppearanceContext.cs | 42 ++++++++ ....cs.meta => TypeAppearanceContext.cs.meta} | 2 +- .../Editor/Internal/TypeConstraint.cs.meta | 11 --- ...Constraint.cs => TypeConstraintContext.cs} | 6 +- ....cs.meta => TypeConstraintContext.cs.meta} | 2 +- .../Internal/TypeConstraintReference.cs | 2 +- .../Editor/Internal/TypeConstraintStandard.cs | 2 +- .../Editor/Internal/TypeField.cs | 55 +++++------ .../Editor/Internal/TypesCachedCollection.cs | 6 +- .../Editor/Internal/TypesEditorCollection.cs | 95 +++++++++++++++++- .../Editor/Internal/TypesGroupInfo.cs | 99 ------------------- .../Editor/Utilities/TypeUtilities.cs | 47 +++------ .../Regular/TypeConstraintAttribute.cs | 61 ++++++++++++ .../Attributes/Regular/TypeGrouping.cs | 55 ----------- .../Attributes/Regular/TypeGrouping.cs.meta | 11 --- .../Attributes/Regular/TypeSettings.cs | 11 --- .../Attributes/Regular/TypeSettings.cs.meta | 11 --- 19 files changed, 246 insertions(+), 318 deletions(-) delete mode 100644 Assets/Editor Toolbox/Editor/Internal/TypeAppearance.cs create mode 100644 Assets/Editor Toolbox/Editor/Internal/TypeAppearanceContext.cs rename Assets/Editor Toolbox/Editor/Internal/{TypesGroupInfo.cs.meta => TypeAppearanceContext.cs.meta} (83%) delete mode 100644 Assets/Editor Toolbox/Editor/Internal/TypeConstraint.cs.meta rename Assets/Editor Toolbox/Editor/Internal/{TypeConstraint.cs => TypeConstraintContext.cs} (83%) rename Assets/Editor Toolbox/Editor/Internal/{TypeAppearance.cs.meta => TypeConstraintContext.cs.meta} (83%) delete mode 100644 Assets/Editor Toolbox/Editor/Internal/TypesGroupInfo.cs delete mode 100644 Assets/Editor Toolbox/Scripts/Attributes/Regular/TypeGrouping.cs delete mode 100644 Assets/Editor Toolbox/Scripts/Attributes/Regular/TypeGrouping.cs.meta delete mode 100644 Assets/Editor Toolbox/Scripts/Attributes/Regular/TypeSettings.cs delete mode 100644 Assets/Editor Toolbox/Scripts/Attributes/Regular/TypeSettings.cs.meta diff --git a/Assets/Editor Toolbox/Editor/Drawers/Regular/SerializedTypeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Regular/SerializedTypeDrawer.cs index a074b0c6..48b6fd5a 100644 --- a/Assets/Editor Toolbox/Editor/Drawers/Regular/SerializedTypeDrawer.cs +++ b/Assets/Editor Toolbox/Editor/Drawers/Regular/SerializedTypeDrawer.cs @@ -12,7 +12,7 @@ namespace Toolbox.Editor.Drawers public sealed class SerializedTypeDrawer : PropertyDrawerBase { private static readonly TypeConstraintStandard sharedConstraint = new TypeConstraintStandard(); - private static readonly TypeAppearance sharedAppearance = new TypeAppearance(sharedConstraint, TypeGrouping.None, true); + private static readonly TypeAppearanceContext sharedAppearance = new TypeAppearanceContext(sharedConstraint, TypeGrouping.None, true); private static readonly TypeField typeField = new TypeField(sharedConstraint, sharedAppearance); @@ -58,7 +58,7 @@ private void UpdateConstraint(TypeConstraintAttribute attribute) private void UpdateAppearance(TypeConstraintAttribute attribute) { - sharedAppearance.Grouping = attribute.TypeGrouping; + sharedAppearance.TypeGrouping = attribute.TypeGrouping; } diff --git a/Assets/Editor Toolbox/Editor/Internal/TypeAppearance.cs b/Assets/Editor Toolbox/Editor/Internal/TypeAppearance.cs deleted file mode 100644 index f3d234d9..00000000 --- a/Assets/Editor Toolbox/Editor/Internal/TypeAppearance.cs +++ /dev/null @@ -1,42 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -namespace Toolbox.Editor.Internal -{ - //TODO: refactor - public class TypeAppearance - { - public TypeAppearance(TypeConstraint constraint) : this(constraint, TypeGrouping.None, true) - { } - - public TypeAppearance(TypeConstraint constraint, TypeGrouping grouping, bool addEmptyValue) - { - Constraint = constraint; - Grouping = grouping; - AddEmptyValue = addEmptyValue; - } - - - public override bool Equals(object other) - { - return other is TypeAppearance settings && - Grouping == settings.Grouping && - EqualityComparer.Default.Equals(Constraint, settings.Constraint) && - AddEmptyValue == settings.AddEmptyValue; - } - - public override int GetHashCode() - { - var hashCode = -8527728; - hashCode = hashCode * -1521134295 + Grouping.GetHashCode(); - hashCode = hashCode * -1521134295 + EqualityComparer.Default.GetHashCode(Constraint); - hashCode = hashCode * -1521134295 + AddEmptyValue.GetHashCode(); - return hashCode; - } - - - public TypeConstraint Constraint { get; set; } - public TypeGrouping Grouping { get; set; } - public bool AddEmptyValue { get; set; } - } -} \ No newline at end of file diff --git a/Assets/Editor Toolbox/Editor/Internal/TypeAppearanceContext.cs b/Assets/Editor Toolbox/Editor/Internal/TypeAppearanceContext.cs new file mode 100644 index 00000000..c8322ddc --- /dev/null +++ b/Assets/Editor Toolbox/Editor/Internal/TypeAppearanceContext.cs @@ -0,0 +1,42 @@ +using System.Collections.Generic; + +using UnityEngine; + +namespace Toolbox.Editor.Internal +{ + public class TypeAppearanceContext + { + public TypeAppearanceContext(TypeConstraintContext constraint) : this(constraint, TypeGrouping.None, true) + { } + + public TypeAppearanceContext(TypeConstraintContext constraint, TypeGrouping typeGrouping, bool addEmptyValue) + { + Constraint = constraint; + TypeGrouping = typeGrouping; + AddEmptyValue = addEmptyValue; + } + + + public override bool Equals(object other) + { + return other is TypeAppearanceContext appearance && + EqualityComparer.Default.Equals(Constraint, appearance.Constraint) && + TypeGrouping == appearance.TypeGrouping && + AddEmptyValue == appearance.AddEmptyValue; + } + + public override int GetHashCode() + { + var hashCode = -8527728; + hashCode = hashCode * -1521134295 + EqualityComparer.Default.GetHashCode(Constraint); + hashCode = hashCode * -1521134295 + TypeGrouping.GetHashCode(); + hashCode = hashCode * -1521134295 + AddEmptyValue.GetHashCode(); + return hashCode; + } + + + public TypeConstraintContext Constraint { get; set; } + public TypeGrouping TypeGrouping { get; set; } + public bool AddEmptyValue { get; set; } + } +} \ No newline at end of file diff --git a/Assets/Editor Toolbox/Editor/Internal/TypesGroupInfo.cs.meta b/Assets/Editor Toolbox/Editor/Internal/TypeAppearanceContext.cs.meta similarity index 83% rename from Assets/Editor Toolbox/Editor/Internal/TypesGroupInfo.cs.meta rename to Assets/Editor Toolbox/Editor/Internal/TypeAppearanceContext.cs.meta index 7271fc8a..d4bac0ed 100644 --- a/Assets/Editor Toolbox/Editor/Internal/TypesGroupInfo.cs.meta +++ b/Assets/Editor Toolbox/Editor/Internal/TypeAppearanceContext.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 4e2c636642ede1340892894ce93e86e7 +guid: 7fda8e70563fab94ca8aa551a1d83dc0 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/Editor Toolbox/Editor/Internal/TypeConstraint.cs.meta b/Assets/Editor Toolbox/Editor/Internal/TypeConstraint.cs.meta deleted file mode 100644 index e34720ee..00000000 --- a/Assets/Editor Toolbox/Editor/Internal/TypeConstraint.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 55638a3b7b220d3428d5b48c5c7292de -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Editor Toolbox/Editor/Internal/TypeConstraint.cs b/Assets/Editor Toolbox/Editor/Internal/TypeConstraintContext.cs similarity index 83% rename from Assets/Editor Toolbox/Editor/Internal/TypeConstraint.cs rename to Assets/Editor Toolbox/Editor/Internal/TypeConstraintContext.cs index 6ba0cc44..244428d0 100644 --- a/Assets/Editor Toolbox/Editor/Internal/TypeConstraint.cs +++ b/Assets/Editor Toolbox/Editor/Internal/TypeConstraintContext.cs @@ -3,12 +3,12 @@ namespace Toolbox.Editor.Internal { - public class TypeConstraint + public class TypeConstraintContext { protected Type targetType; - public TypeConstraint(Type targetType) + public TypeConstraintContext(Type targetType) { this.targetType = targetType; } @@ -26,7 +26,7 @@ public virtual void ApplyTarget(Type type) public override bool Equals(object obj) { - return obj is TypeConstraint constraint && + return obj is TypeConstraintContext constraint && EqualityComparer.Default.Equals(targetType, constraint.targetType); } diff --git a/Assets/Editor Toolbox/Editor/Internal/TypeAppearance.cs.meta b/Assets/Editor Toolbox/Editor/Internal/TypeConstraintContext.cs.meta similarity index 83% rename from Assets/Editor Toolbox/Editor/Internal/TypeAppearance.cs.meta rename to Assets/Editor Toolbox/Editor/Internal/TypeConstraintContext.cs.meta index 75b54940..1d35d43d 100644 --- a/Assets/Editor Toolbox/Editor/Internal/TypeAppearance.cs.meta +++ b/Assets/Editor Toolbox/Editor/Internal/TypeConstraintContext.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: f1a815b391c465f4396792283bed792e +guid: 118c19767a8066a47a7f2330c22d7c22 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/Editor Toolbox/Editor/Internal/TypeConstraintReference.cs b/Assets/Editor Toolbox/Editor/Internal/TypeConstraintReference.cs index c233fe0a..dace68fe 100644 --- a/Assets/Editor Toolbox/Editor/Internal/TypeConstraintReference.cs +++ b/Assets/Editor Toolbox/Editor/Internal/TypeConstraintReference.cs @@ -5,7 +5,7 @@ namespace Toolbox.Editor.Internal { - public class TypeConstraintReference : TypeConstraint + public class TypeConstraintReference : TypeConstraintContext { public TypeConstraintReference(Type targetType) : base(targetType) { } diff --git a/Assets/Editor Toolbox/Editor/Internal/TypeConstraintStandard.cs b/Assets/Editor Toolbox/Editor/Internal/TypeConstraintStandard.cs index b71836b0..404c51bf 100644 --- a/Assets/Editor Toolbox/Editor/Internal/TypeConstraintStandard.cs +++ b/Assets/Editor Toolbox/Editor/Internal/TypeConstraintStandard.cs @@ -4,7 +4,7 @@ namespace Toolbox.Editor.Internal { - public class TypeConstraintStandard : TypeConstraint + public class TypeConstraintStandard : TypeConstraintContext { public TypeConstraintStandard() : base(null) { } diff --git a/Assets/Editor Toolbox/Editor/Internal/TypeField.cs b/Assets/Editor Toolbox/Editor/Internal/TypeField.cs index 81590304..1604af65 100644 --- a/Assets/Editor Toolbox/Editor/Internal/TypeField.cs +++ b/Assets/Editor Toolbox/Editor/Internal/TypeField.cs @@ -6,25 +6,25 @@ namespace Toolbox.Editor.Internal { - //TODO: refactor + /// + /// Out-of-the-box field that can be used as a picker. + /// public class TypeField { - // Constraint -> ConstraintContext - // Appearance -> AppearanceContext - private TypeConstraint constraint; - private TypeAppearance appearance; + private TypeConstraintContext constraintContext; + private TypeAppearanceContext appearanceContext; public TypeField() : this(null, null) { } - public TypeField(TypeConstraint constraint) : this(constraint, null) + public TypeField(TypeConstraintContext constraintContext) : this(constraintContext, null) { } - public TypeField(TypeConstraint constraint, TypeAppearance appearance) + public TypeField(TypeConstraintContext constraintContext, TypeAppearanceContext appearanceContext) { - this.constraint = constraint ?? new TypeConstraintStandard(null, TypeSettings.Class, false, false); - this.appearance = appearance ?? new TypeAppearance(this.constraint, TypeGrouping.None , true); + this.constraintContext = constraintContext ?? new TypeConstraintStandard(null, TypeSettings.Class, false, false); + this.appearanceContext = appearanceContext ?? new TypeAppearanceContext(this.constraintContext, TypeGrouping.None, true); } @@ -41,12 +41,12 @@ private Type RetriveSelectedType(IReadOnlyList types, int selectedIndex, b public void OnGui(Rect position, bool addSearchField, Type activeType) { - var info = TypeUtilities.GetGroupedInfo(Appearance); - var values = info.Values; - var labels = info.Labels; - var index = info.IndexOf(activeType); + var collection = TypeUtilities.GetCollection(AppearanceContext); + var values = collection.Values; + var labels = collection.Labels; + var index = collection.IndexOf(activeType); - var addEmptyValue = Appearance.AddEmptyValue; + var addEmptyValue = AppearanceContext.AddEmptyValue; if (addSearchField) { var buttonLabel = new GUIContent(labels[index]); @@ -73,37 +73,28 @@ public void OnGui(Rect position, bool addSearchField, Type activeType) public void OnGui(Rect position, bool addSearchField, Type activeType, Type parentType) { - Constraint.ApplyTarget(parentType); + ConstraintContext.ApplyTarget(parentType); OnGui(position, addSearchField, activeType); } - public TypeConstraint Constraint + public TypeConstraintContext ConstraintContext { - get => constraint; + get => constraintContext; set { - if (value == null) - { - throw new NullReferenceException($"Cannot assign null constraint to the {nameof(TypeField)}."); - } - - Appearance.Constraint = constraint = value; + constraintContext = value ?? throw new NullReferenceException($"Cannot assign null constraint to the {nameof(TypeField)}."); + AppearanceContext.Constraint = constraintContext; } } - public TypeAppearance Appearance + public TypeAppearanceContext AppearanceContext { - get => appearance; + get => appearanceContext; set { - if (value == null) - { - throw new NullReferenceException($"Cannot assign null appearance to the {nameof(TypeField)}."); - } - - appearance = value; - Constraint = appearance.Constraint; + appearanceContext = value ?? throw new NullReferenceException($"Cannot assign null appearance to the {nameof(TypeField)}."); + ConstraintContext = appearanceContext.Constraint; } } diff --git a/Assets/Editor Toolbox/Editor/Internal/TypesCachedCollection.cs b/Assets/Editor Toolbox/Editor/Internal/TypesCachedCollection.cs index 4a95798e..8fe0137f 100644 --- a/Assets/Editor Toolbox/Editor/Internal/TypesCachedCollection.cs +++ b/Assets/Editor Toolbox/Editor/Internal/TypesCachedCollection.cs @@ -9,7 +9,7 @@ public class TypesCachedCollection : IEnumerable private readonly List values; - public TypesCachedCollection() : this(new List()) + public TypesCachedCollection() : this(new List()) { } public TypesCachedCollection(List values) @@ -18,7 +18,7 @@ public TypesCachedCollection(List values) } - public int IndexOf(Type type) + public virtual int IndexOf(Type type) { return values.IndexOf(type); } @@ -35,5 +35,7 @@ IEnumerator IEnumerable.GetEnumerator() public IReadOnlyList Values => values; + + public static implicit operator List(TypesCachedCollection collection) => collection.values; } } \ No newline at end of file diff --git a/Assets/Editor Toolbox/Editor/Internal/TypesEditorCollection.cs b/Assets/Editor Toolbox/Editor/Internal/TypesEditorCollection.cs index bc5353bf..e6522257 100644 --- a/Assets/Editor Toolbox/Editor/Internal/TypesEditorCollection.cs +++ b/Assets/Editor Toolbox/Editor/Internal/TypesEditorCollection.cs @@ -1,11 +1,102 @@ using System; -using System.Collections.Generic; + +using UnityEngine; namespace Toolbox.Editor.Internal { public class TypesEditorCollection : TypesCachedCollection { - public TypesEditorCollection(List values) : base(values) + private readonly bool hasEmptyValue; + private string[] labels; + + + public TypesEditorCollection(TypesCachedCollection cachedCollection) + : this(cachedCollection, true) + { } + + public TypesEditorCollection(TypesCachedCollection cachedCollection, bool hasEmptyValue) + : this(cachedCollection, hasEmptyValue, TypeGrouping.None) { } + + public TypesEditorCollection(TypesCachedCollection cachedCollection, bool hasEmptyValue, TypeGrouping grouping) + : base(cachedCollection) + { + this.hasEmptyValue = hasEmptyValue; + CreateLabels(grouping); + } + + + private void CreateLabels(TypeGrouping grouping) + { + var count = Values.Count; + var shift = 0; + if (hasEmptyValue) + { + shift += 1; + count += 1; + labels = new string[count]; + labels[0] = ""; + } + else + { + labels = new string[count]; + } + + for (var i = 0; i < count - shift; i++) + { + var type = Values[i]; + var name = FormatGroupedTypeName(type, grouping); + labels[i + shift] = name; + } + } + + private static string FormatGroupedTypeName(Type type, TypeGrouping grouping) + { + var name = type.FullName; + switch (grouping) + { + default: + case TypeGrouping.None: + return name; + + case TypeGrouping.ByNamespace: + return name.Replace('.', '/'); + + case TypeGrouping.ByNamespaceFlat: + var lastPeriodIndex = name.LastIndexOf('.'); + if (lastPeriodIndex != -1) + { + name = name.Substring(0, lastPeriodIndex) + "/" + name.Substring(lastPeriodIndex + 1); + } + + return name; + + case TypeGrouping.ByAddComponentMenu: + var addComponentMenuAttributes = type.GetCustomAttributes(typeof(AddComponentMenu), false); + if (addComponentMenuAttributes.Length == 1) + { + return ((AddComponentMenu)addComponentMenuAttributes[0]).componentMenu; + } + + return "Scripts/" + type.FullName.Replace('.', '/'); + } + } + + + public override int IndexOf(Type type) + { + var index = -1; + if (type != null) + { + index = base.IndexOf(type); + } + + return hasEmptyValue + ? index + 1 + : index; + } + + + public string[] Labels => labels; } } \ No newline at end of file diff --git a/Assets/Editor Toolbox/Editor/Internal/TypesGroupInfo.cs b/Assets/Editor Toolbox/Editor/Internal/TypesGroupInfo.cs deleted file mode 100644 index c0f7a335..00000000 --- a/Assets/Editor Toolbox/Editor/Internal/TypesGroupInfo.cs +++ /dev/null @@ -1,99 +0,0 @@ -using System; -using System.Collections.Generic; - -using UnityEngine; - -namespace Toolbox.Editor.Internal -{ - //TODO: refactor - public class TypesGroupInfo - { - private readonly string[] options; - private readonly TypesCachedCollection types; - private readonly TypeGrouping grouping; - private readonly TypeConstraint constraint; - private readonly bool addEmptyValue; - - - public TypesGroupInfo(TypeConstraint constraint, TypesCachedCollection types, bool addEmptyValue = true, TypeGrouping grouping = TypeGrouping.None) - { - this.constraint = constraint; - this.types = types; - this.addEmptyValue = addEmptyValue; - this.grouping = grouping; - - var values = types.Values; - var count = values.Count; - var shift = 0; - if (addEmptyValue) - { - shift += 1; - count += 1; - options = new string[count]; - options[0] = ""; - } - else - { - options = new string[count]; - } - - for (var i = 0; i < count - shift; i++) - { - var type = values[i]; - var name = FormatGroupedTypeName(type, grouping); - options[i + shift] = name; - } - } - - - private static string FormatGroupedTypeName(Type type, TypeGrouping grouping) - { - var name = type.FullName; - switch (grouping) - { - default: - case TypeGrouping.None: - return name; - - case TypeGrouping.ByNamespace: - return name.Replace('.', '/'); - - case TypeGrouping.ByNamespaceFlat: - var lastPeriodIndex = name.LastIndexOf('.'); - if (lastPeriodIndex != -1) - { - name = name.Substring(0, lastPeriodIndex) + "/" + name.Substring(lastPeriodIndex + 1); - } - - return name; - - case TypeGrouping.ByAddComponentMenu: - var addComponentMenuAttributes = type.GetCustomAttributes(typeof(AddComponentMenu), false); - if (addComponentMenuAttributes.Length == 1) - { - return ((AddComponentMenu)addComponentMenuAttributes[0]).componentMenu; - } - - return "Scripts/" + type.FullName.Replace('.', '/'); - } - } - - - public int IndexOf(Type type) - { - var index = -1; - if (type != null) - { - index = types.IndexOf(type); - } - - return addEmptyValue - ? index + 1 - : index; - } - - - public string[] Labels => options; - public IReadOnlyList Values => types.Values; - } -} \ No newline at end of file diff --git a/Assets/Editor Toolbox/Editor/Utilities/TypeUtilities.cs b/Assets/Editor Toolbox/Editor/Utilities/TypeUtilities.cs index 7f61f2ee..3d6cf628 100644 --- a/Assets/Editor Toolbox/Editor/Utilities/TypeUtilities.cs +++ b/Assets/Editor Toolbox/Editor/Utilities/TypeUtilities.cs @@ -3,33 +3,29 @@ using System.Linq; using UnityEditor; -using UnityEngine; namespace Toolbox.Editor { using Toolbox.Editor.Internal; - //TODO: refactor public static class TypeUtilities { - private static readonly Dictionary cachedCollections = new Dictionary(); - private static readonly Dictionary editorCollections = new Dictionary(); - - private static readonly Dictionary cachedInfo = new Dictionary(); - private static readonly Dictionary referenceTypesByNames = new Dictionary(); + internal static readonly Dictionary cachedCollections = new Dictionary(); + internal static readonly Dictionary editorCollections = new Dictionary(); + internal static readonly Dictionary referenceTypesByNames = new Dictionary(); public static TypesCachedCollection GetCollection(Type parentType) { - return GetCollection(new TypeConstraint(parentType)); + return GetCollection(new TypeConstraintContext(parentType)); } - public static TypesCachedCollection GetCollection(TypeConstraint constraint) + public static TypesCachedCollection GetCollection(TypeConstraintContext constraint) { var key = constraint.GetHashCode(); - if (cachedCollections.TryGetValue(key, out var cachedCollection)) + if (cachedCollections.TryGetValue(key, out var collection)) { - return cachedCollection; + return collection; } var parentType = constraint.TargetType; @@ -54,32 +50,17 @@ public static TypesCachedCollection GetCollection(TypeConstraint constraint) return cachedCollections[key] = new TypesCachedCollection(typesList); } - [Obsolete] - public static TypesGroupInfo GetGroupedInfo(Type parentType) - { - return GetGroupedInfo(new TypeConstraint(parentType), true, TypeGrouping.None); - } - - [Obsolete] - public static TypesGroupInfo GetGroupedInfo(TypeConstraint constraint, bool addEmptyValue, TypeGrouping grouping) - { - var types = GetCollection(constraint); - return new TypesGroupInfo(constraint, types, addEmptyValue, grouping); - } - - public static TypesGroupInfo GetGroupedInfo(TypeAppearance appearance) + public static TypesEditorCollection GetCollection(TypeAppearanceContext appearance) { var key = appearance.GetHashCode(); - if (cachedInfo.TryGetValue(key, out var info)) + if (editorCollections.TryGetValue(key, out var collection)) { - return info; - } - else - { - var types = GetCollection(appearance.Constraint); - return cachedInfo[key] = new TypesGroupInfo(appearance.Constraint, types, - appearance.AddEmptyValue, appearance.Grouping); + return collection; } + + var types = GetCollection(appearance.Constraint); + return editorCollections[key] = new TypesEditorCollection(types, + appearance.AddEmptyValue, appearance.TypeGrouping); } public static bool TryGetTypeFromManagedReferenceFullTypeName(string managedReferenceFullTypeName, out Type managedReferenceInstanceType) diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Regular/TypeConstraintAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Regular/TypeConstraintAttribute.cs index 8eb4f416..0a29e184 100644 --- a/Assets/Editor Toolbox/Scripts/Attributes/Regular/TypeConstraintAttribute.cs +++ b/Assets/Editor Toolbox/Scripts/Attributes/Regular/TypeConstraintAttribute.cs @@ -100,4 +100,65 @@ public ClassImplementsAttribute(Type interfaceType) : base(interfaceType) TypeSettings = TypeSettings.Class; } } + + /// + /// Indicates what kind of s are accepted by the filtering system. + /// + [Flags] + public enum TypeSettings + { + Class = 1, + Interface = 2 + } + + /// + /// Indicates how selectable classes should be collated in drop-down menu. + /// + public enum TypeGrouping + { + /// + /// No grouping, just show type names in a list; for instance, "Some.Nested.Namespace.SpecialClass". + /// + None, + /// + /// Group classes by namespace and show foldout menus for nested namespaces; for + /// instance, "Some > Nested > Namespace > SpecialClass". + /// + ByNamespace, + /// + /// Group classes by namespace; for instance, "Some.Nested.Namespace > SpecialClass". + /// + ByNamespaceFlat, + /// + /// Group classes in the same way as Unity does for its component menu. This + /// grouping method must only be used for types. + /// + ByAddComponentMenu, + } + + /// + /// Indicates how selectable classes should be collated in drop-down menu. + /// + [Obsolete("Use TypeGrouping instead.")] + public enum ClassGrouping + { + /// + /// No grouping, just show type names in a list; for instance, "Some.Nested.Namespace.SpecialClass". + /// + None, + /// + /// Group classes by namespace and show foldout menus for nested namespaces; for + /// instance, "Some > Nested > Namespace > SpecialClass". + /// + ByNamespace, + /// + /// Group classes by namespace; for instance, "Some.Nested.Namespace > SpecialClass". + /// + ByNamespaceFlat, + /// + /// Group classes in the same way as Unity does for its component menu. This + /// grouping method must only be used for types. + /// + ByAddComponentMenu, + } } \ No newline at end of file diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Regular/TypeGrouping.cs b/Assets/Editor Toolbox/Scripts/Attributes/Regular/TypeGrouping.cs deleted file mode 100644 index 637d3566..00000000 --- a/Assets/Editor Toolbox/Scripts/Attributes/Regular/TypeGrouping.cs +++ /dev/null @@ -1,55 +0,0 @@ -using System; - -namespace UnityEngine -{ - /// - /// Indicates how selectable classes should be collated in drop-down menu. - /// - public enum TypeGrouping - { - /// - /// No grouping, just show type names in a list; for instance, "Some.Nested.Namespace.SpecialClass". - /// - None, - /// - /// Group classes by namespace and show foldout menus for nested namespaces; for - /// instance, "Some > Nested > Namespace > SpecialClass". - /// - ByNamespace, - /// - /// Group classes by namespace; for instance, "Some.Nested.Namespace > SpecialClass". - /// - ByNamespaceFlat, - /// - /// Group classes in the same way as Unity does for its component menu. This - /// grouping method must only be used for types. - /// - ByAddComponentMenu, - } - - /// - /// Indicates how selectable classes should be collated in drop-down menu. - /// - [Obsolete("Use TypeGrouping instead.")] - public enum ClassGrouping - { - /// - /// No grouping, just show type names in a list; for instance, "Some.Nested.Namespace.SpecialClass". - /// - None, - /// - /// Group classes by namespace and show foldout menus for nested namespaces; for - /// instance, "Some > Nested > Namespace > SpecialClass". - /// - ByNamespace, - /// - /// Group classes by namespace; for instance, "Some.Nested.Namespace > SpecialClass". - /// - ByNamespaceFlat, - /// - /// Group classes in the same way as Unity does for its component menu. This - /// grouping method must only be used for types. - /// - ByAddComponentMenu, - } -} \ No newline at end of file diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Regular/TypeGrouping.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Regular/TypeGrouping.cs.meta deleted file mode 100644 index 942c4271..00000000 --- a/Assets/Editor Toolbox/Scripts/Attributes/Regular/TypeGrouping.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 014909f1ed98e9f4e9cf5b5850e44e35 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Regular/TypeSettings.cs b/Assets/Editor Toolbox/Scripts/Attributes/Regular/TypeSettings.cs deleted file mode 100644 index 3fa2dc35..00000000 --- a/Assets/Editor Toolbox/Scripts/Attributes/Regular/TypeSettings.cs +++ /dev/null @@ -1,11 +0,0 @@ -using System; - -namespace UnityEngine -{ - [Flags] - public enum TypeSettings - { - Class = 1, - Interface = 2 - } -} \ No newline at end of file diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Regular/TypeSettings.cs.meta b/Assets/Editor Toolbox/Scripts/Attributes/Regular/TypeSettings.cs.meta deleted file mode 100644 index e5c6101a..00000000 --- a/Assets/Editor Toolbox/Scripts/Attributes/Regular/TypeSettings.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 895a263c3a6e14640bfcd8652591cc36 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: From c2d7aaf59ab2216fac1589398e20bc86079f8b1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mi=C5=82osz=20Matkowski?= Date: Sat, 7 May 2022 13:57:22 +0200 Subject: [PATCH 29/32] Fix types selection in multiple fields --- .../Drawers/Regular/SerializedTypeDrawer.cs | 35 ++++++++++++------- .../ReferencePickerAttributeDrawer.cs | 5 ++- .../Editor/Internal/TypeField.cs | 17 +++++---- 3 files changed, 34 insertions(+), 23 deletions(-) diff --git a/Assets/Editor Toolbox/Editor/Drawers/Regular/SerializedTypeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Regular/SerializedTypeDrawer.cs index 48b6fd5a..963d20a1 100644 --- a/Assets/Editor Toolbox/Editor/Drawers/Regular/SerializedTypeDrawer.cs +++ b/Assets/Editor Toolbox/Editor/Drawers/Regular/SerializedTypeDrawer.cs @@ -11,7 +11,7 @@ namespace Toolbox.Editor.Drawers [CustomPropertyDrawer(typeof(SerializedType))] public sealed class SerializedTypeDrawer : PropertyDrawerBase { - private static readonly TypeConstraintStandard sharedConstraint = new TypeConstraintStandard(); + private static readonly TypeConstraintContext sharedConstraint = new TypeConstraintStandard(); private static readonly TypeAppearanceContext sharedAppearance = new TypeAppearanceContext(sharedConstraint, TypeGrouping.None, true); private static readonly TypeField typeField = new TypeField(sharedConstraint, sharedAppearance); @@ -51,9 +51,12 @@ private TypeConstraintAttribute GetDefaultConstraint() private void UpdateConstraint(TypeConstraintAttribute attribute) { sharedConstraint.ApplyTarget(attribute.AssemblyType); - sharedConstraint.AllowAbstract = attribute.AllowAbstract; - sharedConstraint.AllowObsolete = attribute.AllowObsolete; - sharedConstraint.Settings = attribute.TypeSettings; + if (sharedConstraint is TypeConstraintStandard constraint) + { + constraint.AllowAbstract = attribute.AllowAbstract; + constraint.AllowObsolete = attribute.AllowObsolete; + constraint.Settings = attribute.TypeSettings; + } } private void UpdateAppearance(TypeConstraintAttribute attribute) @@ -69,8 +72,6 @@ protected override float GetPropertyHeightSafe(SerializedProperty property, GUIC protected override void OnGUISafe(Rect position, SerializedProperty property, GUIContent label) { - var referenceProperty = property.FindPropertyRelative("typeReference"); - label = EditorGUI.BeginProperty(position, label, property); label = property.name != "data" ? label : GUIContent.none; position = EditorGUI.PrefixLabel(position, label); @@ -79,14 +80,22 @@ protected override void OnGUISafe(Rect position, SerializedProperty property, GU var addSearchField = validAttribute.AddTextSearchField; UpdateConstraint(validAttribute); UpdateAppearance(validAttribute); - typeField.OnSelect = (type) => - { - referenceProperty.serializedObject.Update(); - referenceProperty.stringValue = SerializedType.GetReferenceValue(type); - referenceProperty.serializedObject.ApplyModifiedProperties(); - }; + + var referenceProperty = property.FindPropertyRelative("typeReference"); var activeType = SerializedType.GetReferenceType(referenceProperty.stringValue); - typeField.OnGui(position, addSearchField, activeType); + typeField.OnGui(position, addSearchField, (type) => + { + try + { + referenceProperty.serializedObject.Update(); + referenceProperty.stringValue = SerializedType.GetReferenceValue(type); + referenceProperty.serializedObject.ApplyModifiedProperties(); + } + catch (Exception e) when (e is ArgumentNullException || e is NullReferenceException) + { + ToolboxEditorLog.LogWarning("Invalid attempt to update disposed property."); + } + }, activeType); EditorGUI.EndProperty(); } diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelf/ReferencePickerAttributeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelf/ReferencePickerAttributeDrawer.cs index e4c9f6fc..0b9f1306 100644 --- a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelf/ReferencePickerAttributeDrawer.cs +++ b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelf/ReferencePickerAttributeDrawer.cs @@ -18,7 +18,7 @@ private void CreateTypeProperty(SerializedProperty property) TypeUtilities.TryGetTypeFromManagedReferenceFullTypeName(property.managedReferenceFullTypename, out var currentType); var position = EditorGUILayout.GetControlRect(false, EditorGUIUtility.singleLineHeight); position = EditorGUI.IndentedRect(position); - typeField.OnSelect = (type) => + typeField.OnGui(position, true, (type) => { try { @@ -43,8 +43,7 @@ private void CreateTypeProperty(SerializedProperty property) { ToolboxEditorLog.LogWarning("Invalid attempt to update disposed property."); } - }; - typeField.OnGui(position, true, currentType, propertyType); + }, currentType, propertyType); } private void UpdateTypeProperty(SerializedProperty property, Type referenceType) diff --git a/Assets/Editor Toolbox/Editor/Internal/TypeField.cs b/Assets/Editor Toolbox/Editor/Internal/TypeField.cs index 1604af65..8adcad8d 100644 --- a/Assets/Editor Toolbox/Editor/Internal/TypeField.cs +++ b/Assets/Editor Toolbox/Editor/Internal/TypeField.cs @@ -39,7 +39,12 @@ private Type RetriveSelectedType(IReadOnlyList types, int selectedIndex, b } - public void OnGui(Rect position, bool addSearchField, Type activeType) + public void OnGui(Rect position, bool addSearchField, Action onSelect) + { + OnGui(position, addSearchField, onSelect, null); + } + + public void OnGui(Rect position, bool addSearchField, Action onSelect, Type activeType) { var collection = TypeUtilities.GetCollection(AppearanceContext); var values = collection.Values; @@ -53,7 +58,7 @@ public void OnGui(Rect position, bool addSearchField, Type activeType) ToolboxEditorGui.DrawSearchablePopup(position, buttonLabel, index, labels, (i) => { var type = RetriveSelectedType(values, i, addEmptyValue); - OnSelect?.Invoke(type); + onSelect?.Invoke(type); }); } else @@ -65,16 +70,16 @@ public void OnGui(Rect position, bool addSearchField, Type activeType) if (EditorGUI.EndChangeCheck()) { var type = RetriveSelectedType(values, index, addEmptyValue); - OnSelect?.Invoke(type); + onSelect?.Invoke(type); } } } } - public void OnGui(Rect position, bool addSearchField, Type activeType, Type parentType) + public void OnGui(Rect position, bool addSearchField, Action onSelect, Type activeType, Type parentType) { ConstraintContext.ApplyTarget(parentType); - OnGui(position, addSearchField, activeType); + OnGui(position, addSearchField, onSelect, activeType); } @@ -97,7 +102,5 @@ public TypeAppearanceContext AppearanceContext ConstraintContext = appearanceContext.Constraint; } } - - public Action OnSelect { get; set; } } } \ No newline at end of file From c494fcda9fdf40b5d24948ee93029a47d23d40b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mi=C5=82osz=20Matkowski?= Date: Sat, 7 May 2022 13:57:36 +0200 Subject: [PATCH 30/32] Update settings --- Assets/Editor Toolbox/EditorSettings.asset | 76 +++++++++++----------- 1 file changed, 38 insertions(+), 38 deletions(-) diff --git a/Assets/Editor Toolbox/EditorSettings.asset b/Assets/Editor Toolbox/EditorSettings.asset index e236cecb..0e8d1b0f 100644 --- a/Assets/Editor Toolbox/EditorSettings.asset +++ b/Assets/Editor Toolbox/EditorSettings.asset @@ -48,46 +48,46 @@ MonoBehaviour: iconName: useToolboxDrawers: 1 decoratorDrawerHandlers: - - classReference: Toolbox.Editor.Drawers.BeginGroupAttributeDrawer, Toolbox.Editor - - classReference: Toolbox.Editor.Drawers.BeginHorizontalAttributeDrawer, Toolbox.Editor - - classReference: Toolbox.Editor.Drawers.BeginHorizontalGroupAttributeDrawer, Toolbox.Editor - - classReference: Toolbox.Editor.Drawers.BeginIndentAttributeDrawer, Toolbox.Editor - - classReference: Toolbox.Editor.Drawers.DynamicHelpAttributeDrawer, Toolbox.Editor - - classReference: Toolbox.Editor.Drawers.EditorButtonAttributeDrawer, Toolbox.Editor - - classReference: Toolbox.Editor.Drawers.EndGroupAttributeDrawer, Toolbox.Editor - - classReference: Toolbox.Editor.Drawers.EndHorizontalAttributeDrawer, Toolbox.Editor - - classReference: Toolbox.Editor.Drawers.EndHorizontalGroupAttributeDrawer, Toolbox.Editor - - classReference: Toolbox.Editor.Drawers.EndIndentAttributeDrawer, Toolbox.Editor - - classReference: Toolbox.Editor.Drawers.GuiColorAttributeDrawer, Toolbox.Editor - - classReference: Toolbox.Editor.Drawers.HelpAttributeDrawer, Toolbox.Editor - - classReference: Toolbox.Editor.Drawers.HighlightAttributeDrawer, Toolbox.Editor - - classReference: Toolbox.Editor.Drawers.ImageAreaAttributeDrawer, Toolbox.Editor - - classReference: Toolbox.Editor.Drawers.IndentAreaAttributeDrawer, Toolbox.Editor - - classReference: Toolbox.Editor.Drawers.LabelAttributeDrawer, Toolbox.Editor - - classReference: Toolbox.Editor.Drawers.LineAttributeDrawer, Toolbox.Editor - - classReference: Toolbox.Editor.Drawers.SpaceAreaAttributeDrawer, Toolbox.Editor + - typeReference: Toolbox.Editor.Drawers.BeginGroupAttributeDrawer, Toolbox.Editor + - typeReference: Toolbox.Editor.Drawers.BeginHorizontalAttributeDrawer, Toolbox.Editor + - typeReference: Toolbox.Editor.Drawers.BeginHorizontalGroupAttributeDrawer, Toolbox.Editor + - typeReference: Toolbox.Editor.Drawers.BeginIndentAttributeDrawer, Toolbox.Editor + - typeReference: Toolbox.Editor.Drawers.DynamicHelpAttributeDrawer, Toolbox.Editor + - typeReference: Toolbox.Editor.Drawers.EditorButtonAttributeDrawer, Toolbox.Editor + - typeReference: Toolbox.Editor.Drawers.EndGroupAttributeDrawer, Toolbox.Editor + - typeReference: Toolbox.Editor.Drawers.EndHorizontalAttributeDrawer, Toolbox.Editor + - typeReference: Toolbox.Editor.Drawers.EndHorizontalGroupAttributeDrawer, Toolbox.Editor + - typeReference: Toolbox.Editor.Drawers.EndIndentAttributeDrawer, Toolbox.Editor + - typeReference: Toolbox.Editor.Drawers.GuiColorAttributeDrawer, Toolbox.Editor + - typeReference: Toolbox.Editor.Drawers.HelpAttributeDrawer, Toolbox.Editor + - typeReference: Toolbox.Editor.Drawers.HighlightAttributeDrawer, Toolbox.Editor + - typeReference: Toolbox.Editor.Drawers.ImageAreaAttributeDrawer, Toolbox.Editor + - typeReference: Toolbox.Editor.Drawers.IndentAreaAttributeDrawer, Toolbox.Editor + - typeReference: Toolbox.Editor.Drawers.LabelAttributeDrawer, Toolbox.Editor + - typeReference: Toolbox.Editor.Drawers.LineAttributeDrawer, Toolbox.Editor + - typeReference: Toolbox.Editor.Drawers.SpaceAreaAttributeDrawer, Toolbox.Editor conditionDrawerHandlers: - - classReference: Toolbox.Editor.Drawers.DisableAttributeDrawer, Toolbox.Editor - - classReference: Toolbox.Editor.Drawers.DisableIfAttributeDrawer, Toolbox.Editor - - classReference: Toolbox.Editor.Drawers.DisableInPlayModeAttributeDrawer, Toolbox.Editor - - classReference: Toolbox.Editor.Drawers.EnableIfAttributeDrawer, Toolbox.Editor - - classReference: Toolbox.Editor.Drawers.HideAttributeDrawer, Toolbox.Editor - - classReference: Toolbox.Editor.Drawers.HideDisabledIfAttributeDrawer, Toolbox.Editor - - classReference: Toolbox.Editor.Drawers.HideIfAttributeDrawer, Toolbox.Editor - - classReference: Toolbox.Editor.Drawers.ShowDisabledIfAttributeDrawer, Toolbox.Editor - - classReference: Toolbox.Editor.Drawers.ShowIfAttributeDrawer, Toolbox.Editor - - classReference: Toolbox.Editor.Drawers.ShowWarningIfAttributeDrawer, Toolbox.Editor + - typeReference: Toolbox.Editor.Drawers.DisableAttributeDrawer, Toolbox.Editor + - typeReference: Toolbox.Editor.Drawers.DisableIfAttributeDrawer, Toolbox.Editor + - typeReference: Toolbox.Editor.Drawers.DisableInPlayModeAttributeDrawer, Toolbox.Editor + - typeReference: Toolbox.Editor.Drawers.EnableIfAttributeDrawer, Toolbox.Editor + - typeReference: Toolbox.Editor.Drawers.HideAttributeDrawer, Toolbox.Editor + - typeReference: Toolbox.Editor.Drawers.HideDisabledIfAttributeDrawer, Toolbox.Editor + - typeReference: Toolbox.Editor.Drawers.HideIfAttributeDrawer, Toolbox.Editor + - typeReference: Toolbox.Editor.Drawers.ShowDisabledIfAttributeDrawer, Toolbox.Editor + - typeReference: Toolbox.Editor.Drawers.ShowIfAttributeDrawer, Toolbox.Editor + - typeReference: Toolbox.Editor.Drawers.ShowWarningIfAttributeDrawer, Toolbox.Editor selfPropertyDrawerHandlers: - - classReference: Toolbox.Editor.Drawers.DynamicMinMaxSliderAttributeDrawer, Toolbox.Editor - - classReference: Toolbox.Editor.Drawers.DynamicRangeAttributeDrawer, Toolbox.Editor - - classReference: Toolbox.Editor.Drawers.IgnoreParentAttributeDrawer, Toolbox.Editor - - classReference: Toolbox.Editor.Drawers.InLineEditorAttributeDrawer, Toolbox.Editor - - classReference: Toolbox.Editor.Drawers.ReferencePickerAttributeDrawer, Toolbox.Editor - - classReference: Toolbox.Editor.Drawers.RegexValueAttributeDrawer, Toolbox.Editor + - typeReference: Toolbox.Editor.Drawers.DynamicMinMaxSliderAttributeDrawer, Toolbox.Editor + - typeReference: Toolbox.Editor.Drawers.DynamicRangeAttributeDrawer, Toolbox.Editor + - typeReference: Toolbox.Editor.Drawers.IgnoreParentAttributeDrawer, Toolbox.Editor + - typeReference: Toolbox.Editor.Drawers.InLineEditorAttributeDrawer, Toolbox.Editor + - typeReference: Toolbox.Editor.Drawers.ReferencePickerAttributeDrawer, Toolbox.Editor + - typeReference: Toolbox.Editor.Drawers.RegexValueAttributeDrawer, Toolbox.Editor listPropertyDrawerHandlers: - - classReference: Toolbox.Editor.Drawers.ReorderableListAttributeDrawer, Toolbox.Editor - - classReference: Toolbox.Editor.Drawers.ReorderableListExposedAttributeDrawer, + - typeReference: Toolbox.Editor.Drawers.ReorderableListAttributeDrawer, Toolbox.Editor + - typeReference: Toolbox.Editor.Drawers.ReorderableListExposedAttributeDrawer, Toolbox.Editor - - classReference: Toolbox.Editor.Drawers.ScrollableItemsAttributeDrawer, Toolbox.Editor + - typeReference: Toolbox.Editor.Drawers.ScrollableItemsAttributeDrawer, Toolbox.Editor targetTypeDrawerHandlers: - - classReference: Toolbox.Editor.Drawers.SerializedDictionaryDrawer, Toolbox.Editor + - typeReference: Toolbox.Editor.Drawers.SerializedDictionaryDrawer, Toolbox.Editor From 00a26d25c438b7c8c722a19ac7909597c13bfb44 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mi=C5=82osz=20Matkowski?= Date: Sat, 7 May 2022 15:19:58 +0200 Subject: [PATCH 31/32] Add tests related to types filtering & caching --- .../Editor/Internal/TypesCachedCollection.cs | 5 + .../Editor/Utilities/TypeUtilities.cs | 8 + .../Tests/Editor/ExtractionTest.cs | 3 +- .../Tests/Editor/PropertyUtilitesTest.cs | 3 +- .../Tests/Editor/ReorderableListTest.cs | 3 +- .../Tests/Editor/SerializationTest.cs | 3 +- .../Tests/Editor/TypesFilteringTest.cs | 175 ++++++++++++++++++ .../Tests/Editor/TypesFilteringTest.cs.meta | 11 ++ Assets/Examples/Scenes/SampleScene.unity | 17 +- .../Examples/Scripts/SampleReferenceTest.cs | 19 +- 10 files changed, 230 insertions(+), 17 deletions(-) create mode 100644 Assets/Editor Toolbox/Tests/Editor/TypesFilteringTest.cs create mode 100644 Assets/Editor Toolbox/Tests/Editor/TypesFilteringTest.cs.meta diff --git a/Assets/Editor Toolbox/Editor/Internal/TypesCachedCollection.cs b/Assets/Editor Toolbox/Editor/Internal/TypesCachedCollection.cs index 8fe0137f..2a37ffd6 100644 --- a/Assets/Editor Toolbox/Editor/Internal/TypesCachedCollection.cs +++ b/Assets/Editor Toolbox/Editor/Internal/TypesCachedCollection.cs @@ -23,6 +23,11 @@ public virtual int IndexOf(Type type) return values.IndexOf(type); } + public virtual bool Contains(Type type) + { + return values.Contains(type); + } + public IEnumerator GetEnumerator() { return values.GetEnumerator(); diff --git a/Assets/Editor Toolbox/Editor/Utilities/TypeUtilities.cs b/Assets/Editor Toolbox/Editor/Utilities/TypeUtilities.cs index 3d6cf628..d2cc2c4f 100644 --- a/Assets/Editor Toolbox/Editor/Utilities/TypeUtilities.cs +++ b/Assets/Editor Toolbox/Editor/Utilities/TypeUtilities.cs @@ -15,6 +15,14 @@ public static class TypeUtilities internal static readonly Dictionary referenceTypesByNames = new Dictionary(); + internal static void ClearCache() + { + cachedCollections.Clear(); + editorCollections.Clear(); + referenceTypesByNames.Clear(); + } + + public static TypesCachedCollection GetCollection(Type parentType) { return GetCollection(new TypeConstraintContext(parentType)); diff --git a/Assets/Editor Toolbox/Tests/Editor/ExtractionTest.cs b/Assets/Editor Toolbox/Tests/Editor/ExtractionTest.cs index f79e801f..0bc75784 100644 --- a/Assets/Editor Toolbox/Tests/Editor/ExtractionTest.cs +++ b/Assets/Editor Toolbox/Tests/Editor/ExtractionTest.cs @@ -1,4 +1,5 @@ -using NUnit.Framework; +using NUnit.Framework; + using UnityEditor; using UnityEngine; diff --git a/Assets/Editor Toolbox/Tests/Editor/PropertyUtilitesTest.cs b/Assets/Editor Toolbox/Tests/Editor/PropertyUtilitesTest.cs index e00142d2..81758a51 100644 --- a/Assets/Editor Toolbox/Tests/Editor/PropertyUtilitesTest.cs +++ b/Assets/Editor Toolbox/Tests/Editor/PropertyUtilitesTest.cs @@ -1,4 +1,5 @@ -using NUnit.Framework; +using NUnit.Framework; + using UnityEditor; using UnityEngine; diff --git a/Assets/Editor Toolbox/Tests/Editor/ReorderableListTest.cs b/Assets/Editor Toolbox/Tests/Editor/ReorderableListTest.cs index 1eff88ee..62d54996 100644 --- a/Assets/Editor Toolbox/Tests/Editor/ReorderableListTest.cs +++ b/Assets/Editor Toolbox/Tests/Editor/ReorderableListTest.cs @@ -1,4 +1,5 @@ -using NUnit.Framework; +using NUnit.Framework; + using UnityEditor; using UnityEngine; diff --git a/Assets/Editor Toolbox/Tests/Editor/SerializationTest.cs b/Assets/Editor Toolbox/Tests/Editor/SerializationTest.cs index 5ad1726e..a15de43b 100644 --- a/Assets/Editor Toolbox/Tests/Editor/SerializationTest.cs +++ b/Assets/Editor Toolbox/Tests/Editor/SerializationTest.cs @@ -1,4 +1,5 @@ -using NUnit.Framework; +using NUnit.Framework; + using UnityEditor; using UnityEngine; diff --git a/Assets/Editor Toolbox/Tests/Editor/TypesFilteringTest.cs b/Assets/Editor Toolbox/Tests/Editor/TypesFilteringTest.cs new file mode 100644 index 00000000..49faf14e --- /dev/null +++ b/Assets/Editor Toolbox/Tests/Editor/TypesFilteringTest.cs @@ -0,0 +1,175 @@ +using System; + +using NUnit.Framework; + +using UnityEngine; + +namespace Toolbox.Editor.Tests +{ + using Toolbox.Editor.Internal; + + public class TypesFilteringTest + { + public interface Interface1 { } + public interface Interface2 : Interface1 { } + public interface Interface3 : Interface1 { } + public interface Interface4 : Interface2 { } + public interface Interface4 : Interface3 { } + + public abstract class ClassBase : Interface1 { } + public class ClassWithInterface1 : ClassBase { } + [Obsolete] + public class ClassWithInterface2 : ClassBase { } + public class ClassWithInterface3 : ClassBase { } + + + [TestCase(typeof(ClassBase), 3)] + [TestCase(typeof(Interface1), 6)] + [TestCase(typeof(MonoBehaviour), 2)] + public void TestTypesCachingPass(Type parentType, int count) + { + TypeUtilities.ClearCache(); + for (var i = 0; i < count; i++) + { + TypeUtilities.GetCollection(parentType); + } + + Assert.AreEqual(1, TypeUtilities.cachedCollections.Count); + } + + [Test] + public void TestStandardConstraintPass1() + { + var constraint = new TypeConstraintStandard(typeof(Interface1), TypeSettings.Class, false, false); + var collection = TypeUtilities.GetCollection(constraint); + Assert.IsFalse(collection.Contains(typeof(ClassBase))); + Assert.IsTrue(collection.Contains(typeof(ClassWithInterface1))); +#pragma warning disable CS0612 + Assert.IsFalse(collection.Contains(typeof(ClassWithInterface2))); +#pragma warning restore CS0612 + Assert.IsTrue(collection.Contains(typeof(ClassWithInterface3))); + Assert.IsFalse(collection.Contains(typeof(Interface2))); + Assert.IsFalse(collection.Contains(typeof(Interface3))); + } + + [Test] + public void TestStandardConstraintPass2() + { + var constraint = new TypeConstraintStandard(typeof(Interface1), TypeSettings.Class, true, false); + var collection = TypeUtilities.GetCollection(constraint); + Assert.IsTrue(collection.Contains(typeof(ClassBase))); + Assert.IsTrue(collection.Contains(typeof(ClassWithInterface1))); +#pragma warning disable CS0612 + Assert.IsFalse(collection.Contains(typeof(ClassWithInterface2))); +#pragma warning restore CS0612 + Assert.IsTrue(collection.Contains(typeof(ClassWithInterface3))); + Assert.IsFalse(collection.Contains(typeof(Interface2))); + Assert.IsFalse(collection.Contains(typeof(Interface3))); + } + + [Test] + public void TestStandardConstraintPass3() + { + var constraint = new TypeConstraintStandard(typeof(Interface1), TypeSettings.Class, true, true); + var collection = TypeUtilities.GetCollection(constraint); + Assert.IsTrue(collection.Contains(typeof(ClassBase))); + Assert.IsTrue(collection.Contains(typeof(ClassWithInterface1))); +#pragma warning disable CS0612 + Assert.IsTrue(collection.Contains(typeof(ClassWithInterface2))); +#pragma warning restore CS0612 + Assert.IsTrue(collection.Contains(typeof(ClassWithInterface3))); + Assert.IsFalse(collection.Contains(typeof(Interface2))); + Assert.IsFalse(collection.Contains(typeof(Interface3))); + } + + [Test] + public void TestStandardConstraintPass4() + { + var constraint = new TypeConstraintStandard(typeof(Interface1), TypeSettings.Interface, true, true); + var collection = TypeUtilities.GetCollection(constraint); + Assert.IsFalse(collection.Contains(typeof(ClassBase))); + Assert.IsFalse(collection.Contains(typeof(ClassWithInterface1))); +#pragma warning disable CS0612 + Assert.IsFalse(collection.Contains(typeof(ClassWithInterface2))); +#pragma warning restore CS0612 + Assert.IsFalse(collection.Contains(typeof(ClassWithInterface3))); + Assert.IsTrue(collection.Contains(typeof(Interface2))); + Assert.IsTrue(collection.Contains(typeof(Interface3))); + } + + [Test] + public void TestStandardConstraintPass5() + { + var constraint = new TypeConstraintStandard(typeof(Interface1), TypeSettings.Class | TypeSettings.Interface, true, false); + var collection = TypeUtilities.GetCollection(constraint); + Assert.IsTrue(collection.Contains(typeof(ClassBase))); + Assert.IsTrue(collection.Contains(typeof(ClassWithInterface1))); +#pragma warning disable CS0612 + Assert.IsFalse(collection.Contains(typeof(ClassWithInterface2))); +#pragma warning restore CS0612 + Assert.IsTrue(collection.Contains(typeof(ClassWithInterface3))); + Assert.IsTrue(collection.Contains(typeof(Interface2))); + Assert.IsTrue(collection.Contains(typeof(Interface3))); + } + + [Test] + public void TestStandardConstraintPass6() + { + var constraint = new TypeConstraintStandard(typeof(ClassBase), TypeSettings.Class | TypeSettings.Interface, true, false); + var collection = TypeUtilities.GetCollection(constraint); + Assert.IsFalse(collection.Contains(typeof(ClassBase))); + Assert.IsTrue(collection.Contains(typeof(ClassWithInterface1))); +#pragma warning disable CS0612 + Assert.IsFalse(collection.Contains(typeof(ClassWithInterface2))); +#pragma warning restore CS0612 + Assert.IsTrue(collection.Contains(typeof(ClassWithInterface3))); + Assert.IsFalse(collection.Contains(typeof(Interface2))); + Assert.IsFalse(collection.Contains(typeof(Interface3))); + } + + [Test] + public void TestStandardConstraintPass7() + { + var constraint = new TypeConstraintStandard(typeof(Component), TypeSettings.Class | TypeSettings.Interface, true, false); + var collection = TypeUtilities.GetCollection(constraint); + Assert.IsFalse(collection.Contains(typeof(ClassBase))); + Assert.IsTrue(collection.Contains(typeof(Collider))); + } + + [Test] + public void TestReferenceConstraintPass1() + { + var constraint = new TypeConstraintReference(typeof(Component)); + var collection = TypeUtilities.GetCollection(constraint); + Assert.AreEqual(0, collection.Values.Count); + } + + [Test] + public void TestReferenceConstraintPass2() + { + var constraint = new TypeConstraintReference(typeof(ClassBase)); + var collection = TypeUtilities.GetCollection(constraint); + Assert.IsTrue(collection.Contains(typeof(ClassWithInterface1))); +#pragma warning disable CS0612 + Assert.IsFalse(collection.Contains(typeof(ClassWithInterface2))); +#pragma warning restore CS0612 + Assert.IsTrue(collection.Contains(typeof(ClassWithInterface3))); + Assert.IsFalse(collection.Contains(typeof(Interface2))); + Assert.IsFalse(collection.Contains(typeof(Interface3))); + } + + [Test] + public void TestReferenceConstraintPass3() + { + var constraint = new TypeConstraintReference(typeof(Interface1)); + var collection = TypeUtilities.GetCollection(constraint); + Assert.IsTrue(collection.Contains(typeof(ClassWithInterface1))); +#pragma warning disable CS0612 + Assert.IsFalse(collection.Contains(typeof(ClassWithInterface2))); +#pragma warning restore CS0612 + Assert.IsTrue(collection.Contains(typeof(ClassWithInterface3))); + Assert.IsFalse(collection.Contains(typeof(Interface2))); + Assert.IsFalse(collection.Contains(typeof(Interface3))); + } + } +} \ No newline at end of file diff --git a/Assets/Editor Toolbox/Tests/Editor/TypesFilteringTest.cs.meta b/Assets/Editor Toolbox/Tests/Editor/TypesFilteringTest.cs.meta new file mode 100644 index 00000000..3b82ee6a --- /dev/null +++ b/Assets/Editor Toolbox/Tests/Editor/TypesFilteringTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 53f9360cece7a274e9d7cc2fd41939b9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Examples/Scenes/SampleScene.unity b/Assets/Examples/Scenes/SampleScene.unity index 8c9208e9..a3b8c8bb 100644 --- a/Assets/Examples/Scenes/SampleScene.unity +++ b/Assets/Examples/Scenes/SampleScene.unity @@ -617,20 +617,27 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: type1: - typeReference: Interface4`1, Assembly-CSharp + typeReference: SampleReferenceTest+Interface2, Assembly-CSharp type2: - typeReference: Interface3, Assembly-CSharp + typeReference: SampleReferenceTest+Interface3, Assembly-CSharp type3: - typeReference: ClassWithInterface, Assembly-CSharp + typeReference: SampleReferenceTest+ClassWithInterface, Assembly-CSharp reference: id: 0 + reference2: + id: 1 references: version: 1 00000000: type: {class: SampleReference1, ns: , asm: Assembly-CSharp} data: - var1: 0.68 - var2: 1 + var1: 0 + var2: 0 + 00000001: + type: {class: SampleReference2, ns: , asm: Assembly-CSharp} + data: + var1: 0 + var2: 0 --- !u!4 &752799893 Transform: m_ObjectHideFlags: 0 diff --git a/Assets/Examples/Scripts/SampleReferenceTest.cs b/Assets/Examples/Scripts/SampleReferenceTest.cs index 5ed68045..deec56a8 100644 --- a/Assets/Examples/Scripts/SampleReferenceTest.cs +++ b/Assets/Examples/Scripts/SampleReferenceTest.cs @@ -4,18 +4,21 @@ public class SampleReferenceTest : MonoBehaviour { [TypeConstraint(typeof(Interface1), AddTextSearchField = true)] public SerializedType type1; - [TypeConstraint(typeof(Interface1), TypeSettings = TypeSettings.Interface)] + [TypeConstraint(typeof(Interface1), TypeSettings = TypeSettings.Interface, AddTextSearchField = true)] public SerializedType type2; [ClassExtends(typeof(Interface1))] public SerializedType type3; + [SerializeReference, ReferencePicker] public SampleReferenceBase reference; -} + [SerializeReference, ReferencePicker] + public SampleReferenceBase reference2; -public interface Interface1 { } -public interface Interface2 : Interface1 { } -public interface Interface3 : Interface1 { } -public interface Interface4 : Interface2 { } -public interface Interface4 : Interface3 { } + public interface Interface1 { } + public interface Interface2 : Interface1 { } + public interface Interface3 : Interface1 { } + public interface Interface4 : Interface2 { } + public interface Interface4 : Interface3 { } -public class ClassWithInterface : Interface1 { } \ No newline at end of file + public class ClassWithInterface : Interface1 { } +} \ No newline at end of file From 3dd0b6a3383f62a6b0a7d349484611398cb49a09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mi=C5=82osz=20Matkowski?= Date: Sat, 7 May 2022 15:28:14 +0200 Subject: [PATCH 32/32] Restric ReferencePicker to Unity 2019.3 or higher --- .../Toolbox/PropertySelf/ReferencePickerAttributeDrawer.cs | 6 ++++-- .../PropertySelfAttributes/ReferencePickerAttribute.cs | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelf/ReferencePickerAttributeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelf/ReferencePickerAttributeDrawer.cs index 0b9f1306..cf922084 100644 --- a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelf/ReferencePickerAttributeDrawer.cs +++ b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/PropertySelf/ReferencePickerAttributeDrawer.cs @@ -1,4 +1,5 @@ -using System; +#if UNITY_2019_3_OR_NEWER +using System; using UnityEditor; using UnityEngine; @@ -77,4 +78,5 @@ public override bool IsPropertyValid(SerializedProperty property) return property.propertyType == SerializedPropertyType.ManagedReference; } } -} \ No newline at end of file +} +#endif \ No newline at end of file diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertySelfAttributes/ReferencePickerAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertySelfAttributes/ReferencePickerAttribute.cs index 1a5c7700..eb40407d 100644 --- a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertySelfAttributes/ReferencePickerAttribute.cs +++ b/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertySelfAttributes/ReferencePickerAttribute.cs @@ -1,4 +1,5 @@ -using System; +#if UNITY_2019_3_OR_NEWER +using System; using System.Diagnostics; namespace UnityEngine @@ -12,4 +13,5 @@ namespace UnityEngine [Conditional("UNITY_EDITOR")] public class ReferencePickerAttribute : ToolboxSelfPropertyAttribute { } -} \ No newline at end of file +} +#endif \ No newline at end of file