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/49] 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/49] 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/49] 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/49] 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 f1e235f36261a48acfd7fd2d2be0781dc8a92215 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mi=C5=82osz=20Matkowski?= Date: Sun, 20 Mar 2022 17:38:10 +0100 Subject: [PATCH 05/49] Minor improvements to the ScriptablesListAttribute --- .../ScriptablesListAttribute.cs | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ArchetypeAttributes/ScriptablesListAttribute.cs b/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ArchetypeAttributes/ScriptablesListAttribute.cs index 4588799f..b5c0111c 100644 --- a/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ArchetypeAttributes/ScriptablesListAttribute.cs +++ b/Assets/Editor Toolbox/Scripts/Attributes/ToolboxAttributes/ArchetypeAttributes/ScriptablesListAttribute.cs @@ -14,9 +14,24 @@ public override ToolboxAttribute[] Process() new InLineEditorAttribute(), new ReorderableListAttribute() { - HasLabels = false + Foldable = Foldable, + HasLabels = HasLabels, + HasHeader = HasHeader } }; } + + /// + /// Indicates whether list should be allowed to fold in and out. + /// + public bool Foldable { get; set; } = true; + /// + /// Indicates whether list should have a label above elements. + /// + public bool HasHeader { get; set; } = true; + /// + /// Indicates whether each element should have an additional label. + /// + public bool HasLabels { get; set; } = false; } } \ No newline at end of file From 4f727ec20aa4f8cc1c3d48a84955257ef3568a8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mi=C5=82osz=20Matkowski?= Date: Mon, 21 Mar 2022 23:18:10 +0100 Subject: [PATCH 06/49] Add .editorcondif file --- .editorconfig | 126 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 126 insertions(+) create mode 100644 .editorconfig diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..af9ff34b --- /dev/null +++ b/.editorconfig @@ -0,0 +1,126 @@ +############################### +# Core EditorConfig Options # +############################### +# All files +[*] +indent_style = space +# Code files +[*.{cs,csx,vb,vbx}] +indent_size = 4 +insert_final_newline = false +charset = utf-8-bom +############################### +# .NET Coding Conventions # +############################### +[*.{cs,vb}] +# Organize usings +dotnet_sort_system_directives_first = true +# this. preferences +dotnet_style_qualification_for_field = false:silent +dotnet_style_qualification_for_property = false:silent +dotnet_style_qualification_for_method = false:silent +dotnet_style_qualification_for_event = false:silent +# Language keywords vs BCL types preferences +dotnet_style_predefined_type_for_locals_parameters_members = true:silent +dotnet_style_predefined_type_for_member_access = true:silent +# Parentheses preferences +dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:silent +dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity:silent +dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:silent +dotnet_style_parentheses_in_other_operators = never_if_unnecessary:silent +# Modifier preferences +dotnet_style_require_accessibility_modifiers = for_non_interface_members:silent +dotnet_style_readonly_field = true:suggestion +# Expression-level preferences +dotnet_style_object_initializer = true:suggestion +dotnet_style_collection_initializer = true:suggestion +dotnet_style_explicit_tuple_names = true:suggestion +dotnet_style_null_propagation = true:suggestion +dotnet_style_coalesce_expression = true:suggestion +dotnet_style_prefer_is_null_check_over_reference_equality_method = true:silent +dotnet_style_prefer_inferred_tuple_names = true:suggestion +dotnet_style_prefer_inferred_anonymous_type_member_names = true:suggestion +dotnet_style_prefer_auto_properties = true:silent +dotnet_style_prefer_conditional_expression_over_assignment = true:silent +dotnet_style_prefer_conditional_expression_over_return = true:silent +############################### +# Naming Conventions # +############################### +# Style Definitions +dotnet_naming_style.camel_case_style.capitalization = camel_case +# Use CamelCase for constant fields +dotnet_naming_rule.constant_fields_should_be_camel_case.severity = suggestion +dotnet_naming_rule.constant_fields_should_be_camel_case.symbols = constant_fields +dotnet_naming_rule.constant_fields_should_be_camel_case.style = camel_case_style +dotnet_naming_symbols.constant_fields.applicable_kinds = field +dotnet_naming_symbols.constant_fields.applicable_accessibilities = * +dotnet_naming_symbols.constant_fields.required_modifiers = const +############################### +# C# Coding Conventions # +############################### +[*.cs] +# var preferences +csharp_style_var_for_built_in_types = true:silent +csharp_style_var_when_type_is_apparent = true:silent +csharp_style_var_elsewhere = true:silent +# Expression-bodied members +csharp_style_expression_bodied_methods = false:silent +csharp_style_expression_bodied_constructors = false:silent +csharp_style_expression_bodied_operators = false:silent +csharp_style_expression_bodied_properties = true:silent +csharp_style_expression_bodied_indexers = true:silent +csharp_style_expression_bodied_accessors = true:silent +# Pattern matching preferences +csharp_style_pattern_matching_over_is_with_cast_check = true:suggestion +csharp_style_pattern_matching_over_as_with_null_check = true:suggestion +# Null-checking preferences +csharp_style_throw_expression = true:suggestion +csharp_style_conditional_delegate_call = true:suggestion +# Modifier preferences +csharp_preferred_modifier_order = private,protected,internal,public,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async:suggestion +# Expression-level preferences +csharp_prefer_braces = true:silent +csharp_style_deconstructed_variable_declaration = true:suggestion +csharp_prefer_simple_default_expression = true:suggestion +csharp_style_pattern_local_over_anonymous_function = true:suggestion +csharp_style_inlined_variable_declaration = true:suggestion +############################### +# C# Formatting Rules # +############################### +# New line preferences +csharp_new_line_before_open_brace = all +csharp_new_line_before_else = true +csharp_new_line_before_catch = true +csharp_new_line_before_finally = true +csharp_new_line_before_members_in_object_initializers = true +csharp_new_line_before_members_in_anonymous_types = true +csharp_new_line_between_query_expression_clauses = true +# Indentation preferences +csharp_indent_case_contents = true +csharp_indent_switch_labels = true +csharp_indent_labels = flush_left +# Space preferences +csharp_space_after_cast = false +csharp_space_after_keywords_in_control_flow_statements = true +csharp_space_between_method_call_parameter_list_parentheses = false +csharp_space_between_method_declaration_parameter_list_parentheses = false +csharp_space_between_parentheses = false +csharp_space_before_colon_in_inheritance_clause = true +csharp_space_after_colon_in_inheritance_clause = true +csharp_space_around_binary_operators = before_and_after +csharp_space_between_method_declaration_empty_parameter_list_parentheses = false +csharp_space_between_method_call_name_and_opening_parenthesis = false +csharp_space_between_method_call_empty_parameter_list_parentheses = false +# Wrapping preferences +csharp_preserve_single_line_statements = true +csharp_preserve_single_line_blocks = true + +dotnet_diagnostic.IDE0090.severity = silent + +############################### +# VB Coding Conventions # +############################### + +[*.vb] +# Modifier preferences +visual_basic_preferred_modifier_order = Partial,Default,Private,Protected,Public,Friend,NotOverridable,Overridable,MustOverride,Overloads,Overrides,MustInherit,NotInheritable,Static,Shared,Shadows,ReadOnly,WriteOnly,Dim,Const,WithEvents,Widening,Narrowing,Custom,Async:suggestion From 8f5d822eadd26836c2e5dd1296c21618a811617f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mi=C5=82osz=20Matkowski?= Date: Mon, 21 Mar 2022 23:24:18 +0100 Subject: [PATCH 07/49] Serialize asset path in the SerializedScene class --- .../Scripts/Serialization/SerializedScene.cs | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/Assets/Editor Toolbox/Scripts/Serialization/SerializedScene.cs b/Assets/Editor Toolbox/Scripts/Serialization/SerializedScene.cs index 91da5a09..3ffaf56c 100644 --- a/Assets/Editor Toolbox/Scripts/Serialization/SerializedScene.cs +++ b/Assets/Editor Toolbox/Scripts/Serialization/SerializedScene.cs @@ -6,6 +6,9 @@ namespace UnityEngine { + /// + /// Custom serializable class used to serialize the class. + /// [Serializable] public class SerializedScene : ISerializationCallbackReceiver { @@ -18,6 +21,8 @@ public class SerializedScene : ISerializationCallbackReceiver [SerializeField, HideInInspector] private string sceneName; [SerializeField, HideInInspector] + private string scenePath; + [SerializeField, HideInInspector] private int buildIndex; @@ -29,6 +34,7 @@ void ISerializationCallbackReceiver.OnBeforeSerialize() #if UNITY_EDITOR TryGetBuildIndex(sceneReference, out buildIndex); TryGetSceneName(sceneReference, out sceneName); + TryGetScenePath(sceneReference, out scenePath); #endif } @@ -85,6 +91,18 @@ private static bool TryGetSceneName(SceneAsset sceneAsset, out string name) return true; } + public static bool TryGetScenePath(SceneAsset sceneAsset, out string path) + { + if (sceneAsset == null) + { + path = null; + return false; + } + + path = AssetDatabase.GetAssetPath(sceneAsset); + return true; + } + public SceneAsset SceneReference { @@ -99,6 +117,12 @@ public string SceneName set => sceneName = value; } + public string ScenePath + { + get => scenePath; + set => scenePath = value; + } + public int BuildIndex { get => buildIndex; 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 08/49] 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 09/49] 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 10/49] 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 11/49] 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 8893a551bbe52b7989fce09ae7002d3372aed53b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mi=C5=82osz=20Matkowski?= Date: Sun, 24 Apr 2022 18:18:36 +0200 Subject: [PATCH 12/49] Fix indentation issues while drawing FormattedNumber --- .../Drawers/Regular/FormattedNumberAttributeDrawer.cs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/Assets/Editor Toolbox/Editor/Drawers/Regular/FormattedNumberAttributeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Regular/FormattedNumberAttributeDrawer.cs index 164576bb..c43df3f0 100644 --- a/Assets/Editor Toolbox/Editor/Drawers/Regular/FormattedNumberAttributeDrawer.cs +++ b/Assets/Editor Toolbox/Editor/Drawers/Regular/FormattedNumberAttributeDrawer.cs @@ -6,6 +6,8 @@ namespace Toolbox.Editor.Drawers { + using Toolbox.Editor.Internal; + [CustomPropertyDrawer(typeof(FormattedNumberAttribute))] public class FormattedNumberAttributeDrawer : PropertyDrawerBase { @@ -27,7 +29,7 @@ private bool IsControlEditing(string propertyKey) return EditorGUIUtility.editingTextField && GUI.GetNameOfFocusedControl() == propertyKey; } - private Single GetSingle(SerializedProperty property) + private float GetSingle(SerializedProperty property) { return property.propertyType == SerializedPropertyType.Integer ? property.intValue @@ -62,7 +64,10 @@ protected override void OnGUISafe(Rect position, SerializedProperty property, GU try { - EditorGUI.TextField(position, single.ToString(format, formatInfo)); + using (new ZeroIndentScope()) + { + EditorGUI.TextField(position, single.ToString(format, formatInfo)); + } } catch (FormatException) { 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 13/49] 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 14/49] 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 15/49] 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 16/49] 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 17/49] 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 18/49] 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 19/49] 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 20/49] 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 21/49] 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 zcmZ6z30%x;|2{rWM~)>#p+$u@p-fto655n$(_~LnmPtgiRtiU2v}n;Nv>MZ7O}0>$ zc7#SKOSDLll=f2p>pgj%-}C*yp4WNKY34JZ&wbyY`@Y}T`?{|89b#{5DKScR6obK# zuv%)ioWT%#MgROGj!#&xcKwTg{k>(e&0+@QTIA^djl=Qxu-(fomoP4u$v5H;CAX!^ zZ5WJ$stiUTF7CxgfnOPnJ#!h1rVR{+A(z3Jyz@+sgAu+EcU@*_#u%jkCEvdggHJ~8 zT)KKU{=HQ6k44G0h4?wc%4{)vf7SO7`?yXWcfPjn6FU;9ZWB_t)ivay{9UUEXTup9 z8s$<8LXABxTG>`vUAwjF>bAe7<9N%rFw9?0kzT6%VM-)(tC`fWnU8YK_F@bM=Ro86_~=g74-fY{2J#}wAuRqJz&5*>oW@p^5EO8mMB#;`Z}f?)^&L^yJi|gsh2l;p%WXeNBVk?ZR5c!EQ^3fqTt2-)a8H`F8nh z<@F1E-o=D;V>I2~ct=hnFWn{Yka<{RaB$v0#}#Vgl(`!gwSDw$shqN0Pmk_aQt{@E zT0>I6q4#^=ZCCL>E4ta;mfWvZH!`>Ds;KdYF#@C4zki>X3jK}^I$NNm2-QZdGTb0l9J;Vc5jgP zZ-3eP(o(TfdAX0My)TVB-@26q4ihU^sIAV~*P>8c7#{Ze(%N@yN1Y?G42HTuzuIqJ zrGM84w}Jj1PGlRiulbe>>&$#+)y?g*1T#lj=AuWbIW?iPv?t>sTK9e~q4(E%EARKS z6(>`#QbR+(;Jy22eY z$G*Ic`;D0rObrOr%2gL| z<_>+CwdqN@LW;wr*{jCiKiCmEdHw#yY@w2<<)PO5KehI?f&O^h^=`_}PQQVrY-@ii@ixO@qdSpwTYuUtY(o_h(}j zL`mdfGDUybS8d$%?VC{HymEpLXTrYsyDY~{HO!9coSptWh~`X!^S%!^b~a^P;2B$# z(EBKxUwh(q&zHpQszYyj+sAtcN*YWCd%8az9apY!-hI@uCF=ryckFsNeDYiNN~UP$ z@(uSiv8OEb+h64t%Z^sw_4(N3Lftp(+)P&&h&tnQbi_DKTKdgQ>mTLIw8C2g2K!QT ztcTW5zNMmnto+Ug!q3OlEyUleadl#HMhGy`leaMl-fmQUe3{=H5uBZ z@u^rJ&(Q0t4hZnZXj$m`6cbOb?@rWa4)|Z&CJpo zTooCnnWJtc_UF)Cr1)_t8jUlO*JE2PaXGy3)PHa4wPd-dB_a+dsqEksGz zDq6YW%x>HFhx(d1k;^AN4w4ANe&x(w`44q4UBfE6u3cys>HFi3TC+oG4gL4$$Hy&W zRBg=ml#QfY?7?nb5;e`V=A@;9m2Yg;_=-5umVWxGUr$>d*DWIC!nuPQ^y6%yZPeSPsXzf4ke zQF*F)Sad={!v4<6EtuD{#U*5=u%RUX=lj=K2ubbVE9V{RyqTp(!UPJM{;iD%hf5_PrR(XBP1^m9f zrP{GQKKj9OBdq`?cF|IBo20Z+v-YcLR0zWtwHtr-w(~dfMvs zQe@m|=GT=C{;nQWIj(SUYk#9%fHj8oYDSqVjYM6!oY%dR^4`VMTC28Qp`Hdeecwep zZ1MT$eqZJtyO4CqaA9BNa~{5$KXBGq)VoWVF_-Pvu9ZU=r*<9VmrWAgtqL)XO>f2% z;h5%5s^J3BYx7MS>~9!7Z}Zb&JO3ufp>O0w%UW_Tme`|L8IEaKR6}3*(?j@Euu9ja zT)wPn=<^jzanm$`P=!`tXjYMeuhfsc!GY`|^+f6}riYrq@zZY6w{4y8ywsfU?hSVt z?0tj#typ*=r(d*mLme(Lr+)63ubtf(52Q@`I zlG2;}_5j&=n^|LIb&7d8`J#@jbv^jOY)_+TmdEF}_l7i;Paq)hBe*eWV#WCx)P{AE zLOEM@d=O1&Z&Q|+k%P0JXxxS~KkQGC=hXyqmZB*)&+Fs8x)-M7q=lR2Zhp$0VzmD%|KmTR`-;L>Bf|K--lk0S zS=S;`VU9rmh-gJUX125=C>Ta8_;GvHHP>VO9ZI4#aD;1HT^nhlDbNq3>z1qWuGd~G zQV7Fm>)C%kQ{i220DO?HkWiwIy$Wvpez5(erCV{-GzS+KEx{Yns?HcMtkm~-rS9;1 zq-bdOx*D1&9H=`4b^GxP~8hTO#H?H<}l%oYBOe zBtm1sjiuP0_Z3{-_*h^l7*1RI1lOFl5BSjOeun6pmm!T!yRd~89-F+L+c_meH0Tca zaJSG#zW^Vu+OyV!21qKLdwIS7$Ng^Wd|sM6NmtNFtB+znlhA)Z-lebVjX+iOfEQa` z6PzyR4fNjbt_jPWKJ=NoYl1F<;+|bVq-;O7{xV;z)z{lwYYIwyTkcO@7O(j`e{kIe z+q0>AzP&z{-Eh7)nDe?GD=>UXO4K_4jtc3%kIEP$?G26P=S$GZiGTwUE7u=TIn;Hx znt;h`x$?~KcN)$)tXvrnu$bZ+uuH`^U+3HIXS#39QtX#r&S?^a`gv)v8ymdD819eO zdfktEzw@!gE*fx?f!0Wi->U~ho5okf9_4N}_3L|A9ns>~ut2&?^xWm5eOi!tIh4ZJ z!v3F+Q-9w{P4FHs^gPjmCbVAi^3P2Dn26WC=rjUo-ZJrV3i7+ZJe^sRl=o)6ule@v zm-sy8e4X&t`z`)j0}TNK7hH!fm$Bi_on|o5U0eIRt6Hn^+xHu9)}s@Xo8R5K!gX0^ zRekTkuV_MBnOAZXI@Rmmjtl61d>eREqvn1|(dJ={*b>um#K_rb(%0VF;hJF4*ZU?c00U2{m7HEeOrJ|KO}b-afbS}5sH3u4I0y9reCVQ+X>XqzjSF&e`5G_ z-psfqDdY7&_&A=~_wm3Te=phrRNDKh2NzZ%6uEtVbS$Inb7QsV7^Y2z^r&OE>rbt% z`F{O*S-o$}jA~q(wZFB7qM(&AZ^poZ{<~YApKGP8g7-qnHNhLnQyHc^K_Sg*(GZ6a zSUMeg62Zh0koSY*vx6a=(wSD#^ZUMEuLS^n`r*%=uWopF#Qpfxy}`gATFnjvM{BG7 zCNOQ*5O5>hLA}3oz$*(dUH$O3EBEzcm{VJy*H#0mdiN&|D)Fp@rE#-rV;yZnPR_9W z^5uRB5MFX|w6fLB>O+0|Ys2-+73wEevacI5ZC2=PuhLQQ`}q)C(atZ`iL}Xve&1r! zxB82l;iCrjufY&bR(fvkLfiSD|DB@i!NxT-VNQlCnk)pcf77gxT;T1X}Ku;?(2#KK+?Y6VuJ;lTs-je zxJkP4Bk{y}TWoz=J_4jjGHn!Que~`t0;vvn?#3mm)rm&2V;IT7z_2l==BzD5rX^I^ zl=dBI8UVQ5_IEd*^*;`LyWch89;Y&ElTlAy%*#t_Z?W#{S7O#kIYcYp3CBdENRJf3 z!_oO+zRrPc_mb%OZN)R(3Qx$KJ}8<2=C3ZUzP<#>7=V?7{NUwvt_enK@9p0uf2jL& zD?rkgFQREEwffuZO90(3zdSuX@xE_Y1fYWZm&q$-Em@8uSD1G^Jw0z;t7sL5dSail z1@7OEMA+!}-6g>sjS?W2n&24`!ING5m>pdd#O>W(dP-L!8QHq|`MIga2iwP27^w0x z%oP28E^cqCn6>_3<9YUi@5-xn_+}WiH3?Dds z8)oOmPY(`Lz7Y}7aGc9an7!(%(!s7DQ}cQ&u9Oal`epqIivj(L<{JC%mEZezV=JOU zSks9FeXsT2UsH~Uas;KoMiU8Nt#t9fadGHf|J{i-{)lto?5WNvDy;y;7I@lr!Mv}{ zx2kPvu3X9O^{7f)RQW7XUn|F_aYEkjX0IpclLDGHVRiOahpgud`|@f30#FJ;9~U$= zHKhV8{KzO{6y5urL|x_@?B4A6V|UW59^V+`1dBqlcYMg1>s?p86-f-RPQJibQ0?1d zESC@)!s#9yXc-*P8f)DCV*l@sH_QI?Z)=i&=gf6T3@{GbSMIfi`U)IXd7n*wBOeJ@ zFg}=%-PozTOO=x8(oYw!mstmmQ#^-WT}K1Wuy@v0Z^HF4fLS}3{=MyA-(GXG`m=q` zcF8qr#K^Fc78*A@SX;2;dhEj)?lJ;qnfJ1H7fPSsVP5P$|U3;7x zB=IZmil2(dwry!PiF)S#Uf#$G7M%uNlKZnR#?IpI-e$_s)*q;s9;Y#j$&`@$fh6U` z$NRoT#}yB)dNnlVEQq+-*#7n9OUy@%=4o25c>Y98y2E@;ZTzgIry(g4Xx?yP@7J`{ z`=aHo{jL1`vW>6!4llDgLi!of=4qH6a|B^aS*EoW6%_>zmQ$q>ALo?%QtrESadoc$ z=vyBTZbMcW%hyz3N)*i7R2n-)XRH0iRo7Bqil&B=3ZTI(zi(@+kuyb40D9u3bR$Wg zjFfSQ58Jm?pRuU4%w({?uE=Cy7w+^5QDQQM)MxtD?}d5#f!v^SL+tc5n9Sj-HVK}u zhMv9}{6%?Qz~Gbxdp+^)Utyjq;%Az@MX%W!Oo{qkRh$b22=vm&mTWva6gHNw7V>OH z6GPM9C`5i_-9+QC{{BIOfe#E<+0uq{zCS{cr0q-_xJw*`%r)#J>2^sAnb=A&BpC>c zCTK!kcb8!>XKB%!+|C=61?qqGr@dHd#+sX+tM?;)tU)eqi!AowKu<#&kEaSwVe9ql z;!KIgJCqcTFzJ3MeqW2WF!!g3WKq~1jcF^uGiG+N1K$7NIBQ=a!Z1G{jh1WA6+w@! z504DD>iY4a7U?f?I1KBc`#gzC2X(0$M4S^TrpGUL`BPkVe?^Im{K2m&t%=qBs?_BN zV&hJPOjKL3ogKz0KF703EJVzf5)&WOo!_N`Eh}nc#e}sLIT@Ev1>{CqV!cN0sx36P zv3X`#9Z#FJ(&L*|9+{6Yg0*2T{jN0hzn+^YVz<037!gP7+o1i0X@SliA+jDy>C>=^ z0eqJ~IW;E?ELy%@K(BC5uBi8Q52&Y?o$s#bZ*B3YWcxB?4piW0l&1JJy~>!orR+?) zWu!tY@FdT8h1CrZhvyFUHoo0{>%%~;sE2iCH_SSQjgTLY6j$(;zxQe4y{b*|&aT+| zuYqi_ibM^)P+xr_pnW^`S#UlzZw%9Jx+Y~AgKC7a*>+9)mM5P4`{7MoknEFfg%IkekeVqws(2I8iidot>!TJkEHe7Os zh1tKp^yKZ&jk{)_n7Tku?}HERAQ?s$9Uv#p`h0u+%+l@T0@{~YiF$J|)Y%RfmWb|# zu&mKLEVS$WZacI2U|a1aK`1A+e|w`fL~EswHK>assDQ2BP*{{lZPEL}?aFzIiAHIa z`5{HAQOCM}B@KEapSB-~ce3{O5Q9=jG{aZy$2|RthyyVz<$Tcxde7i5!n6*xhH+fh zyi~E8fW=KbbzIG((OR?5?0LN!p}`w{Sx52jbpO&hMfXZF3l)B?kEaCrn9RJ*`3k<@ zPj;$I`tZH-`c%9yzVfUU7ngc?c%&jH#v=Pci_9uUwP17N_ERCX)%5fNqc8V0kv^?2 z2U$(1p*;6}YEN5y-fWDW#xvv|@su>QzR4TVrCT7K3@0Y0!&lJoEHNHrM8W2S_l*F? zPr1yruZfK}GP3zQ-rc-Jur-c{MRp8Xq=;HV(iZV}oQV-=u-K|o#Z0d@0lVnloAY!{ zRaMnnue{&ox$UXlKOc`n9=1rO%13CEW?!6d^)-5}bOl%(O<&PcboxFbO83>IwVn=K z?M>FiC36Bs%3i``A$(Wf-``+j7l9DM=dJCdW%;!tbLDD9_7|@H0jDyzkK3@@CO%5H zim5?gZ2FeHRA0N}&Uvg9zH&f+tzrx|-XR|M{P)t|?JdYn=6nQ<&DN6BTUy1uUy8w7 zL9d>6$7Zb(i+5P{1X9oM|Mg5ihGMm7hO6izGJ960_T~-t<&CDup|`y%-M{jMQhn~0 zgZ^u7csPmnWPVx%R%JLX4T7`QKO+PBXEcJO=&#obz%KgA7>NDlEwAdV_m2J#hK-QI zPOmH|x##Vt^SW>=g6U_Z+u;Mh`z{!liZ8(8^z)p=SoHD!;6R^fFRqVw!Jf~eW$Rj# zAF`?EOcMf%W=2Lv$T*Y!xy?_42BRvt>zxs|yn7oj6oJT(?^Kt_0+Cci{5hdCqdr8A z=yS%tp^Z1x8(Le$#u;6m%PCJMIi)<;vzu#_?_*|0QH)j$r8u0(awR-wht9Uw7dK!9 zL^%=*hpFfa49kg(=IB+hGwNm|Pl5DGv%b#e(UPADzujAn zu;&f#p(sCOqEJC)W$B%aLtyV>0?hrY;%%f$x3R7?B4M@G%1s>XLi28 z$1H#Kma|T`Ya}_t`6)2-xvDWPznfOpX5#+?{I=6x zQG7dY)=E{ivp&mDOkqxMcF-t&I6_f=uu3W3Xc2-(3{YZWw8}EPZ4GYYlUmZ8X^b>l#*HZ2yg*F)|Ydd(SyHyjdy29p~fM z%R;&Ft#V`E!&@lC+L?+OHuC_xtEnP$?xFtu4mN2{!p#S5h^XB7`r_(c088<8&$XmR z?ILC$Q-A!k1l_*;D_1DGXn&1frfGHgerHv75nltDRB*u5Cz=P6SqVBb4S-_Zz{X&f z7_jGbvGnu#4r$RF9|uV{=Qc%5T~J6c&~oY?_R-v%B3$?Dnb#pl)`jGoH}wWOK3$FW zI)eo>3PT-2%7K4n-3ji%?ZaXtCLJ2=t1bd#m5Mkm_q&0zYFp!uSKZh#DnD@}NKz|~ z_45C=wuG_`Xe>^%8h8gE{X5bMbg-v@GoJaoJlr*mxt-@QlSXXKrEJA*|C- ziFo|JtdeBsy_G7UD;=EdewB@;Uyv@Sc?V<}9(?0xvUa&D@45|MXZqJ5xgAS2bH1i# z7k!#YgsTz1FHPYvx4eSrZCLtRKi6>rTuo8!t4_-_!K!>$_WCt5bVH z=gc$$A&{CgD!9>)@Luv5BB|?0;lOI-8ILkAzrN);t#eOk%PQlNf%uh=ic5snKZ(EK zUl|+7Ez_d?d4lh!!z1#2hHGGNc8f6J{X__T$6l$#JnKahOQrp5TBK@`Vt^kKAgpcm zlN94_@2V}$%0RsGfzqrLkfiZ1x6DLzw*%j=73KR#Q*^D=tH2I8%LrKUB|uTOR-(lO zVcbKac>eaBkZEV2UlD0CuwQ%s&kX^2-qx&@V?|lL+`P>v-exSRf6rF*{eJBjbcAA_ z;qiQ*O{DIrr~Vml)@;C0lHlpU6Yjet# znKlIfD6D6B3i`TQT&5U!r`zlq3;vdJkI)TmbtSF|0kgKS$4!~Lh`r?u_wu?3KQV?* zIbM=z_aeEkQ{A0q5E;-HeA5%%ct+ij#O_w0^Nsz(rXyH#hNobj8EfT2>O^=uI0sc| zuGbJ{vn{99Qv3kfA3e=9$c$9#c;||IpFOnL-u^?l%=_)e;~^Z`^fQS~P)(&F{zxJa z*z{#(p5k6sz(m*}hMi;9ez=c3`crfnv2cX!CsVcf#E7p|Ad5ietrEDT9@F zRRIL86^Z^J)$DwwG*|{{y-0X%Y)yXqI5@lO2`gwF`W?Y9RiRx?6ar|Z_2%~dSQa#P zs)iuUj8(gN6eDm?chB>H9rJ8T(8ihc4p+h7P@?aA;fyzk4qP>HBcjCB6$JXDL7s@{ z=4{Ip>)73nzl&!?DwERO+uNJ1wIDuUCzGO}Zhz;kJR9O{py^f%6^>~*{@^eC{O?2% zwbC4yy_bVID;h42U_9_3{#ykYQ(BnrT4CuCSKHl{y!hxSGCKgB%x->CCc%7`Kvd*F zJ-HBwPbwtxyHlNghh#y7I>%Es9khAl)xTw5InLd@ovxo=LrD$ziOEbGRX855c_uc| z_KY{b(ed|4aOpdz$u!3!j+`mo?z4!ABjyc) zce%pw(9|;yh@xNVvC?wL5W`7rvu_oV^xz6z6GE4ljfm^`_U4LfWIz~4_Aw3IR*FOA zH@3a$#-@(z1)hQeop1<&fuS8DY>gbX9|;c2S4ur2Ey7U4B3xFQ z2!aDsY#}uCyxDBj{A7m|(}sz8mOLF>x35*Cf^m(A)R0mS`+rkn&&RYiEXUbc+5GvV zC(T}pc1vpI^?QR+Tpc%0pk{l9OY8Se7{;4PE7IN}U#G$oD7^Jb@tmI5-wCz#6Qcbt zK2a!@2#}*u2&G1Zv^jz`chU}GSG*I9pUILVc@xSF?zNXM<3#>-+TPJ|;$Y~9 z=n-|uXQHw7s}gmVt>t?uU*|kczPgWpbZJM{V-I8wQrHE3R_j$@TO*+O2Rsdqz!Q*t zD82a@F!(!t<(2iV*OPwFZgx=GT`E%n4y9}zXc=o->vwKw@Lc>_3$iT_KNY;@PZGu+ zMYFvdkB(colxR6#$}lj}cnbRzUjgnVfx{f$%*mL$b!DWW&xn{m{ZOwk3Dcpjka94W zabstRz}KuBbTeY`yf*3+!Y{nCl#9tIOIh0<2j!H@K=ch)0WfmqHtnZKvaA=|Hm}gHBUQ zPGKUo|A1>kHZf?YZ;)aG+I_sxUK9rjnj`KNB7J=Q)npkfW;pdEU1ixRWlMzv?nC5k za!uRaKJ@X=T{0$Xgm z$w$XleWKrmACDf!IDHMdIoZ*e8z23Pw!xE%P3p3qpG7l8C-B3_)|5$}(V#>f%VK}X)K z+$_hm`9kwh+EupgJTwO8q5keHvkv0s>UJmftpodJ#fsrzyIrpwEDMmtc-AYS1NIj1H`$4gm7juN zE%TMyFeAjHdyu}EL|&8-wR2P8FR<~IN=859#(2+rN~@ZmBvuf9s+(>_&g2tFj<+jC4_YYcs!82E()o5 z{W{b`K#X1J4kuQmClF^FlC(za%xm1Il+`>gqe*o5&SZh_%PX zEv(ISE7GHs2hNEx!f$Et6hVxjMcSVzZT*v8j^;f7OSCWOtcg}Gsoat@hj%z25&FfS z2|QiSNaGZmAgcn$4pfFv5qIMdcmnM(L_0jQof0`riHl);UNm~KAq^?n8RTS4zwV#( ztQ}7507Qb+gwW||p~NX=EAJn78Va$=pF;y}$o4_6elU%K@XTJ9p-5D$$IY7ib&*Z=GJWZ|N;I~NkH!6^oISVt@O!15@2>%BK( zAw#+b9g?o7JBRCEe}g&|3I3vp6FH1M#lhwyn)_*@Gt&DK(1T|?rz|=)p`z|IUD_Br z>#|7w&MsnToZ+ip!TYv^ppAin?J8Ief4skA1sb^a?7ojyzU$NlNPp)d zjJP}6Y`)Vf&IqO?)79`O={Q&{zw@~f!EbjzHy%B2OW6rpwVcQ?<{j8=z|@Cd2#8sY z*DiPulDfGr0MG;ZobH$@bCsyYi92#QNA-5QbU&IrikLGBj-1G`<|+cwX5#dHL3NL9 z8+ikonX4X?U#YJ6=rSgB5R|{B8N+%O~*!04)xH6A7oKn4oogF zq~g*00d{Sl!gMtQ`14HrA@gC!-R4o$T%v!PmmN+$h#6ahhfl0<4^0*i)bN2nLOI@f z@9HYIt3l)*f%2vRAj^3r#$DKvVJA%-V|RIcZfvK@VuuiqEa0z2ad*Ii$B=K1T1%ci zVjWVhG4ERwL*;nEHXH<-R`ar>sZh~pgXpz4zkIK)w2tTm-!ZRug3HQ>m(j63a=6F4 zo7*>*#?IV@B#-AGV$X&M5DIeS{n65;XP>8_iMyaAs*%HlrocMy5|v#Y6)WT0=k1-W zwf>C!u6#+71hcg!hc*R@jSU6^Y@VpM-OpAx1IbIEh7#|3hCFksBqi*RuqDZWo3`tV zPT_BUmQdfVp8>Ce{pTIGKZ`TZF0K!4bowuKi7eBuuRMisrpuvg9`3l;T3DAFrfH21 z*#F?JKaVhdjOV%5)ho&Wr|3>&(-0F+|VV}#H zgH0LO2F>dmt78!d0_E@a{kU7;6EtVt?YRd#nxyTJbZHI@(*^Omv+KjYA~1x6b=jE+ z=pgIrYJ5-j?*xnB-2}nViX6485Fx74t}4Kr5J4m+sm|-<4Q!&74Pe)-q1Mtc{m~Dl z61{Q{Xy#5XS%|(EfbFnko9cbXyrnKW*fz5 zaNMUKH$gO)A& z`T4OB2|y_?p%4zMs9oryi?+{Kd#3YYGhO$`3;VuLBtrpYxpjV8(NmG!FA552EIn0J zTYc-p-nD0-s?g|ll+L*?894rvxDloE5lxRKo(4x7?vyc{goW8j;LcnP7u{#Y2uX@94CefmA5SxV+$ zpSF7Uw-yzJO3x}+ICi2fS-Uuhyb7e)`}cLyl}2=>ifcm9PCJYx^r19_GrbDG6PRaG z!5qDR`9YrJD=tEuU35BxqZc&vXPGe;mPMp-=PGYFYVmo3FUAT}`CkC#*l;dy%Fx(_ z&_0s2A8m+%cQ%X@T8LrVh|DuIC&w_cNn;aUfr=_`=I}(1;vlkLK_uQT$c)9qCrl8= zMvI#ugS==ZR08eQ;1DO0|;&F@FD>boH!sqU)$tQD`q|p78 zsNHcT7`Uq^Vfy)W4m}1t(!2E1DDYGpW(0HE%&-80n@Vf3#ds#;?W!PK%I2!>lOGK7 z+}VHE8?AUCK3-UN+D6y?sLh^wtcDkhTobI7F!pA9HqoC9=t+B@>qwi5Zq*O(?^OkS zWJ}yiH<$&QWES}DVrUa-TIg(DEve)SAO1UXV)UWky_GD-Yk>0;!O@43d42LY%QgRJ zk{;9ETApqtDwSZCy3(txs#-Hn^{Wu;;%^!?=RzB!CO!9~qYyCH1{;poDQS z0?w<>=692MtkV<7lwMUE_nv%vu=v5XGm_f>><=e+kRjug2|s1)D@VHm5Hty4&8voR z@zlr1$6@`4ej+mgt<;6T8||+AYN-YgI!%a|41w82b24BVn?ar+?B^Keiz@(d2GEz8 zC2*yv@G=fY1jGbUq*t{)GXQ(Q3v>5hE|ruKH;Mu~+N z61*W#o4Vo!%1H?adt0P=c1a3QIX6|sFOtS&Vc&q>nhuGLoFtUVOIF0LArcn9AauF? zmH1vVBvE>O4VEIF|4jDG#S)7uCJ3({0(lsUiV$u6Bu8g;sZns+WIoR*J4~598EEFL zz3KUC7fQDlOg@Kw{Vm*A<+;j&sATbE4Y+keI9ro}%q(ndY<8rI_BNR679at*m2J6k zDwwRv#3yGXmsal*4}h0`juFC0EBM2O&CAkCfp`UF5WHeQ+*q?7ix*hjt(|6U&ln@Va!Ay9QpLV_$)B0Q>I^kXs$-EJ+E z0~L9LY|JF1k=3F+G7vv?BwIT9*0Z%vYrq-J7h&9T$ht#@xkW!VwRU$2xVbQXVh_JD zMbC2;6*0U7N0Q}tuI=?&FX#PVPH(9ZnOovNZbg01>Z%z(M~(6{W-nsxg>AKL|m!yMteuR11g@OO(9oN={eN$GoX z^(FSWHSK-RW-4H@XjBR9OhD_HW&Lb#0S8-$wIVH)*@FU>A{aMZmd=23_g@_R7V@!h zV7X^3#O~n66ExRmGbPT)Z)U$i*&E4=go!u-GONP80{Y&yrYZhb@0jx5BlFTIvijrK z`pph{+~b*>lJKIY!_>OFMAB0J^DuXNan5^3XBU?w3b81hD9+YOy3q|Iv0Qae*}mnG zjZRg!yj;jbL2w2)DPHf}9M}2J#pAe94ZU&lz>z)$l;D(h#%^#u^eXM0pB_*$P!<1d zP5)O*lTb=%PKPu)QDlBZ97vSuSg7#geWfdNqv>woR_q;U$9whaRX#RAU>3o0D7Up4 z7tV#kvy`p8_y!8A++QRwW+H*h){48)joeDHy1P&x1#p?F+OoZ$h!tmLB3NGYt}o3lQkwBU!E3|Ozf%4~ z%z)6c?VGU56tT#)`{(Cfa5SuBwTns^N2;9}4>H(@C@x&bYQS!zw2y!>QYTO;ZbszgxL}v`2<=?IAIh>D zHa;8Q+1jqA3T$Fa2ndVloVOQKAnsDJW+5ilnv)OTAe=sWj_RVf@R5}cRN)nptoRoB z(X6&@Ycl|Y?zF)wq)Y~3Ds^mjSoMtDhwzlu6djU$kF_?T)pzZOEC~*IQc`!= zCt}G_jn$3qJ)yJMJwIWb#YRGcc_30^PXS&=`OZrQ9e$hMZ3ve+-Db+ zZ&2L_hL6fnPIm!bt5O9f(d;yQP&VX5#lcx6suI2Cm`i*w0Qjj{vxV6ssYfO}+6KE3_LMGtPlX*nOzpccDS z1lCJW&I;7|EmFM?Rf5Z}eJlvr3{+6nGT+mf|K zh!-G5?u9hBgK-p|sJ0NP0jL$RflYYB;n2*@z&`za_Yc|I%Q41VD+F;@T;c$v-AkWn z<(ZsA^Y*7B*;*3?Ycf|{ssW2UUU>B|%`TB^6vZRVfPsEs9o_hK z-d0q&qw;(BT{xL&KYj$4T?cp?LAikYxIa9UzRUH@6Gy4#{Eew45 zn7)Ly#c>iGP^i5zyz@N^70zNBW$@-nlH-lsCuR9vhQzZbe;*=fRt_;^ns=0&naQr% z+u!M_+MSc9dIar``(qCv*HWK_HL?0cqo_uz4yCGVs@xX+xPdDP(i6~|*MloDGU{@4 zWkjPBnc>d>ZGP^W^mcx8)s3*3j=cPM*soXtS4=-*NJ^=l3TP*c$MX!nUA#_}@c;sM zvM@g>7<`9l4FG@KsP)=vM(ml$!qUrNt*PkbJB%CZL{U4aZ~bd4|I*DW4cKHYG5XIJ6jXvv>$Wi$!?;0hKV$w0jNbX&=a9111affgmaafZ z7x07jh|Wep$~0MMFOG5&MqnwJnk`OjOEYh5}e*Y72VRE=W z5($mLnhO#PIUD#f93(2+DFvWAzuR&5 z5;sVy$4cyh1sEBmz&A1PG_lN2bmKIDIlO6`4wW*lKFs&&kOb31gfi7RT!RHEm{ZI! z*$CmmHRoW6$I_KBvO(%Pk)+Ac;c`{4IQRpR1bcXI$KDqVKeXyiR1q*GWNOq#GbFTW zO^M3H0xUb`+ER zsB9*LQ#==V{B_CZgdprSyHHtGh(dv+M3>&}f|8v7C472vk9eSt_rV(2QBZr04QX`E zmqf3!XL;up4So0{;!du{ej3RQIW%BEr6Q<%>RvoeATD`C{75rwLjZ#RxHV8arwN|n_s`%~&b6%y-MrV-sG!xotZ zb3!fIkAn<81&ZbC)Ws&rGVqBl+w`%h@E%Miuu?cTNWN{NSaN9y$J(6zSZx6^gaVzq zGf9&ePArzAN2=^=k#ku@Iusk2%wz~+xx95|x_<8$kC=)I1L;S0BLg**c{BALBnEwc zJ{&=gPq*vO^d<`JhxPx<;A=ya4fYUxAWI|63y@?N_xmvT)A2E8q!ZXeSF#VuYMe+K z!*E){ijjuKCj4W)%J!^W&N4mL>NqTU6u2P^w&R>XQX_7k(r?D#?{rPLIH7`_16Nfg zuKXorBp*Q`n>1?P_DFaOv&%-fdbm|>>7dLJ-Z zA+!j2DpThMY1DsEP%6SNY}qkRD7yAELeYh*tl-SPgMnuz2-%|@Y+j?Vy?V23Fc3r3 zGFM2Mf|5|Gzo2pt*rO&2QCnOL9ry+$fbA#@qZ)apM1SJGeSz|lLiPd&n>D1_&agN! zUihGB|CSNOBbgF|%7U4+fvIgt}9VxK@JD$u!V`|;&4ZClpkst^zB zW-3&q;s9WDe6`}^vtimS)?+nXT?(KrOZ&ABr`(Js_O0%$yi(eKhy3wDkZBa(S33A( z8$53;{%tN%y2!@zb*`>IBCB*1q(>sT5WhT6O6pXP8f_JwPYX2Drh_WWvn@Bwfh$TD zr(qoDip!?2hL!N=u80GV3s>LBhzKTi^SS332(MHR3xG`@V;@%lNi|vcKpg6k%rsug{480zK%}T5p#%bxB@uwCLIF*l_WKWOdk9`q zMv0elI}3(JveP~{Udh_>0w5TDc!_Yd9C1x2D=XtN=x=H)Re)BxOnAK$+(RMwIaS`_ z@Xe+YQPYvs$93{@{wN{^KH|7%yC2n)%*Al+&Z0vlVH^dH=?XpP?XyVpMHeV&;%}OIa*a!&2!ASelp7 zp$nwR_eHOM{GTeP0v&suA1UJMX`(<(9<-=vCkOv0b8f}foohP3EM67!@FEgBIE`7j z<;tbeEWd=m7ZqGT9rXRr`mkW?R}es@0#LL>tvuK0^-dIG=YtS|LY{gZ_ZMSIR4)I1 zAwa}qoY{EW`)1Q_ zo+UX2RIUb5)wQdv`si^gV(N#f*JL~H`PBdyL}m}FY2}D;CH`#y>69vzzYu~7oJeyE zOanS(r52p2vsdsXqJ>D#Iy^#QsjuhjpZ_Vmwq%KIf@)&#j_M*C>~%AF^EN|`iKMy# z)aI-U4t`6bDH3KskRa*CvN9)uTp*r(Gaf)n>5YsoxN%G`xS3hJ!&#WV=5^eCdV5eW zL0o4No!QeFwimqSDDrDy@uwS4m${Z(TRr3wUxC~iME~l?RL9-@`c^K+P;?j9d1r0N zwUR&4E*~W2&DSp3i6{Ui%WVxm1iJWlBek34V+a9QA-kkv;6UfQDU7y4}tB>!c;e%h`TM@xZK^SXUcE+)(K zI=H4>WtWC0i*NlqvC-3z3fd7etCP9wKVYK7QNG4;5&t>zQ1@d+!!Hu)WhcD?!!>J@Eej5o6*R8f!p{(cX-V(~~LT4hu{7-?(8p)M~gDV#$R^hgy-e9IDJad=Ht+ zH^|;In^6~m$S=yasnEn%imy)G7!-;5ND`J0E*!B6#>=adaI>rl!b~E>Mb0!tOk@wz z;7{|hD^3Df+`KvW`LKl{$PQN>eSW%(Cn6FbsdN+;bR+9@f@u5$`mHjUoApeI zx=;z-2Ogei$F{^qT@ly0@%Yq9qbF-3%`ZOh#Plz>QrpzoC%=L0rUM|I9ADEE_>Uh; zuiEby*!%aA!bRucImqG@<6mgbh2&CvlMJgoI zQdYjsFH-CxibeScT@CM|1kEL%_HFFnce-!o(Rp4Q!C@1*MPk7=aBuGsC-LTVJ?Lek(JlG)p*R+g>(y?`?1MUq6Zs+HE=Ckn&~Wq z>s%5bjZlOdBcrW6x%xUo0zxBOg6V94FHQ1w>`VUEwU^HKsYf1w*7ALh$ny8Q=6HvA z6l*di*kTY(q>){W=t2r1I+*}#c|Mlq?pEWGSFd^U4~MGoGLJ)rL%bG*Na)(1ghd+& z*hd#c8O{ev$_GOqAJ(!suyDewMFmJk=0rMt0RKk)g9ImQ&JwFAKIxU53f1pm|6NhV z>0d}_#44=uXt&Pql~y>2B43AwXMTOGV=BVwWQY5(zfhHz6ihtku2v#fB5}Gq2B}tiStxCO(gdi zSsnGs)oU5&mH3C(O%&=t^sTAFy4K==_lG*P~CF)Lbc`0q3$yrFLi;k8S zgTntgIMPE2=4&}?wrOn$ComF+sufRV+PKXhkdWI#2h>5u)QK=`;;-{-VZr~EFm0{{du+Y^^~yAG>)tK4OpEI zMiF3oD?VL{Ps6#YTKF^_pHeYY5eQ#RG#i38&c3M&=kq26a{_BHZ7QFUN&oewL@2=I zM1}#t`qi5^4XOgQ|4xCZVZ=efQL=<3CUr9M*8>c}a`DzYa{;MuzM)jiAI0z!#S5N{JW54Ezthxcy=KO>T_tRW) zb>qbnvB;;&;auW7Wv+0QO&)_O5PJeAG2Fh8a1nehoc&JomZoNhG-8v~4b`#&DZ z>iIf;XZSpM3~LUasFT1A+OykE_k1~gNK_h`3by`E_ub+4Ay|q?^?#Ol3T6&xN<>K< zk$t<>RaO?M7|T^wX~EyRR~`O~(@n*~Wpy=d4eDcI;dpMtrqLk}768K}a8i?mz{>o? z5_bhEP6q3P!qe$$BCJUuD?vF3q__$y@jVC4X+G?CXsU${j^` zh*a_cV6C+*Jg37-wWV zyhQreMBDiQQYUbc$zlm7TbAifUA_OpdMO$$jibpy8hTsG`mhmaO6xm;sY1wY(Qg9Ac2DkaheMEWKg}n zs;V|>8nUHes`q&~lo?^>wW0(j-Pka5wY1Qsw;Y@BqT%CT*&h?7n?uw!G2{ftzeBw_ zMzwZ72_pjy#&oW7FUCZ!0T^D}(n>iWP7GN zbm}ERb>z7y7oRlOZ2o>TgvSIds52EIY%Rm-a zoUgP{Z?qtIMARlnqCP+wLWy{?XCT!WM&UY8qamXDHcbHS$XBrOQtfOl7|CV6Mxrr; zbyk4)DZLbfhNHq>K{6wEksCNP=N7Fh5<=)WR~$}eUgbtQ%pTY_kZUW7tiW#9pv&7= z%J&3`yo~`c=|PDVr>a`)?Jg7wJ)!7uB5f@$4xC(rV|wmz%ckHbJ)ZoOM+Xx2>7B)) zM|AF$Io_{+_vB`H%++XmBAw*<%ed#`$k1cmI3F|-j#(ZoR&*Q{_`i7ce8Ul04K5I} z#8g8aN#I#^*NmRYCAYy9C~Xbw4uePKSJD#cz!PYR z*RYXX@V9#4fqE4+-Y_^9f<^&MH$tR}fX;UR#aj^i@ce6t4lke+@6Hcvea=0Hp+hsK zqZua%hh7Qz{cRU4tWv+@zazuBg+use38rnDx?t}KSOyS;G!Ov!N_xUdpFbI|bGb{F z3o;Cmf5kW_*F6(Pcso8#~{uGTJNmpp}a=lkky9u`k12-eZ zI6oJoMm40ufeDMu5xdRa+M8YuY4o(7#ar3+e-4}oFi5Tm<}g-VO9=weR2h2=?dnD{ zy!Jm-Gr@J>v8%AL!`pa$<}BnSFhIJ9zQ=nK!FeDwCKVe>JjfgAQ7l91LKwUNpqw9J zv|L3eXh;?7Duxe#Q1y>Tu_Rp(-snV@Zz+-6g45=|^;&Arr{5=-#kZv*bLA4~vum9L^+^0Xogzj}&}&tCuPa zH{Tw?lQES}J48aENlR~NM_r|cpUp42cin5qyp{t6!Bq25;~`SlsICrGV^0Xedq0&6 z47!>UG-jf(XD%XP_ZyQ7>-yzNkppJUMH8S_j9^MEGQ}XMGtX+J%4!_tif=GQmr+w{ zmnz!^40|=@Z(a8j+%k}^JwRk{r=Y*!sb*O!D6(JwPc7D7SJ}XD0CP}OvzDz#1sK>c z@~r}C1j6YVH4L86`Z)rKinAPSoFs(|om0s{v2b>(3Z^CI>o5wG_|wc$(irSfJPB>O z_K(NX5bkA7^53z<>{&--mn-oyWB5TnAsj}ijlC({8%_A>RNQ_!HZ%*7OS4{;H%vVa z)M!nYLGgW95S3vDi5wzLWUdXJKerup-n7YibL6yX)g>e|x7WSqg249}3?dq4ae$4b@ zlrFY69SL6E)rma_p=W%B{oiP*H%?lO4F(P049%HV1lH$M^S?#MdD2;REAx7hJU+-n zA4`#^SubK;XCA_FDeu^(uoN;%(eIPEsVVz$Ax1DA&yWn^gf0g4PJf!?Tk!5y;N5X? zxiUZHAJm5_2|mZ*e&wqC6j&9{D+@L@W4Ko<@lzxLtnqCv{W*=laR!c#vtmCs!Npl- z_Kz*b3)2^)%!R(4!QUtrf)yjkpw~Hj!mF#`i&rZNGW780MGZirLyAXVk-fVTOJnGS z=)WW-|Idh@{QuPn8kGOZa+G0edd{Ak2z@rA^7D%r%C>=H{ikONGNd{eeKOPVHk)k>dLHOI^O?A;D zqJ~9TBIwDYs3jdh?T@og{Qs-!+5>XD`}Z9!GMUJ!EU^wmQaWi$Q7FZeo{$lpP$D99 zFs)6t97+e#qQ@dnRE z>$*Oa*`oZ4PMX*Cy)gU+7v{ffX_fqhS7(B1uavt*2p^4PJ%qo<}+^`_U&!&4$&`FRMOZ z*<;2FEk#=Q@FfW%IjO6-2~Tku9w`gcw6(eL?)8gmLyhE#0Oey{nc%ZYiP@gR$dgB7 z9sm1T;fMkJYhU$W5ofpMU-`eJJjQ7b*B(;fUeLB=lvK!GsnMqzp5;@*eIlIoKTZhu znVL55UAtyMIKYMX<2HJpLKu-5SFzf3ZNL!?0W>6f+T`-pPin1TLtrfYz%aj^ckWz( zmv6t8lLd%qZ5Wk5wtSI(0;o@cPQY;NdDUHJ7qd?0kAt7OoX~EbFf~qZ)&q?YiIk~E z0nnV1aI7jy81#rvcf{0-up;D8!fqU@EST)Sr88W({M_qDOv__%!%gvw!LRe@hK?XC zkkX2TG0+*n*c9$oB()ar&CiCu>}(`b2-{!DjKKSc3vsuETz}*9|D8j1YNMNCVZtWA zdLbOMVIc5s@QdVdzZwO#eoBIB|MTs0|6kC&#eZu`d6$F_Gh~-yyN9TaAH^g z>bm=w)A2dz2&qZ83^lCt2K$`tV7sZoaartZ+l)m0+mmFMu4K0C5jHk+GC0Xho34h~ zKHa62aH6lO*l=6?r48m~P9g-(+{%pc&jEOp3!}Z=7YA-c^^jv@d zY5WUY-Tz=YHnp}8PS73tw+|2WISc9;a3dv_o7jUnFry&_8~D3^-Oc> zmcH7WGZ&h*N?S3_+`H;^LmU0DtlN2!?o&N>EijpY_zxj_XJOWkG`s}5L zJ>o{u6Hu&-@88=dLB}>C2N{Qop__~;EOGZiaW>#kR5f7-^|2S@;kD}^W`5%VB+X;M zBg$UWbhixXLOjDJ?Xy3y@DMA*!gP6#Zc45?a=6!08K}=TE(nujd=)+%j4~wXbbf&p zOUV?eb_vJt7S}uiDebaH4Brk7)$>E&5{p;AqAwbKI8?b;L(?{O z0N%XnK&r9F-LbGBmfRdhwVb=b(!q4x&~j{Vl2$knp?5#)_yH}rY+K*e-y~nd=u?dK z5(LJ*;xrRJz`)o96DkRJ>7nn6Whd)Qn{*{-DnAL=0{b7{av$6u?6pSI2EWisc!|C# zK=5ItTc3xW!B(Oih{P>-~d z#R2cPeA>LN3N4LX3ZHLPr3 zJb$uwc&!9XlrP@b?*is?MK@O+gM~l?;2jkgvEx>Jf*)LDUH7Yy5~p{94&`9d;8V)X zi-Ka|E5ON1?TZt@?gHUdn6_oqRWSTWX@pPRfgp&W;}sH^o4_Ho?)k9!K~L zJYwR(H#y){O0SLaV-xbUVJVV4fs>@ZGJXAZ8>xOLx?h5A{D4!J)K#1*-~kkW1-M`? z=0X$_TP_cqGa_qUM$SI$1(7rZbr9KTF}{hszd?Ad3$gM)rs&to&>Qm+q^%tDi^u>$RTC7P zFi8omYP*>*Q!r6sFX~7&uDHLC>cU-Y07}EBxaB3r$P|LTDO4_T>XEAZspINzOG`^h z7R2btHPFSW#5Dg~;B9*X;E5qp$7^KnnAa1b>WI^-0;-!D3P<=%TbluvvK9HRb14d_ z+e%8rqkid5h)N*LU$3~HAiRKX_`M=&a?}%pLd+rT%{I3L8Lc~ME|SqjC)F=Ykaha} zN%17L-j<%CCqF?kLi08=5#ATvFslUX=9_b*3k{mKdN|~&{=)8C3@y&RQ`Z1RT~F9_ zTu+52K4vkBe8`LeImD)>{sFd&%$T~O=}5^Pz%+G3r`nA9tKd4q^?@3Zg+FQn zKz$+vK2Ne*jHX#T0$nPH+t8=&x4)cc(@{mwb6wCK=qv1XV>|$}@iy#osSKqHGAiKo zry+)52ME$`@PoN&CIrDn>k|feJ|g_nr^fXZhvslogYe;dnf0t>EaTh_BLwWF;dcC0 zC=v=#x0Rv+FtAx@-rY>O_c9XH*)RiYINw1H;|-1&l*>Ct`KLjd%H zO_@zbDxP%^ z@hCOa&2SyS!ipcbAeLfiy+mf zQMeTVy|m6hgyIjsQ1gKr8!+pT5HZijD<7LKyQD>tzjOxKNuKR|#&~Z1v??Kcbsu^p zVV&I#Kz9@1teFwp3~VceO4Qw*p=o>Y3dK4pyVv2|ite7#RW)l9R!`@`7vI{dNoJzDS{ z;a|S^{tsgubz4~kr=wSjJ}}j?n3xAna_Si%SQ%S@$1G*S<8V9kuH~u_6rs9a=Np>n zs^n)E=dQP7c;x5Y34kAq?kYftFC+tFw_xZ4f!z7AJdKqFbAdtk_Qs=sfM$uXt=f@0U-r}1gNsW5%j<5L{kt|!5a|>+zN;F3YI*McyW!nxCSEa zL`Lu$oH|mCi_F*dvP}juVp8EoMZP&c(KIIM#a!)h^E4nDVFJ5=74S-uMHD^V6~KUA#~eLzd~ZGyXQFu{ zWdTmns!8~UP-4g**70-mhkls$aav0Kycz{`-922S#R%7Q{udpWoL*#^0H$RPAP09XYH z*@SGi9$h!Lc%f?xpxosMzVrd=*|OR&-FoHE2GXDD+Tl?Txn+x~2aY!ikK6~~sxv_F z?((`=wi8LoPl9KxZ;>ufWEOIJD||*9u9}pDs&}5m;)bIw={7 zZrRu&z6X4rF(Dn483abQ|Gfn*Ws9JDb*X!}^|Hz|6CqcH7TK2$dHk)Q>SY=4X>YqS z!IWHVrapM?lvrl97Vm4QW1D+dutP`ZJD0Nq>qgeH<}K#15(X z*76MQL^OVvfVpq_;PH(O?W?xyJNJYDoQDNM&gi|cGXLhhjdrfl%S03L%D zE^WqOXp!DnHlBf(U62n3@akihIob)Wd{$FyIvQ1pfl;i}wB5B5hQ8Sp*N2e2~cLq+WEA78zP5VjR${=851h^KcVo0pjF^&=65I13>$=uV6$DTg;P z@`c|WAo2HcCmxrbNPPdxx*6q{PGL|fZjPls$B}p*e z`>g@}t`?iuowvF3S&a>-eWq!(z#%u*;xIFKznEeG{_le?K+&W5*?}Eq9({0N&S}l2c*D2fauhArZRY`;Dw$FVnPCk{@s36Am^9f4{mT7Llb6F-kfv_ZvE9{-k82E*GksI~G6h3h zeP@i6&!s>mXuhe#trbEKjH*V7~ESGa*sOeG;~p_Z8{~VS$|5M&butQ+`85BBs5sj@4Om5y>lpKhG&83*=<3DZm}T>1<;i zKG8}aRmObV%RIyelNbTl*R%8Yn!+2qMlbdvZvXjy%k>2jN7iE3EJp+g~Vp#I8MXz7X>~N-Oyy za&xn(+Mh?WCFbnN!#@ra5F<=^xQ3FVhn_HX%;)L<<8{QadTILy@7<2J6u9G-+0K%;?|ab^sXs>H6^x1DR?iT51O zu{j3`$7GDIa^|*p-_=ES)u89tLfgs|nhRSQ!f$+k!;o-1*d>#TW*y=xk)wE4vUv(A zt*|*SGGj@~!tK+CmSaDQhmo}faZAKFB*{*tHzOc8)|)M*4|)Ih6hfz%26l6cI8if8 zw2Iln_wTKnm_4i@1L#UphC)E{VoaX(ZzzhvH)^wY_09`z%{z)xOP-KyumLsz@0qDs zl*b85#D<;vr`?K0U-Ku)^_mtpHtB=0GHeW|I&o3@w73|KU38YOb74atRs1miv3N~l zcC@%2VO0N-;(B1xK5)L#M0*s>>s??Tfkc6yY;qK)!$cDReZxwI2&s{>D2KhObx15t zW)~7r=&LA$KP?&TI)9^R;DL67Ihq>?W>$)xBYh z=t`Zja;zBPkSxV@#*n1cWr>ae+@Mddv>UdFmR=hvAwGQod0M(R z2q!|y^pIuINtcxK5=-60Q$p#gWd2P#ET~oMixM@jvKhmHbtW3L)>XL!$2R}z&XX|j zq~VrR&Tal1afE5`(-8bbV_gzUr_yi}B_yC$lhI_$UBM+*Gg_CmZyuwpta$3M#M13l z?!wglj9$jEv-$jeYOZ4WH$sOEFR~sqqkT@3MnjVjjxjc-I%JJmF(SUfH&=Xy5y$u5 z>;CNghcBV7HK1k3-bjh1UjfLA0;Y3L-r=q( z)tM*_uxLAE9`RYRe9jtDN|xkYGI8g2UTLPB@GpA)&g{xHUc`~pNcoE4 z%ITwe{vkLPbSCts!>l7RV$>q9mIg?bQ{Er!rLtUjH zY^S{Szj{03U9S|bnRFKW4KW|1mU=w{>PAeiiSmcO=TM+AoAn*xWLCY(E($7zc_IGV zMgDtIEP_86o}hG~(jJ$FempX&Ef^js?^@TO|xUtAOY{HP#X5zw!ChEuD&F5m_A zz0`?kDWQkFpX*sj5!BZPr&z>!%}^^iip6a%E9=(E;2i1(T!B~OfAS7>8AO8{i~bf3 zA_;^B0WcA>$WIaUHG9TNz*UCTq!_@E7Asc%V{%Wm!T=C5K+0q_*%FB=)|tEcXk`|% zbwcHBtHEqM2LdL+cs239$#S_&5Go*+S!|YNsKjt+@(~hD8lj zk#57fr^sz%s9H>;^tsN<ml%FOx|)`z!5bK z3&>HP9TncP4LI?@i~D2Rm(5=f$!Ka7bQK`YD7-87$Af+% zEz;&@|J#a5Q8(QOWOiHxh6J}SDR+3a>w36`W@Ln1eHBanOk(&ttWK%TZI@01K>23W z?#i3@LI-Lp;LwZDy(HC3s}-{`HwWxbG8d1X*~1U9a8l@KB`XgQH#qtWuTMG(pYns& z8tsa$`iIKN!0qji5P)_%uTrs(_3^#bhqZ=VPvLk}xdvDT=Eqt$1hqtG4Mz2Kb%GZy zglZsc2$28~mF^1>H@r(ki7F-j4lD~w=+_0kVP+6s-+VUz%kToNR@jws%nX4`j6a-i5$cqrkW_JbW3Sc*2?M7C{VL?@O*dQ zSDVtV?f%@J^mYg>>XW8`=W$9DI3a~6ZGj8H(!^vUAxV=@s>=V{^*!A| zILzO%3|svr)R?xWx+7E-#5R)Q=kxU&9wLldvPNxXw@4s|xvWdqK0|mCC+1H-eALP< zp5b8>70XQf1OVj5b*$M0$fxMBT+c*FQIx?@mnVQS?UOTQ{lB;jv78_zvcwj!FaM^i zSmuE80n@cF?GprJe%%R8_4tP)7l`Guuh7S}Ljr?QplQxah#~=u=O_$)@kTT6C>4;; z*!%!z%!t>itelH;zO2K+kSe}0HF&$=9dK~lS#Qx~NV9M58#$zW#UxA}vC-JWuI>D4 zaQRH(Wdv4kdi(QY=e|78U_khDqNa{87_35kZ9x?4f|Y;MmPBfm;432nFZy7;`0KRVk>(zb^lryM~LYt%DL6$vq-SjHQy+tE8i_#(fy&C1SriuCJ#; zWjRk|ZL;S4xFXPFQyo$>f_5C;000-Zzmit1R*r2wj}b&!GFPXrZ@PBKN|L&q^Kf&O zzp67MSs&OWVG)GfGy5{)HeF0Cp^WkQ*!BN}=}{^kXMcN;N(2evlY`LIF1w|HF(*cc zz(ydWQ0X@K(0>l7t-xeuyexzKUIm?XLAvGl8Tmn%yDXDpAdKvIxe?%m%fL=}A!m)$ zF|PO=S1@tJsc7+dGpj3gLN~?oIQ{bIfq1Ya9EkQ;%WPN#*cfNpAG00YAc$N#Ab>2|?zgv&@e70>Plj0i4rvJn z#O@>1C%%t-3$!>&AFm}xEbZODiQ$LT$9S!t1CiTWMljp{ z)$POiSB-x>eCe>|L9_R$Wb0j-9v-tE9$XY^pFO<2`)8ZWBGSF87QV(J;21T=qRyqv+VP=8Yx$ezvc)rfKHP&hQsb4qf*nWSlcKIovQT@d$ zM_TT_w#avL*|3=f&(^LuQ2pKeFB!~{+6Dr%Ijbl$+spJ1{eitU9Su10S=LqBSd#N( zkkA*TJYSdd^P=M$9Dfe6w#vPc_s6r3#UHOnx_+vQAJT6w(Yx{2iz8D&z?xO$SMuvJ z(d8*``lxhu?=;#D>Z!GIyy5wGe&(6A5q3UBHDX^H(wKtV!9R?0&J8|2ul!-ucW>Vt z{=VEkzdEe`MU1+Mx7xk?4^G*%(BVFMW3t+P&gziB)uE2TQK9&kWIe`eoW&SB3+r)m zD{Duav5r<_MvifC95d#b`FMo8|L2Bfks)D=Vt9j{#TXk4>#_1NV;skhbF>|&zM*$i z=_%YG=Mz?~S?m}TxGK~lIx0+B6c!QcXlZG=Byw4(Wk`@E{nJWpFV5 z85|sFAGjza$j-_p)ZQk@!FG&|mGvSUD?0~!hjD?Uap_NQt7oBo$-{lR+u?}|6aNnl 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 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 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 22/49] 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 23/49] 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 24/49] 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 25/49] 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 26/49] 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 27/49] 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 28/49] 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 29/49] 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 30/49] 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 31/49] 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 32/49] 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 33/49] 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 34/49] 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 35/49] 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 36/49] 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 From 2dce4693386d9d0875e718fe11a29112b5a3a371 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mi=C5=82osz=20Matkowski?= Date: Sat, 7 May 2022 15:32:51 +0200 Subject: [PATCH 37/49] Rename 'Scripts' directory to 'Runtime' --- Assets/Editor Toolbox/EditorSettings.asset | 2 +- Assets/Editor Toolbox/{Scripts.meta => Runtime.meta} | 0 Assets/Editor Toolbox/{Scripts => Runtime}/Attributes.meta | 0 .../Editor Toolbox/{Scripts => Runtime}/Attributes/Regular.meta | 0 .../Attributes/Regular/AssetPreviewAttribute.cs | 0 .../Attributes/Regular/AssetPreviewAttribute.cs.meta | 0 .../Attributes/Regular/ChildObjectOnlyAttribute.cs | 0 .../Attributes/Regular/ChildObjectOnlyAttribute.cs.meta | 0 .../{Scripts => Runtime}/Attributes/Regular/ClampAttribute.cs | 0 .../Attributes/Regular/ClampAttribute.cs.meta | 0 .../Attributes/Regular/DirectoryAttribute.cs | 0 .../Attributes/Regular/DirectoryAttribute.cs.meta | 0 .../Attributes/Regular/EnumFlagAttribute.cs | 0 .../Attributes/Regular/EnumFlagAttribute.cs.meta | 0 .../Attributes/Regular/EnumTogglesAttribute.cs | 0 .../Attributes/Regular/EnumTogglesAttribute.cs.meta | 0 .../Attributes/Regular/FormattedNumberAttribute.cs | 0 .../Attributes/Regular/FormattedNumberAttribute.cs.meta | 0 .../Attributes/Regular/LabelByChildAttribute.cs | 0 .../Attributes/Regular/LabelByChildAttribute.cs.meta | 0 .../{Scripts => Runtime}/Attributes/Regular/LayerAttribute.cs | 0 .../Attributes/Regular/LayerAttribute.cs.meta | 0 .../Attributes/Regular/LeftToggleAttribute.cs | 0 .../Attributes/Regular/LeftToggleAttribute.cs.meta | 0 .../Attributes/Regular/MinMaxSliderAttribute.cs | 0 .../Attributes/Regular/MinMaxSliderAttribute.cs.meta | 0 .../{Scripts => Runtime}/Attributes/Regular/NotNullAttribute.cs | 0 .../Attributes/Regular/NotNullAttribute.cs.meta | 0 .../Attributes/Regular/OnValueChangedAttribute.cs | 0 .../Attributes/Regular/OnValueChangedAttribute.cs.meta | 0 .../Attributes/Regular/PasswordAttribute.cs | 0 .../Attributes/Regular/PasswordAttribute.cs.meta | 0 .../Attributes/Regular/PrefabObjectOnlyAttribute.cs | 0 .../Attributes/Regular/PrefabObjectOnlyAttribute.cs.meta | 0 .../{Scripts => Runtime}/Attributes/Regular/PresetAttribute.cs | 0 .../Attributes/Regular/PresetAttribute.cs.meta | 0 .../Attributes/Regular/ProgressBarAttribute.cs | 0 .../Attributes/Regular/ProgressBarAttribute.cs.meta | 0 .../Attributes/Regular/SceneDetailsAttribute.cs | 0 .../Attributes/Regular/SceneDetailsAttribute.cs.meta | 0 .../Attributes/Regular/SceneNameAttribute.cs | 0 .../Attributes/Regular/SceneNameAttribute.cs.meta | 0 .../Attributes/Regular/SceneObjectOnlyAttribute.cs | 0 .../Attributes/Regular/SceneObjectOnlyAttribute.cs.meta | 0 .../Attributes/Regular/SearchableEnumAttribute.cs | 0 .../Attributes/Regular/SearchableEnumAttribute.cs.meta | 0 .../{Scripts => Runtime}/Attributes/Regular/SuffixAttribute.cs | 0 .../Attributes/Regular/SuffixAttribute.cs.meta | 0 .../Attributes/Regular/TagSelectorAttribute.cs | 0 .../Attributes/Regular/TagSelectorAttribute.cs.meta | 0 .../Attributes/Regular/TypeConstraintAttribute.cs | 0 .../Attributes/Regular/TypeConstraintAttribute.cs.meta | 0 .../Editor Toolbox/{Scripts => Runtime}/Attributes/Special.meta | 0 .../Attributes/Special/HideLabelAttribute.cs | 0 .../Attributes/Special/HideLabelAttribute.cs.meta | 0 .../Attributes/Special/NewLabelAttribute.cs | 0 .../Attributes/Special/NewLabelAttribute.cs.meta | 0 .../Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox.meta | 0 .../Attributes/Toolbox/ArchetypeAttributes.meta | 0 .../Toolbox/ArchetypeAttributes/ScriptablesListAttribute.cs | 0 .../ArchetypeAttributes/ScriptablesListAttribute.cs.meta | 0 .../Attributes/Toolbox/ArchetypeAttributes/TitleAttribute.cs | 0 .../Toolbox/ArchetypeAttributes/TitleAttribute.cs.meta | 0 .../Attributes/Toolbox/ConditionAttributes.meta | 0 .../Toolbox/ConditionAttributes/ComparisonAttribute.cs | 0 .../Toolbox/ConditionAttributes/ComparisonAttribute.cs.meta | 0 .../Attributes/Toolbox/ConditionAttributes/DisableAttribute.cs | 0 .../Toolbox/ConditionAttributes/DisableAttribute.cs.meta | 0 .../Toolbox/ConditionAttributes/DisableIfAttribute.cs | 0 .../Toolbox/ConditionAttributes/DisableIfAttribute.cs.meta | 0 .../Toolbox/ConditionAttributes/DisableInPlayModeAttribute.cs | 0 .../ConditionAttributes/DisableInPlayModeAttribute.cs.meta | 0 .../Attributes/Toolbox/ConditionAttributes/EnableIfAttribute.cs | 0 .../Toolbox/ConditionAttributes/EnableIfAttribute.cs.meta | 0 .../Attributes/Toolbox/ConditionAttributes/HideAttribute.cs | 0 .../Toolbox/ConditionAttributes/HideAttribute.cs.meta | 0 .../Toolbox/ConditionAttributes/HideDisabledIfAttribute.cs | 0 .../Toolbox/ConditionAttributes/HideDisabledIfAttribute.cs.meta | 0 .../Attributes/Toolbox/ConditionAttributes/HideIfAttribute.cs | 0 .../Toolbox/ConditionAttributes/HideIfAttribute.cs.meta | 0 .../Toolbox/ConditionAttributes/ShowDisabledIfAttribute.cs | 0 .../Toolbox/ConditionAttributes/ShowDisabledIfAttribute.cs.meta | 0 .../Attributes/Toolbox/ConditionAttributes/ShowIfAttribute.cs | 0 .../Toolbox/ConditionAttributes/ShowIfAttribute.cs.meta | 0 .../Toolbox/ConditionAttributes/ShowWarningIfAttribute.cs | 0 .../Toolbox/ConditionAttributes/ShowWarningIfAttribute.cs.meta | 0 .../Toolbox/ConditionAttributes/UnityComparisonMethod.cs | 0 .../Toolbox/ConditionAttributes/UnityComparisonMethod.cs.meta | 0 .../Attributes/Toolbox/DecoratorAttributes.meta | 0 .../Toolbox/DecoratorAttributes/BeginGroupAttribute.cs | 0 .../Toolbox/DecoratorAttributes/BeginGroupAttribute.cs.meta | 0 .../Toolbox/DecoratorAttributes/BeginHorizontalAttribute.cs | 0 .../DecoratorAttributes/BeginHorizontalAttribute.cs.meta | 0 .../DecoratorAttributes/BeginHorizontalGroupAttribute.cs | 0 .../DecoratorAttributes/BeginHorizontalGroupAttribute.cs.meta | 0 .../Toolbox/DecoratorAttributes/BeginIndentAttribute.cs | 0 .../Toolbox/DecoratorAttributes/BeginIndentAttribute.cs.meta | 0 .../Toolbox/DecoratorAttributes/DynamicHelpAttribute.cs | 0 .../Toolbox/DecoratorAttributes/DynamicHelpAttribute.cs.meta | 0 .../Toolbox/DecoratorAttributes/EditorButtonAttribute.cs | 0 .../Toolbox/DecoratorAttributes/EditorButtonAttribute.cs.meta | 0 .../Attributes/Toolbox/DecoratorAttributes/EndGroupAttribute.cs | 0 .../Toolbox/DecoratorAttributes/EndGroupAttribute.cs.meta | 0 .../Toolbox/DecoratorAttributes/EndHorizontalAttribute.cs | 0 .../Toolbox/DecoratorAttributes/EndHorizontalAttribute.cs.meta | 0 .../Toolbox/DecoratorAttributes/EndHorizontalGroupAttribute.cs | 0 .../DecoratorAttributes/EndHorizontalGroupAttribute.cs.meta | 0 .../Toolbox/DecoratorAttributes/EndIndentAttribute.cs | 0 .../Toolbox/DecoratorAttributes/EndIndentAttribute.cs.meta | 0 .../Attributes/Toolbox/DecoratorAttributes/GuiColorAttribute.cs | 0 .../Toolbox/DecoratorAttributes/GuiColorAttribute.cs.meta | 0 .../Attributes/Toolbox/DecoratorAttributes/HelpAttribute.cs | 0 .../Toolbox/DecoratorAttributes/HelpAttribute.cs.meta | 0 .../Toolbox/DecoratorAttributes/HighlightAttribute.cs | 0 .../Toolbox/DecoratorAttributes/HighlightAttribute.cs.meta | 0 .../Toolbox/DecoratorAttributes/ImageAreaAttribute.cs | 0 .../Toolbox/DecoratorAttributes/ImageAreaAttribute.cs.meta | 0 .../Toolbox/DecoratorAttributes/IndentAreaAttribute.cs | 0 .../Toolbox/DecoratorAttributes/IndentAreaAttribute.cs.meta | 0 .../Attributes/Toolbox/DecoratorAttributes/LabelAttribute.cs | 0 .../Toolbox/DecoratorAttributes/LabelAttribute.cs.meta | 0 .../Attributes/Toolbox/DecoratorAttributes/LineAttribute.cs | 0 .../Toolbox/DecoratorAttributes/LineAttribute.cs.meta | 0 .../Toolbox/DecoratorAttributes/SpaceAreaAttribute.cs | 0 .../Toolbox/DecoratorAttributes/SpaceAreaAttribute.cs.meta | 0 .../Attributes/Toolbox/DecoratorAttributes/UnityMessageType.cs | 0 .../Toolbox/DecoratorAttributes/UnityMessageType.cs.meta | 0 .../Attributes/Toolbox/PropertyListAttributes.meta | 0 .../Toolbox/PropertyListAttributes/ReorderableListAttribute.cs | 0 .../PropertyListAttributes/ReorderableListAttribute.cs.meta | 0 .../PropertyListAttributes/ReorderableListExposedAttribute.cs | 0 .../ReorderableListExposedAttribute.cs.meta | 0 .../Toolbox/PropertyListAttributes/ScrollableItemsAttribute.cs | 0 .../PropertyListAttributes/ScrollableItemsAttribute.cs.meta | 0 .../Attributes/Toolbox/PropertySelfAttributes.meta | 0 .../PropertySelfAttributes/DynamicMinMaxBaseAttribute.cs | 0 .../PropertySelfAttributes/DynamicMinMaxBaseAttribute.cs.meta | 0 .../PropertySelfAttributes/DynamicMinMaxSliderAttribute.cs | 0 .../PropertySelfAttributes/DynamicMinMaxSliderAttribute.cs.meta | 0 .../Toolbox/PropertySelfAttributes/DynamicRangeAttribute.cs | 0 .../PropertySelfAttributes/DynamicRangeAttribute.cs.meta | 0 .../Toolbox/PropertySelfAttributes/IgnoreParentAttribute.cs | 0 .../PropertySelfAttributes/IgnoreParentAttribute.cs.meta | 0 .../Toolbox/PropertySelfAttributes/InLineEditorAttribute.cs | 0 .../PropertySelfAttributes/InLineEditorAttribute.cs.meta | 0 .../Toolbox/PropertySelfAttributes/ReferencePickerAttribute.cs | 0 .../PropertySelfAttributes/ReferencePickerAttribute.cs.meta | 0 .../Toolbox/PropertySelfAttributes/RegexValueAttribute.cs | 0 .../Toolbox/PropertySelfAttributes/RegexValueAttribute.cs.meta | 0 .../Attributes/Toolbox/ToolboxArchetypeAttribute.cs | 0 .../Attributes/Toolbox/ToolboxArchetypeAttribute.cs.meta | 0 .../{Scripts => Runtime}/Attributes/Toolbox/ToolboxAttribute.cs | 0 .../Attributes/Toolbox/ToolboxAttribute.cs.meta | 0 .../Attributes/Toolbox/ToolboxConditionAttribute.cs | 0 .../Attributes/Toolbox/ToolboxConditionAttribute.cs.meta | 0 .../Attributes/Toolbox/ToolboxDecoratorAttribute.cs | 0 .../Attributes/Toolbox/ToolboxDecoratorAttribute.cs.meta | 0 .../Attributes/Toolbox/ToolboxListPropertyAttribute.cs | 0 .../Attributes/Toolbox/ToolboxListPropertyAttribute.cs.meta | 0 .../Attributes/Toolbox/ToolboxPropertyAttribute.cs | 0 .../Attributes/Toolbox/ToolboxPropertyAttribute.cs.meta | 0 .../Attributes/Toolbox/ToolboxSelfPropertyAttribute.cs | 0 .../Attributes/Toolbox/ToolboxSelfPropertyAttribute.cs.meta | 0 Assets/Editor Toolbox/{Scripts => Runtime}/Extensions.meta | 0 .../{Scripts => Runtime}/Extensions/TypeExtensions.cs | 0 .../{Scripts => Runtime}/Extensions/TypeExtensions.cs.meta | 0 Assets/Editor Toolbox/{Scripts => Runtime}/Serialization.meta | 0 .../{Scripts => Runtime}/Serialization/SerializedDateTime.cs | 0 .../Serialization/SerializedDateTime.cs.meta | 0 .../{Scripts => Runtime}/Serialization/SerializedDictionary.cs | 0 .../Serialization/SerializedDictionary.cs.meta | 0 .../{Scripts => Runtime}/Serialization/SerializedDirectory.cs | 0 .../Serialization/SerializedDirectory.cs.meta | 0 .../{Scripts => Runtime}/Serialization/SerializedScene.cs | 0 .../{Scripts => Runtime}/Serialization/SerializedScene.cs.meta | 0 .../{Scripts => Runtime}/Serialization/SerializedType.cs | 0 .../{Scripts => Runtime}/Serialization/SerializedType.cs.meta | 0 177 files changed, 1 insertion(+), 1 deletion(-) rename Assets/Editor Toolbox/{Scripts.meta => Runtime.meta} (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Regular.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Regular/AssetPreviewAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Regular/AssetPreviewAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Regular/ChildObjectOnlyAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Regular/ChildObjectOnlyAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Regular/ClampAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Regular/ClampAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Regular/DirectoryAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Regular/DirectoryAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Regular/EnumFlagAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Regular/EnumFlagAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Regular/EnumTogglesAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Regular/EnumTogglesAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Regular/FormattedNumberAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Regular/FormattedNumberAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Regular/LabelByChildAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Regular/LabelByChildAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Regular/LayerAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Regular/LayerAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Regular/LeftToggleAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Regular/LeftToggleAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Regular/MinMaxSliderAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Regular/MinMaxSliderAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Regular/NotNullAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Regular/NotNullAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Regular/OnValueChangedAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Regular/OnValueChangedAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Regular/PasswordAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Regular/PasswordAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Regular/PrefabObjectOnlyAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Regular/PrefabObjectOnlyAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Regular/PresetAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Regular/PresetAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Regular/ProgressBarAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Regular/ProgressBarAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Regular/SceneDetailsAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Regular/SceneDetailsAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Regular/SceneNameAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Regular/SceneNameAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Regular/SceneObjectOnlyAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Regular/SceneObjectOnlyAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Regular/SearchableEnumAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Regular/SearchableEnumAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Regular/SuffixAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Regular/SuffixAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Regular/TagSelectorAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Regular/TagSelectorAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Regular/TypeConstraintAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Regular/TypeConstraintAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Special.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Special/HideLabelAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Special/HideLabelAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Special/NewLabelAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Special/NewLabelAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/ArchetypeAttributes.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/ArchetypeAttributes/ScriptablesListAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/ArchetypeAttributes/ScriptablesListAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/ArchetypeAttributes/TitleAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/ArchetypeAttributes/TitleAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/ConditionAttributes.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/ConditionAttributes/ComparisonAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/ConditionAttributes/ComparisonAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/ConditionAttributes/DisableAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/ConditionAttributes/DisableAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/ConditionAttributes/DisableIfAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/ConditionAttributes/DisableIfAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/ConditionAttributes/DisableInPlayModeAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/ConditionAttributes/DisableInPlayModeAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/ConditionAttributes/EnableIfAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/ConditionAttributes/EnableIfAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/ConditionAttributes/HideAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/ConditionAttributes/HideAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/ConditionAttributes/HideDisabledIfAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/ConditionAttributes/HideDisabledIfAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/ConditionAttributes/HideIfAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/ConditionAttributes/HideIfAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/ConditionAttributes/ShowDisabledIfAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/ConditionAttributes/ShowDisabledIfAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/ConditionAttributes/ShowIfAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/ConditionAttributes/ShowIfAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/ConditionAttributes/ShowWarningIfAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/ConditionAttributes/ShowWarningIfAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/ConditionAttributes/UnityComparisonMethod.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/ConditionAttributes/UnityComparisonMethod.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/DecoratorAttributes.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/DecoratorAttributes/BeginGroupAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/DecoratorAttributes/BeginGroupAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/DecoratorAttributes/BeginHorizontalAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/DecoratorAttributes/BeginHorizontalAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/DecoratorAttributes/BeginHorizontalGroupAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/DecoratorAttributes/BeginHorizontalGroupAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/DecoratorAttributes/BeginIndentAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/DecoratorAttributes/BeginIndentAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/DecoratorAttributes/DynamicHelpAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/DecoratorAttributes/DynamicHelpAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/DecoratorAttributes/EditorButtonAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/DecoratorAttributes/EditorButtonAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/DecoratorAttributes/EndGroupAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/DecoratorAttributes/EndGroupAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/DecoratorAttributes/EndHorizontalAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/DecoratorAttributes/EndHorizontalAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/DecoratorAttributes/EndHorizontalGroupAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/DecoratorAttributes/EndHorizontalGroupAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/DecoratorAttributes/EndIndentAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/DecoratorAttributes/EndIndentAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/DecoratorAttributes/GuiColorAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/DecoratorAttributes/GuiColorAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/DecoratorAttributes/HelpAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/DecoratorAttributes/HelpAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/DecoratorAttributes/HighlightAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/DecoratorAttributes/HighlightAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/DecoratorAttributes/ImageAreaAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/DecoratorAttributes/ImageAreaAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/DecoratorAttributes/IndentAreaAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/DecoratorAttributes/IndentAreaAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/DecoratorAttributes/LabelAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/DecoratorAttributes/LabelAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/DecoratorAttributes/LineAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/DecoratorAttributes/LineAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/DecoratorAttributes/SpaceAreaAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/DecoratorAttributes/SpaceAreaAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/DecoratorAttributes/UnityMessageType.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/DecoratorAttributes/UnityMessageType.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/PropertyListAttributes.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/PropertyListAttributes/ReorderableListAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/PropertyListAttributes/ReorderableListAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/PropertyListAttributes/ReorderableListExposedAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/PropertyListAttributes/ReorderableListExposedAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/PropertyListAttributes/ScrollableItemsAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/PropertyListAttributes/ScrollableItemsAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/PropertySelfAttributes.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/PropertySelfAttributes/DynamicMinMaxBaseAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/PropertySelfAttributes/DynamicMinMaxBaseAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/PropertySelfAttributes/DynamicMinMaxSliderAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/PropertySelfAttributes/DynamicMinMaxSliderAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/PropertySelfAttributes/DynamicRangeAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/PropertySelfAttributes/DynamicRangeAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/PropertySelfAttributes/IgnoreParentAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/PropertySelfAttributes/IgnoreParentAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/PropertySelfAttributes/InLineEditorAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/PropertySelfAttributes/InLineEditorAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/PropertySelfAttributes/ReferencePickerAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/PropertySelfAttributes/ReferencePickerAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/PropertySelfAttributes/RegexValueAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/PropertySelfAttributes/RegexValueAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/ToolboxArchetypeAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/ToolboxArchetypeAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/ToolboxAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/ToolboxAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/ToolboxConditionAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/ToolboxConditionAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/ToolboxDecoratorAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/ToolboxDecoratorAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/ToolboxListPropertyAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/ToolboxListPropertyAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/ToolboxPropertyAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/ToolboxPropertyAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/ToolboxSelfPropertyAttribute.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Attributes/Toolbox/ToolboxSelfPropertyAttribute.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Extensions.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Extensions/TypeExtensions.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Extensions/TypeExtensions.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Serialization.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Serialization/SerializedDateTime.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Serialization/SerializedDateTime.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Serialization/SerializedDictionary.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Serialization/SerializedDictionary.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Serialization/SerializedDirectory.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Serialization/SerializedDirectory.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Serialization/SerializedScene.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Serialization/SerializedScene.cs.meta (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Serialization/SerializedType.cs (100%) rename Assets/Editor Toolbox/{Scripts => Runtime}/Serialization/SerializedType.cs.meta (100%) diff --git a/Assets/Editor Toolbox/EditorSettings.asset b/Assets/Editor Toolbox/EditorSettings.asset index 0e8d1b0f..cbbc8afa 100644 --- a/Assets/Editor Toolbox/EditorSettings.asset +++ b/Assets/Editor Toolbox/EditorSettings.asset @@ -39,7 +39,7 @@ MonoBehaviour: smallIcon: {fileID: 2800000, guid: fd9a2277d1ea8144b9c8a4085b82092f, type: 3} iconName: - dataType: 1 - name: Scripts + name: Runtime path: Examples/Scripts tooltip: iconType: 0 diff --git a/Assets/Editor Toolbox/Scripts.meta b/Assets/Editor Toolbox/Runtime.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts.meta rename to Assets/Editor Toolbox/Runtime.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes.meta b/Assets/Editor Toolbox/Runtime/Attributes.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes.meta rename to Assets/Editor Toolbox/Runtime/Attributes.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Regular.meta b/Assets/Editor Toolbox/Runtime/Attributes/Regular.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Regular.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Regular.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Regular/AssetPreviewAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Regular/AssetPreviewAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Regular/AssetPreviewAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Regular/AssetPreviewAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Regular/AssetPreviewAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Regular/AssetPreviewAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Regular/AssetPreviewAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Regular/AssetPreviewAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Regular/ChildObjectOnlyAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Regular/ChildObjectOnlyAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Regular/ChildObjectOnlyAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Regular/ChildObjectOnlyAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Regular/ChildObjectOnlyAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Regular/ChildObjectOnlyAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Regular/ChildObjectOnlyAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Regular/ChildObjectOnlyAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Regular/ClampAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Regular/ClampAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Regular/ClampAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Regular/ClampAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Regular/ClampAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Regular/ClampAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Regular/ClampAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Regular/ClampAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Regular/DirectoryAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Regular/DirectoryAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Regular/DirectoryAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Regular/DirectoryAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Regular/DirectoryAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Regular/DirectoryAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Regular/DirectoryAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Regular/DirectoryAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Regular/EnumFlagAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Regular/EnumFlagAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Regular/EnumFlagAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Regular/EnumFlagAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Regular/EnumFlagAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Regular/EnumFlagAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Regular/EnumFlagAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Regular/EnumFlagAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Regular/EnumTogglesAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Regular/EnumTogglesAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Regular/EnumTogglesAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Regular/EnumTogglesAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Regular/EnumTogglesAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Regular/EnumTogglesAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Regular/EnumTogglesAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Regular/EnumTogglesAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Regular/FormattedNumberAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Regular/FormattedNumberAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Regular/FormattedNumberAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Regular/FormattedNumberAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Regular/FormattedNumberAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Regular/FormattedNumberAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Regular/FormattedNumberAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Regular/FormattedNumberAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Regular/LabelByChildAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Regular/LabelByChildAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Regular/LabelByChildAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Regular/LabelByChildAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Regular/LabelByChildAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Regular/LabelByChildAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Regular/LabelByChildAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Regular/LabelByChildAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Regular/LayerAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Regular/LayerAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Regular/LayerAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Regular/LayerAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Regular/LayerAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Regular/LayerAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Regular/LayerAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Regular/LayerAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Regular/LeftToggleAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Regular/LeftToggleAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Regular/LeftToggleAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Regular/LeftToggleAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Regular/LeftToggleAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Regular/LeftToggleAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Regular/LeftToggleAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Regular/LeftToggleAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Regular/MinMaxSliderAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Regular/MinMaxSliderAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Regular/MinMaxSliderAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Regular/MinMaxSliderAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Regular/MinMaxSliderAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Regular/MinMaxSliderAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Regular/MinMaxSliderAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Regular/MinMaxSliderAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Regular/NotNullAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Regular/NotNullAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Regular/NotNullAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Regular/NotNullAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Regular/NotNullAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Regular/NotNullAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Regular/NotNullAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Regular/NotNullAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Regular/OnValueChangedAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Regular/OnValueChangedAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Regular/OnValueChangedAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Regular/OnValueChangedAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Regular/OnValueChangedAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Regular/OnValueChangedAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Regular/OnValueChangedAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Regular/OnValueChangedAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Regular/PasswordAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Regular/PasswordAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Regular/PasswordAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Regular/PasswordAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Regular/PasswordAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Regular/PasswordAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Regular/PasswordAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Regular/PasswordAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Regular/PrefabObjectOnlyAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Regular/PrefabObjectOnlyAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Regular/PrefabObjectOnlyAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Regular/PrefabObjectOnlyAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Regular/PrefabObjectOnlyAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Regular/PrefabObjectOnlyAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Regular/PrefabObjectOnlyAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Regular/PrefabObjectOnlyAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Regular/PresetAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Regular/PresetAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Regular/PresetAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Regular/PresetAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Regular/PresetAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Regular/PresetAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Regular/PresetAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Regular/PresetAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Regular/ProgressBarAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Regular/ProgressBarAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Regular/ProgressBarAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Regular/ProgressBarAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Regular/ProgressBarAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Regular/ProgressBarAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Regular/ProgressBarAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Regular/ProgressBarAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Regular/SceneDetailsAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Regular/SceneDetailsAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Regular/SceneDetailsAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Regular/SceneDetailsAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Regular/SceneDetailsAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Regular/SceneDetailsAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Regular/SceneDetailsAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Regular/SceneDetailsAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Regular/SceneNameAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Regular/SceneNameAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Regular/SceneNameAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Regular/SceneNameAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Regular/SceneNameAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Regular/SceneNameAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Regular/SceneNameAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Regular/SceneNameAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Regular/SceneObjectOnlyAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Regular/SceneObjectOnlyAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Regular/SceneObjectOnlyAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Regular/SceneObjectOnlyAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Regular/SceneObjectOnlyAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Regular/SceneObjectOnlyAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Regular/SceneObjectOnlyAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Regular/SceneObjectOnlyAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Regular/SearchableEnumAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Regular/SearchableEnumAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Regular/SearchableEnumAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Regular/SearchableEnumAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Regular/SearchableEnumAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Regular/SearchableEnumAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Regular/SearchableEnumAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Regular/SearchableEnumAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Regular/SuffixAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Regular/SuffixAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Regular/SuffixAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Regular/SuffixAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Regular/SuffixAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Regular/SuffixAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Regular/SuffixAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Regular/SuffixAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Regular/TagSelectorAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Regular/TagSelectorAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Regular/TagSelectorAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Regular/TagSelectorAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Regular/TagSelectorAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Regular/TagSelectorAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Regular/TagSelectorAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Regular/TagSelectorAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Regular/TypeConstraintAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Regular/TypeConstraintAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Regular/TypeConstraintAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Regular/TypeConstraintAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Regular/TypeConstraintAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Regular/TypeConstraintAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Regular/TypeConstraintAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Regular/TypeConstraintAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Special.meta b/Assets/Editor Toolbox/Runtime/Attributes/Special.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Special.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Special.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Special/HideLabelAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Special/HideLabelAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Special/HideLabelAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Special/HideLabelAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Special/HideLabelAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Special/HideLabelAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Special/HideLabelAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Special/HideLabelAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Special/NewLabelAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Special/NewLabelAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Special/NewLabelAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Special/NewLabelAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Special/NewLabelAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Special/NewLabelAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Special/NewLabelAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Special/NewLabelAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox.meta b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ArchetypeAttributes.meta b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ArchetypeAttributes.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ArchetypeAttributes.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ArchetypeAttributes.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ArchetypeAttributes/ScriptablesListAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ArchetypeAttributes/ScriptablesListAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ArchetypeAttributes/ScriptablesListAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ArchetypeAttributes/ScriptablesListAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ArchetypeAttributes/ScriptablesListAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ArchetypeAttributes/ScriptablesListAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ArchetypeAttributes/ScriptablesListAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ArchetypeAttributes/ScriptablesListAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ArchetypeAttributes/TitleAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ArchetypeAttributes/TitleAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ArchetypeAttributes/TitleAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ArchetypeAttributes/TitleAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ArchetypeAttributes/TitleAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ArchetypeAttributes/TitleAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ArchetypeAttributes/TitleAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ArchetypeAttributes/TitleAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes.meta b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ConditionAttributes.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ConditionAttributes.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/ComparisonAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ConditionAttributes/ComparisonAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/ComparisonAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ConditionAttributes/ComparisonAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/ComparisonAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ConditionAttributes/ComparisonAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/ComparisonAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ConditionAttributes/ComparisonAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/DisableAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ConditionAttributes/DisableAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/DisableAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ConditionAttributes/DisableAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/DisableAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ConditionAttributes/DisableAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/DisableAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ConditionAttributes/DisableAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/DisableIfAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ConditionAttributes/DisableIfAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/DisableIfAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ConditionAttributes/DisableIfAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/DisableIfAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ConditionAttributes/DisableIfAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/DisableIfAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ConditionAttributes/DisableIfAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/DisableInPlayModeAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ConditionAttributes/DisableInPlayModeAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/DisableInPlayModeAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ConditionAttributes/DisableInPlayModeAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/DisableInPlayModeAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ConditionAttributes/DisableInPlayModeAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/DisableInPlayModeAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ConditionAttributes/DisableInPlayModeAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/EnableIfAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ConditionAttributes/EnableIfAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/EnableIfAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ConditionAttributes/EnableIfAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/EnableIfAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ConditionAttributes/EnableIfAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/EnableIfAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ConditionAttributes/EnableIfAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/HideAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ConditionAttributes/HideAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/HideAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ConditionAttributes/HideAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/HideAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ConditionAttributes/HideAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/HideAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ConditionAttributes/HideAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/HideDisabledIfAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ConditionAttributes/HideDisabledIfAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/HideDisabledIfAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ConditionAttributes/HideDisabledIfAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/HideDisabledIfAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ConditionAttributes/HideDisabledIfAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/HideDisabledIfAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ConditionAttributes/HideDisabledIfAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/HideIfAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ConditionAttributes/HideIfAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/HideIfAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ConditionAttributes/HideIfAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/HideIfAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ConditionAttributes/HideIfAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/HideIfAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ConditionAttributes/HideIfAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/ShowDisabledIfAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ConditionAttributes/ShowDisabledIfAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/ShowDisabledIfAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ConditionAttributes/ShowDisabledIfAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/ShowDisabledIfAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ConditionAttributes/ShowDisabledIfAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/ShowDisabledIfAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ConditionAttributes/ShowDisabledIfAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/ShowIfAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ConditionAttributes/ShowIfAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/ShowIfAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ConditionAttributes/ShowIfAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/ShowIfAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ConditionAttributes/ShowIfAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/ShowIfAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ConditionAttributes/ShowIfAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/ShowWarningIfAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ConditionAttributes/ShowWarningIfAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/ShowWarningIfAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ConditionAttributes/ShowWarningIfAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/ShowWarningIfAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ConditionAttributes/ShowWarningIfAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/ShowWarningIfAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ConditionAttributes/ShowWarningIfAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/UnityComparisonMethod.cs b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ConditionAttributes/UnityComparisonMethod.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/UnityComparisonMethod.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ConditionAttributes/UnityComparisonMethod.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/UnityComparisonMethod.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ConditionAttributes/UnityComparisonMethod.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ConditionAttributes/UnityComparisonMethod.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ConditionAttributes/UnityComparisonMethod.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes.meta b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/BeginGroupAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/BeginGroupAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/BeginGroupAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/BeginGroupAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/BeginGroupAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/BeginGroupAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/BeginGroupAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/BeginGroupAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/BeginHorizontalAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/BeginHorizontalAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/BeginHorizontalAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/BeginHorizontalAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/BeginHorizontalAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/BeginHorizontalAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/BeginHorizontalAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/BeginHorizontalAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/BeginHorizontalGroupAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/BeginHorizontalGroupAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/BeginHorizontalGroupAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/BeginHorizontalGroupAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/BeginHorizontalGroupAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/BeginHorizontalGroupAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/BeginHorizontalGroupAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/BeginHorizontalGroupAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/BeginIndentAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/BeginIndentAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/BeginIndentAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/BeginIndentAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/BeginIndentAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/BeginIndentAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/BeginIndentAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/BeginIndentAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/DynamicHelpAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/DynamicHelpAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/DynamicHelpAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/DynamicHelpAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/DynamicHelpAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/DynamicHelpAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/DynamicHelpAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/DynamicHelpAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/EditorButtonAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/EditorButtonAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/EditorButtonAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/EditorButtonAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/EditorButtonAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/EditorButtonAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/EditorButtonAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/EditorButtonAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/EndGroupAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/EndGroupAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/EndGroupAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/EndGroupAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/EndGroupAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/EndGroupAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/EndGroupAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/EndGroupAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/EndHorizontalAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/EndHorizontalAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/EndHorizontalAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/EndHorizontalAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/EndHorizontalAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/EndHorizontalAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/EndHorizontalAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/EndHorizontalAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/EndHorizontalGroupAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/EndHorizontalGroupAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/EndHorizontalGroupAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/EndHorizontalGroupAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/EndHorizontalGroupAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/EndHorizontalGroupAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/EndHorizontalGroupAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/EndHorizontalGroupAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/EndIndentAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/EndIndentAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/EndIndentAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/EndIndentAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/EndIndentAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/EndIndentAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/EndIndentAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/EndIndentAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/GuiColorAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/GuiColorAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/GuiColorAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/GuiColorAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/GuiColorAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/GuiColorAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/GuiColorAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/GuiColorAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/HelpAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/HelpAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/HelpAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/HelpAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/HelpAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/HelpAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/HelpAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/HelpAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/HighlightAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/HighlightAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/HighlightAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/HighlightAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/HighlightAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/HighlightAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/HighlightAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/HighlightAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/ImageAreaAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/ImageAreaAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/ImageAreaAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/ImageAreaAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/ImageAreaAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/ImageAreaAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/ImageAreaAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/ImageAreaAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/IndentAreaAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/IndentAreaAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/IndentAreaAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/IndentAreaAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/IndentAreaAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/IndentAreaAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/IndentAreaAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/IndentAreaAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/LabelAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/LabelAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/LabelAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/LabelAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/LabelAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/LabelAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/LabelAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/LabelAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/LineAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/LineAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/LineAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/LineAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/LineAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/LineAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/LineAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/LineAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/SpaceAreaAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/SpaceAreaAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/SpaceAreaAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/SpaceAreaAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/SpaceAreaAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/SpaceAreaAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/SpaceAreaAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/SpaceAreaAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/UnityMessageType.cs b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/UnityMessageType.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/UnityMessageType.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/UnityMessageType.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/UnityMessageType.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/UnityMessageType.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/DecoratorAttributes/UnityMessageType.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/DecoratorAttributes/UnityMessageType.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertyListAttributes.meta b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/PropertyListAttributes.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertyListAttributes.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/PropertyListAttributes.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertyListAttributes/ReorderableListAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/PropertyListAttributes/ReorderableListAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertyListAttributes/ReorderableListAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/PropertyListAttributes/ReorderableListAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertyListAttributes/ReorderableListAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/PropertyListAttributes/ReorderableListAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertyListAttributes/ReorderableListAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/PropertyListAttributes/ReorderableListAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertyListAttributes/ReorderableListExposedAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/PropertyListAttributes/ReorderableListExposedAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertyListAttributes/ReorderableListExposedAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/PropertyListAttributes/ReorderableListExposedAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertyListAttributes/ReorderableListExposedAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/PropertyListAttributes/ReorderableListExposedAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertyListAttributes/ReorderableListExposedAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/PropertyListAttributes/ReorderableListExposedAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertyListAttributes/ScrollableItemsAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/PropertyListAttributes/ScrollableItemsAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertyListAttributes/ScrollableItemsAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/PropertyListAttributes/ScrollableItemsAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertyListAttributes/ScrollableItemsAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/PropertyListAttributes/ScrollableItemsAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertyListAttributes/ScrollableItemsAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/PropertyListAttributes/ScrollableItemsAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertySelfAttributes.meta b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/PropertySelfAttributes.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertySelfAttributes.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/PropertySelfAttributes.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertySelfAttributes/DynamicMinMaxBaseAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/PropertySelfAttributes/DynamicMinMaxBaseAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertySelfAttributes/DynamicMinMaxBaseAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/PropertySelfAttributes/DynamicMinMaxBaseAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertySelfAttributes/DynamicMinMaxBaseAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/PropertySelfAttributes/DynamicMinMaxBaseAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertySelfAttributes/DynamicMinMaxBaseAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/PropertySelfAttributes/DynamicMinMaxBaseAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertySelfAttributes/DynamicMinMaxSliderAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/PropertySelfAttributes/DynamicMinMaxSliderAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertySelfAttributes/DynamicMinMaxSliderAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/PropertySelfAttributes/DynamicMinMaxSliderAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertySelfAttributes/DynamicMinMaxSliderAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/PropertySelfAttributes/DynamicMinMaxSliderAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertySelfAttributes/DynamicMinMaxSliderAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/PropertySelfAttributes/DynamicMinMaxSliderAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertySelfAttributes/DynamicRangeAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/PropertySelfAttributes/DynamicRangeAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertySelfAttributes/DynamicRangeAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/PropertySelfAttributes/DynamicRangeAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertySelfAttributes/DynamicRangeAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/PropertySelfAttributes/DynamicRangeAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertySelfAttributes/DynamicRangeAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/PropertySelfAttributes/DynamicRangeAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertySelfAttributes/IgnoreParentAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/PropertySelfAttributes/IgnoreParentAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertySelfAttributes/IgnoreParentAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/PropertySelfAttributes/IgnoreParentAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertySelfAttributes/IgnoreParentAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/PropertySelfAttributes/IgnoreParentAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertySelfAttributes/IgnoreParentAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/PropertySelfAttributes/IgnoreParentAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertySelfAttributes/InLineEditorAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/PropertySelfAttributes/InLineEditorAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertySelfAttributes/InLineEditorAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/PropertySelfAttributes/InLineEditorAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertySelfAttributes/InLineEditorAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/PropertySelfAttributes/InLineEditorAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertySelfAttributes/InLineEditorAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/PropertySelfAttributes/InLineEditorAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertySelfAttributes/ReferencePickerAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/PropertySelfAttributes/ReferencePickerAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertySelfAttributes/ReferencePickerAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/PropertySelfAttributes/ReferencePickerAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertySelfAttributes/ReferencePickerAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/PropertySelfAttributes/ReferencePickerAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertySelfAttributes/ReferencePickerAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/PropertySelfAttributes/ReferencePickerAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertySelfAttributes/RegexValueAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/PropertySelfAttributes/RegexValueAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertySelfAttributes/RegexValueAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/PropertySelfAttributes/RegexValueAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertySelfAttributes/RegexValueAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/PropertySelfAttributes/RegexValueAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/PropertySelfAttributes/RegexValueAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/PropertySelfAttributes/RegexValueAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ToolboxArchetypeAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ToolboxArchetypeAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ToolboxArchetypeAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ToolboxArchetypeAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ToolboxArchetypeAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ToolboxArchetypeAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ToolboxArchetypeAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ToolboxArchetypeAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ToolboxAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ToolboxAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ToolboxAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ToolboxAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ToolboxAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ToolboxAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ToolboxAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ToolboxAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ToolboxConditionAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ToolboxConditionAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ToolboxConditionAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ToolboxConditionAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ToolboxConditionAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ToolboxConditionAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ToolboxConditionAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ToolboxConditionAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ToolboxDecoratorAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ToolboxDecoratorAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ToolboxDecoratorAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ToolboxDecoratorAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ToolboxDecoratorAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ToolboxDecoratorAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ToolboxDecoratorAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ToolboxDecoratorAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ToolboxListPropertyAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ToolboxListPropertyAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ToolboxListPropertyAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ToolboxListPropertyAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ToolboxListPropertyAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ToolboxListPropertyAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ToolboxListPropertyAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ToolboxListPropertyAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ToolboxPropertyAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ToolboxPropertyAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ToolboxPropertyAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ToolboxPropertyAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ToolboxPropertyAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ToolboxPropertyAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ToolboxPropertyAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ToolboxPropertyAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ToolboxSelfPropertyAttribute.cs b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ToolboxSelfPropertyAttribute.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ToolboxSelfPropertyAttribute.cs rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ToolboxSelfPropertyAttribute.cs diff --git a/Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ToolboxSelfPropertyAttribute.cs.meta b/Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ToolboxSelfPropertyAttribute.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Attributes/Toolbox/ToolboxSelfPropertyAttribute.cs.meta rename to Assets/Editor Toolbox/Runtime/Attributes/Toolbox/ToolboxSelfPropertyAttribute.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Extensions.meta b/Assets/Editor Toolbox/Runtime/Extensions.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Extensions.meta rename to Assets/Editor Toolbox/Runtime/Extensions.meta diff --git a/Assets/Editor Toolbox/Scripts/Extensions/TypeExtensions.cs b/Assets/Editor Toolbox/Runtime/Extensions/TypeExtensions.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Extensions/TypeExtensions.cs rename to Assets/Editor Toolbox/Runtime/Extensions/TypeExtensions.cs diff --git a/Assets/Editor Toolbox/Scripts/Extensions/TypeExtensions.cs.meta b/Assets/Editor Toolbox/Runtime/Extensions/TypeExtensions.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Extensions/TypeExtensions.cs.meta rename to Assets/Editor Toolbox/Runtime/Extensions/TypeExtensions.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Serialization.meta b/Assets/Editor Toolbox/Runtime/Serialization.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Serialization.meta rename to Assets/Editor Toolbox/Runtime/Serialization.meta diff --git a/Assets/Editor Toolbox/Scripts/Serialization/SerializedDateTime.cs b/Assets/Editor Toolbox/Runtime/Serialization/SerializedDateTime.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Serialization/SerializedDateTime.cs rename to Assets/Editor Toolbox/Runtime/Serialization/SerializedDateTime.cs diff --git a/Assets/Editor Toolbox/Scripts/Serialization/SerializedDateTime.cs.meta b/Assets/Editor Toolbox/Runtime/Serialization/SerializedDateTime.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Serialization/SerializedDateTime.cs.meta rename to Assets/Editor Toolbox/Runtime/Serialization/SerializedDateTime.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Serialization/SerializedDictionary.cs b/Assets/Editor Toolbox/Runtime/Serialization/SerializedDictionary.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Serialization/SerializedDictionary.cs rename to Assets/Editor Toolbox/Runtime/Serialization/SerializedDictionary.cs diff --git a/Assets/Editor Toolbox/Scripts/Serialization/SerializedDictionary.cs.meta b/Assets/Editor Toolbox/Runtime/Serialization/SerializedDictionary.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Serialization/SerializedDictionary.cs.meta rename to Assets/Editor Toolbox/Runtime/Serialization/SerializedDictionary.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Serialization/SerializedDirectory.cs b/Assets/Editor Toolbox/Runtime/Serialization/SerializedDirectory.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Serialization/SerializedDirectory.cs rename to Assets/Editor Toolbox/Runtime/Serialization/SerializedDirectory.cs diff --git a/Assets/Editor Toolbox/Scripts/Serialization/SerializedDirectory.cs.meta b/Assets/Editor Toolbox/Runtime/Serialization/SerializedDirectory.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Serialization/SerializedDirectory.cs.meta rename to Assets/Editor Toolbox/Runtime/Serialization/SerializedDirectory.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Serialization/SerializedScene.cs b/Assets/Editor Toolbox/Runtime/Serialization/SerializedScene.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Serialization/SerializedScene.cs rename to Assets/Editor Toolbox/Runtime/Serialization/SerializedScene.cs diff --git a/Assets/Editor Toolbox/Scripts/Serialization/SerializedScene.cs.meta b/Assets/Editor Toolbox/Runtime/Serialization/SerializedScene.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Serialization/SerializedScene.cs.meta rename to Assets/Editor Toolbox/Runtime/Serialization/SerializedScene.cs.meta diff --git a/Assets/Editor Toolbox/Scripts/Serialization/SerializedType.cs b/Assets/Editor Toolbox/Runtime/Serialization/SerializedType.cs similarity index 100% rename from Assets/Editor Toolbox/Scripts/Serialization/SerializedType.cs rename to Assets/Editor Toolbox/Runtime/Serialization/SerializedType.cs diff --git a/Assets/Editor Toolbox/Scripts/Serialization/SerializedType.cs.meta b/Assets/Editor Toolbox/Runtime/Serialization/SerializedType.cs.meta similarity index 100% rename from Assets/Editor Toolbox/Scripts/Serialization/SerializedType.cs.meta rename to Assets/Editor Toolbox/Runtime/Serialization/SerializedType.cs.meta From 34baad5553c80b022bf9a46e8024960280b548c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mi=C5=82osz=20Matkowski?= Date: Sat, 7 May 2022 23:32:43 +0200 Subject: [PATCH 38/49] Fix AssetPreview height for targets without the preview texture --- .../Editor/Drawers/Regular/AssetPreviewAttributeDrawer.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Assets/Editor Toolbox/Editor/Drawers/Regular/AssetPreviewAttributeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Regular/AssetPreviewAttributeDrawer.cs index f1fe40f1..5daae82b 100644 --- a/Assets/Editor Toolbox/Editor/Drawers/Regular/AssetPreviewAttributeDrawer.cs +++ b/Assets/Editor Toolbox/Editor/Drawers/Regular/AssetPreviewAttributeDrawer.cs @@ -56,8 +56,9 @@ private void DrawAssetPreview(Rect rect, Texture2D previewTexture) protected override float GetPropertyHeightSafe(SerializedProperty property, GUIContent label) { - //return native height - if (!property.objectReferenceValue) + var target = property.objectReferenceValue; + var previewTexture = AssetPreview.GetAssetPreview(target); + if (previewTexture == null) { return base.GetPropertyHeightSafe(property, label); } From 9ee4a056f8093b33b27632f02f137cfe3bb4794b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mi=C5=82osz=20Matkowski?= Date: Sat, 7 May 2022 23:51:00 +0200 Subject: [PATCH 39/49] Minor refactor changes --- .../Drawers/Toolbox/ToolboxConditionDrawer.cs | 14 +++++++------- .../Drawers/Toolbox/ToolboxConditionDrawerBase.cs | 4 ++-- .../Drawers/Toolbox/ToolboxDecoratorDrawer.cs | 6 +++--- .../Drawers/Toolbox/ToolboxDecoratorDrawerBase.cs | 2 +- .../Drawers/Toolbox/ToolboxListPropertyDrawer.cs | 6 +++--- 5 files changed, 16 insertions(+), 16 deletions(-) diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/ToolboxConditionDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/ToolboxConditionDrawer.cs index 189b8158..62571b0e 100644 --- a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/ToolboxConditionDrawer.cs +++ b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/ToolboxConditionDrawer.cs @@ -1,5 +1,5 @@ -using UnityEngine; -using UnityEditor; +using UnityEditor; +using UnityEngine; namespace Toolbox.Editor.Drawers { @@ -11,14 +11,14 @@ protected virtual PropertyCondition OnGuiValidateSafe(SerializedProperty propert } - public override sealed PropertyCondition OnGuiValidate(SerializedProperty property) - { + public sealed override PropertyCondition OnGuiValidate(SerializedProperty property) + { return OnGuiValidate(property, PropertyUtility.GetAttribute(property)); } - public override sealed PropertyCondition OnGuiValidate(SerializedProperty property, ToolboxAttribute attribute) - { - return OnGuiValidate(property, attribute as T); + public sealed override PropertyCondition OnGuiValidate(SerializedProperty property, ToolboxAttribute attribute) + { + return OnGuiValidate(property, attribute as T); } public PropertyCondition OnGuiValidate(SerializedProperty property, T attribute) diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/ToolboxConditionDrawerBase.cs b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/ToolboxConditionDrawerBase.cs index a5b270cd..1c3d6b7e 100644 --- a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/ToolboxConditionDrawerBase.cs +++ b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/ToolboxConditionDrawerBase.cs @@ -1,5 +1,5 @@ -using UnityEngine; -using UnityEditor; +using UnityEditor; +using UnityEngine; namespace Toolbox.Editor.Drawers { diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/ToolboxDecoratorDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/ToolboxDecoratorDrawer.cs index 2830722e..1f5bbd7c 100644 --- a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/ToolboxDecoratorDrawer.cs +++ b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/ToolboxDecoratorDrawer.cs @@ -5,7 +5,7 @@ namespace Toolbox.Editor.Drawers { public abstract class ToolboxDecoratorDrawer : ToolboxDecoratorDrawerBase where T : ToolboxDecoratorAttribute - { + { protected virtual void OnGuiBeginSafe(T attribute) { } @@ -17,12 +17,12 @@ protected virtual void OnGuiEndSafe(T attribute) { } - public override sealed void OnGuiBegin(ToolboxAttribute attribute) + public sealed override void OnGuiBegin(ToolboxAttribute attribute) { OnGuiBegin(attribute as T); } - public override sealed void OnGuiClose(ToolboxAttribute attribute) + public sealed override void OnGuiClose(ToolboxAttribute attribute) { OnGuiClose(attribute as T); } diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/ToolboxDecoratorDrawerBase.cs b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/ToolboxDecoratorDrawerBase.cs index e21b534c..07bf359c 100644 --- a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/ToolboxDecoratorDrawerBase.cs +++ b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/ToolboxDecoratorDrawerBase.cs @@ -2,7 +2,7 @@ namespace Toolbox.Editor.Drawers { - public abstract class ToolboxDecoratorDrawerBase : ToolboxAttributeDrawer + public abstract class ToolboxDecoratorDrawerBase : ToolboxAttributeDrawer { public abstract void OnGuiBegin(ToolboxAttribute attribute); diff --git a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/ToolboxListPropertyDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/ToolboxListPropertyDrawer.cs index a767b7f3..f31765aa 100644 --- a/Assets/Editor Toolbox/Editor/Drawers/Toolbox/ToolboxListPropertyDrawer.cs +++ b/Assets/Editor Toolbox/Editor/Drawers/Toolbox/ToolboxListPropertyDrawer.cs @@ -1,5 +1,5 @@ -using UnityEngine; -using UnityEditor; +using UnityEditor; +using UnityEngine; namespace Toolbox.Editor.Drawers { @@ -8,6 +8,6 @@ public abstract class ToolboxListPropertyDrawer : ToolboxPropertyDrawer wh public override bool IsPropertyValid(SerializedProperty property) { return property.isArray; - } + } } } \ No newline at end of file From 2f833aff5583ccd36d4aa245c97ae938ae7a3176 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mi=C5=82osz=20Matkowski?= Date: Sat, 7 May 2022 23:51:32 +0200 Subject: [PATCH 40/49] Include parent type in types collections caching --- Assets/Editor Toolbox/Editor/Utilities/TypeUtilities.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Assets/Editor Toolbox/Editor/Utilities/TypeUtilities.cs b/Assets/Editor Toolbox/Editor/Utilities/TypeUtilities.cs index d2cc2c4f..be715adb 100644 --- a/Assets/Editor Toolbox/Editor/Utilities/TypeUtilities.cs +++ b/Assets/Editor Toolbox/Editor/Utilities/TypeUtilities.cs @@ -44,6 +44,7 @@ public static TypesCachedCollection GetCollection(TypeConstraintContext constrai var typesCache = TypeCache.GetTypesDerivedFrom(parentType); var typesList = typesCache.ToList(); + typesList.Add(parentType); for (var i = typesList.Count - 1; i >= 0; i--) { var type = typesList[i]; From 3cd9f67bcf87a1b487d7eb6c63d36f2f680ecbd5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mi=C5=82osz=20Matkowski?= Date: Sun, 8 May 2022 00:37:35 +0200 Subject: [PATCH 41/49] Update samples --- Assets/Examples/Scenes/SampleScene.unity | 185 ++++++++++-------- Assets/Examples/Scripts/SampleBehaviour1.cs | 121 ++---------- Assets/Examples/Scripts/SampleBehaviour2.cs | 179 ++--------------- Assets/Examples/Scripts/SampleBehaviour3.cs | 9 +- Assets/Examples/Scripts/SampleBehaviour4.cs | 4 +- Assets/Examples/Scripts/SampleBehaviour5.cs | 33 ++++ ...eBase.cs.meta => SampleBehaviour5.cs.meta} | 2 +- Assets/Examples/Scripts/SampleBehaviour6.cs | 42 ++++ ...eTest.cs.meta => SampleBehaviour6.cs.meta} | 0 Assets/Examples/Scripts/SampleBehaviour7.cs | 19 ++ ...ence1.cs.meta => SampleBehaviour7.cs.meta} | 2 +- Assets/Examples/Scripts/SampleReference1.cs | 7 - Assets/Examples/Scripts/SampleReference2.cs | 7 - .../Examples/Scripts/SampleReference2.cs.meta | 11 -- .../Examples/Scripts/SampleReferenceBase.cs | 7 - .../Examples/Scripts/SampleReferenceTest.cs | 24 --- Assets/Examples/Scripts/TooltipTest.cs | 9 - Assets/Examples/Scripts/TooltipTest.cs.meta | 11 -- 18 files changed, 251 insertions(+), 421 deletions(-) create mode 100644 Assets/Examples/Scripts/SampleBehaviour5.cs rename Assets/Examples/Scripts/{SampleReferenceBase.cs.meta => SampleBehaviour5.cs.meta} (83%) create mode 100644 Assets/Examples/Scripts/SampleBehaviour6.cs rename Assets/Examples/Scripts/{SampleReferenceTest.cs.meta => SampleBehaviour6.cs.meta} (100%) create mode 100644 Assets/Examples/Scripts/SampleBehaviour7.cs rename Assets/Examples/Scripts/{SampleReference1.cs.meta => SampleBehaviour7.cs.meta} (83%) delete mode 100644 Assets/Examples/Scripts/SampleReference1.cs delete mode 100644 Assets/Examples/Scripts/SampleReference2.cs delete mode 100644 Assets/Examples/Scripts/SampleReference2.cs.meta delete mode 100644 Assets/Examples/Scripts/SampleReferenceBase.cs delete mode 100644 Assets/Examples/Scripts/SampleReferenceTest.cs delete mode 100644 Assets/Examples/Scripts/TooltipTest.cs delete mode 100644 Assets/Examples/Scripts/TooltipTest.cs.meta diff --git a/Assets/Examples/Scenes/SampleScene.unity b/Assets/Examples/Scenes/SampleScene.unity index a3b8c8bb..1bc3e64f 100644 --- a/Assets/Examples/Scenes/SampleScene.unity +++ b/Assets/Examples/Scenes/SampleScene.unity @@ -408,7 +408,7 @@ GameObject: - component: {fileID: 661896459} - component: {fileID: 661896458} m_Layer: 0 - m_Name: Sample GameObject2 + m_Name: ToolboxPropertyDrawers[Sample] m_TagString: Untagged m_Icon: {fileID: 2800000, guid: b105bf1fb7fe62e4baba0ffd7b433e7b, type: 3} m_NavMeshLayer: 0 @@ -433,42 +433,18 @@ MonoBehaviour: - {fileID: 661896457} - {fileID: 5059060190599569098, guid: e4263a04cf09ace4b8568f054ea426ee, type: 3} - {fileID: 5059060190599569098, guid: e4263a04cf09ace4b8568f054ea426ee, type: 3} - y: 220 - var14: 317 - var15: 8 - var16: -45 - var17: 15 - var18: -24 - go: {fileID: 5059060190599569098, guid: 5573ca52cac7c2d4cb2536e37e9be1f1, type: 3} - var19: 18 - var20: 34 - x: 0 + ints: 01000000080000000c00000010000000 var21: {fileID: 977748988} var22: {fileID: 2100000, guid: 7404c70251f9d0045a4aabaa49d83963, type: 2} - var23: {fileID: 2800000, guid: 944a8e7523b24474383ee2dc61c3bbf1, type: 3} + var23: {fileID: 2800000, guid: 45980f2b5045fab4a95e80d4cd1d91a8, type: 3} var24: {fileID: 8300000, guid: e83fc6426e5f2e0448cc3e51102509aa, type: 3} var25: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} - var26: {fileID: 5059060190599569098, guid: 5573ca52cac7c2d4cb2536e37e9be1f1, type: 3} - vars1: 01000000020000000300000004000000 var27: i: 2 strings: - MainCamera - Untagged - Respawn - var28: {fileID: 661896457} - var29: 1 - var30: 2 - var31: 3 - var1: 0 - stringValue: sho - var33: 0 - enumValue: 97 - var35: 0 - objectValue: {fileID: 0} - var36: 0 - floatValue: 1 - var37: 0 largeArray: - {fileID: 0} - {fileID: 0} @@ -489,26 +465,7 @@ MonoBehaviour: - {fileID: 0} - {fileID: 0} - {fileID: 0} - var38: 0 - dictionary: - pairs: [] - error: 0 - ints: 01000000080000000c00000010000000 q: {x: 0, y: 0, z: 0, w: 0} - gameObjects: - - {fileID: 0} - - {fileID: 0} - - {fileID: 5059060190599569098, guid: 5573ca52cac7c2d4cb2536e37e9be1f1, type: 3} - - {fileID: 0} - floats: - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - var39: 0 a1: -1 b1: 5.5 var40: 1.33 @@ -555,7 +512,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 17 + m_RootOrder: 18 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &685318310 GameObject: @@ -585,7 +542,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 20 + m_RootOrder: 21 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &752799891 GameObject: @@ -598,7 +555,7 @@ GameObject: - component: {fileID: 752799893} - component: {fileID: 752799892} m_Layer: 0 - m_Name: SerializeReferenceTest + m_Name: SerializeReference[Sample] m_TagString: Untagged m_Icon: {fileID: 2800000, guid: b105bf1fb7fe62e4baba0ffd7b433e7b, type: 3} m_NavMeshLayer: 0 @@ -616,31 +573,17 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: a0323e91bfeae1c488545bee770d3fa7, type: 3} m_Name: m_EditorClassIdentifier: - type1: - typeReference: SampleReferenceTest+Interface2, Assembly-CSharp - type2: - typeReference: SampleReferenceTest+Interface3, Assembly-CSharp - type3: - typeReference: SampleReferenceTest+ClassWithInterface, Assembly-CSharp - reference: + var1: id: 0 - reference2: - id: 1 + var2: + go: {fileID: 0} references: version: 1 00000000: - type: {class: SampleReference1, ns: , asm: Assembly-CSharp} - data: - var1: 0 - var2: 0 - 00000001: - type: {class: SampleReference2, ns: , asm: Assembly-CSharp} - data: - var1: 0 - var2: 0 + type: {class: , ns: , asm: } --- !u!4 &752799893 Transform: - m_ObjectHideFlags: 0 + m_ObjectHideFlags: 2 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} @@ -680,7 +623,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 18 + m_RootOrder: 19 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &959025297 GameObject: @@ -693,7 +636,7 @@ GameObject: - component: {fileID: 959025299} - component: {fileID: 959025298} m_Layer: 0 - m_Name: Sample GameObject1 + m_Name: RegularPropertyDrawers[Sample] m_TagString: Untagged m_Icon: {fileID: 2800000, guid: b105bf1fb7fe62e4baba0ffd7b433e7b, type: 3} m_NavMeshLayer: 0 @@ -711,7 +654,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: c96bc1945c12e5246b1faac636a63516, type: 3} m_Name: m_EditorClassIdentifier: - var1: 82 targetTag: Untagged progressBar: 25.4 newLabel: 25.4 @@ -827,7 +769,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 13 + m_RootOrder: 14 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!65 &977748989 BoxCollider: @@ -1000,6 +942,7 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 1220714191} + - component: {fileID: 1220714192} m_Layer: 0 m_Name: SerializedTypes[Sample] m_TagString: Untagged @@ -1009,7 +952,7 @@ GameObject: m_IsActive: 1 --- !u!4 &1220714191 Transform: - m_ObjectHideFlags: 0 + m_ObjectHideFlags: 2 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} @@ -1021,6 +964,43 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 10 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1220714192 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1220714190} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d496befd3f810f54d82e3f23eca099ff, type: 3} + m_Name: + m_EditorClassIdentifier: + type1: + typeReference: UnityEngine.MonoBehaviour, UnityEngine.CoreModule + type2: + typeReference: UnityEngine.UI.RawImage, UnityEngine.UI + type3: + typeReference: + 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 + dictionary: + pairs: + - key: 0 + value: {fileID: 977748987} + - key: 1 + value: {fileID: 2037155952} + error: 0 + date: + ticks: 637820719200000000 --- !u!1 &1221429486 GameObject: m_ObjectHideFlags: 0 @@ -1049,7 +1029,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 16 + m_RootOrder: 17 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1414023086 GameObject: @@ -1079,7 +1059,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 19 + m_RootOrder: 20 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1438743617 GameObject: @@ -1150,6 +1130,52 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 9 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1583836797 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1583836799} + - component: {fileID: 1583836798} + m_Layer: 0 + m_Name: Special&Others[Sample] + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1583836798 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1583836797} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c48a231d0fb97494d948757fb057b3ea, type: 3} + m_Name: + m_EditorClassIdentifier: + var1: 25.4 + var2: {fileID: 977748988} + var3: 0 +--- !u!4 &1583836799 +Transform: + m_ObjectHideFlags: 2 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1583836797} + 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 &1661307763 GameObject: m_ObjectHideFlags: 0 @@ -1178,7 +1204,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 12 + m_RootOrder: 13 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1670253091 GameObject: @@ -1231,8 +1257,9 @@ MonoBehaviour: var37: 0 enumValue: 97 var35: 0 + var41: 00000000000000000000000000000000 var39: 0 - var38: 0 + var40: 2 --- !u!1 &1972418676 GameObject: m_ObjectHideFlags: 0 @@ -1261,7 +1288,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 15 + m_RootOrder: 16 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &2033477348 GameObject: @@ -1321,7 +1348,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 14 + 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 fb3ad47f..1b5e6f81 100644 --- a/Assets/Examples/Scripts/SampleBehaviour1.cs +++ b/Assets/Examples/Scripts/SampleBehaviour1.cs @@ -4,60 +4,22 @@ [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. " + - "Check the SampleBehaviour1.cs script for more details.", Order = -1)] - - [Label("1", skinStyle: SkinStyle.Box)] - - [Help("You can provide more information in HelpBoxes.", Order = 100)] - public int var1; - - [Label("2", skinStyle: SkinStyle.Box)] + [Label("TagSelector", skinStyle: SkinStyle.Box)] [TagSelector] public string targetTag; - [Label("3", skinStyle: SkinStyle.Box)] + [Label("ProgressBar", skinStyle: SkinStyle.Box)] [ProgressBar(minValue: -10.0f, maxValue: 50.0f, HexColor = "#234DEA")] public float progressBar = 25.4f; - [Label("4", skinStyle: SkinStyle.Box)] - - [NewLabel("float")] - public float newLabel = 25.4f; - - [Label("5", skinStyle: SkinStyle.Box)] + [Label("MinMaxSlider", skinStyle: SkinStyle.Box)] [MinMaxSlider(10.0f, 100.0f)] public Vector2 var2; - [Label("6", skinStyle: SkinStyle.Box)] - - [IndentArea(1)] - public int var3 = 1; - [IndentArea(2)] - public int var4 = 2; - [IndentArea(3)] - public int var5 = 3; - - [Label("7", skinStyle: SkinStyle.Box)] - - [HideLabel] - public bool toggle1; - [Help("Use this toggle to show/hide property.", Order = 100)] - [HideIf(nameof(toggle1), true)] - public float var6; - - [Label("8", skinStyle: SkinStyle.Box)] - - [HideLabel] - public bool toggle2; - [Help("Use this toggle to enable/disable property.", Order = 100)] - [EnableIf(nameof(toggle2), true)] - public float var7; - - [Label("9", skinStyle: SkinStyle.Box)] + [Label("AssetPreview", skinStyle: SkinStyle.Box)] [AssetPreview] public GameObject var8; @@ -66,30 +28,17 @@ public class SampleBehaviour1 : MonoBehaviour [AssetPreview] public Transform preview; - [Label("10", skinStyle: SkinStyle.Box)] + [Label("Suffix", skinStyle: SkinStyle.Box)] [Suffix("kg")] public float var10; - [Label("11", skinStyle: SkinStyle.Box)] - - [ClassExtends(typeof(Object), TypeGrouping = TypeGrouping.ByNamespace)] - [Tooltip("This variable is able to serialize Type.")] - public SerializedType type1; - [ClassImplements(typeof(UnityEngine.UI.IMaskable), AddTextSearchField = true)] - public SerializedType type2; - - [Label("12", skinStyle: SkinStyle.Box)] - - [Disable] - public string var11 = "Im read only"; - - [Label("13", skinStyle: SkinStyle.Box)] + [Label("LeftToggle", skinStyle: SkinStyle.Box)] [LeftToggle] public bool var12; - [Label("14", skinStyle: SkinStyle.Box)] + [Label("EnumToggles", skinStyle: SkinStyle.Box)] [EnumToggles] public FlagExample enumFlag = FlagExample.Flag1 | FlagExample.Flag2; @@ -110,50 +59,40 @@ public enum FlagExample Everything = ~0 } - [Label("15", skinStyle: SkinStyle.Box)] - - [NotNull] - public Transform var13; - - [Label("16", skinStyle: SkinStyle.Box)] - - //NOTE: examples - [Random(-10.0f, 10.0f)] - public float randomValue; - - [Label("17", skinStyle: SkinStyle.Box)] + [Label("Directory", skinStyle: SkinStyle.Box)] [Directory] public string directory; - [Label("18", skinStyle: SkinStyle.Box)] + [Label("SceneName", skinStyle: SkinStyle.Box)] [SceneName] public string sceneName; - [Label("19", skinStyle: SkinStyle.Box)] + [Label("Preset", skinStyle: SkinStyle.Box)] [Preset(nameof(presetValues)), Tooltip("Pick value")] public int presetTarget; private readonly int[] presetValues = new[] { 1, 2, 3, 4, 5 }; - [Label("20", skinStyle: SkinStyle.Box)] + [Label("SearchableEnum", skinStyle: SkinStyle.Box)] [SearchableEnum] public KeyCode enumSearch; - [Label("21", skinStyle: SkinStyle.Box)] - - [Clamp(0.0f, 11.2f)] - public double clampedValue; - - [Label("22", skinStyle: SkinStyle.Box)] + [Label("Password", skinStyle: SkinStyle.Box)] [Password] public string password; - [Label("23", skinStyle: SkinStyle.Box)] + [Label("Validation", skinStyle: SkinStyle.Box)] + + [NotNull] + public Transform var13; + + [Clamp(0.0f, 11.2f)] + public double clampedValue; [SceneObjectOnly] public GameObject sceneReference; @@ -162,13 +101,7 @@ public enum FlagExample [PrefabObjectOnly] public GameObject prefabReference; - [Label("24", skinStyle: SkinStyle.Box)] - - //NOTE: examples - [HexColor] - public string hexColor; - - [Label("25", skinStyle: SkinStyle.Box)] + [Label("LabelByChild", skinStyle: SkinStyle.Box)] [LabelByChild("var3.var2")] public SampleClass1 sampleField; @@ -190,27 +123,15 @@ public class SampleClass2 public string var2; } - [Label("26", skinStyle: SkinStyle.Box)] - - public SerializedScene scene1; - [SceneDetails] - public SerializedScene scene2; - - [Label("27", skinStyle: SkinStyle.Box)] + [Label("FormattedNumber", skinStyle: SkinStyle.Box)] [FormattedNumber] public int bigNumber; [FormattedNumber("c")] public float currency; - [Label("28", skinStyle: SkinStyle.Box)] - - public SerializedDateTime dateTime; - -#if UNITY_EDITOR private void OnValidate() { var9 = var8; } -#endif } \ No newline at end of file diff --git a/Assets/Examples/Scripts/SampleBehaviour2.cs b/Assets/Examples/Scripts/SampleBehaviour2.cs index 4bdf4719..945bf029 100644 --- a/Assets/Examples/Scripts/SampleBehaviour2.cs +++ b/Assets/Examples/Scripts/SampleBehaviour2.cs @@ -1,69 +1,26 @@ -using System.Collections; -using UnityEngine; +using UnityEngine; [ExecuteAlways] [AddComponentMenu("Editor Toolbox/Cheat Sheet 2 (Toolbox Property)")] public class SampleBehaviour2 : MonoBehaviour { - 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("Toolbox Property Attributes", skinStyle: SkinStyle.Box, Alignment = TextAnchor.MiddleCenter, Asset = "UnityEditor.InspectorWindow")] - [EditorButton(nameof(TestMethod), Tooltip = "Custom Tooltip")] - [EditorButton(nameof(TestCoroutine), "Test Coroutine", activityType: ButtonActivityType.OnPlayMode)] - [EditorButton(nameof(TestStaticMethod), activityType: ButtonActivityType.OnEditMode)] - - [Help("This sample component provides additional inspector extensions (drawers and associated attributes) implemented in the Editor Toolbox plugin. " + - "Check the SampleBehaviour2.cs script for more details.", Order = -1)] - - [Label("Toolbox Attributes", skinStyle: SkinStyle.Box, Alignment = TextAnchor.MiddleCenter, Asset = "UnityEditor.InspectorWindow")] - - [Label("1", skinStyle: SkinStyle.Box)] + [Label("ReorderableList", skinStyle: SkinStyle.Box)] [ReorderableList(ListStyle.Round, elementLabel: "GameObject"), Tooltip("Sample List")] [InLineEditor] public GameObject[] list; - [Label("2", skinStyle: SkinStyle.Box)] - - [BeginGroup("Parent group")] - public int y; - [BeginGroup("Nested group")] - public int var14; - [Line] - public int var15; - 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("3", skinStyle: SkinStyle.Box)] + [ReorderableListExposed(OverrideNewElementMethodName = nameof(GetValue))] + public int[] ints; + + public int GetValue() + { + return ints.Length * Random.Range(1, 5); + } + + [Label("InLineEditor", skinStyle: SkinStyle.Box)] [InLineEditor(DisableEditor = false)] public Transform var21; @@ -80,13 +37,10 @@ private static void TestStaticMethod() [InLineEditor] public Mesh var25; - [InLineEditor(drawPreview: true)] - public GameObject var26; - - [Label("4", skinStyle: SkinStyle.Box)] + [Label("Nested Properties", skinStyle: SkinStyle.Box)] - [Disable] - public int[] vars1 = new[] { 1, 2, 3, 4 }; + [Help("You can use Toolbox Properties inside serializable types without limitations.")] + public SampleNestedClass var27; [System.Serializable] public class SampleNestedClass @@ -96,114 +50,17 @@ public class SampleNestedClass public string[] strings; } - [Label("5", skinStyle: SkinStyle.Box)] - - public SampleNestedClass var27; - - [Label("6", skinStyle: SkinStyle.Box)] - - [Highlight(0, 1, 0)] - public GameObject var28; - - [Label("7", skinStyle: SkinStyle.Box)] - - [BeginHorizontal(labelToWidthRatio: 0.1f)] - public int var29; - public int var30; - //NOTE: custom sample created within the Examples - //[Sample] - [EndHorizontal] - public int var31; - - [Label("8", skinStyle: SkinStyle.Box)] - - [ImageArea("https://img.itch.zone/aW1nLzE5Mjc3NzUucG5n/original/Viawjm.png", 180.0f)] - public int var1; - - [Label("9", skinStyle: SkinStyle.Box)] - - public string stringValue = "sho"; - [ShowIf(nameof(GetStringValue), "show")] - public int var33; - - public string GetStringValue() - { - return stringValue; - } - - [SpaceArea] - - public KeyCode enumValue = KeyCode.A; - [DisableIf(nameof(enumValue), KeyCode.A)] - public int var35; - - [SpaceArea] - - public GameObject objectValue; - [HideIf(nameof(ObjectValue), false)] - public int var36; - - private GameObject ObjectValue - { - get => objectValue; - } - - [SpaceArea] - - public float floatValue = 1.0f; - [EnableIf(nameof(floatValue), 0.5f, Comparison = UnityComparisonMethod.Greater)] - public int var37; - - [Label("10", skinStyle: SkinStyle.Box)] + [Label("ScrollableItems", skinStyle: SkinStyle.Box)] [ScrollableItems(defaultMinIndex: 0, defaultMaxIndex: 5)] public GameObject[] largeArray = new GameObject[19]; - [Label("11", skinStyle: SkinStyle.Box)] - - [DisableInPlayMode] - public int var38; - -#if UNITY_2020_1_OR_NEWER - [Label("12", skinStyle: SkinStyle.Box)] - - [Help("Assign dedicated drawer in the Toolbox Settings")] - public SerializedDictionary dictionary; -#endif - - [Label("13", skinStyle: SkinStyle.Box)] - - [ReorderableListExposed(OverrideNewElementMethodName = nameof(GetValue))] - public int[] ints; - - public int GetValue() - { - return ints.Length * Random.Range(1, 5); - } - - [Label("14", skinStyle: SkinStyle.Box)] + [Label("Ignore Parent", skinStyle: SkinStyle.Box)] [IgnoreParent] public Quaternion q; - [Label("15", skinStyle: SkinStyle.Box)] - - [BeginHorizontalGroup(label: "Horizontal Group")] - [ReorderableList(Foldable = true), InLineEditor] - public GameObject[] gameObjects; - [SpaceArea] - [EndHorizontalGroup] - [ReorderableList] - public float[] floats; - - [Label("16", skinStyle: SkinStyle.Box)] - - [DynamicHelp(nameof(MessageSource))] - public int var39; - - public string MessageSource => string.Format("Dynamic Message Source. {0} = {1}", nameof(var39), var39); - - [Label("17", skinStyle: SkinStyle.Box)] + [Label("Dynamic Range & MinMaxSlider", skinStyle: SkinStyle.Box)] public float a1 = -1; public float b1 = 5.5f; diff --git a/Assets/Examples/Scripts/SampleBehaviour3.cs b/Assets/Examples/Scripts/SampleBehaviour3.cs index 4c14bcd5..5af9baf2 100644 --- a/Assets/Examples/Scripts/SampleBehaviour3.cs +++ b/Assets/Examples/Scripts/SampleBehaviour3.cs @@ -44,10 +44,15 @@ private GameObject ObjectValue [Label("Disable", skinStyle: SkinStyle.Box)] [Disable] - public int var39; + public int[] var41= new int[4]; [Label("Disable In Playmode", skinStyle: SkinStyle.Box)] [DisableInPlayMode] - public int var38; + public int var39; + + [Label("Show Warning If", skinStyle: SkinStyle.Box)] + + [ShowWarningIf(nameof(var40), 3, "Value has to be greater than 3", Comparison = UnityComparisonMethod.LessEqual, DisableField = false)] + public int var40; } \ No newline at end of file diff --git a/Assets/Examples/Scripts/SampleBehaviour4.cs b/Assets/Examples/Scripts/SampleBehaviour4.cs index 181f0549..78b9736b 100644 --- a/Assets/Examples/Scripts/SampleBehaviour4.cs +++ b/Assets/Examples/Scripts/SampleBehaviour4.cs @@ -7,7 +7,9 @@ public class SampleBehaviour4 : MonoBehaviour { [Label("Help", skinStyle: SkinStyle.Box)] - [Help("Very useful information", UnityMessageType.Warning)] + [Help("Very useful warning", UnityMessageType.Warning)] + [Help("This error example", UnityMessageType.Error)] + [Help("Simple information", UnityMessageType.Info)] public int var0; [Label("Button", skinStyle: SkinStyle.Box)] diff --git a/Assets/Examples/Scripts/SampleBehaviour5.cs b/Assets/Examples/Scripts/SampleBehaviour5.cs new file mode 100644 index 00000000..d40ee84d --- /dev/null +++ b/Assets/Examples/Scripts/SampleBehaviour5.cs @@ -0,0 +1,33 @@ +using UnityEngine; +using UnityEngine.UI; + +[ExecuteAlways] +[AddComponentMenu("Editor Toolbox/Cheat Sheet 5 (Serialized Types)")] +public class SampleBehaviour5 : MonoBehaviour +{ + [Label("Serialized Type", skinStyle: SkinStyle.Box)] + + [TypeConstraint(typeof(MonoBehaviour), AllowAbstract = false, AllowObsolete = false, TypeGrouping = TypeGrouping.ByAddComponentMenu)] + public SerializedType type1; + [TypeConstraint(typeof(IMaskable), AddTextSearchField = true)] + public SerializedType type2; + [TypeConstraint(typeof(IMaskable), AddTextSearchField = true, TypeSettings = TypeSettings.Interface)] + public SerializedType type3; + + [Label("Serialized Scene", skinStyle: SkinStyle.Box)] + + public SerializedScene scene1; + [SceneDetails] + public SerializedScene scene2; + + [Label("Serialized Dictionary", skinStyle: SkinStyle.Box)] + +#if UNITY_2020_1_OR_NEWER + [Help("Assign dedicated drawer in the Toolbox Settings")] + public SerializedDictionary dictionary; +#endif + + [Label("Serialized DateTime", skinStyle: SkinStyle.Box)] + + public SerializedDateTime date; +} \ No newline at end of file diff --git a/Assets/Examples/Scripts/SampleReferenceBase.cs.meta b/Assets/Examples/Scripts/SampleBehaviour5.cs.meta similarity index 83% rename from Assets/Examples/Scripts/SampleReferenceBase.cs.meta rename to Assets/Examples/Scripts/SampleBehaviour5.cs.meta index c46d9bf3..0610176f 100644 --- a/Assets/Examples/Scripts/SampleReferenceBase.cs.meta +++ b/Assets/Examples/Scripts/SampleBehaviour5.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 74dec091263855049b8066a558d5c2f5 +guid: d496befd3f810f54d82e3f23eca099ff MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/Examples/Scripts/SampleBehaviour6.cs b/Assets/Examples/Scripts/SampleBehaviour6.cs new file mode 100644 index 00000000..b668df0d --- /dev/null +++ b/Assets/Examples/Scripts/SampleBehaviour6.cs @@ -0,0 +1,42 @@ +using System; +using UnityEngine; + +[ExecuteAlways] +[AddComponentMenu("Editor Toolbox/Cheat Sheet 6 (Serialize Reference)")] +public class SampleBehaviour6 : MonoBehaviour +{ + [SerializeReference, ReferencePicker] + public Interface1 var1; + public ClassWithInterface var2; + + public interface Interface1 { } + public interface Interface2 : Interface1 { } + public interface Interface3 : Interface1 { } + public interface Interface4 : Interface2 { } + public interface Interface4 : Interface3 { } + + [Serializable] + public struct Struct : Interface1 + { + public int a; + } + + [Serializable] + public class ClassWithInterface : Interface1 + { + public GameObject go; + } + + [Serializable] + public class ClassWithInterface1 : Interface1 + { + [LeftToggle] + public bool a; + } + + [Serializable] + public class ClassWithInterface2 : Interface1 + { + public int i; + } +} \ No newline at end of file diff --git a/Assets/Examples/Scripts/SampleReferenceTest.cs.meta b/Assets/Examples/Scripts/SampleBehaviour6.cs.meta similarity index 100% rename from Assets/Examples/Scripts/SampleReferenceTest.cs.meta rename to Assets/Examples/Scripts/SampleBehaviour6.cs.meta diff --git a/Assets/Examples/Scripts/SampleBehaviour7.cs b/Assets/Examples/Scripts/SampleBehaviour7.cs new file mode 100644 index 00000000..e68838c5 --- /dev/null +++ b/Assets/Examples/Scripts/SampleBehaviour7.cs @@ -0,0 +1,19 @@ +using UnityEngine; + +[ExecuteAlways] +[AddComponentMenu("Editor Toolbox/Cheat Sheet 7 (Special & Others)")] +public class SampleBehaviour7 : MonoBehaviour +{ + [Label("NewLabel", skinStyle: SkinStyle.Box)] + + [NewLabel("float")] + public float var1 = 25.4f; + [NewLabel("My custom label")] + [InLineEditor] + public Transform var2; + + [Label("HideLabel", skinStyle: SkinStyle.Box)] + + [HideLabel] + public int var3; +} \ No newline at end of file diff --git a/Assets/Examples/Scripts/SampleReference1.cs.meta b/Assets/Examples/Scripts/SampleBehaviour7.cs.meta similarity index 83% rename from Assets/Examples/Scripts/SampleReference1.cs.meta rename to Assets/Examples/Scripts/SampleBehaviour7.cs.meta index 5fe40e7a..fb47b1cc 100644 --- a/Assets/Examples/Scripts/SampleReference1.cs.meta +++ b/Assets/Examples/Scripts/SampleBehaviour7.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: f153a97b0fa5f31479d8347b2ac57955 +guid: c48a231d0fb97494d948757fb057b3ea MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/Examples/Scripts/SampleReference1.cs b/Assets/Examples/Scripts/SampleReference1.cs deleted file mode 100644 index c934a0ba..00000000 --- a/Assets/Examples/Scripts/SampleReference1.cs +++ /dev/null @@ -1,7 +0,0 @@ -using System; - -[Serializable] -public class SampleReference1 : SampleReferenceBase -{ - public bool var2; -} \ No newline at end of file diff --git a/Assets/Examples/Scripts/SampleReference2.cs b/Assets/Examples/Scripts/SampleReference2.cs deleted file mode 100644 index 63184c01..00000000 --- a/Assets/Examples/Scripts/SampleReference2.cs +++ /dev/null @@ -1,7 +0,0 @@ -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 deleted file mode 100644 index eff50574..00000000 --- a/Assets/Examples/Scripts/SampleReference2.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -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 deleted file mode 100644 index 42e1a624..00000000 --- a/Assets/Examples/Scripts/SampleReferenceBase.cs +++ /dev/null @@ -1,7 +0,0 @@ -using System; - -[Serializable] -public abstract class SampleReferenceBase -{ - public float var1; -} diff --git a/Assets/Examples/Scripts/SampleReferenceTest.cs b/Assets/Examples/Scripts/SampleReferenceTest.cs deleted file mode 100644 index deec56a8..00000000 --- a/Assets/Examples/Scripts/SampleReferenceTest.cs +++ /dev/null @@ -1,24 +0,0 @@ -using UnityEngine; - -public class SampleReferenceTest : MonoBehaviour -{ - [TypeConstraint(typeof(Interface1), AddTextSearchField = true)] - public SerializedType type1; - [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 class ClassWithInterface : Interface1 { } -} \ No newline at end of file diff --git a/Assets/Examples/Scripts/TooltipTest.cs b/Assets/Examples/Scripts/TooltipTest.cs deleted file mode 100644 index b7878e5b..00000000 --- a/Assets/Examples/Scripts/TooltipTest.cs +++ /dev/null @@ -1,9 +0,0 @@ -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 deleted file mode 100644 index a6749879..00000000 --- a/Assets/Examples/Scripts/TooltipTest.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: abfd755f360ea2942b5e99ed9a8a386e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: From 2a10dc2f9206e4fb824d49a82e61c59d4d60a41c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mi=C5=82osz=20Matkowski?= Date: Sun, 8 May 2022 00:44:18 +0200 Subject: [PATCH 42/49] Fix getting preview target in the AssetPreviewAttributeDrawer --- .../Editor/Drawers/Regular/AssetPreviewAttributeDrawer.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/Editor Toolbox/Editor/Drawers/Regular/AssetPreviewAttributeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Regular/AssetPreviewAttributeDrawer.cs index 5daae82b..1424fb9a 100644 --- a/Assets/Editor Toolbox/Editor/Drawers/Regular/AssetPreviewAttributeDrawer.cs +++ b/Assets/Editor Toolbox/Editor/Drawers/Regular/AssetPreviewAttributeDrawer.cs @@ -56,7 +56,7 @@ private void DrawAssetPreview(Rect rect, Texture2D previewTexture) protected override float GetPropertyHeightSafe(SerializedProperty property, GUIContent label) { - var target = property.objectReferenceValue; + var target = GetValidTarget(property.objectReferenceValue); var previewTexture = AssetPreview.GetAssetPreview(target); if (previewTexture == null) { From 657486eb494d348bc750d58a4152fe54fc182b80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mi=C5=82osz=20Matkowski?= Date: Sun, 8 May 2022 11:29:34 +0200 Subject: [PATCH 43/49] Update samples --- Assets/Examples/Scenes/SampleScene.unity | 49 +++++++-------------- Assets/Examples/Scripts/SampleBehaviour1.cs | 30 ++++++------- Assets/Examples/Scripts/SampleBehaviour2.cs | 15 ++++--- Assets/Examples/Scripts/SampleBehaviour4.cs | 13 +++++- Assets/Examples/Scripts/SampleBehaviour6.cs | 23 +++++----- 5 files changed, 64 insertions(+), 66 deletions(-) diff --git a/Assets/Examples/Scenes/SampleScene.unity b/Assets/Examples/Scenes/SampleScene.unity index 1bc3e64f..1bdf4b5f 100644 --- a/Assets/Examples/Scenes/SampleScene.unity +++ b/Assets/Examples/Scenes/SampleScene.unity @@ -433,6 +433,10 @@ MonoBehaviour: - {fileID: 661896457} - {fileID: 5059060190599569098, guid: e4263a04cf09ace4b8568f054ea426ee, type: 3} - {fileID: 5059060190599569098, guid: e4263a04cf09ace4b8568f054ea426ee, type: 3} + strings: + - a + - b + - c ints: 01000000080000000c00000010000000 var21: {fileID: 977748988} var22: {fileID: 2100000, guid: 7404c70251f9d0045a4aabaa49d83963, type: 2} @@ -576,11 +580,18 @@ MonoBehaviour: var1: id: 0 var2: - go: {fileID: 0} + id: 1 references: version: 1 00000000: - type: {class: , ns: , asm: } + type: {class: SampleBehaviour6/Struct, ns: , asm: Assembly-CSharp} + data: + var1: 1 + var2: 1 + 00000001: + type: {class: SampleBehaviour6/ClassWithInterface2, ns: , asm: Assembly-CSharp} + data: + var1: 0 --- !u!4 &752799893 Transform: m_ObjectHideFlags: 2 @@ -656,38 +667,22 @@ MonoBehaviour: m_EditorClassIdentifier: targetTag: Untagged progressBar: 25.4 - newLabel: 25.4 var2: {x: 30.418846, y: 60.78535} - var3: 1 - var4: 2 - var5: 3 - toggle1: 0 - var6: 0 - toggle2: 1 - var7: 21.44 var8: {fileID: 977748987} - var9: {fileID: 977748987} preview: {fileID: 5059060190599569102, guid: 5573ca52cac7c2d4cb2536e37e9be1f1, type: 3} var10: 2.16 - type1: - typeReference: - type2: - typeReference: TMPro.TMP_SubMeshUI, Unity.TextMeshPro - var11: Im read only var12: 0 enumFlag: 12 - var13: {fileID: 0} - randomValue: -7.3907948 directory: Editor Toolbox/Editors sceneName: SampleScen presetTarget: 4 enumSearch: 8 - clampedValue: 4.699999809265137 password: password + var13: {fileID: 0} + clampedValue: 4.699999809265137 sceneReference: {fileID: 0} childReference: {fileID: 0} prefabReference: {fileID: 0} - hexColor: 4D7AC0FF sampleField: var1: {fileID: 2100000, guid: 7404c70251f9d0045a4aabaa49d83963, type: 2} var2: 0 @@ -710,20 +705,8 @@ MonoBehaviour: var3: var1: 0 var2: - 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 - dateTime: - ticks: 631466100000000000 --- !u!4 &959025299 Transform: m_ObjectHideFlags: 2 @@ -1116,6 +1099,8 @@ MonoBehaviour: var28: {fileID: 0} var39: 18 var55: 0 + var56: 0 + var57: 0 --- !u!4 &1438743619 Transform: m_ObjectHideFlags: 2 diff --git a/Assets/Examples/Scripts/SampleBehaviour1.cs b/Assets/Examples/Scripts/SampleBehaviour1.cs index 1b5e6f81..2d9e74fb 100644 --- a/Assets/Examples/Scripts/SampleBehaviour1.cs +++ b/Assets/Examples/Scripts/SampleBehaviour1.cs @@ -4,27 +4,25 @@ [AddComponentMenu("Editor Toolbox/Cheat Sheet 1 (Regular)")] public class SampleBehaviour1 : MonoBehaviour { - [Label("TagSelector", skinStyle: SkinStyle.Box)] + [Label("Tag Selector", skinStyle: SkinStyle.Box)] [TagSelector] public string targetTag; - [Label("ProgressBar", skinStyle: SkinStyle.Box)] + [Label("Progress Bar", skinStyle: SkinStyle.Box)] [ProgressBar(minValue: -10.0f, maxValue: 50.0f, HexColor = "#234DEA")] public float progressBar = 25.4f; - [Label("MinMaxSlider", skinStyle: SkinStyle.Box)] + [Label("MinMax Slider", skinStyle: SkinStyle.Box)] [MinMaxSlider(10.0f, 100.0f)] public Vector2 var2; - [Label("AssetPreview", skinStyle: SkinStyle.Box)] + [Label("Asset Preview", skinStyle: SkinStyle.Box)] [AssetPreview] public GameObject var8; - [AssetPreview(useLabel: false), Help("Who needs label?")] - public GameObject var9; [AssetPreview] public Transform preview; @@ -33,12 +31,12 @@ public class SampleBehaviour1 : MonoBehaviour [Suffix("kg")] public float var10; - [Label("LeftToggle", skinStyle: SkinStyle.Box)] + [Label("Left Toggle", skinStyle: SkinStyle.Box)] [LeftToggle] public bool var12; - [Label("EnumToggles", skinStyle: SkinStyle.Box)] + [Label("Enum Toggles", skinStyle: SkinStyle.Box)] [EnumToggles] public FlagExample enumFlag = FlagExample.Flag1 | FlagExample.Flag2; @@ -64,7 +62,7 @@ public enum FlagExample [Directory] public string directory; - [Label("SceneName", skinStyle: SkinStyle.Box)] + [Label("Scene Name", skinStyle: SkinStyle.Box)] [SceneName] public string sceneName; @@ -76,7 +74,7 @@ public enum FlagExample private readonly int[] presetValues = new[] { 1, 2, 3, 4, 5 }; - [Label("SearchableEnum", skinStyle: SkinStyle.Box)] + [Label("Searchable Enum", skinStyle: SkinStyle.Box)] [SearchableEnum] public KeyCode enumSearch; @@ -88,6 +86,9 @@ public enum FlagExample [Label("Validation", skinStyle: SkinStyle.Box)] + [Help("NotNullAttribute, ClampAttribute, SceneObjectOnlyAttribute, ChildObjectOnlyAttribute, PrefabObjectOnlyAttribute " + + "are part of group that will be re-implemented in future as ToolboxValidationAttributes. " + + "Unfortunately, for now, you can't use them together with any other PropertyDrawer.", UnityMessageType.Warning)] [NotNull] public Transform var13; @@ -101,7 +102,7 @@ public enum FlagExample [PrefabObjectOnly] public GameObject prefabReference; - [Label("LabelByChild", skinStyle: SkinStyle.Box)] + [Label("Label By Child", skinStyle: SkinStyle.Box)] [LabelByChild("var3.var2")] public SampleClass1 sampleField; @@ -123,15 +124,10 @@ public class SampleClass2 public string var2; } - [Label("FormattedNumber", skinStyle: SkinStyle.Box)] + [Label("Formatted Number", skinStyle: SkinStyle.Box)] [FormattedNumber] public int bigNumber; [FormattedNumber("c")] public float currency; - - private void OnValidate() - { - var9 = var8; - } } \ No newline at end of file diff --git a/Assets/Examples/Scripts/SampleBehaviour2.cs b/Assets/Examples/Scripts/SampleBehaviour2.cs index 945bf029..6d6fcccb 100644 --- a/Assets/Examples/Scripts/SampleBehaviour2.cs +++ b/Assets/Examples/Scripts/SampleBehaviour2.cs @@ -6,12 +6,16 @@ public class SampleBehaviour2 : MonoBehaviour { [Label("Toolbox Property Attributes", skinStyle: SkinStyle.Box, Alignment = TextAnchor.MiddleCenter, Asset = "UnityEditor.InspectorWindow")] - [Label("ReorderableList", skinStyle: SkinStyle.Box)] + [Label("Reorderable List", skinStyle: SkinStyle.Box)] - [ReorderableList(ListStyle.Round, elementLabel: "GameObject"), Tooltip("Sample List")] + [Tooltip("Sample List")] + [ReorderableList(ListStyle.Round, elementLabel: "GameObject", Foldable = true)] [InLineEditor] public GameObject[] list; + [ReorderableList(ListStyle.Lined, "String", true, false)] + public string[] strings; + [ReorderableListExposed(OverrideNewElementMethodName = nameof(GetValue))] public int[] ints; @@ -20,7 +24,7 @@ public int GetValue() return ints.Length * Random.Range(1, 5); } - [Label("InLineEditor", skinStyle: SkinStyle.Box)] + [Label("InLine Editor", skinStyle: SkinStyle.Box)] [InLineEditor(DisableEditor = false)] public Transform var21; @@ -45,12 +49,13 @@ public int GetValue() [System.Serializable] public class SampleNestedClass { + [Tooltip("Set to 1")] public int i = 0; [DisableIf(nameof(i), 1), ReorderableList, TagSelector] public string[] strings; } - [Label("ScrollableItems", skinStyle: SkinStyle.Box)] + [Label("Scrollable Items", skinStyle: SkinStyle.Box)] [ScrollableItems(defaultMinIndex: 0, defaultMaxIndex: 5)] public GameObject[] largeArray = new GameObject[19]; @@ -60,7 +65,7 @@ public class SampleNestedClass [IgnoreParent] public Quaternion q; - [Label("Dynamic Range & MinMaxSlider", skinStyle: SkinStyle.Box)] + [Label("Dynamic Range & MinMax Slider", skinStyle: SkinStyle.Box)] public float a1 = -1; public float b1 = 5.5f; diff --git a/Assets/Examples/Scripts/SampleBehaviour4.cs b/Assets/Examples/Scripts/SampleBehaviour4.cs index 78b9736b..b702b1c6 100644 --- a/Assets/Examples/Scripts/SampleBehaviour4.cs +++ b/Assets/Examples/Scripts/SampleBehaviour4.cs @@ -1,4 +1,5 @@ using System.Collections; + using UnityEngine; [ExecuteAlways] @@ -82,7 +83,7 @@ private static void TestStaticMethod() public float[] floats; [Label("Indentation", skinStyle: SkinStyle.Box)] - + public int var2; [BeginIndent] public int var3; @@ -107,4 +108,14 @@ private static void TestStaticMethod() [ImageArea("https://img.itch.zone/aW1nLzE5Mjc3NzUucG5n/original/Viawjm.png", 180.0f)] public int var55; + + [Label("GUI Color", skinStyle: SkinStyle.Box)] + + [GuiColor(1, 0, 0)] + public int var56; + + [Label("Title", skinStyle: SkinStyle.Box)] + + [Title("Standard Title")] + public int var57; } \ No newline at end of file diff --git a/Assets/Examples/Scripts/SampleBehaviour6.cs b/Assets/Examples/Scripts/SampleBehaviour6.cs index b668df0d..b322b166 100644 --- a/Assets/Examples/Scripts/SampleBehaviour6.cs +++ b/Assets/Examples/Scripts/SampleBehaviour6.cs @@ -1,4 +1,5 @@ using System; + using UnityEngine; [ExecuteAlways] @@ -7,36 +8,36 @@ public class SampleBehaviour6 : MonoBehaviour { [SerializeReference, ReferencePicker] public Interface1 var1; - public ClassWithInterface var2; + [SerializeReference, ReferencePicker] + public ClassWithInterfaceBase var2; public interface Interface1 { } - public interface Interface2 : Interface1 { } - public interface Interface3 : Interface1 { } - public interface Interface4 : Interface2 { } - public interface Interface4 : Interface3 { } [Serializable] public struct Struct : Interface1 { - public int a; + public bool var1; + public bool var2; } + public abstract class ClassWithInterfaceBase : Interface1 { } + [Serializable] - public class ClassWithInterface : Interface1 + public class ClassWithInterface1 : ClassWithInterfaceBase { public GameObject go; } [Serializable] - public class ClassWithInterface1 : Interface1 + public class ClassWithInterface2 : ClassWithInterfaceBase { [LeftToggle] - public bool a; + public bool var1; } [Serializable] - public class ClassWithInterface2 : Interface1 + public class ClassWithInterface3 : ClassWithInterfaceBase { - public int i; + public int var1; } } \ No newline at end of file From da79104c7a02755eaaa80dc120bb285d01dd9c8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mi=C5=82osz=20Matkowski?= Date: Sun, 8 May 2022 12:43:48 +0200 Subject: [PATCH 44/49] Minor fixes --- .../Regular/FormattedNumberAttributeDrawer.cs | 4 ++ .../Editor/Internal/TypeConstraintContext.cs | 6 ++ .../Editor/Internal/TypeConstraintStandard.cs | 2 +- .../Editor/Utilities/TypeUtilities.cs | 62 ++++++++++++++----- .../Tests/Editor/TypesFilteringTest.cs | 2 +- Assets/Examples/Scripts/SampleBehaviour6.cs | 2 + 6 files changed, 62 insertions(+), 16 deletions(-) diff --git a/Assets/Editor Toolbox/Editor/Drawers/Regular/FormattedNumberAttributeDrawer.cs b/Assets/Editor Toolbox/Editor/Drawers/Regular/FormattedNumberAttributeDrawer.cs index c43df3f0..64bbecae 100644 --- a/Assets/Editor Toolbox/Editor/Drawers/Regular/FormattedNumberAttributeDrawer.cs +++ b/Assets/Editor Toolbox/Editor/Drawers/Regular/FormattedNumberAttributeDrawer.cs @@ -55,7 +55,11 @@ protected override void OnGUISafe(Rect position, SerializedProperty property, GU } else { +#if UNITY_2019_2_OR_NEWER position.xMin += EditorGUIUtility.labelWidth + EditorGUIUtility.standardVerticalSpacing; +#else + position.xMin += EditorGUIUtility.labelWidth; +#endif } var targetAttribute = attribute as FormattedNumberAttribute; diff --git a/Assets/Editor Toolbox/Editor/Internal/TypeConstraintContext.cs b/Assets/Editor Toolbox/Editor/Internal/TypeConstraintContext.cs index 244428d0..32d5a4d5 100644 --- a/Assets/Editor Toolbox/Editor/Internal/TypeConstraintContext.cs +++ b/Assets/Editor Toolbox/Editor/Internal/TypeConstraintContext.cs @@ -16,7 +16,13 @@ public TypeConstraintContext(Type targetType) public virtual bool IsSatisfied(Type type) { +#if UNITY_2019_2_OR_NEWER return type.IsVisible; +#else + return type.IsVisible && (targetType.IsGenericType + ? targetType.IsAssignableFromGeneric(type) + : targetType.IsAssignableFrom(type)); +#endif } public virtual void ApplyTarget(Type type) diff --git a/Assets/Editor Toolbox/Editor/Internal/TypeConstraintStandard.cs b/Assets/Editor Toolbox/Editor/Internal/TypeConstraintStandard.cs index 404c51bf..d6265f98 100644 --- a/Assets/Editor Toolbox/Editor/Internal/TypeConstraintStandard.cs +++ b/Assets/Editor Toolbox/Editor/Internal/TypeConstraintStandard.cs @@ -22,7 +22,7 @@ public override bool IsSatisfied(Type type) 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.IsAbstract || (Settings.HasFlag(TypeSettings.Interface) && type.IsInterface) || AllowAbstract) && (!type.IsInterface || Settings.HasFlag(TypeSettings.Interface)) && (!Attribute.IsDefined(type, typeof(ObsoleteAttribute)) || AllowObsolete); } diff --git a/Assets/Editor Toolbox/Editor/Utilities/TypeUtilities.cs b/Assets/Editor Toolbox/Editor/Utilities/TypeUtilities.cs index be715adb..c2490e22 100644 --- a/Assets/Editor Toolbox/Editor/Utilities/TypeUtilities.cs +++ b/Assets/Editor Toolbox/Editor/Utilities/TypeUtilities.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Reflection; using UnityEditor; @@ -42,20 +43,7 @@ public static TypesCachedCollection GetCollection(TypeConstraintContext constrai return new TypesCachedCollection(); } - var typesCache = TypeCache.GetTypesDerivedFrom(parentType); - var typesList = typesCache.ToList(); - typesList.Add(parentType); - for (var i = typesList.Count - 1; i >= 0; i--) - { - var type = typesList[i]; - if (constraint.IsSatisfied(type)) - { - continue; - } - - typesList.RemoveAt(i); - } - + var typesList = FindTypes(constraint); return cachedCollections[key] = new TypesCachedCollection(typesList); } @@ -90,5 +78,51 @@ public static bool TryGetTypeFromManagedReferenceFullTypeName(string managedRefe return false; } + + public static List FindTypes(TypeConstraintContext constraint) + { +#if UNITY_2019_2_OR_NEWER + var parentType = constraint.TargetType; + var typesCache = TypeCache.GetTypesDerivedFrom(parentType); + var typesList = typesCache.ToList(); + typesList.Add(parentType); + for (var i = typesList.Count - 1; i >= 0; i--) + { + var type = typesList[i]; + if (constraint.IsSatisfied(type)) + { + continue; + } + + typesList.RemoveAt(i); + } +#else + var typesList = new List(); + var assemblies = AppDomain.CurrentDomain.GetAssemblies(); + foreach (var assembly in assemblies) + { + typesList.AddRange(FindTypes(constraint, assembly)); + } + + typesList.Sort((a, b) => a.FullName.CompareTo(b.FullName)); +#endif + return typesList; + } + + public static List FindTypes(TypeConstraintContext constraint, Assembly assembly) + { + var types = new List(); + foreach (var type in assembly.GetTypes()) + { + if (!constraint.IsSatisfied(type)) + { + continue; + } + + types.Add(type); + } + + return types; + } } } \ No newline at end of file diff --git a/Assets/Editor Toolbox/Tests/Editor/TypesFilteringTest.cs b/Assets/Editor Toolbox/Tests/Editor/TypesFilteringTest.cs index 49faf14e..5115070c 100644 --- a/Assets/Editor Toolbox/Tests/Editor/TypesFilteringTest.cs +++ b/Assets/Editor Toolbox/Tests/Editor/TypesFilteringTest.cs @@ -115,7 +115,7 @@ public void TestStandardConstraintPass5() [Test] public void TestStandardConstraintPass6() { - var constraint = new TypeConstraintStandard(typeof(ClassBase), TypeSettings.Class | TypeSettings.Interface, true, false); + var constraint = new TypeConstraintStandard(typeof(ClassBase), TypeSettings.Class | TypeSettings.Interface, false, false); var collection = TypeUtilities.GetCollection(constraint); Assert.IsFalse(collection.Contains(typeof(ClassBase))); Assert.IsTrue(collection.Contains(typeof(ClassWithInterface1))); diff --git a/Assets/Examples/Scripts/SampleBehaviour6.cs b/Assets/Examples/Scripts/SampleBehaviour6.cs index b322b166..5b8ac3bf 100644 --- a/Assets/Examples/Scripts/SampleBehaviour6.cs +++ b/Assets/Examples/Scripts/SampleBehaviour6.cs @@ -6,10 +6,12 @@ [AddComponentMenu("Editor Toolbox/Cheat Sheet 6 (Serialize Reference)")] public class SampleBehaviour6 : MonoBehaviour { +#if UNITY_2019_3_OR_NEWER [SerializeReference, ReferencePicker] public Interface1 var1; [SerializeReference, ReferencePicker] public ClassWithInterfaceBase var2; +#endif public interface Interface1 { } From 6200354286e16a12e7a0a1b60de10f445a806166 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mi=C5=82osz=20Matkowski?= Date: Sun, 8 May 2022 14:40:48 +0200 Subject: [PATCH 45/49] Minor refactor changes --- .../Runtime/Serialization/SerializedDictionary.cs | 6 ------ 1 file changed, 6 deletions(-) diff --git a/Assets/Editor Toolbox/Runtime/Serialization/SerializedDictionary.cs b/Assets/Editor Toolbox/Runtime/Serialization/SerializedDictionary.cs index 7ad6d8e5..c30a1025 100644 --- a/Assets/Editor Toolbox/Runtime/Serialization/SerializedDictionary.cs +++ b/Assets/Editor Toolbox/Runtime/Serialization/SerializedDictionary.cs @@ -122,12 +122,6 @@ public void Clear() indexByKey.Clear(); } - [Obsolete("Use BuildNativeDictionary instead.")] - public Dictionary BuiltNativeDictionary() - { - return new Dictionary(dictionary); - } - public Dictionary BuildNativeDictionary() { return new Dictionary(dictionary); From 749749038a177cc872ea43fddefbec513c025a02 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mi=C5=82osz=20Matkowski?= Date: Sun, 8 May 2022 14:40:58 +0200 Subject: [PATCH 46/49] Update documentation --- Assets/Editor Toolbox/README.md | 137 ++++++++++++++++---- Assets/Examples/Scenes/SampleScene.unity | 2 + Assets/Examples/Scripts/SampleBehaviour5.cs | 2 + Docs/referencepicker.png | Bin 0 -> 15673 bytes Docs/utils.png | Bin 28455 -> 25126 bytes 5 files changed, 116 insertions(+), 25 deletions(-) create mode 100644 Docs/referencepicker.png diff --git a/Assets/Editor Toolbox/README.md b/Assets/Editor Toolbox/README.md index 4c83aeb6..8f87929e 100644 --- a/Assets/Editor Toolbox/README.md +++ b/Assets/Editor Toolbox/README.md @@ -36,6 +36,13 @@ Unity 2018.x or newer - [Attributes & Drawers](#drawers) - [Regular Drawers](#regulardrawers) - [Toolbox Drawers](#toolboxdrawers) + - [Toolbox Decorator Attributes](#toolboxdecorator) + - [Toolbox Condition Attributes](#toolboxcondition) + - [Toolbox Property (Self/List) Attributes](#toolboxproperty) + - [Toolbox Special Attributes](#toolboxspecial) + - [Toolbox Archetype Attributes](#toolboxarchetype) + - [SerializeReference (ReferencePicker)](#toolboxserializereference) + - [Toolbox Custom Editors](#toolboxeditors) - [Material Drawers](#materialdrawers) - [Serialized Types](#serialized-types) - [Editor Extensions](#editor-extensions) @@ -43,11 +50,10 @@ Unity 2018.x or newer - [Project](#project) - [Toolbar](#toolbar) - [Utilities](#utilities) -- [Editor Extras](#editor-extras) ## Settings -The most important file, it allows the user to manage all available features. Can be accessed from the Project Settings window (Edit/Project Settings.../Editor Toolbox) or directly inside the Project window. Make sure to have one valid settings file per project. +The most important file, allows the user to manage all available features. Can be accessed from the Project Settings window (Edit/Project Settings.../Editor Toolbox) or directly inside the Project window. Make sure to have one valid settings file per project. Available features are divided into three groups: - Hierarchy @@ -56,6 +62,9 @@ Available features are divided into three groups: Each module is described in its respective section. +If you want to keep your custom settings between UET versions, create your own settings file: +```Create/Editor Toolbox/Settings``` + ## Attributes & Drawers ### Regular Drawers @@ -81,17 +90,6 @@ public float var1 = 80.0f; ![inspector](https://github.com/arimger/Unity-Editor-Toolbox/blob/develop/Docs/progressbar1.png)\ ![inspector](https://github.com/arimger/Unity-Editor-Toolbox/blob/develop/Docs/progressbar2.png) -#### NewLabelAttribute - -```csharp -[NewLabel("Custom Label", "Element")] -public int[] vars1 = new int[3]; -[NewLabel("Custom Label")] -public float var2 = 25.4f; -``` - -![inspector](https://github.com/arimger/Unity-Editor-Toolbox/blob/develop/Docs/newlabel.png) - #### MinMaxSliderAttribute ```csharp @@ -112,10 +110,6 @@ public Component var2; ![inspector](https://github.com/arimger/Unity-Editor-Toolbox/blob/develop/Docs/assetpreview.png) -#### HideLabelAttribute - -![inspector](https://github.com/arimger/Unity-Editor-Toolbox/blob/develop/Docs/hidelabel.png) - #### SuffixAttribute ![inspector](https://github.com/arimger/Unity-Editor-Toolbox/blob/develop/Docs/suffix.png) @@ -255,7 +249,7 @@ Examples **'How to'** create custom ToolboxDrawers you can find [HERE](https://g ![inspector](https://github.com/arimger/Unity-Editor-Toolbox/blob/develop/Docs/inspector.png) -#### ToolboxDecoratorAttributes +#### Toolbox Decorator Attributes Display/create something before and after property in the desired order (using Order property). In fact **ToolboxDecoratorDrawers** are like extended version of built-in **DecoratorDrawers**. @@ -337,7 +331,7 @@ public int var1; ![inspector](https://github.com/arimger/Unity-Editor-Toolbox/blob/develop/Docs/button.png) -#### ToolboxConditionAttributes +#### Toolbox Condition Attributes Enable/disable or show/hide properties using custom conditions. You can use them together with any other type of drawer. Every ToolboxConditionDrawer supports boolean, int, string, UnityEngine.Object and enum types and works even with array/list properties. @@ -388,7 +382,9 @@ public int[] vars1 = new [] { 1, 2, 3, 4 }; ![inspector](https://github.com/arimger/Unity-Editor-Toolbox/blob/develop/Docs/enableif1.png)\ ![inspector](https://github.com/arimger/Unity-Editor-Toolbox/blob/develop/Docs/enableif2.png) -#### InLineEditorAttribute +#### Toolbox Property Attributes + +##### InLineEditorAttribute This attribute gives a great possibility to extend all reference-related (UnityEngine.Object) fields. Using it you are able to 'inline' Editors for: components, ScriptableObjects, Materials, Renderers, MeshFilters, Textures, AudioClips, etc. @@ -409,7 +405,7 @@ public Material var1; ``` ![inspector](https://github.com/arimger/Unity-Editor-Toolbox/blob/develop/Docs/inlined1.png) -#### Reorderable List +##### Reorderable List Custom implementation of standard ReorderableList (UnityEditorInternal). Usable as an attribute in serialized fields or a single object in custom Editors. @@ -448,7 +444,7 @@ private int GetValue() } ``` -#### ScrollableItemsAttribute +##### ScrollableItemsAttribute It's a perfect solution to inspect large arrays/lists and optimize displaying them within the Inspector window. @@ -459,7 +455,7 @@ public GameObject[] largeArray = new GameObject[19]; ![inspector](https://github.com/arimger/Unity-Editor-Toolbox/blob/develop/Docs/scrollableitems.png) -#### Other ToolboxProperty attributes +##### Other ToolboxProperty attributes ```csharp [IgnoreParent] @@ -474,7 +470,23 @@ public float minValue; public float MaxValue => 15.0f; ``` -#### ToolboxArchetypeAttributes +#### Toolbox Special Attributes + +Attributes handled internally by the ToolboxEditor. You can combine them with any other attributes. + +```csharp +[NewLabel("Custom Label")] +public float var1 = 25.4f; +``` + +```csharp +[HideLabel] +public float var1; +``` + +![inspector](https://github.com/arimger/Unity-Editor-Toolbox/blob/develop/Docs/hidelabel.png) + +#### Toolbox Archetype Attributes Using this attribute you are able to implement custom patterns of frequently grouped **ToolboxAttributes**. @@ -513,6 +525,81 @@ public int var1; ![inspector](https://github.com/arimger/Unity-Editor-Toolbox/blob/develop/Docs/title.png) +#### SerializeReference (ReferencePicker) + +If you want to create a custom **UnityEditor.Editor** for your components and still use Toolbox-related features be sure to inherit from the **Toolbox.Editor.ToolboxEditor** class. + +```csharp +using UnityEditor; +using UnityEngine; +#if UNITY_2019_1_OR_NEWER +using UnityEditor.UIElements; +using UnityEngine.UIElements; +#endif +using Toolbox.Editor; + +[CustomEditor(typeof(SampleBehaviour))] +public class SampleEditor : ToolboxEditor +{ + private void OnEnable() + { } + + private void OnDisable() + { } + + public override void DrawCustomInspector() + { + base.DrawCustomInspector(); + + //for custom properties: + // - ToolboxEditorGui.DrawToolboxProperty(serializedObject.FindProperty("myProperty")); + } +} +``` + ### Material Drawers ``` @@ -548,7 +635,7 @@ _HideIfExample ("Range", Range(0, 1)) = 0.75 Allows to serialize Types and pick them through a dedicated picker. ```csharp -[ClassExtends(typeof(Collider), Grouping = ClassGrouping.None, AddTextSearchField = false)] //or [ClassImplements(typeof(interface))] for interfaces +[TypeConstraint(typeof(Collider), AllowAbstract = false, AllowObsolete = false, TypeSettings = TypeSettings.Class, TypeGrouping = TypeGrouping.None)] public SerializedType var1; public void Usage() diff --git a/Assets/Examples/Scenes/SampleScene.unity b/Assets/Examples/Scenes/SampleScene.unity index 1bdf4b5f..590d0085 100644 --- a/Assets/Examples/Scenes/SampleScene.unity +++ b/Assets/Examples/Scenes/SampleScene.unity @@ -965,6 +965,8 @@ MonoBehaviour: typeReference: UnityEngine.UI.RawImage, UnityEngine.UI type3: typeReference: + type4: + typeReference: UnityEngine.BoxCollider, UnityEngine.PhysicsModule scene1: sceneReference: {fileID: 102900000, guid: f11034f4657f51a47aac14f26410c500, type: 3} sceneName: SampleScene diff --git a/Assets/Examples/Scripts/SampleBehaviour5.cs b/Assets/Examples/Scripts/SampleBehaviour5.cs index d40ee84d..32666217 100644 --- a/Assets/Examples/Scripts/SampleBehaviour5.cs +++ b/Assets/Examples/Scripts/SampleBehaviour5.cs @@ -13,6 +13,8 @@ public class SampleBehaviour5 : MonoBehaviour public SerializedType type2; [TypeConstraint(typeof(IMaskable), AddTextSearchField = true, TypeSettings = TypeSettings.Interface)] public SerializedType type3; + [TypeConstraint(typeof(Collider), AllowAbstract = false, AllowObsolete = false, TypeSettings = TypeSettings.Class, TypeGrouping = TypeGrouping.None)] + public SerializedType type4; [Label("Serialized Scene", skinStyle: SkinStyle.Box)] diff --git a/Docs/referencepicker.png b/Docs/referencepicker.png new file mode 100644 index 0000000000000000000000000000000000000000..7c7564e362bb5d0a5e68507fe13ea4ee98f7096e GIT binary patch literal 15673 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 Date: Sun, 8 May 2022 14:50:05 +0200 Subject: [PATCH 47/49] Update CHANGELOG.md and package.json --- Assets/Editor Toolbox/CHANGELOG.md | 18 ++++++++++++++++++ Assets/Editor Toolbox/package.json | 2 +- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/Assets/Editor Toolbox/CHANGELOG.md b/Assets/Editor Toolbox/CHANGELOG.md index c07722e0..8680c09f 100644 --- a/Assets/Editor Toolbox/CHANGELOG.md +++ b/Assets/Editor Toolbox/CHANGELOG.md @@ -1,3 +1,21 @@ +## 0.11.1 [08.05.2022] + +### Added: +- ReferencePicker for properties with the [SerializeReference] attribute +- TypeField - dedicated and independent type picker +- SerializedDirectory +- .editorconfig for the sample project + +### Changed: +- New sample classes & general improvements to the SampleScene +- Renamed 'Scripts' directory to 'Runtime' +- Path serialization in the SerializedScene class +- NewLabel & HideLabel attributes now can be combined with any other attributes +- Performance improvements related to types caching +- Fix drawing FormattedNumber within vertical groups +- Fix drawing tooltips [TooltipAttribute] +- Fix drawing AssetPreview + ## 0.10.9 [02.03.2022] ### Added: diff --git a/Assets/Editor Toolbox/package.json b/Assets/Editor Toolbox/package.json index d4082b27..e7b539bf 100644 --- a/Assets/Editor Toolbox/package.json +++ b/Assets/Editor Toolbox/package.json @@ -1,7 +1,7 @@ { "name": "com.arimger.editor-toolbox", "displayName": "Editor Toolbox", - "version": "0.10.9", + "version": "0.11.1", "unity": "2018.1", "description": "Tools, custom attributes, drawers, hierarchy overlay, and other extensions for the Unity Editor.", "keywords": [ From 84c4777400dab72eb25f0db4750715f6a4d8a3ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mi=C5=82osz=20Matkowski?= Date: Sun, 8 May 2022 14:51:01 +0200 Subject: [PATCH 48/49] Update documentation --- README.md | 136 ++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 112 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index bca77bd8..8f87929e 100644 --- a/README.md +++ b/README.md @@ -36,6 +36,13 @@ Unity 2018.x or newer - [Attributes & Drawers](#drawers) - [Regular Drawers](#regulardrawers) - [Toolbox Drawers](#toolboxdrawers) + - [Toolbox Decorator Attributes](#toolboxdecorator) + - [Toolbox Condition Attributes](#toolboxcondition) + - [Toolbox Property (Self/List) Attributes](#toolboxproperty) + - [Toolbox Special Attributes](#toolboxspecial) + - [Toolbox Archetype Attributes](#toolboxarchetype) + - [SerializeReference (ReferencePicker)](#toolboxserializereference) + - [Toolbox Custom Editors](#toolboxeditors) - [Material Drawers](#materialdrawers) - [Serialized Types](#serialized-types) - [Editor Extensions](#editor-extensions) @@ -46,7 +53,7 @@ Unity 2018.x or newer ## Settings -The most important file, it allows the user to manage all available features. Can be accessed from the Project Settings window (Edit/Project Settings.../Editor Toolbox) or directly inside the Project window. Make sure to have one valid settings file per project. +The most important file, allows the user to manage all available features. Can be accessed from the Project Settings window (Edit/Project Settings.../Editor Toolbox) or directly inside the Project window. Make sure to have one valid settings file per project. Available features are divided into three groups: - Hierarchy @@ -55,6 +62,9 @@ Available features are divided into three groups: Each module is described in its respective section. +If you want to keep your custom settings between UET versions, create your own settings file: +```Create/Editor Toolbox/Settings``` + ## Attributes & Drawers ### Regular Drawers @@ -80,17 +90,6 @@ public float var1 = 80.0f; ![inspector](https://github.com/arimger/Unity-Editor-Toolbox/blob/develop/Docs/progressbar1.png)\ ![inspector](https://github.com/arimger/Unity-Editor-Toolbox/blob/develop/Docs/progressbar2.png) -#### NewLabelAttribute - -```csharp -[NewLabel("Custom Label", "Element")] -public int[] vars1 = new int[3]; -[NewLabel("Custom Label")] -public float var2 = 25.4f; -``` - -![inspector](https://github.com/arimger/Unity-Editor-Toolbox/blob/develop/Docs/newlabel.png) - #### MinMaxSliderAttribute ```csharp @@ -111,10 +110,6 @@ public Component var2; ![inspector](https://github.com/arimger/Unity-Editor-Toolbox/blob/develop/Docs/assetpreview.png) -#### HideLabelAttribute - -![inspector](https://github.com/arimger/Unity-Editor-Toolbox/blob/develop/Docs/hidelabel.png) - #### SuffixAttribute ![inspector](https://github.com/arimger/Unity-Editor-Toolbox/blob/develop/Docs/suffix.png) @@ -254,7 +249,7 @@ Examples **'How to'** create custom ToolboxDrawers you can find [HERE](https://g ![inspector](https://github.com/arimger/Unity-Editor-Toolbox/blob/develop/Docs/inspector.png) -#### ToolboxDecoratorAttributes +#### Toolbox Decorator Attributes Display/create something before and after property in the desired order (using Order property). In fact **ToolboxDecoratorDrawers** are like extended version of built-in **DecoratorDrawers**. @@ -336,7 +331,7 @@ public int var1; ![inspector](https://github.com/arimger/Unity-Editor-Toolbox/blob/develop/Docs/button.png) -#### ToolboxConditionAttributes +#### Toolbox Condition Attributes Enable/disable or show/hide properties using custom conditions. You can use them together with any other type of drawer. Every ToolboxConditionDrawer supports boolean, int, string, UnityEngine.Object and enum types and works even with array/list properties. @@ -387,7 +382,9 @@ public int[] vars1 = new [] { 1, 2, 3, 4 }; ![inspector](https://github.com/arimger/Unity-Editor-Toolbox/blob/develop/Docs/enableif1.png)\ ![inspector](https://github.com/arimger/Unity-Editor-Toolbox/blob/develop/Docs/enableif2.png) -#### InLineEditorAttribute +#### Toolbox Property Attributes + +##### InLineEditorAttribute This attribute gives a great possibility to extend all reference-related (UnityEngine.Object) fields. Using it you are able to 'inline' Editors for: components, ScriptableObjects, Materials, Renderers, MeshFilters, Textures, AudioClips, etc. @@ -408,7 +405,7 @@ public Material var1; ``` ![inspector](https://github.com/arimger/Unity-Editor-Toolbox/blob/develop/Docs/inlined1.png) -#### Reorderable List +##### Reorderable List Custom implementation of standard ReorderableList (UnityEditorInternal). Usable as an attribute in serialized fields or a single object in custom Editors. @@ -447,7 +444,7 @@ private int GetValue() } ``` -#### ScrollableItemsAttribute +##### ScrollableItemsAttribute It's a perfect solution to inspect large arrays/lists and optimize displaying them within the Inspector window. @@ -458,7 +455,7 @@ public GameObject[] largeArray = new GameObject[19]; ![inspector](https://github.com/arimger/Unity-Editor-Toolbox/blob/develop/Docs/scrollableitems.png) -#### Other ToolboxProperty attributes +##### Other ToolboxProperty attributes ```csharp [IgnoreParent] @@ -473,7 +470,23 @@ public float minValue; public float MaxValue => 15.0f; ``` -#### ToolboxArchetypeAttributes +#### Toolbox Special Attributes + +Attributes handled internally by the ToolboxEditor. You can combine them with any other attributes. + +```csharp +[NewLabel("Custom Label")] +public float var1 = 25.4f; +``` + +```csharp +[HideLabel] +public float var1; +``` + +![inspector](https://github.com/arimger/Unity-Editor-Toolbox/blob/develop/Docs/hidelabel.png) + +#### Toolbox Archetype Attributes Using this attribute you are able to implement custom patterns of frequently grouped **ToolboxAttributes**. @@ -512,6 +525,81 @@ public int var1; ![inspector](https://github.com/arimger/Unity-Editor-Toolbox/blob/develop/Docs/title.png) +#### SerializeReference (ReferencePicker) + +If you want to create a custom **UnityEditor.Editor** for your components and still use Toolbox-related features be sure to inherit from the **Toolbox.Editor.ToolboxEditor** class. + +```csharp +using UnityEditor; +using UnityEngine; +#if UNITY_2019_1_OR_NEWER +using UnityEditor.UIElements; +using UnityEngine.UIElements; +#endif +using Toolbox.Editor; + +[CustomEditor(typeof(SampleBehaviour))] +public class SampleEditor : ToolboxEditor +{ + private void OnEnable() + { } + + private void OnDisable() + { } + + public override void DrawCustomInspector() + { + base.DrawCustomInspector(); + + //for custom properties: + // - ToolboxEditorGui.DrawToolboxProperty(serializedObject.FindProperty("myProperty")); + } +} +``` + ### Material Drawers ``` @@ -547,7 +635,7 @@ _HideIfExample ("Range", Range(0, 1)) = 0.75 Allows to serialize Types and pick them through a dedicated picker. ```csharp -[ClassExtends(typeof(Collider), Grouping = ClassGrouping.None, AddTextSearchField = false)] //or [ClassImplements(typeof(interface))] for interfaces +[TypeConstraint(typeof(Collider), AllowAbstract = false, AllowObsolete = false, TypeSettings = TypeSettings.Class, TypeGrouping = TypeGrouping.None)] public SerializedType var1; public void Usage() From c1353f907d18735f2cc10c246cb1bc59f1adc846 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mi=C5=82osz=20Matkowski?= Date: Sun, 8 May 2022 14:59:18 +0200 Subject: [PATCH 49/49] Update documentation --- Assets/Editor Toolbox/README.md | 6 +++--- README.md | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Assets/Editor Toolbox/README.md b/Assets/Editor Toolbox/README.md index 8f87929e..e2df44b2 100644 --- a/Assets/Editor Toolbox/README.md +++ b/Assets/Editor Toolbox/README.md @@ -41,7 +41,7 @@ Unity 2018.x or newer - [Toolbox Property (Self/List) Attributes](#toolboxproperty) - [Toolbox Special Attributes](#toolboxspecial) - [Toolbox Archetype Attributes](#toolboxarchetype) - - [SerializeReference (ReferencePicker)](#toolboxserializereference) + - [SerializeReference (ReferencePicker)](#toolboxreference) - [Toolbox Custom Editors](#toolboxeditors) - [Material Drawers](#materialdrawers) - [Serialized Types](#serialized-types) @@ -525,9 +525,9 @@ public int var1; ![inspector](https://github.com/arimger/Unity-Editor-Toolbox/blob/develop/Docs/title.png) -#### SerializeReference (ReferencePicker) -You can draw properties marked with the [SerializeReference] attribute with an additional type picker that allows you to manipulate what managed type will be serialized. +You can draw properties marked with the **[SerializeReference]** attribute with an additional type picker that allows you to manipulate what managed type will be serialized. ```csharp [SerializeReference, ReferencePicker] diff --git a/README.md b/README.md index 8f87929e..e2df44b2 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,7 @@ Unity 2018.x or newer - [Toolbox Property (Self/List) Attributes](#toolboxproperty) - [Toolbox Special Attributes](#toolboxspecial) - [Toolbox Archetype Attributes](#toolboxarchetype) - - [SerializeReference (ReferencePicker)](#toolboxserializereference) + - [SerializeReference (ReferencePicker)](#toolboxreference) - [Toolbox Custom Editors](#toolboxeditors) - [Material Drawers](#materialdrawers) - [Serialized Types](#serialized-types) @@ -525,9 +525,9 @@ public int var1; ![inspector](https://github.com/arimger/Unity-Editor-Toolbox/blob/develop/Docs/title.png) -#### SerializeReference (ReferencePicker) -You can draw properties marked with the [SerializeReference] attribute with an additional type picker that allows you to manipulate what managed type will be serialized. +You can draw properties marked with the **[SerializeReference]** attribute with an additional type picker that allows you to manipulate what managed type will be serialized. ```csharp [SerializeReference, ReferencePicker]