From 7a2198343c1b6350b70fd1ad1e7ee64699f8ab30 Mon Sep 17 00:00:00 2001 From: "MARIUS\\silvi" Date: Thu, 17 Feb 2022 21:24:05 +0200 Subject: [PATCH] crafting system.. beginning --- UnityClient/.vsconfig | 6 + UnityClient/Assets/CraftingSystem.meta | 8 + UnityClient/Assets/CraftingSystem/Anvil.mat | 78 + .../Assets/CraftingSystem/Anvil.mat.meta | 8 + .../Assets/CraftingSystem/Plugins.meta | 8 + .../CraftingSystem/Plugins/Sirenix.meta | 8 + .../Plugins/Sirenix/Assemblies.meta | 8 + .../Plugins/Sirenix/Assemblies/NoEditor.meta | 8 + .../NoEditor/Sirenix.Serialization.dll | 3 + .../NoEditor/Sirenix.Serialization.dll.meta | 80 + .../Assemblies/NoEditor/Sirenix.Utilities.dll | 3 + .../NoEditor/Sirenix.Utilities.dll.meta | 80 + .../Sirenix/Assemblies/NoEmitAndNoEditor.meta | 8 + .../Sirenix.Serialization.dll | 3 + .../Sirenix.Serialization.dll.meta | 77 + .../NoEmitAndNoEditor/Sirenix.Utilities.dll | 3 + .../Sirenix.Utilities.dll.meta | 77 + .../Sirenix.OdinInspector.Attributes.dll | 3 + .../Sirenix.OdinInspector.Attributes.dll.meta | 47 + .../Sirenix.OdinInspector.Attributes.xml | 5731 ++++++++ .../Sirenix.OdinInspector.Attributes.xml.meta | 8 + .../Sirenix.OdinInspector.Editor.dll | 3 + .../Sirenix.OdinInspector.Editor.dll.meta | 47 + .../Sirenix.OdinInspector.Editor.xml | 10940 ++++++++++++++++ .../Sirenix.OdinInspector.Editor.xml.meta | 8 + .../Sirenix.Serialization.Config.dll | 3 + .../Sirenix.Serialization.Config.dll.meta | 47 + .../Sirenix.Serialization.Config.xml | 202 + .../Sirenix.Serialization.Config.xml.meta | 8 + .../Assemblies/Sirenix.Serialization.dll | 3 + .../Assemblies/Sirenix.Serialization.dll.meta | 47 + .../Assemblies/Sirenix.Serialization.xml | 9565 ++++++++++++++ .../Assemblies/Sirenix.Serialization.xml.meta | 8 + .../Assemblies/Sirenix.Utilities.Editor.dll | 3 + .../Sirenix.Utilities.Editor.dll.meta | 47 + .../Assemblies/Sirenix.Utilities.Editor.xml | 7788 +++++++++++ .../Sirenix.Utilities.Editor.xml.meta | 8 + .../Sirenix/Assemblies/Sirenix.Utilities.dll | 3 + .../Assemblies/Sirenix.Utilities.dll.meta | 47 + .../Sirenix/Assemblies/Sirenix.Utilities.xml | 3658 ++++++ .../Assemblies/Sirenix.Utilities.xml.meta | 8 + .../Plugins/Sirenix/Assemblies/link.xml | 6 + .../Plugins/Sirenix/Assemblies/link.xml.meta | 7 + .../CraftingSystem/Plugins/Sirenix/Demos.meta | 8 + ...tom Attribute Processors.unitypackage.meta | 8 + .../Demos/Custom Drawers.unitypackage.meta | 8 + .../Demos/Editor Windows.unitypackage.meta | 8 + .../Sample - RPG Editor.unitypackage.meta | 8 + .../Plugins/Sirenix/Odin Inspector.meta | 8 + .../Sirenix/Odin Inspector/Assets.meta | 8 + .../Sirenix/Odin Inspector/Assets/Editor.meta | 8 + .../Assets/Editor/ConfigData.bytes | Bin 0 -> 1616 bytes .../Assets/Editor/ConfigData.bytes.meta | 8 + .../Assets/Editor/Odin Inspector Logo.png | 3 + .../Editor/Odin Inspector Logo.png.meta | 57 + .../Assets/Editor/OdinPathLookup.asset | 3 + .../Assets/Editor/OdinPathLookup.asset.meta | 8 + .../Sirenix/Odin Inspector/Config.meta | 8 + .../Sirenix/Odin Inspector/Config/Editor.meta | 8 + .../Config/Editor/GeneralDrawerConfig.asset | 3 + .../Editor/GeneralDrawerConfig.asset.meta | 8 + .../Config/Editor/InspectorConfig.asset | 3 + .../Config/Editor/InspectorConfig.asset.meta | 8 + .../Config/Editor/OdinModuleConfig.asset | 3 + .../Config/Editor/OdinModuleConfig.asset.meta | 8 + .../Odin Inspector/Config/Resources.meta | 8 + .../Config/Resources/Sirenix.meta | 8 + .../Sirenix/GlobalSerializationConfig.asset | 3 + .../GlobalSerializationConfig.asset.meta | 8 + .../Sirenix/Odin Inspector/Modules.meta | 8 + .../Modules/Unity.Entities.data | Bin 0 -> 41801 bytes .../Modules/Unity.Entities.data.meta | 8 + .../Modules/Unity.Localization.data | Bin 0 -> 8567 bytes .../Modules/Unity.Localization.data.meta | 8 + .../Modules/Unity.Mathematics.data | Bin 0 -> 46862 bytes .../Modules/Unity.Mathematics.data.meta | 8 + .../Sirenix/Odin Inspector/Scripts.meta | 8 + .../Odin Inspector/Scripts/Editor.meta | 8 + .../AssemblyImportSettingsAutomation.cs | 134 + .../AssemblyImportSettingsAutomation.cs.meta | 12 + .../Scripts/Editor/BuildAOTAutomation.cs | 79 + .../Scripts/Editor/BuildAOTAutomation.cs.meta | 12 + .../Editor/EnsureOdinInspectorDefine.cs | 121 + .../Editor/EnsureOdinInspectorDefine.cs.meta | 12 + .../FixBrokenUnityObjectWrapperDrawer.cs | 208 + .../FixBrokenUnityObjectWrapperDrawer.cs.meta | 12 + ...Inspector.CompatibilityLayer.Editor.asmdef | 15 + ...ctor.CompatibilityLayer.Editor.asmdef.meta | 7 + .../Scripts/Editor/SyncListDrawer.cs | 88 + .../Scripts/Editor/SyncListDrawer.cs.meta | 12 + .../Scripts/Editor/SyncVarAttributeDrawer.cs | 42 + .../Editor/SyncVarAttributeDrawer.cs.meta | 12 + .../Editor/Vector2IntMinMaxAttributeDrawer.cs | 73 + .../Vector2IntMinMaxAttributeDrawer.cs.meta | 12 + .../Scripts/Editor/VectorIntDrawers.cs | 141 + .../Scripts/Editor/VectorIntDrawers.cs.meta | 12 + .../Editor/VectorIntPropertyResolvers.cs | 54 + .../Editor/VectorIntPropertyResolvers.cs.meta | 12 + .../Scripts/SerializedNetworkBehaviour.cs | 67 + .../SerializedNetworkBehaviour.cs.meta | 12 + ...ix.OdinInspector.CompatibilityLayer.asmdef | 11 + ...inInspector.CompatibilityLayer.asmdef.meta | 7 + .../Scripts/VectorIntFormatters.cs | 80 + .../Scripts/VectorIntFormatters.cs.meta | 12 + .../CraftingSystem/Plugins/Sirenix/Readme.txt | 35 + .../Plugins/Sirenix/Readme.txt.meta | 8 + .../Plugins/Trinary Software.meta | 9 + .../Plugins/Trinary Software/Editor.meta | 9 + .../Trinary Software/Editor/MecIcon.png | 3 + .../Trinary Software/Editor/MecIcon.png.meta | 57 + .../Trinary Software/Pro-only Features.pdf | Bin 0 -> 574863 bytes .../Pro-only Features.pdf.meta | 8 + .../Trinary Software/Quick Start Guide.pdf | Bin 0 -> 690071 bytes .../Quick Start Guide.pdf.meta | 8 + .../Plugins/Trinary Software/Timing.cs | 7714 +++++++++++ .../Plugins/Trinary Software/Timing.cs.meta | 12 + UnityClient/Assets/CraftingSystem/Scenes.meta | 8 + .../Scenes/CreaftingSystem.unity | 561 + .../Scenes/CreaftingSystem.unity.meta | 7 + .../CraftingSystem/ScriptableObjects.meta | 8 + .../ScriptableObjects/CraftingMaterials.meta | 8 + .../CraftingMaterials/Iron.asset | 3 + .../CraftingMaterials/Iron.asset.meta | 8 + .../ScriptableObjects/Profession.meta | 8 + .../Profession/BlackSmith.meta | 8 + .../Profession/BlackSmith/Blacksmith.asset | 3 + .../BlackSmith/Blacksmith.asset.meta | 8 + .../BlackSmith/CraftingMaterials.meta | 8 + .../BlackSmith/CraftingMaterials/Flux.asset | 3 + .../CraftingMaterials/Flux.asset.meta | 8 + .../Profession/BlackSmith/Recipies.meta | 8 + .../BlackSmith/Recipies/Iron Sword.asset | 3 + .../BlackSmith/Recipies/Iron Sword.asset.meta | 8 + .../Assets/CraftingSystem/Scripts.meta | 8 + .../Assets/CraftingSystem/Scripts/Anvil.cs | 49 + .../CraftingSystem/Scripts/Anvil.cs.meta | 11 + .../CraftingSystem/Scripts/BaseClasses.meta | 8 + .../Scripts/BaseClasses/CraftingMaterial.cs | 14 + .../BaseClasses/CraftingMaterial.cs.meta | 11 + .../Scripts/BaseClasses/Profession.cs | 20 + .../Scripts/BaseClasses/Profession.cs.meta | 11 + .../Scripts/BaseClasses/Recipe.cs | 20 + .../Scripts/BaseClasses/Recipe.cs.meta | 11 + .../CraftingSystem/Scripts/Professions.meta | 8 + .../Scripts/Professions/Blacksmith.meta | 8 + .../Professions/Blacksmith/Blacksmith.cs | 12 + .../Professions/Blacksmith/Blacksmith.cs.meta | 11 + .../Blacksmith/CraftingMaterial.meta | 8 + .../Blacksmith/CraftingMaterial/Flux.cs | 9 + .../Blacksmith/CraftingMaterial/Flux.cs.meta | 11 + .../Blacksmith/CraftingMaterial/Iron.cs | 9 + .../Blacksmith/CraftingMaterial/Iron.cs.meta | 11 + .../Professions/Blacksmith/Recipie.meta | 8 + .../Blacksmith/Recipie/IronSword.meta | 8 + .../Blacksmith/Recipie/IronSword/IronSword.cs | 14 + .../Recipie/IronSword/IronSword.cs.meta | 11 + UnityClient/Packages/manifest.json | 13 +- UnityClient/Packages/packages-lock.json | 65 +- .../PackageManagerSettings.asset | 4 +- .../ProjectSettings/ProjectSettings.asset | 4 +- .../ProjectSettings/ProjectVersion.txt | 4 +- .../VersionControlSettings.asset | 3 + .../UserSettings/EditorUserSettings.asset | 3 + 163 files changed, 49133 insertions(+), 22 deletions(-) create mode 100644 UnityClient/.vsconfig create mode 100644 UnityClient/Assets/CraftingSystem.meta create mode 100644 UnityClient/Assets/CraftingSystem/Anvil.mat create mode 100644 UnityClient/Assets/CraftingSystem/Anvil.mat.meta create mode 100644 UnityClient/Assets/CraftingSystem/Plugins.meta create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix.meta create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies.meta create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/NoEditor.meta create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/NoEditor/Sirenix.Serialization.dll create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/NoEditor/Sirenix.Serialization.dll.meta create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/NoEditor/Sirenix.Utilities.dll create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/NoEditor/Sirenix.Utilities.dll.meta create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/NoEmitAndNoEditor.meta create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/NoEmitAndNoEditor/Sirenix.Serialization.dll create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/NoEmitAndNoEditor/Sirenix.Serialization.dll.meta create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/NoEmitAndNoEditor/Sirenix.Utilities.dll create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/NoEmitAndNoEditor/Sirenix.Utilities.dll.meta create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.OdinInspector.Attributes.dll create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.OdinInspector.Attributes.dll.meta create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.OdinInspector.Attributes.xml create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.OdinInspector.Attributes.xml.meta create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.OdinInspector.Editor.dll create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.OdinInspector.Editor.dll.meta create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.OdinInspector.Editor.xml create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.OdinInspector.Editor.xml.meta create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.Serialization.Config.dll create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.Serialization.Config.dll.meta create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.Serialization.Config.xml create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.Serialization.Config.xml.meta create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.Serialization.dll create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.Serialization.dll.meta create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.Serialization.xml create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.Serialization.xml.meta create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.Utilities.Editor.dll create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.Utilities.Editor.dll.meta create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.Utilities.Editor.xml create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.Utilities.Editor.xml.meta create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.Utilities.dll create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.Utilities.dll.meta create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.Utilities.xml create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.Utilities.xml.meta create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/link.xml create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/link.xml.meta create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Demos.meta create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Demos/Custom Attribute Processors.unitypackage.meta create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Demos/Custom Drawers.unitypackage.meta create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Demos/Editor Windows.unitypackage.meta create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Demos/Sample - RPG Editor.unitypackage.meta create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector.meta create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Assets.meta create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Assets/Editor.meta create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Assets/Editor/ConfigData.bytes create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Assets/Editor/ConfigData.bytes.meta create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Assets/Editor/Odin Inspector Logo.png create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Assets/Editor/Odin Inspector Logo.png.meta create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Assets/Editor/OdinPathLookup.asset create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Assets/Editor/OdinPathLookup.asset.meta create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Config.meta create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Config/Editor.meta create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Config/Editor/GeneralDrawerConfig.asset create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Config/Editor/GeneralDrawerConfig.asset.meta create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Config/Editor/InspectorConfig.asset create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Config/Editor/InspectorConfig.asset.meta create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Config/Editor/OdinModuleConfig.asset create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Config/Editor/OdinModuleConfig.asset.meta create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Config/Resources.meta create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Config/Resources/Sirenix.meta create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Config/Resources/Sirenix/GlobalSerializationConfig.asset create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Config/Resources/Sirenix/GlobalSerializationConfig.asset.meta create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Modules.meta create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Modules/Unity.Entities.data create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Modules/Unity.Entities.data.meta create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Modules/Unity.Localization.data create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Modules/Unity.Localization.data.meta create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Modules/Unity.Mathematics.data create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Modules/Unity.Mathematics.data.meta create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts.meta create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor.meta create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/AssemblyImportSettingsAutomation.cs create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/AssemblyImportSettingsAutomation.cs.meta create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/BuildAOTAutomation.cs create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/BuildAOTAutomation.cs.meta create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/EnsureOdinInspectorDefine.cs create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/EnsureOdinInspectorDefine.cs.meta create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/FixBrokenUnityObjectWrapperDrawer.cs create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/FixBrokenUnityObjectWrapperDrawer.cs.meta create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/Sirenix.OdinInspector.CompatibilityLayer.Editor.asmdef create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/Sirenix.OdinInspector.CompatibilityLayer.Editor.asmdef.meta create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/SyncListDrawer.cs create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/SyncListDrawer.cs.meta create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/SyncVarAttributeDrawer.cs create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/SyncVarAttributeDrawer.cs.meta create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/Vector2IntMinMaxAttributeDrawer.cs create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/Vector2IntMinMaxAttributeDrawer.cs.meta create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/VectorIntDrawers.cs create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/VectorIntDrawers.cs.meta create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/VectorIntPropertyResolvers.cs create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/VectorIntPropertyResolvers.cs.meta create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/SerializedNetworkBehaviour.cs create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/SerializedNetworkBehaviour.cs.meta create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Sirenix.OdinInspector.CompatibilityLayer.asmdef create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Sirenix.OdinInspector.CompatibilityLayer.asmdef.meta create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/VectorIntFormatters.cs create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/VectorIntFormatters.cs.meta create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Readme.txt create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Readme.txt.meta create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Trinary Software.meta create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Trinary Software/Editor.meta create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Trinary Software/Editor/MecIcon.png create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Trinary Software/Editor/MecIcon.png.meta create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Trinary Software/Pro-only Features.pdf create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Trinary Software/Pro-only Features.pdf.meta create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Trinary Software/Quick Start Guide.pdf create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Trinary Software/Quick Start Guide.pdf.meta create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Trinary Software/Timing.cs create mode 100644 UnityClient/Assets/CraftingSystem/Plugins/Trinary Software/Timing.cs.meta create mode 100644 UnityClient/Assets/CraftingSystem/Scenes.meta create mode 100644 UnityClient/Assets/CraftingSystem/Scenes/CreaftingSystem.unity create mode 100644 UnityClient/Assets/CraftingSystem/Scenes/CreaftingSystem.unity.meta create mode 100644 UnityClient/Assets/CraftingSystem/ScriptableObjects.meta create mode 100644 UnityClient/Assets/CraftingSystem/ScriptableObjects/CraftingMaterials.meta create mode 100644 UnityClient/Assets/CraftingSystem/ScriptableObjects/CraftingMaterials/Iron.asset create mode 100644 UnityClient/Assets/CraftingSystem/ScriptableObjects/CraftingMaterials/Iron.asset.meta create mode 100644 UnityClient/Assets/CraftingSystem/ScriptableObjects/Profession.meta create mode 100644 UnityClient/Assets/CraftingSystem/ScriptableObjects/Profession/BlackSmith.meta create mode 100644 UnityClient/Assets/CraftingSystem/ScriptableObjects/Profession/BlackSmith/Blacksmith.asset create mode 100644 UnityClient/Assets/CraftingSystem/ScriptableObjects/Profession/BlackSmith/Blacksmith.asset.meta create mode 100644 UnityClient/Assets/CraftingSystem/ScriptableObjects/Profession/BlackSmith/CraftingMaterials.meta create mode 100644 UnityClient/Assets/CraftingSystem/ScriptableObjects/Profession/BlackSmith/CraftingMaterials/Flux.asset create mode 100644 UnityClient/Assets/CraftingSystem/ScriptableObjects/Profession/BlackSmith/CraftingMaterials/Flux.asset.meta create mode 100644 UnityClient/Assets/CraftingSystem/ScriptableObjects/Profession/BlackSmith/Recipies.meta create mode 100644 UnityClient/Assets/CraftingSystem/ScriptableObjects/Profession/BlackSmith/Recipies/Iron Sword.asset create mode 100644 UnityClient/Assets/CraftingSystem/ScriptableObjects/Profession/BlackSmith/Recipies/Iron Sword.asset.meta create mode 100644 UnityClient/Assets/CraftingSystem/Scripts.meta create mode 100644 UnityClient/Assets/CraftingSystem/Scripts/Anvil.cs create mode 100644 UnityClient/Assets/CraftingSystem/Scripts/Anvil.cs.meta create mode 100644 UnityClient/Assets/CraftingSystem/Scripts/BaseClasses.meta create mode 100644 UnityClient/Assets/CraftingSystem/Scripts/BaseClasses/CraftingMaterial.cs create mode 100644 UnityClient/Assets/CraftingSystem/Scripts/BaseClasses/CraftingMaterial.cs.meta create mode 100644 UnityClient/Assets/CraftingSystem/Scripts/BaseClasses/Profession.cs create mode 100644 UnityClient/Assets/CraftingSystem/Scripts/BaseClasses/Profession.cs.meta create mode 100644 UnityClient/Assets/CraftingSystem/Scripts/BaseClasses/Recipe.cs create mode 100644 UnityClient/Assets/CraftingSystem/Scripts/BaseClasses/Recipe.cs.meta create mode 100644 UnityClient/Assets/CraftingSystem/Scripts/Professions.meta create mode 100644 UnityClient/Assets/CraftingSystem/Scripts/Professions/Blacksmith.meta create mode 100644 UnityClient/Assets/CraftingSystem/Scripts/Professions/Blacksmith/Blacksmith.cs create mode 100644 UnityClient/Assets/CraftingSystem/Scripts/Professions/Blacksmith/Blacksmith.cs.meta create mode 100644 UnityClient/Assets/CraftingSystem/Scripts/Professions/Blacksmith/CraftingMaterial.meta create mode 100644 UnityClient/Assets/CraftingSystem/Scripts/Professions/Blacksmith/CraftingMaterial/Flux.cs create mode 100644 UnityClient/Assets/CraftingSystem/Scripts/Professions/Blacksmith/CraftingMaterial/Flux.cs.meta create mode 100644 UnityClient/Assets/CraftingSystem/Scripts/Professions/Blacksmith/CraftingMaterial/Iron.cs create mode 100644 UnityClient/Assets/CraftingSystem/Scripts/Professions/Blacksmith/CraftingMaterial/Iron.cs.meta create mode 100644 UnityClient/Assets/CraftingSystem/Scripts/Professions/Blacksmith/Recipie.meta create mode 100644 UnityClient/Assets/CraftingSystem/Scripts/Professions/Blacksmith/Recipie/IronSword.meta create mode 100644 UnityClient/Assets/CraftingSystem/Scripts/Professions/Blacksmith/Recipie/IronSword/IronSword.cs create mode 100644 UnityClient/Assets/CraftingSystem/Scripts/Professions/Blacksmith/Recipie/IronSword/IronSword.cs.meta create mode 100644 UnityClient/ProjectSettings/VersionControlSettings.asset create mode 100644 UnityClient/UserSettings/EditorUserSettings.asset diff --git a/UnityClient/.vsconfig b/UnityClient/.vsconfig new file mode 100644 index 00000000..d70cd98b --- /dev/null +++ b/UnityClient/.vsconfig @@ -0,0 +1,6 @@ +{ + "version": "1.0", + "components": [ + "Microsoft.VisualStudio.Workload.ManagedGame" + ] +} diff --git a/UnityClient/Assets/CraftingSystem.meta b/UnityClient/Assets/CraftingSystem.meta new file mode 100644 index 00000000..6c06c675 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fa42ef3c6d8c29b4bb17633813151ef7 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Anvil.mat b/UnityClient/Assets/CraftingSystem/Anvil.mat new file mode 100644 index 00000000..200d3dfe --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Anvil.mat @@ -0,0 +1,78 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Anvil + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 0, b: 0, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + m_BuildTextureStacks: [] diff --git a/UnityClient/Assets/CraftingSystem/Anvil.mat.meta b/UnityClient/Assets/CraftingSystem/Anvil.mat.meta new file mode 100644 index 00000000..7d9af196 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Anvil.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 160ec6c9f3a8a60428a1c5111fd8a765 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Plugins.meta b/UnityClient/Assets/CraftingSystem/Plugins.meta new file mode 100644 index 00000000..3bec71f8 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9ab35693e48e33d46800e1820babd236 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix.meta b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix.meta new file mode 100644 index 00000000..c7c7756d --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f8b16eeee739e52448b12de8c6e054fd +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies.meta b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies.meta new file mode 100644 index 00000000..72202fb7 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 416c9d29fc2bc8b459b3c1a31c21726d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/NoEditor.meta b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/NoEditor.meta new file mode 100644 index 00000000..7e7186a1 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/NoEditor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ae929bb4182e1e14088a265e67328195 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/NoEditor/Sirenix.Serialization.dll b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/NoEditor/Sirenix.Serialization.dll new file mode 100644 index 00000000..5f34d511 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/NoEditor/Sirenix.Serialization.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a2aa682ee3b6caab3f4c5ae35bf7a420902eab9b9ce2bea8125cf22212b8ae2f +size 324608 diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/NoEditor/Sirenix.Serialization.dll.meta b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/NoEditor/Sirenix.Serialization.dll.meta new file mode 100644 index 00000000..10e64b40 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/NoEditor/Sirenix.Serialization.dll.meta @@ -0,0 +1,80 @@ +fileFormatVersion: 2 +guid: 5651992cdad94894a3af7dc3f1da9170 +timeCreated: 1488828285 +licenseType: Store +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + isOverridable: 0 + platformData: + Any: + enabled: 0 + settings: + Exclude Android: 1 + Exclude Editor: 1 + Exclude Linux: 1 + Exclude Linux64: 1 + Exclude LinuxUniversal: 1 + Exclude N3DS: 0 + Exclude OSXIntel: 1 + Exclude OSXIntel64: 1 + Exclude OSXUniversal: 1 + Exclude PS4: 0 + Exclude PSM: 0 + Exclude PSP2: 0 + Exclude SamsungTV: 0 + Exclude Tizen: 0 + Exclude WebGL: 0 + Exclude WiiU: 0 + Exclude Win: 1 + Exclude Win64: 1 + Exclude WindowsStoreApps: 0 + Exclude XboxOne: 0 + Exclude iOS: 0 + Exclude tvOS: 0 + Editor: + enabled: 0 + settings: + DefaultValueInitialized: true + N3DS: + enabled: 1 + settings: {} + PS4: + enabled: 1 + settings: {} + PSM: + enabled: 1 + settings: {} + PSP2: + enabled: 1 + settings: {} + SamsungTV: + enabled: 1 + settings: {} + Tizen: + enabled: 1 + settings: {} + WebGL: + enabled: 1 + settings: {} + WiiU: + enabled: 1 + settings: {} + WindowsStoreApps: + enabled: 1 + settings: + CPU: AnyCPU + XboxOne: + enabled: 1 + settings: {} + iOS: + enabled: 1 + settings: {} + tvOS: + enabled: 1 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/NoEditor/Sirenix.Utilities.dll b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/NoEditor/Sirenix.Utilities.dll new file mode 100644 index 00000000..a854c2e9 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/NoEditor/Sirenix.Utilities.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:64a3030f71d3d2c21b0d1c1ae07182f14c3e5e722c9802d2eb97d47604af66da +size 144896 diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/NoEditor/Sirenix.Utilities.dll.meta b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/NoEditor/Sirenix.Utilities.dll.meta new file mode 100644 index 00000000..8563224b --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/NoEditor/Sirenix.Utilities.dll.meta @@ -0,0 +1,80 @@ +fileFormatVersion: 2 +guid: 5978f8f3dd274e848fbb7a123bde1fb9 +timeCreated: 1488828285 +licenseType: Store +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + isOverridable: 0 + platformData: + Any: + enabled: 0 + settings: + Exclude Android: 1 + Exclude Editor: 1 + Exclude Linux: 1 + Exclude Linux64: 1 + Exclude LinuxUniversal: 1 + Exclude N3DS: 0 + Exclude OSXIntel: 1 + Exclude OSXIntel64: 1 + Exclude OSXUniversal: 1 + Exclude PS4: 0 + Exclude PSM: 0 + Exclude PSP2: 0 + Exclude SamsungTV: 0 + Exclude Tizen: 0 + Exclude WebGL: 0 + Exclude WiiU: 0 + Exclude Win: 1 + Exclude Win64: 1 + Exclude WindowsStoreApps: 0 + Exclude XboxOne: 0 + Exclude iOS: 0 + Exclude tvOS: 0 + Editor: + enabled: 0 + settings: + DefaultValueInitialized: true + N3DS: + enabled: 1 + settings: {} + PS4: + enabled: 1 + settings: {} + PSM: + enabled: 1 + settings: {} + PSP2: + enabled: 1 + settings: {} + SamsungTV: + enabled: 1 + settings: {} + Tizen: + enabled: 1 + settings: {} + WebGL: + enabled: 1 + settings: {} + WiiU: + enabled: 1 + settings: {} + WindowsStoreApps: + enabled: 1 + settings: + CPU: AnyCPU + XboxOne: + enabled: 1 + settings: {} + iOS: + enabled: 1 + settings: {} + tvOS: + enabled: 1 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/NoEmitAndNoEditor.meta b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/NoEmitAndNoEditor.meta new file mode 100644 index 00000000..2dcc2d22 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/NoEmitAndNoEditor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c6a4f09709a7f854eb914fa0dbd70c80 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/NoEmitAndNoEditor/Sirenix.Serialization.dll b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/NoEmitAndNoEditor/Sirenix.Serialization.dll new file mode 100644 index 00000000..5cbdecd7 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/NoEmitAndNoEditor/Sirenix.Serialization.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b12cdf55f0c0b77ad5543a2e38d232dd21b48d3d1f8690398a9d5ff864687824 +size 314880 diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/NoEmitAndNoEditor/Sirenix.Serialization.dll.meta b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/NoEmitAndNoEditor/Sirenix.Serialization.dll.meta new file mode 100644 index 00000000..0f511342 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/NoEmitAndNoEditor/Sirenix.Serialization.dll.meta @@ -0,0 +1,77 @@ +fileFormatVersion: 2 +guid: d2a8f0021d6b47c5923d8972dfb81ef1 +timeCreated: 1488828285 +licenseType: Store +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + isOverridable: 0 + platformData: + Android: + enabled: 1 + settings: {} + Any: + enabled: 0 + settings: + Exclude Android: 0 + Exclude Editor: 1 + Exclude Linux: 0 + Exclude Linux64: 0 + Exclude LinuxUniversal: 0 + Exclude N3DS: 1 + Exclude OSXIntel: 0 + Exclude OSXIntel64: 0 + Exclude OSXUniversal: 0 + Exclude PS4: 1 + Exclude PSM: 1 + Exclude PSP2: 1 + Exclude SamsungTV: 1 + Exclude Tizen: 1 + Exclude WebGL: 1 + Exclude WiiU: 1 + Exclude Win: 0 + Exclude Win64: 0 + Exclude WindowsStoreApps: 1 + Exclude XboxOne: 1 + Exclude iOS: 1 + Exclude tvOS: 1 + Editor: + enabled: 0 + settings: + DefaultValueInitialized: true + Linux: + enabled: 1 + settings: {} + Linux64: + enabled: 1 + settings: {} + LinuxUniversal: + enabled: 1 + settings: {} + OSXIntel: + enabled: 1 + settings: {} + OSXIntel64: + enabled: 1 + settings: {} + OSXUniversal: + enabled: 1 + settings: {} + PSM: + enabled: 0 + settings: {} + Win: + enabled: 1 + settings: {} + Win64: + enabled: 1 + settings: {} + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/NoEmitAndNoEditor/Sirenix.Utilities.dll b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/NoEmitAndNoEditor/Sirenix.Utilities.dll new file mode 100644 index 00000000..ba260cf9 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/NoEmitAndNoEditor/Sirenix.Utilities.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6c3bf53fdc9874e7bbdcb7c05ea929052ec0d61d1e74ff2ed669d239181c6306 +size 142336 diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/NoEmitAndNoEditor/Sirenix.Utilities.dll.meta b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/NoEmitAndNoEditor/Sirenix.Utilities.dll.meta new file mode 100644 index 00000000..8f1125c8 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/NoEmitAndNoEditor/Sirenix.Utilities.dll.meta @@ -0,0 +1,77 @@ +fileFormatVersion: 2 +guid: 1e0a9643dc0d4b46bf2321f72c4e503e +timeCreated: 1488828285 +licenseType: Store +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + isOverridable: 0 + platformData: + Android: + enabled: 1 + settings: {} + Any: + enabled: 0 + settings: + Exclude Android: 0 + Exclude Editor: 1 + Exclude Linux: 0 + Exclude Linux64: 0 + Exclude LinuxUniversal: 0 + Exclude N3DS: 1 + Exclude OSXIntel: 0 + Exclude OSXIntel64: 0 + Exclude OSXUniversal: 0 + Exclude PS4: 1 + Exclude PSM: 1 + Exclude PSP2: 1 + Exclude SamsungTV: 1 + Exclude Tizen: 1 + Exclude WebGL: 1 + Exclude WiiU: 1 + Exclude Win: 0 + Exclude Win64: 0 + Exclude WindowsStoreApps: 1 + Exclude XboxOne: 1 + Exclude iOS: 1 + Exclude tvOS: 1 + Editor: + enabled: 0 + settings: + DefaultValueInitialized: true + Linux: + enabled: 1 + settings: {} + Linux64: + enabled: 1 + settings: {} + LinuxUniversal: + enabled: 1 + settings: {} + OSXIntel: + enabled: 1 + settings: {} + OSXIntel64: + enabled: 1 + settings: {} + OSXUniversal: + enabled: 1 + settings: {} + PSM: + enabled: 0 + settings: {} + Win: + enabled: 1 + settings: {} + Win64: + enabled: 1 + settings: {} + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.OdinInspector.Attributes.dll b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.OdinInspector.Attributes.dll new file mode 100644 index 00000000..9c1e7a1f --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.OdinInspector.Attributes.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:94814a0a7ef2ccd0dd834cd11319da5af13194ecc42fcc8a3edb388905558d1c +size 38400 diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.OdinInspector.Attributes.dll.meta b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.OdinInspector.Attributes.dll.meta new file mode 100644 index 00000000..8adb8c46 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.OdinInspector.Attributes.dll.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 47a84ebde4ec47fabb620b30cc7a3e5c +timeCreated: 1488828285 +licenseType: Store +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + isOverridable: 0 + platformData: + Any: + enabled: 1 + settings: + Exclude Android: 0 + Exclude Editor: 0 + Exclude Linux: 0 + Exclude Linux64: 0 + Exclude LinuxUniversal: 0 + Exclude N3DS: 0 + Exclude OSXIntel: 0 + Exclude OSXIntel64: 0 + Exclude OSXUniversal: 0 + Exclude PS4: 0 + Exclude PSM: 0 + Exclude PSP2: 0 + Exclude SamsungTV: 0 + Exclude Tizen: 0 + Exclude WebGL: 0 + Exclude WiiU: 0 + Exclude Win: 0 + Exclude Win64: 0 + Exclude WindowsStoreApps: 0 + Exclude XboxOne: 0 + Exclude iOS: 0 + Exclude tvOS: 0 + Editor: + enabled: 0 + settings: + DefaultValueInitialized: true + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.OdinInspector.Attributes.xml b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.OdinInspector.Attributes.xml new file mode 100644 index 00000000..8a70a954 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.OdinInspector.Attributes.xml @@ -0,0 +1,5731 @@ + + + + Sirenix.OdinInspector.Attributes + + + + + AssetLists is used on lists and arrays and single elements of unity types, and replaces the default list drawer with a list of all possible assets with the specified filter. + Use this to both filter and include or exclude assets from a list or an array, without navigating the project window. + + + Asset lists works on all asset types such as materials, scriptable objects, prefabs, custom components, audio, textures etc, and does also show inherited types. + + + The following example will display an asset list of all prefabs located in the project window. + + public class AssetListExamples : MonoBehaviour + { + [InfoBox("The AssetList attribute work on both lists of UnityEngine.Object types and UnityEngine.Object types, but have different behaviour.")] + [AssetList] + [InlineEditor(InlineEditorModes.LargePreview)] + public GameObject Prefab; + + [AssetList] + public List<PlaceableObject> PlaceableObjects; + + [AssetList(Path = "Plugins/Sirenix/")] + [InlineEditor(InlineEditorModes.LargePreview)] + public UnityEngine.Object Object; + + [AssetList(AutoPopulate = true)] + public List<PlaceableObject> PlaceableObjectsAutoPopulated; + + [AssetList(LayerNames = "MyLayerName")] + public GameObject[] AllPrefabsWithLayerName; + + [AssetList(AssetNamePrefix = "Rock")] + public List<GameObject> PrefabsStartingWithRock; + + [AssetList(Path = "/Plugins/Sirenix/")] + public List<GameObject> AllPrefabsLocatedInFolder; + + [AssetList(Tags = "MyTagA, MyTabB", Path = "/Plugins/Sirenix/")] + public List<GameObject> GameObjectsWithTag; + + [AssetList(Path = "/Plugins/Sirenix/")] + public List<Material> AllMaterialsInSirenix; + + [AssetList(Path = "/Plugins/Sirenix/")] + public List<ScriptableObject> AllScriptableObjects; + + [InfoBox("Use a method as a custom filter for the asset list.")] + [AssetList(CustomFilterMethod = "HasRigidbodyComponent")] + public List<GameObject> MyRigidbodyPrefabs; + + private bool HasRigidbodyComponent(GameObject obj) + { + return obj.GetComponent<Rigidbody>() != null; + } + } + + + + + + If true, all assets found and displayed by the asset list, will automatically be added to the list when inspected. + + + + + Comma separated list of tags to filter the asset list. + + + + + Filter the asset list to only include assets with a specified layer. + + + + + Filter the asset list to only include assets which name begins with. + + + + + Filter the asset list to only include assets which is located at the specified path. + + + + + Filter the asset list to only include assets for which the given filter method returns true. + + + + + Initializes a new instance of the class. + + + + + The AssetSelector attribute can be used on all Unity types and will prepend a small button next to the object field that when clicked, + will present the user with a dropdown of assets to select from which can be customized from the attribute. + + + + + True by default. + + + + + True by default. If the ValueDropdown attribute is applied to a list, then disabling this, + will render all child elements normally without using the ValueDropdown. The ValueDropdown will + still show up when you click the add button on the list drawer, unless is true. + + + + + False by default. + + + + + If the ValueDropdown attribute is applied to a list, and is set to true, then enabling this, + will exclude existing values, instead of rendering a checkbox indicating whether the item is already included or not. + + + + + If the dropdown renders a tree-view, then setting this to true will ensure everything is expanded by default. + + + + + By default, the dropdown will create a tree view. + + + + + Gets or sets the width of the dropdown. Default is zero. + + + + + Gets or sets the height of the dropdown. Default is zero. + + + + + Gets or sets the title for the dropdown. Null by default. + + + + + Specify which folders to search in. Specifying no folders will make it search in your entire project. + Use the property for a more clean way of populating this array through attributes. + + + + + The filters we should use when calling AssetDatabase.FindAssets. + + + + + + Specify which folders to search in. Specifying no folders will make it search in your entire project. + You can decalir multiple paths using '|' as the seperator. + Example: [AssetList(Paths = "Assets/Textures|Assets/Other/Textures")] + + + This property is simply a more clean way of populating the array. + + + + + + AssetsOnly is used on object properties, and restricts the property to project assets, and not scene objects. + Use this when you want to ensure an object is from the project, and not from the scene. + + + The following example shows a component with a game object property, that must be a prefab from the project, and not a scene object. + + public MyComponent : MonoBehaviour + { + [AssetsOnly] + public GameObject MyPrefab; + } + + + + + + + BoxGroup is used on any property and organizes the property in a boxed group. + Use this to cleanly organize relevant values together in the inspector. + + + The following example shows how BoxGroup is used to organize properties together into a box. + + public class BoxGroupExamples : MonoBehaviour + { + // Box with a centered title. + [BoxGroup("Centered Title", centerLabel: true)] + public int A; + + [BoxGroup("Centered Title", centerLabel: true)] + public int B; + + [BoxGroup("Centered Title", centerLabel: true)] + public int C; + + // Box with a title. + [BoxGroup("Left Oriented Title")] + public int D; + + [BoxGroup("Left Oriented Title")] + public int E; + + // Box with a title recieved from a field. + [BoxGroup("$DynamicTitle1"), LabelText("Dynamic Title")] + public string DynamicTitle1 = "Dynamic box title"; + + [BoxGroup("$DynamicTitle1")] + public int F; + + // Box with a title recieved from a property. + [BoxGroup("$DynamicTitle2")] + public int G; + + [BoxGroup("$DynamicTitle2")] + public int H; + + // Box without a title. + [InfoBox("You can also hide the label of a box group.")] + [BoxGroup("NoTitle", false)] + public int I; + + [BoxGroup("NoTitle")] + public int J; + + [BoxGroup("NoTitle")] + public int K; + + #if UNITY_EDITOR + public string DynamicTitle2 + { + get { return UnityEditor.PlayerSettings.productName; } + } + #endif + + [BoxGroup("Boxed Struct"), HideLabel] + public SomeStruct BoxedStruct; + + public SomeStruct DefaultStruct; + + [Serializable] + public struct SomeStruct + { + public int One; + public int Two; + public int Three; + } + } + + + + + + + + + + + If true a label for the group will be drawn on top. + + + + + If true the header label will be places in the center of the group header. Otherwise it will be in left side. + + + + + If non-null, this is used instead of the group's name as the title label. + + + + + Adds the property to the specified box group. + + The box group. + If true a label will be drawn for the group. + If set to true the header label will be centered. + The order of the group in the inspector. + + + + Initializes a new instance of the class. Use the other constructor overloads in order to show a header-label on the box group. + + + + + Combines the box group with another group. + + The other group. + + + + Buttons are used on functions, and allows for clickable buttons in the inspector. + + + The following example shows a component that has an initialize method, that can be called from the inspector. + + public class MyComponent : MonoBehaviour + { + [Button] + private void Init() + { + // ... + } + } + + + + The following example show how a Button could be used to test a function. + + public class MyBot : MonoBehaviour + { + [Button] + private void Jump() + { + // ... + } + } + + + + The following example show how a Button can named differently than the function it's been attached to. + + public class MyComponent : MonoBehaviour + { + [Button("Function")] + private void MyFunction() + { + // ... + } + } + + + + + + + + Gets the height of the button. If it's zero or below then use default. + + + + + Use this to override the label on the button. + + + + + The style in which to draw the button. + + + + + If the button contains parameters, you can disable the foldout it creates by setting this to true. + + + + + Whether to display the button method's parameters (if any) as values in the inspector. True by default. + If this is set to false, the button method will instead be invoked through an ActionResolver or ValueResolver (based on whether it returns a value), giving access to contextual named parameter values like "InspectorProperty property" that can be passed to the button method. + + + + + Whether the containing object or scene (if there is one) should be marked dirty when the button is clicked. True by default. + + + + + If the button has a return type, set this to false to not draw the result. Default value is true. + + + + + Creates a button in the inspector named after the method. + + + + + Creates a button in the inspector named after the method. + + The size of the button. + + + + Creates a button in the inspector named after the method. + + The size of the button. + + + + Creates a button in the inspector with a custom name. + + Custom name for the button. + + + + Creates a button in the inspector with a custom name. + + Custom name for the button. + Size of the button. + + + + Creates a button in the inspector with a custom name. + + Custom name for the button. + Size of the button in pixels. + + + + Creates a button in the inspector named after the method. + + Button style for methods with parameters. + + + + Creates a button in the inspector named after the method. + + The size of the button. + Button style for methods with parameters. + + + + Creates a button in the inspector named after the method. + + The size of the button. + Button style for methods with parameters. + + + + Creates a button in the inspector with a custom name. + + Custom name for the button. + Button style for methods with parameters. + + + + Creates a button in the inspector with a custom name. + + Custom name for the button. + Size of the button. + Button style for methods with parameters. + + + + Creates a button in the inspector with a custom name. + + Custom name for the button. + Size of the button in pixels. + Button style for methods with parameters. + + + + ButtonGroup is used on any instance function, and adds buttons to the inspector organized into horizontal groups. + Use this to organize multiple button in a tidy horizontal group. + + + The following example shows how ButtonGroup is used to organize two buttons into one group. + + public class MyComponent : MonoBehaviour + { + [ButtonGroup("MyGroup")] + private void A() + { + // .. + } + + [ButtonGroup("MyGroup")] + private void B() + { + // .. + } + } + + + + The following example shows how ButtonGroup can be used to create multiple groups of buttons. + + public class MyComponent : MonoBehaviour + { + [ButtonGroup("First")] + private void A() + { } + + [ButtonGroup("First")] + private void B() + { } + + [ButtonGroup("")] + private void One() + { } + + [ButtonGroup("")] + private void Two() + { } + + [ButtonGroup("")] + private void Three() + { } + } + + + + + + + + + + + + + Organizes the button into the specified button group. + + The group to organize the button into. + The order of the group in the inspector.. + + + + Button style for methods with parameters. + + + + + Draws a foldout box around the parameters of the method with the button on the box header itself. + This is the default style of a method with parameters. + + + + + Draws a button with a foldout to expose the parameters of the method. + + + + + Draws a foldout box around the parameters of the method with the button at the bottom of the box. + + + + + The ChildGameObjectsOnly attribute can be used on Components and GameObject fields and will prepend a small button next to the object-field that + will search through all child gameobjects for assignable objects and present them in a dropdown for the user to choose from. + + + + + + Instead of making a new attribute, and a new drawer, for a one-time thing, you can with this attribute, make a method that acts as a custom property drawer. + These drawers will out of the box have support for undo/redo and multi-selection. + + + Usage: + + public class CustomDrawerExamples : MonoBehaviour + { + public float From = 2, To = 7; + + [CustomValueDrawer("MyStaticCustomDrawerStatic")] + public float CustomDrawerStatic; + + [CustomValueDrawer("MyStaticCustomDrawerInstance")] + public float CustomDrawerInstance; + + [CustomValueDrawer("MyStaticCustomDrawerArray")] + public float[] CustomDrawerArray; + + #if UNITY_EDITOR + + private static float MyStaticCustomDrawerStatic(float value, GUIContent label) + { + return EditorGUILayout.Slider(value, 0f, 10f); + } + + private float MyStaticCustomDrawerInstance(float value, GUIContent label) + { + return EditorGUILayout.Slider(value, this.From, this.To); + } + + private float MyStaticCustomDrawerArray(float value, GUIContent label) + { + return EditorGUILayout.Slider(value, this.From, this.To); + } + + #endif + } + + + + + + Name of the custom drawer method. Obsolete; use the Action member instead. + + + + + A resolved string that defines the custom drawer action to take, such as an expression or method invocation. + + + + + Instead of making a new attribute, and a new drawer, for a one-time thing, you can with this attribute, make a method that acts as a custom property drawer. + These drawers will out of the box have support for undo/redo and multi-selection. + + A resolved string that defines the custom drawer action to take, such as an expression or method invocation. + + + + Disables a property if it is drawn within an . + + + + + Disables a property if it is drawn from a non-prefab asset or instance. + + + + + Disables a property if it is drawn from a prefab asset. + + + + + Disables a property if it is drawn from a prefab instance. + + + + + Disables a property if it is drawn from a prefab asset or a prefab instance. + + + + + Indicates that the member should not be drawn as a value reference, if it becomes a reference to another value in the tree. Beware, and use with care! This may lead to infinite draw loops! + + + + + Tells the validation system that this member should not be validated. It will not show validation messages in the inspector, and it will not be scanned by the project validator. + + + + + An attribute that enables GUI. + + + + public class InlineEditorExamples : MonoBehaviour + { + [EnableGUI] + public string SomeReadonlyProperty { get { return "My GUI is usually disabled." } } + } + + + + + + + Draws an enum selector in the inspector with next and previous buttons to let you cycle through the available values for the enum property. + + + + public enum MyEnum + { + One, + Two, + Three, + } + + public class MyMonoBehaviour : MonoBehaviour + { + [EnumPaging] + public MyEnum Value; + } + + + + + + + FilePath is used on string properties, and provides an interface for file paths. + + + The following example demonstrates how FilePath is used. + + public class FilePathExamples : MonoBehaviour + { + // By default, FilePath provides a path relative to the Unity project. + [FilePath] + public string UnityProjectPath; + + // It is possible to provide custom parent path. Parent paths can be relative to the Unity project, or absolute. + [FilePath(ParentFolder = "Assets/Plugins/Sirenix")] + public string RelativeToParentPath; + + // Using parent path, FilePath can also provide a path relative to a resources folder. + [FilePath(ParentFolder = "Assets/Resources")] + public string ResourcePath; + + // Provide a comma seperated list of allowed extensions. Dots are optional. + [FilePath(Extensions = "cs")] + public string ScriptFiles; + + // By setting AbsolutePath to true, the FilePath will provide an absolute path instead. + [FilePath(AbsolutePath = true)] + [BoxGroup("Conditions")] + public string AbsolutePath; + + // FilePath can also be configured to show an error, if the provided path is invalid. + [FilePath(RequireValidPath = true)] + public string ValidPath; + + // By default, FilePath will enforce the use of forward slashes. It can also be configured to use backslashes instead. + [FilePath(UseBackslashes = true)] + public string Backslashes; + + // FilePath also supports member references with the $ symbol. + [FilePath(ParentFolder = "$DynamicParent", Extensions = "$DynamicExtensions")] + public string DynamicFilePath; + + public string DynamicParent = "Assets/Plugin/Sirenix"; + + public string DynamicExtensions = "cs, unity, jpg"; + } + + + + + + + + If true the FilePath will provide an absolute path, instead of a relative one. + + + + + Comma separated list of allowed file extensions. Dots are optional. + Supports member referencing with $. + + + + + ParentFolder provides an override for where the path is relative to. ParentFolder can be relative to the Unity project, or an absolute path. + Supports member referencing with $. + + + + + If true an error will be displayed for invalid, or missing paths. + + + + + If true an error will be displayed for non-existing paths. + + + + + By default FilePath enforces forward slashes. Set UseBackslashes to true if you want backslashes instead. + + + + + Gets or sets a value indicating whether the path should be read only. + + + + + FolderPath is used on string properties, and provides an interface for directory paths. + + + The following example demonstrates how FolderPath is used. + + public class FolderPathExamples : MonoBehaviour + { + // By default, FolderPath provides a path relative to the Unity project. + [FolderPath] + public string UnityProjectPath; + + // It is possible to provide custom parent patn. ParentFolder paths can be relative to the Unity project, or absolute. + [FolderPath(ParentFolder = "Assets/Plugins/Sirenix")] + public string RelativeToParentPath; + + // Using ParentFolder, FolderPath can also provide a path relative to a resources folder. + [FolderPath(ParentFolder = "Assets/Resources")] + public string ResourcePath; + + // By setting AbsolutePath to true, the FolderPath will provide an absolute path instead. + [FolderPath(AbsolutePath = true)] + public string AbsolutePath; + + // FolderPath can also be configured to show an error, if the provided path is invalid. + [FolderPath(RequireValidPath = true)] + public string ValidPath; + + // By default, FolderPath will enforce the use of forward slashes. It can also be configured to use backslashes instead. + [FolderPath(UseBackslashes = true)] + public string Backslashes; + + // FolderPath also supports member references with the $ symbol. + [FolderPath(ParentFolder = "$DynamicParent")] + public string DynamicFolderPath; + + public string DynamicParent = "Assets/Plugins/Sirenix"; + } + + + + + + + + If true the FolderPath will provide an absolute path, instead of a relative one. + + + + + ParentFolder provides an override for where the path is relative to. ParentFolder can be relative to the Unity project, or an absolute path. + Supports member referencing with $. + + + + + If true an error will be displayed for invalid, or missing paths. + + + + + If true an error will be displayed for non-existing paths. + + + + + By default FolderPath enforces forward slashes. Set UseBackslashes to true if you want backslashes instead. + + + + + Indicates that Odin should hide the reference box, if this property would otherwise be drawn as a reference to another property, due to duplicate reference values being encountered. + Note that if the value is referencing itself recursively, then the reference box will be drawn regardless of this attribute in all recursive draw calls. + + + + +

HideIfGroup allows for showing or hiding a group of properties based on a condition.

+

The attribute is a group attribute and can therefore be combined with other group attributes, and even be used to show or hide entire groups.

+

Note that in the vast majority of cases where you simply want to be able to control the visibility of a single group, it is better to use the VisibleIf parameter that *all* group attributes have.

+
+ + + + + +
+ + + Whether or not to visually animate group visibility changes. + + + + + The optional member value. + + + + + Name of member to use when to hide the group. Defaults to the name of the group, by can be overriden by setting this property. + + + + + A resolved string that defines the condition to check the value of, such as a member name or an expression. + + + + + Makes a group that can be shown or hidden based on a condition. + + The group path. + If true then a fade animation will be played when the group is hidden or shown. + + + + Makes a group that can be shown or hidden based on a condition. + + The group path. + The value the member should equal for the property to shown. + If true then a fade animation will be played when the group is hidden or shown. + + + + Combines HideIfGroup attributes. + + Another ShowIfGroup attribute. + + + + Hides a property if it is drawn within an . + + + + + Hides a property if it is drawn from a non prefab instance or asset. + + + + + Hides a property if it is drawn from a prefab asset. + + + + + Hides a property if it is drawn from a prefab instance. + + + + + Hides a property if it is drawn from a prefab instance or a prefab asset. + + + + + The HideInTables attribute is used to prevent members from showing up as columns in tables drawn using the . + + + + + Apply HideNetworkBehaviourFields to your class to prevent the special "Network Channel" and "Network Send Interval" properties from being shown in the inspector for a NetworkBehaviour. + This attribute has no effect on classes that are not derived from NetworkBehaviour. + + + The following example shows how to use this attribute. + + [HideNetworkBehaviourFields] + public class MyComponent : NetworkBehaviour + { + // The "Network Channel" and "Network Send Interval" properties will not be shown for this component in the inspector + } + + + + + + + The Inline Property is used to place the contents of a type next to the label, instead of being rendered in a foldout. + + + + public class InlinePropertyExamples : MonoBehaviour + { + public Vector3 Vector3; + + public Vector3Int Vector3Int; + + [InlineProperty(LabelWidth = 12)] // It can be placed on classes as well as members + public Vector2Int Vector2Int; + + } + + [Serializable] + [InlineProperty(LabelWidth = 12)] // It can be placed on classes as well as members + public struct Vector3Int + { + [HorizontalGroup] + public int X; + + [HorizontalGroup] + public int Y; + + [HorizontalGroup] + public int Z; + } + + [Serializable] + public struct Vector2Int + { + [HorizontalGroup] + public int X; + + [HorizontalGroup] + public int Y; + } + + + + + + + Specify a label width for all child properties. + + + + + LabelWidth is used to change the width of labels for properties. + + + The following example shows how LabelText is applied to a few property fields. + + public MyComponent : MonoBehaviour + { + [LabelWidth("3")] + public int MyInt3; + } + + + + + + + The new text of the label. + + + + + Give a property a custom label. + + The width of the label. + + + + + OnCollectionChanged can be put on collections, and provides an event callback when the collection is about to be changed through the inspector, + and when the collection has been changed through the inspector. Additionally, it provides a CollectionChangeInfo struct containing information + about the exact changes made to the collection. This attribute works for all collections with a collection resolver, amongst them arrays, lists, + dictionaries, hashsets, stacks and linked lists. + + + + Note that this attribute only works in the editor! Collections changed by script will not trigger change events! + + + The following example shows how OnCollectionChanged can be used to get callbacks when a collection is being changed. + + [OnCollectionChanged("Before", "After")] + public List<string> list; + + public void Before(CollectionChangeInfo info) + { + if (info.ChangeType == CollectionChangeType.Add || info.ChangeType == CollectionChangeType.Insert) + { + Debug.Log("Adding to the list!"); + } + else if (info.ChangeType == CollectionChangeType.RemoveIndex || info.ChangeType == CollectionChangeType.RemoveValue) + { + Debug.Log("Removing from the list!"); + } + } + + public void After(CollectionChangeInfo info) + { + if (info.ChangeType == CollectionChangeType.Add || info.ChangeType == CollectionChangeType.Insert) + { + Debug.Log("Finished adding to the list!"); + } + else if (info.ChangeType == CollectionChangeType.RemoveIndex || info.ChangeType == CollectionChangeType.RemoveValue) + { + Debug.Log("Finished removing from the list!"); + } + } + + + + + + The OnInspectorDispose attribute takes in an action string as an argument (typically the name of a method to be invoked, or an expression to be executed), and executes that action when the property's drawers are disposed in the inspector. + Disposing will happen at least once, when the inspector changes selection or the property tree is collected by the garbage collector, but may also happen several times before that, most often when the type of a polymorphic property changes and it refreshes its drawer setup and recreates all its children, disposing of the old setup and children. + + + The following example demonstrates how OnInspectorDispose works. + + public class MyComponent : MonoBehaviour + { + [OnInspectorDispose(@"@UnityEngine.Debug.Log(""Dispose event invoked!"")")] + [ShowInInspector, InfoBox("When you change the type of this field, or set it to null, the former property setup is disposed. The property setup will also be disposed when you deselect this example."), DisplayAsString] + public BaseClass PolymorphicField; + + public abstract class BaseClass { public override string ToString() { return this.GetType().Name; } } + public class A : BaseClass { } + public class B : BaseClass { } + public class C : BaseClass { } + } + + + + + + This constructor should be used when the attribute is placed directly on a method. + + + + + This constructor should be used when the attribute is placed on a non-method member. + + + + + The OnInspectorInit attribute takes in an action string as an argument (typically the name of a method to be invoked, or an expression to be executed), and executes that action when the property's drawers are initialized in the inspector. + Initialization will happen at least once during the first drawn frame of any given property, but may also happen several times later, most often when the type of a polymorphic property changes and it refreshes its drawer setup and recreates all its children. + + + The following example demonstrates how OnInspectorInit works. + + public class MyComponent : MonoBehaviour + { + // Display current time for reference. + [ShowInInspector, DisplayAsString, PropertyOrder(-1)] + public string CurrentTime { get { GUIHelper.RequestRepaint(); return DateTime.Now.ToString(); } } + + // OnInspectorInit executes the first time this string is about to be drawn in the inspector. + // It will execute again when the example is reselected. + [OnInspectorInit("@TimeWhenExampleWasOpened = DateTime.Now.ToString()")] + public string TimeWhenExampleWasOpened; + + // OnInspectorInit will not execute before the property is actually "resolved" in the inspector. + // Remember, Odin's property system is lazily evaluated, and so a property does not actually exist + // and is not initialized before something is actually asking for it. + // + // Therefore, this OnInspectorInit attribute won't execute until the foldout is expanded. + [FoldoutGroup("Delayed Initialization", Expanded = false, HideWhenChildrenAreInvisible = false)] + [OnInspectorInit("@TimeFoldoutWasOpened = DateTime.Now.ToString()")] + public string TimeFoldoutWasOpened; + } + + + + + + This constructor should be used when the attribute is placed directly on a method. + + + + + This constructor should be used when the attribute is placed on a non-method member. + + + + + + OnStateUpdate provides an event callback when the property's state should be updated, when the StateUpdaters run on the property instance. + This generally happens at least once per frame, and the callback will be invoked even when the property is not visible. This can be used to + approximate custom StateUpdaters like [ShowIf] without needing to make entire attributes and StateUpdaters for one-off cases. + + + + The following example shows how OnStateUpdate can be used to control the visible state of a property. + + public class MyComponent : MonoBehaviour + { + [OnStateUpdate("@$property.State.Visible = ToggleMyInt")] + public int MyInt; + + public bool ToggleMyInt; + } + + + + The following example shows how OnStateUpdate can be used to control the expanded state of a list. + + public class MyComponent : MonoBehaviour + { + [OnStateUpdate("@$property.State.Expanded = ExpandList")] + public List<string> list; + + public bool ExpandList; + } + + The following example shows how OnStateUpdate can be used to control the state of another property. + + public class MyComponent : MonoBehaviour + { + public List>string< list; + + [OnStateUpdate("@#(list).State.Expanded = $value")] + public bool ExpandList; + } + + + + + + + Draws a square ObjectField which renders a preview for UnityEngine.Object types. + This object field also adds support for drag and drop, dragging an object to another square object field, swaps the values. + If you hold down control while letting go it will replace the value, And you can control + click the object field to quickly delete the value it holds. + + + These object fields can also be selectively enabled and customized globally from the Odin preferences window. + + + + The following example shows how PreviewField is applied to a few property fields. + + public MyComponent : MonoBehaviour + { + [PreviewField] + public UnityEngine.Object SomeObject; + + [PreviewField] + public Texture SomeTexture; + + [HorizontalGroup, HideLabel, PreviewField(30)] + public Material A, B, C, D, F; + } + + + + + + + The height of the object field + + + + + Left aligned. + + + + + Whether an alignment value is specified. + + + + + Draws a square object field which renders a preview for UnityEngine.Object type objects. + + + + + Draws a square object field which renders a preview for UnityEngine.Object type objects. + + The height of the preview field. + + + + Draws a square object field which renders a preview for UnityEngine.Object type objects. + + The height of the preview field. + The alignment of the preview field. + + + + Draws a square object field which renders a preview for UnityEngine.Object type objects. + + The alignment of the preview field. + + + + Draws a horizontal progress bar based on the value of the property. + Use it for displaying a meter to indicate how full an inventory is, or to make a visual indication of a health bar. + + + The following example shows how ProgressBar can be used. + + public class ProgressBarExample : MonoBehaviour + { + // Default progress bar. + [ProgressBar(0, 100)] + public int ProgressBar; + + // Health bar. + [ProgressBar(0, 100, ColorMember = "GetHealthBarColor")] + public float HealthBar = 50; + + private Color GetHealthBarColor(float value) + { + // Blends between red, and yellow color for when the health is below 30, + // and blends between yellow and green color for when the health is above 30. + return Color.Lerp(Color.Lerp( + Color.red, Color.yellow, MathUtilities.LinearStep(0f, 30f, value)), + Color.green, MathUtilities.LinearStep(0f, 100f, value)); + } + + // Stacked health bar. + // The ProgressBar attribute is placed on property, without a set method, so it can't be edited directly. + // So instead we have this Range attribute on a float to change the value. + [Range(0, 300)] + public float StackedHealth; + + [ProgressBar(0, 100, ColorMember = "GetStackedHealthColor", BackgroundColorMember = "GetStackHealthBackgroundColor")] + private float StackedHealthProgressBar + { + // Loops the stacked health value between 0, and 100. + get { return this.StackedHealth - 100 * (int)((this.StackedHealth - 1) / 100); } + } + + private Color GetStackedHealthColor() + { + return + this.StackedHealth > 200 ? Color.cyan : + this.StackedHealth > 100 ? Color.green : + Color.red; + } + + private Color GetStackHealthBackgroundColor() + { + return + this.StackedHealth > 200 ? Color.green : + this.StackedHealth > 100 ? Color.red : + new Color(0.16f, 0.16f, 0.16f, 1f); + } + + // Custom color and height. + [ProgressBar(-100, 100, r: 1, g: 1, b: 1, Height = 30)] + public short BigProgressBar = 50; + + // You can also reference members by name to dynamically assign the min and max progress bar values. + [ProgressBar("DynamicMin", "DynamicMax")] + public float DynamicProgressBar; + + public float DynamicMin, DynamicMax; + } + + + + + + + + + The minimum value. + + + + + The maximum value. + + + + + The name of a field, property or method to get the min values from. Obsolete; use the MinGetter member instead. + + + + + A resolved string that should evaluate to a float value, and will be used as the min bounds. + + + + + The name of a field, property or method to get the max values from. Obsolete; use the MaxGetter member instead. + + + + + A resolved string that should evaluate to a float value, and will be used as the max bounds. + + + + + The red channel of the color of the progress bar. + + + + + The green channel of the color of the progress bar. + + + + + The blue channel of the color of the progress bar. + + + + + The height of the progress bar in pixels. Defaults to 12 pixels. + + + + + Optional reference to a Color field, property or method, to dynamically change the color of the progress bar. Obsolete; use the ColorGetter member instead. + + + + + Optional resolved string that should evaluate to a Color value, to dynamically change the color of the progress bar. + + + + + Optional reference to a Color field, property or method, to dynamically change the background color of the progress bar. + Default background color is (0.16, 0.16, 0.16, 1). + Obsolete; use the BackgroundColorGetter member instead. + + + + + Optional resolved string that should evaluate to a Color value, to dynamically change the background color of the progress bar. + Default background color is (0.16, 0.16, 0.16, 1). + + + + + If true then the progress bar will be drawn in tiles. + + + + + References a member by name to get a custom value label string from. Obsolete; use the CustomValueStringGetter member instead. + + + + + A resolved string to get a custom value label string from. + + + + + Draws a progress bar for the value. + + The minimum value. + The maximum value. + The red channel of the color of the progress bar. + The green channel of the color of the progress bar. + The blue channel of the color of the progress bar. + + + + Draws a progress bar for the value. + + A resolved string that should evaluate to a float value, and will be used as the min bounds. + The maximum value. + The red channel of the color of the progress bar. + The green channel of the color of the progress bar. + The blue channel of the color of the progress bar. + + + + Draws a progress bar for the value. + + The minimum value. + A resolved string that should evaluate to a float value, and will be used as the max bounds. + The red channel of the color of the progress bar. + The green channel of the color of the progress bar. + The blue channel of the color of the progress bar. + + + + Draws a progress bar for the value. + + A resolved string that should evaluate to a float value, and will be used as the min bounds. + A resolved string that should evaluate to a float value, and will be used as the max bounds. + The red channel of the color of the progress bar. + The green channel of the color of the progress bar. + The blue channel of the color of the progress bar. + + + + If true then there will be drawn a value label on top of the progress bar. + + + + + Gets a value indicating if the user has set a custom DrawValueLabel value. + + + + + The alignment of the value label on top of the progress bar. Defaults to center. + + + + + Gets a value indicating if the user has set a custom ValueLabelAlignment value. + + + + + PropertyRange attribute creates a slider control to set the value of a property to between the specified range. + This is equivalent to Unity's Range attribute, but this attribute can be applied to both fields and property. + + The following example demonstrates how PropertyRange is used. + + public class MyComponent : MonoBehaviour + { + [PropertyRange(0, 100)] + public int MyInt; + + [PropertyRange(-100, 100)] + public float MyFloat; + + [PropertyRange(-100, -50)] + public decimal MyDouble; + + // This attribute also supports dynamically referencing members by name to assign the min and max values for the range field. + [PropertyRange("DynamicMin", "DynamicMax"] + public float MyDynamicValue; + + public float DynamicMin, DynamicMax; + } + + + + + + + + + The minimum value. + + + + + The maximum value. + + + + + The name of a field, property or method to get the min value from. Obsolete; use the MinGetter member instead. + + + + + A resolved string that should evaluate to a float value, and will be used as the min bounds. + + + + + The name of a field, property or method to get the max value from. Obsolete; use the MaxGetter member instead. + + + + + A resolved string that should evaluate to a float value, and will be used as the max bounds. + + + + + Creates a slider control to set the value of the property to between the specified range.. + + The minimum value. + The maximum value. + + + + Creates a slider control to set the value of the property to between the specified range.. + + A resolved string that should evaluate to a float value, and will be used as the min bounds. + The maximum value. + + + + Creates a slider control to set the value of the property to between the specified range.. + + The minimum value. + A resolved string that should evaluate to a float value, and will be used as the max bounds. + + + + Creates a slider control to set the value of the property to between the specified range.. + + A resolved string that should evaluate to a float value, and will be used as the min bounds. + A resolved string that should evaluate to a float value, and will be used as the max bounds. + + + + The PropertySpace attribute have the same function as Unity's existing Space attribute, but can be applied anywhere as opposed to just fields. + + + The following example demonstrates the usage of the PropertySpace attribute. + + [PropertySpace] // Defaults to a space of 8 pixels just like Unity's Space attribute. + public int MyField; + + [ShowInInspector, PropertySpace(16)] + public int MyProperty { get; set; } + + [ShowInInspector, PropertySpace(16, 16)] + public int MyProperty { get; set; } + + [Button, PropertySpace(32)] + public void MyMethod() + { + ... + } + + [PropertySpace(-8)] // A negative space can also be remove existing space between properties. + public int MovedUp; + + + + + + + + + + The space between properties in pixels. + + + + + The space between properties in pixels. + + + + + Adds a space of 8 pixels between properties. + + + + + Adds a space between properties. + + + + + Adds a space between properties. + + + + + Groups buttons into a group that will position and resize the buttons based on the amount of available layout space. + + + + [ResponsiveButtonGroup] + public void Foo() { } + + [ResponsiveButtonGroup] + public void Bar() { } + + [ResponsiveButtonGroup] + public void Baz() { } + + + + + [ResponsiveButtonGroup(UniformLayout = true)] + public void Foo() { } + + [ResponsiveButtonGroup] + public void Bar() { } + + [ResponsiveButtonGroup] + public void Baz() { } + + + + + [ResponsiveButtonGroupAttribute(UniformLayout = true, DefaultButtonSize = ButtonSizes.Large)] + public void Foo() { } + + [GUIColor(0, 1, 0))] + [Button(ButtonSizes.Large)] + [ResponsiveButtonGroup] + public void Bar() { } + + [ResponsiveButtonGroup] + public void Baz() { } + + + + + [TabGroup("SomeTabGroup", "SomeTab")] + [ResponsiveButtonGroup("SomeTabGroup/SomeTab/SomeBtnGroup")] + public void Foo() { } + + [ResponsiveButtonGroup("SomeTabGroup/SomeTab/SomeBtnGroup")] + public void Bar() { } + + [ResponsiveButtonGroup("SomeTabGroup/SomeTab/SomeBtnGroup")] + public void Baz() { } + + + + + + The default size of the button. + + + + + If true then the widths of a line of buttons will be the same. + + + + + Draws a button that will be placed in a group that will respond to the horizontal space available to the group. + + The name of the group to place the button in. + + + + Merges the values of this group with another ResponsiveButtonGroupAttribute. + + The attribute to combine with. + + + +

ShowIfGroup allows for showing or hiding a group of properties based on a condition.

+

The attribute is a group attribute and can therefore be combined with other group attributes, and even be used to show or hide entire groups.

+

Note that in the vast majority of cases where you simply want to be able to control the visibility of a single group, it is better to use the VisibleIf parameter that *all* group attributes have.

+
+ + + + + +
+ + + Whether or not to visually animate group visibility changes. Alias for AnimateVisibility. + + + + + The optional member value. + + + + + Name of member to use when to hide the group. Defaults to the name of the group, by can be overriden by setting this property. + + + + + A resolved string that defines the condition to check the value of, such as a member name or an expression. + + + + + Makes a group that can be shown or hidden based on a condition. + + The group path. + If true then a fade animation will be played when the group is hidden or shown. + + + + Makes a group that can be shown or hidden based on a condition. + + The group path. + The value the member should equal for the property to shown. + If true then a fade animation will be played when the group is hidden or shown. + + + + Combines ShowIfGroup attributes. + + Another ShowIfGroup attribute. + + + + Only shows a property if it is drawn within an . + + + + + + ShowPropertyResolver shows the property resolver responsible for bringing the member into the property tree. + This is useful in situations where you want to debug why a particular member that is normally not shown in the inspector suddenly is. + + + + + public class MyComponent : MonoBehaviour + { + [ShowPropertyResolver] + public int IndentedInt; + } + + + + + + The SuffixLabel attribute draws a label at the end of a property. + Use this for conveying intend about a property. Is the distance measured in meters, kilometers, or in light years?. + Is the angle measured in degrees or radians? + Using SuffixLabel, you can place a neat label at the end of a property, to clearly show how the the property is used. + + + The following example demonstrates how SuffixLabel is used. + + public class MyComponent : MonoBehaviour + { + // The SuffixLabel attribute draws a label at the end of a property. + // It's useful for conveying intend about a property. + // Fx, this field is supposed to have a prefab assigned. + [SuffixLabel("Prefab")] + public GameObject GameObject; + + // Using the Overlay property, the suffix label will be drawn on top of the property instead of behind it. + // Use this for a neat inline look. + [SuffixLabel("ms", Overlay = true)] + public float Speed; + + [SuffixLabel("radians", Overlay = true)] + public float Angle; + + // The SuffixLabel attribute also supports string member references by using $. + [SuffixLabel("$Suffix", Overlay = true)] + public string Suffix = "Dynamic suffix label"; + } + + + + + + + + + + The label displayed at the end of the property. + + + + + If true the suffix label will be drawn on top of the property, instead of after. + + + + + Draws a label at the end of the property. + + The text of the label. + If true the suffix label will be drawn on top of the property, instead of after. + + + + The TableColumnWidth attribute is used to further customize the width of a column in tables drawn using the . + + + + [TableList] + public List<SomeType> TableList = new List<SomeType>(); + + [Serializable] + public class SomeType + { + [LabelWidth(30)] + [TableColumnWidth(130, false)] + [VerticalGroup("Combined")] + public string A; + + [LabelWidth(30)] + [VerticalGroup("Combined")] + public string B; + + [Multiline(2), Space(3)] + public string fields; + } + + + + + + + The width of the column. + + + + + Whether the column should be resizable. True by default. + + + + + Initializes a new instance of the class. + + The width of the column in pixels. + If true then the column can be resized in the inspector. + + + + Renders lists and arrays in the inspector as tables. + + + + + + + If ShowPaging is enabled, this will override the default setting specified in the Odin Preferences window. + + + + + Mark the table as read-only. This removes all editing capabilities from the list such as Add and delete, + but without disabling GUI for each element drawn as otherwise would be the case if the was used. + + + + + The default minimum column width - 40 by default. This can be overwriten by individual columns using the . + + + + + If true, a label is drawn for each element which shows the index of the element. + + + + + Whether to draw all rows in a scroll-view. + + + + + The number of pixels before a scroll view appears. 350 by default. + + + + + The number of pixels before a scroll view appears. 0 by default. + + + + + If true, expanding and collapsing the table from the table title-bar is no longer an option. + + + + + Whether to hide the toolbar containing the add button and pagin etc.s + + + + + The cell padding. + + + + + Whether paging buttons should be added to the title bar. The default value of this, can be customized from the Odin Preferences window. + + + + + Whether the ShowPaging property has been set. + + + + + Sets the Min and Max ScrollViewHeight. + + + + + The TableMatrix attribute is used to further specify how Odin should draw two-dimensional arrays. + + + + // Inheriting from SerializedMonoBehaviour is only needed if you want Odin to serialize the multi-dimensional arrays for you. + // If you prefer doing that yourself, you can still make Odin show them in the inspector using the ShowInInspector attribute. + public class TableMatrixExamples : SerializedMonoBehaviour + { + [InfoBox("Right-click and drag column and row labels in order to modify the tables."), PropertyOrder(-10), OnInspectorGUI] + private void ShowMessageAtOP() { } + + [BoxGroup("Two Dimensional array without the TableMatrix attribute.")] + public bool[,] BooleanTable = new bool[15, 6]; + + [BoxGroup("ReadOnly table")] + [TableMatrix(IsReadOnly = true)] + public int[,] ReadOnlyTable = new int[5, 5]; + + [BoxGroup("Labled table")] + [TableMatrix(HorizontalTitle = "X axis", VerticalTitle = "Y axis")] + public GameObject[,] LabledTable = new GameObject[15, 10]; + + [BoxGroup("Enum table")] + [TableMatrix(HorizontalTitle = "X axis")] + public InfoMessageType[,] EnumTable = new InfoMessageType[4,4]; + + [BoxGroup("Custom table")] + [TableMatrix(DrawElementMethod = "DrawColoredEnumElement", ResizableColumns = false)] + public bool[,] CustomCellDrawing = new bool[30,30]; + + #if UNITY_EDITOR + + private static bool DrawColoredEnumElement(Rect rect, bool value) + { + if (Event.current.type == EventType.MouseDown && rect.Contains(Event.current.mousePosition)) + { + value = !value; + GUI.changed = true; + Event.current.Use(); + } + + UnityEditor.EditorGUI.DrawRect(rect.Padding(1), value ? new Color(0.1f, 0.8f, 0.2f) : new Color(0, 0, 0, 0.5f)); + + return value; + } + + #endif + } + + + + + + If true, inserting, removing and dragging columns and rows will become unavailable. But the cells themselves will remain modifiable. + If you want to disable everything, you can use the attribute. + + + + + Whether or not columns are resizable. + + + + + The vertical title label. + + + + + The horizontal title label. + + + + + Override how Odin draws each cell. + [TableMatrix(DrawElementMethod='DrawMyElement')] + public MyType[,] myArray; + private static MyType DrawElement(Rect rect, MyType value) { return GUI.DrawMyType(rect, value); } + + + + + The height for all rows. 0 = default row height. + + + + + If true, the height of each row will be the same as the width of the first cell. + + + + + If true, no column indices drawn. + + + + + If true, no row indices drawn. + + + + + Whether the drawn table should respect the current GUI indent level. + + + + + If true, tables are drawn with rows/columns reversed (C# initialization order). + + + + + Name of any field, property or method member that implements IList. E.g. arrays or Lists. Obsolete; use the FilterGetter member instead. + + + + + A resolved string that should evaluate to a value that is assignable to IList; e.g, arrays and lists are compatible. + + + + + Gets or sets the title for the dropdown. Null by default. + + + + + If true, the value will be drawn normally after the type selector dropdown has been drawn. False by default. + + + + + Creates a dropdown menu for a property. + + A resolved string that should evaluate to a value that is assignable to IList; e.g, arrays and lists are compatible. + + + + The TypeInfoBox attribute adds an info box to the very top of a type in the inspector. + Use this to add an info box to the top of a class in the inspector, without having to use neither the PropertyOrder nor the OnInspectorGUI attribute. + + + The following example demonstrates the use of the TypeInfoBox attribute. + + [TypeInfoBox("This is my component and it is mine.")] + public class MyComponent : MonoBehaviour + { + // Class implementation. + } + + + + + + + + The message to display in the info box. + + + + + Draws an info box at the top of a type in the inspector. + + The message to display in the info box. + + + + VerticalGroup is used to gather properties together in a vertical group in the inspector. + This doesn't do much in and of itself, but in combination with other groups, such as it can be very useful. + + + The following example demonstrates how VerticalGroup can be used in conjunction with + + public class MyComponent : MonoBehaviour + { + [HorizontalGroup("Split")] + [VerticalGroup("Split/Left")] + public Vector3 Vector; + + [VerticalGroup("Split/Left")] + public GameObject First; + + [VerticalGroup("Split/Left")] + public GameObject Second; + + [VerticalGroup("Split/Right", PaddingTop = 18f)] + public int A; + + [VerticalGroup("Split/Right")] + public int B; + } + + + + + + + + + + + Space in pixels at the top of the group. + + + + + Space in pixels at the bottom of the group. + + + + + Groups properties vertically. + + The group ID. + The group order. + + + + Groups properties vertically. + GroupId: _DefaultVerticalGroup + + The group order. + + + + Combines properties that have been group vertically. + + The group attribute to combine with. + + + + Not yet documented. + + + + + Not yet documented. + + + + + Adds a search filter that can search the children of the field or type on + which it is applied. Note that this does not currently work when directly + applied to dictionaries, though a search field "above" the dictionary will + still search the dictionary's properties if it is searching recursively. + + + + + Whether to use fuzzy string matching for the search. + Default value: true. + + + + + The options for which things to use to filter the search. + Default value: All. + + + + + Whether to search recursively, or only search the top level properties. + Default value: true. + + + + + When this attribute is added is added to another attribute, then attributes from that attribute + will also be added to the property in the attribute processing step. + + + + + How the InlineEditor attribute drawer should draw the object field. + + + + + Draws the object field in a box. + + + + + Draws the object field with a foldout. + + + + + Hides the object field unless it's null. + + + + + Hidden the object field also when the object is null. + + + + + Implement this interface to create custom matching + logic for search filtering in the inspector. + + + The following example shows how you might do this: + + public class MyCustomClass : ISearchFilterable + { + public bool SearchEnabled; + public string MyStr; + + public bool IsMatch(string searchString) + { + if (SearchEnabled) + { + return MyStr.Contains(searchString); + } + + return false; + } + } + + + + + + How the square object field should be aligned. + + + + + + Left aligned. + + + + + Aligned to the center. + + + + + Right aligned. + + + + + Options for filtering search. + + + + + Title alignment enum used by various attributes. + + + + + + + Title and subtitle left aligned. + + + + + Title and subtitle centered aligned. + + + + + Title and subtitle right aligned. + + + + + Title on the left, subtitle on the right. + + + + + Groups properties vertically together with a title, an optional subtitle, and an optional horizontal line. + + + + + Optional subtitle. + + + + + Title alignment. + + + + + Gets a value indicating whether or not to draw a horizontal line below the title. + + + + + If true the title will be displayed with a bold font. + + + + + Gets a value indicating whether or not to indent all group members. + + + + + Groups properties vertically together with a title, an optional subtitle, and an optional horizontal line. + + The title- + Optional subtitle. + The text alignment. + Horizontal line. + Bold text. + Whether or not to indent all group members. + The group order. + + + + Combines TitleGroup attributes. + + The other group attribute to combine with. + + + + Various built-in button sizes. + + + + + Small button size, fits well with properties in the inspector. + + + + + A larger button. + + + + + A very large button. + + + + + A gigantic button. Twice as big as Large + + + + + ColorPalette is used on any Color property, and allows for choosing colors from different definable palettes. + Use this to allow the user to choose from a set of predefined color options. + + + See and edit the color palettes in Tools > Odin Inspector > Drawers > Color Palettes. + The color property is not tied to the color palette, and can be edited. Therefore the color will also not update if the ColorPalette is edited. + + + The following example shows how ColorPalette is applied to a property. The user can freely choose between all available ColorPalettes. + + public class ColorPaletteExamples : MonoBehaviour + { + [ColorPalette] + public Color ColorOptions; + + [ColorPalette("Underwater")] + public Color UnderwaterColor; + + [ColorPalette("Fall"), HideLabel] + public Color WideColorPalette; + + [ColorPalette("My Palette")] + public Color MyColor; + + [ColorPalette("Clovers")] + public Color[] ColorArray; + } + + + + + + Gets the name of the palette. + + + + + Indicates if the color palette should show alpha values or not. + + + + + Adds a color palette options to a Color property. + + + + + Adds color options to a Color property from a specific palette. + + Name of the palette. + + + + CustomContextMenu is used on any property, and adds a custom options to the context menu for the property. + Use this for when you want to add custom actions to the context menu of a property. + + + CustomContextMenu currently does not support static functions. + + + The following example shows how CustomContextMenu is used to add a custom option to a property. + + public class MyComponent : MonoBehaviour + { + [CustomContextMenu("My custom option", "MyAction")] + public Vector3 MyVector; + + private void MyAction() + { + MyVector = Random.onUnitSphere; + } + } + + + + + + + The name of the menu item. + + + + + The name of the callback method. Obsolete; use the Action member instead. + + + + + A resolved string defining the action to take when the context menu is clicked. + + + + + Adds a custom option to the context menu of the property. + + The name of the menu item. + A resolved string defining the action to take when the context menu is clicked. + + + + Delays applying changes to properties while they still being edited in the inspector. + Similar to Unity's built-in Delayed attribute, but this attribute can also be applied to properties. + + + + + DetailedInfoBox is used on any property, and displays a message box that can be expanded to show more details. + Use this to convey a message to a user, and give them the option to see more details. + + + The following example shows how DetailedInfoBox is used on a field. + + public class MyComponent : MonoBehaviour + { + [DetailedInfoBox("This is a message", "Here is some more details about that message")] + public int MyInt; + } + + + + + + + The message for the message box. + + + + + The hideable details of the message box. + + + + + Type of the message box. + + + + + Optional name of a member to hide or show the message box. + + + + + Displays a message box with hideable details. + + The message for the message box. + The hideable details of the message box. + Type of the message box. + Optional name of a member to hide or show the message box. + + + + Various display modes for the dictionary to draw its items. + + + + + Draws all dictionary items in two columns. The left column contains all key values, the right column displays all values. + + + + + Draws each dictionary item in a box with the key in the header and the value inside the box. + Whether or not the box is expanded or collapsed by default, is determined by the + "Expand Foldout By Default" setting found in the preferences window "Tools > Odin Inspector > Preferences > Drawers > Settings". + + + + + Draws each dictionary item in a collapsed foldout with the key in the header and the value inside the box. + + + + + Draws each dictionary item in an expanded foldout with the key in the header and the value inside the box. + + + + + Customize the behavior for dictionaries in the inspector. + + + + + Specify an alternative key label for the dictionary drawer. + + + + + Specify an alternative value label for the dictionary drawer. + + + + + Specify how the dictionary should draw its items. + + + + + Gets or sets a value indicating whether this instance is read only. + + + + + Gets or sets a value indicating the default key column width of the dictionary. + + + + + DisableContextMenu is used on any property and disables the context menu for that property. + Use this if you do not want the context menu to be available for a property. + + + The following example shows how DisableContextMenu is used on a property. + + public class MyComponent : MonoBehaviour + { + [DisableContextMenu] + public Vector3 MyVector; + } + + + + + + + Whether to disable the context menu for the member itself. + + + + + Whether to disable the context menu for collection elements. + + + + + Initializes a new instance of the class. + + Whether to disable the context menu for the member itself. + Whether to also disable the context menu of collection elements. + + + + DisableIf is used on any property, and can disable or enable the property in the inspector. + Use this to disable properties when they are irrelevant. + + + The following example shows how a property can be disabled by the state of a field. + + public class MyComponent : MonoBehaviour + { + public bool DisableProperty; + + [DisableIf("DisableProperty")] + public int MyInt; + + public SomeEnum SomeEnumField; + + [DisableIf("SomeEnumField", SomeEnum.SomeEnumMember)] + public string SomeString; + } + + + + The following examples show how a property can be disabled by a function. + + public class MyComponent : MonoBehaviour + { + [EnableIf("MyDisableFunction")] + public int MyInt; + + private bool MyDisableFunction() + { + // ... + } + } + + + + + + + + The name of a bool member field, property or method. Obsolete; use the Condition member instead. + + + + + A resolved string that defines the condition to check the value of, such as a member name or an expression. + + + + + The optional condition value. + + + + + Disables a property in the inspector, based on the value of a resolved string. + + A resolved string that defines the condition to check the value of, such as a member name or an expression. + + + + Disables a property in the inspector, if the resolved string evaluates to the specified value. + + A resolved string that defines the condition to check the value of, such as a member name or an expression. + Value to check against. + + + + DisableInEditorMode is used on any property, and disables the property when not in play mode. + Use this when you only want a property to be editable when in play mode. + + + The following example shows how DisableInEditorMode is used to disable a property when in the editor. + + public class MyComponent : MonoBehaviour + { + [DisableInEditorMode] + public int MyInt; + } + + + + + + + + + DisableInPlayMode is used on any property, and disables the property when in play mode. + Use this to prevent users from editing a property when in play mode. + + + The following example shows how DisableInPlayMode is used to disable a property when in play mode. + + public class MyComponent : MonoBehaviour + { + [DisableInPlayMode] + public int MyInt; + } + + + + + + + + + + + DisplayAsString is used on any property, and displays a string in the inspector as text. + Use this for when you want to show a string in the inspector, but not allow for any editing. + + + DisplayAsString uses the property's ToString method to display the property as a string. + + + The following example shows how DisplayAsString is used to display a string property as text in the inspector. + + public class MyComponent : MonoBehaviour + { + [DisplayAsString] + public string MyInt = 5; + + // You can combine with to display a message in the inspector. + [DisplayAsString, HideLabel] + public string MyMessage = "This string will be displayed as text in the inspector"; + + [DisplayAsString(false)] + public string InlineMessage = "This string is very long, but has been configured to not overflow."; + } + + + + + + + + If true, the string will overflow past the drawn space and be clipped when there's not enough space for the text. + If false the string will expand to multiple lines, if there's not enough space when drawn. + + + + + Displays the property as a string in the inspector. + + + + + Displays the property as a string in the inspector. + + Value indicating if the string should overflow past the available space, or expand to multiple lines when there's not enough horizontal space. + + + + DontApplyToListElements is used on other attributes, and indicates that those attributes should be applied only to the list, and not to the elements of the list. + Use this on attributes that should only work on a list or array property as a whole, and not on each element of the list. + + + The following example shows how DontApplyToListElements is used on . + + [DontApplyToListElements] + [AttributeUsage(AttributeTargets.All, AllowMultiple = true, Inherited = true)] + public sealed class VisibleIfAttribute : Attribute + { + public string MemberName { get; private set; } + + public VisibleIfAttribute(string memberName) + { + this.MemberName = memberName; + } + } + + + + + + DrawWithUnity can be applied to a field or property to make Odin draw it using Unity's old drawing system. Use it if you want to selectively disable Odin drawing for a particular member. + + + Note that this attribute does not mean "disable Odin completely for this property"; it is visual only in nature, and in fact represents an Odin drawer which calls into Unity's old property drawing system. As Odin is still ultimately responsible for arranging the drawing of the property, and since other attributes exist with a higher priority than this attribute, and it is not guaranteed that Unity will draw the property if another attribute is present to override this one. + + + + + The inline button adds a button to the end of a property. + + + Due to a bug, multiple inline buttons are currently not supported. + + + The following examples demonstrates how InlineButton can be used. + + public class MyComponent : MonoBehaviour + { + // Adds a button to the end of the A property. + [InlineButton("MyFunction")] + public int A; + + // This is example demonstrates how you can change the label of the button. + // InlineButton also supports refering to string members with $. + [InlineButton("MyFunction", "Button")] + public int B; + + private void MyFunction() + { + // ... + } + } + + + + + + + + Name of member method to call when the button is clicked. Obsolete; use the Action member instead. + + + + + A resolved string that defines the action to perform when the button is clicked, such as an expression or method invocation. + + + + + Optional label of the button. + + + + + Optional resolved string that specifies a condition for whether to show the inline button or not. + + + + + Draws a button to the right of the property. + + A resolved string that defines the action to perform when the button is clicked, such as an expression or method invocation. + Optional label of the button. + + + + Not yet documented. + + + + + Not yet documented. + + Not yet documented. + + + + Not yet documented. + + Not yet documented. + Not yet documented. + + + + ShowForPrefabOnlyAttribute is used on any field or property, and only shows properties from prefab assets inspector. + Use this to ensure the same value on a property, across all instances of a prefab. + + + On non-prefab objects or instances, this attribute does nothing, and allows properties to be edited as normal. + + + The following example shows how ShowForPrefabOnlyAttribute is used on properties. + + public class MyComponent + { + [ShowForPrefabOnlyAttribute] + public int MyInt; + } + + + + + + + + + + + EnableForPrefabOnly is used on any field or property, and only allows editing of values from prefab assets inspector. + Use this to ensure the same value on a property, across all instances of a prefab. + + + On non-prefab objects or instances, this attribute does nothing, and allows properties to be edited as normal. + + + The following example shows how EnableForPrefabOnly is used on properties. + + public class MyComponent + { + [EnableForPrefabOnly] + public int MyInt; + } + + + + + + + + + + + EnableIf is used on any property, and can enable or disable the property in the inspector. + Use this to enable properties when they are relevant. + + + The following example shows how a property can be enabled by the state of a field. + + public class MyComponent : MonoBehaviour + { + public bool EnableProperty; + + [EnableIf("EnableProperty")] + public int MyInt; + + public SomeEnum SomeEnumField; + + [EnableIf("SomeEnumField", SomeEnum.SomeEnumMember)] + public string SomeString; + } + + + + The following examples show how a property can be enabled by a function. + + public class MyComponent : MonoBehaviour + { + [EnableIf("MyEnableFunction")] + public int MyInt; + + private bool MyEnableFunction() + { + // ... + } + } + + + + + + + + + + + The name of a bool member field, property or method. Obsolete; use the Condition member instead. + + + + + A resolved string that defines the condition to check the value of, such as a member name or an expression. + + + + + The optional condition value. + + + + + Enables a property in the inspector, based on the value of a resolved string. + + A resolved string that defines the condition to check the value of, such as a member name or an expression. + + + + Enables a property in the inspector, if the resolved string evaluates to the specified value. + + A resolved string that defines the condition to check the value of, such as a member name or an expression. + Value to check against. + + + + Draws an enum in a horizontal button group instead of a dropdown. + + + + public class MyComponent : MonoBehvaiour + { + [EnumToggleButtons] + public MyBitmaskEnum MyBitmaskEnum; + + [EnumToggleButtons] + public MyEnum MyEnum; + } + + [Flags] + public enum MyBitmaskEnum + { + A = 1 << 1, // 1 + B = 1 << 2, // 2 + C = 1 << 3, // 4 + ALL = A | B | C + } + + public enum MyEnum + { + A, + B, + C + } + + + + + + + HideIf is used on any property and can hide the property in the inspector. + Use this to hide irrelevant properties based on the current state of the object. + + + This example shows a component with fields hidden by the state of another field. + + public class MyComponent : MonoBehaviour + { + public bool HideProperties; + + [HideIf("HideProperties")] + public int MyInt; + + [HideIf("HideProperties", false)] + public string MyString; + + public SomeEnum SomeEnumField; + + [HideIf("SomeEnumField", SomeEnum.SomeEnumMember)] + public string SomeString; + } + + + + This example shows a component with a field that is hidden when the game object is inactive. + + public class MyComponent : MonoBehaviour + { + [HideIf("MyVisibleFunction")] + public int MyHideableField; + + private bool MyVisibleFunction() + { + return !this.gameObject.activeInHierarchy; + } + } + + + + + + + + + The name of a bool member field, property or method. Obsolete; use the Condition member instead. + + + + + A resolved string that defines the condition to check the value of, such as a member name or an expression. + + + + + The optional condition value. + + + + + Whether or not to slide the property in and out when the state changes. + + + + + Hides a property in the inspector, based on the value of a resolved string. + + A resolved string that defines the condition to check the value of, such as a member name or an expression. + Whether or not to slide the property in and out when the state changes. + + + + Hides a property in the inspector, if the resolved string evaluates to the specified value. + + A resolved string that defines the condition to check the value of, such as a member name or an expression. + Value to check against. + Whether or not to slide the property in and out when the state changes. + + + + HideInPlayMode is used on any property, and hides the property when not in editor mode. + Use this when you only want a property to only be visible the editor. + + + The following example shows how HideInPlayMode is used to hide a property when in play mode. + + public class MyComponent : MonoBehaviour + { + [HideInPlayMode] + public int MyInt; + } + + + + + + + + + + HideInEditorMode is used on any property, and hides the property when not in play mode. + Use this when you only want a property to only be visible play mode. + + + The following example shows how HideInEditorMode is used to hide a property when in the editor. + + public class MyComponent : MonoBehaviour + { + [HideInEditorMode] + public int MyInt; + } + + + + + + + + + + Apply HideMonoScript to your class to prevent the Script property from being shown in the inspector. + + This attribute has the same effect on a single type that the global configuration option "Show Mono Script In Editor" in "Preferences -> Odin Inspector -> General -> Drawers" has globally when disabled. + + + + The following example shows how to use this attribute. + + [HideMonoScript] + public class MyComponent : MonoBehaviour + { + // The Script property will not be shown for this component in the inspector + } + + + + + + + Hides the polymorphic object-picker shown above the properties of non-Unity serialized reference types. + + + When the object picker is hidden, you can right click and set the instance to null, in order to set a new value. + If you don't want this behavior, you can use attribute to ensure people can't change the value. + + + + + public class MyComponent : SerializedMonoBehaviour + { + [Header("Hidden Object Pickers")] + [Indent] + [HideReferenceObjectPicker] + public MyCustomReferenceType OdinSerializedProperty1; + + [Indent] + [HideReferenceObjectPicker] + public MyCustomReferenceType OdinSerializedProperty2; + + [Indent] + [Header("Shown Object Pickers")] + public MyCustomReferenceType OdinSerializedProperty3; + + [Indent] + public MyCustomReferenceType OdinSerializedProperty4; + + public class MyCustomReferenceType + { + public int A; + public int B; + public int C; + } + } + + + + + + HorizontalGroup is used group multiple properties horizontally in the inspector. + The width can either be specified as percentage or pixels. + All values between 0 and 1 will be treated as a percentage. + If the width is 0 the column will be automatically sized. + Margin-left and right can only be specified in pixels. + + + The following example shows how three properties have been grouped together horizontally. + + // The width can either be specified as percentage or pixels. + // All values between 0 and 1 will be treated as a percentage. + // If the width is 0 the column will be automatically sized. + // Margin-left and right can only be specified in pixels. + + public class HorizontalGroupAttributeExamples : MonoBehaviour + { + [HorizontalGroup] + public int A; + + [HideLabel, LabelWidth (150)] + [HorizontalGroup(150)] + public LayerMask B; + + // LabelWidth can be helpfull when dealing with HorizontalGroups. + [HorizontalGroup("Group 1"), LabelWidth(15)] + public int C; + + [HorizontalGroup("Group 1"), LabelWidth(15)] + public int D; + + [HorizontalGroup("Group 1"), LabelWidth(15)] + public int E; + + // Having multiple properties in a column can be achived using multiple groups. Checkout the "Combining Group Attributes" example. + [HorizontalGroup("Split", 0.5f, PaddingRight = 15)] + [BoxGroup("Split/Left"), LabelWidth(15)] + public int L; + + [BoxGroup("Split/Right"), LabelWidth(15)] + public int M; + + [BoxGroup("Split/Left"), LabelWidth(15)] + public int N; + + [BoxGroup("Split/Right"), LabelWidth(15)] + public int O; + + // Horizontal Group also has supprot for: Title, MarginLeft, MarginRight, PaddingLeft, PaddingRight, MinWidth and MaxWidth. + [HorizontalGroup("MyButton", MarginLeft = 0.25f, MarginRight = 0.25f)] + public void SomeButton() + { + + } + } + + + + + + + + + + + The width. Values between 0 and 1 will be treated as percentage, 0 = auto, otherwise pixels. + + + + + The margin left. Values between 0 and 1 will be treated as percentage, 0 = ignore, otherwise pixels. + + + + + The margin right. Values between 0 and 1 will be treated as percentage, 0 = ignore, otherwise pixels. + + + + + The padding left. Values between 0 and 1 will be treated as percentage, 0 = ignore, otherwise pixels. + + + + + The padding right. Values between 0 and 1 will be treated as percentage, 0 = ignore, otherwise pixels. + + + + + The minimum Width. Values between 0 and 1 will be treated as percentage, 0 = ignore, otherwise pixels. + + + + + The maximum Width. Values between 0 and 1 will be treated as percentage, 0 = ignore, otherwise pixels. + + + + + Adds a title above the horizontal group. + + + + + The label width, 0 = auto. + + + + + Organizes the property in a horizontal group. + + The group for the property. + The width of the property. Values between 0 and 1 are interpolated as a percentage, otherwise pixels. + The left margin in pixels. + The right margin in pixels. + The order of the group in the inspector. + + + + Organizes the property in a horizontal group. + + The width of the property. Values between 0 and 1 are interpolated as a percentage, otherwise pixels. + The left margin in pixels. + The right margin in pixels. + The order of the group in the inspector. + + + + Merges the values of two group attributes together. + + The other group to combine with. + + + + InlineAttribute is used on any property or field with a type that inherits from UnityEngine.Object. This includes components and assets etc. + + + + public class InlineEditorExamples : MonoBehaviour + { + [DisableInInlineEditors] + public Vector3 DisabledInInlineEditors; + + [HideInInlineEditors] + public Vector3 HiddenInInlineEditors; + + [InlineEditor] + public Transform InlineComponent; + + [InlineEditor(InlineEditorModes.FullEditor)] + public Material FullInlineEditor; + + [InlineEditor(InlineEditorModes.GUIAndHeader)] + public Material InlineMaterial; + + [InlineEditor(InlineEditorModes.SmallPreview)] + public Material[] InlineMaterialList; + + [InlineEditor(InlineEditorModes.LargePreview)] + public GameObject InlineObjectPreview; + + [InlineEditor(InlineEditorModes.LargePreview)] + public Mesh InlineMeshPreview; + } + + + + + + + + If true, the inline editor will start expanded. + + + + + Draw the header editor header inline. + + + + + Draw editor GUI inline. + + + + + Draw editor preview inline. + + + + + Maximum height of the inline editor. If the inline editor exceeds the specified height, a scrollbar will appear. + Values less or equals to zero will let the InlineEditor expand to its full size. + + + + + The size of the editor preview if drawn together with GUI. + + + + + The size of the editor preview if drawn alone. + + + + + If false, this will prevent the InlineEditor attribute from incrementing the InlineEditorAttributeDrawer.CurrentInlineEditorDrawDepth. + This is helpful in cases where you want to draw the entire editor, and disregard attributes + such as [] and []. + + + + + How the InlineEditor attribute drawer should draw the object field. + + + + + Whether to set GUI.enabled = false when drawing an editor for an asset that is locked by source control. Defaults to true. + + + + + Initializes a new instance of the class. + + The inline editor mode. + How the object field should be drawn. + + + + Initializes a new instance of the class. + + How the object field should be drawn. + + + + SuppressInvalidAttributeError is used on members to suppress the inspector error message you get when applying an attribute to a value that it's not supposed to work on. + This can be very useful for applying attributes to generic parameter values, when it only applies to some of the possible types that the value might become. + + + The following example shows a case where the attribute might be useful. + + public class NamedValue<T> + { + public string Name; + + // The Range attribute will be applied if T is compatible with it, but if T is not compatible, an error will not be shown. + [SuppressInvalidAttributeError, Range(0, 10)] + public T Value; + } + + + + + + Editor modes for + + + + + + Draws only the editor GUI + + + + + Draws the editor GUI and the editor header. + + + + + Draws the editor GUI to the left, and a small editor preview to the right. + + + + + Draws a small editor preview without any GUI. + + + + + Draws a large editor preview without any GUI. + + + + + Draws the editor header and GUI to the left, and a small editor preview to the right. + + + + + + ShowDrawerChain lists all prepend, append and value drawers being used in the inspector. + This is great in situations where you want to debug, and want to know which drawers might be involved in drawing the property. + + Your own custom drawers are highlighted with a green label. + Drawers, that have not been called during the draw chain, will be greyed out in the inspector to make it clear which drawers have had an effect on the properties. + + + + public class MyComponent : MonoBehaviour + { + [ShowDrawerChain] + public int IndentedInt; + } + + + + + + Marks a type as being specially serialized. Odin uses this attribute to check whether it should include non-Unity-serialized members in the inspector. + + + + + FoldoutGroup is used on any property, and organizes properties into a foldout. + Use this to organize properties, and to allow the user to hide properties that are not relevant for them at the moment. + + + The following example shows how FoldoutGroup is used to organize properties into a foldout. + + public class MyComponent : MonoBehaviour + { + [FoldoutGroup("MyGroup")] + public int A; + + [FoldoutGroup("MyGroup")] + public int B; + + [FoldoutGroup("MyGroup")] + public int C; + } + + + + The following example shows how properties can be organizes into multiple foldouts. + + public class MyComponent : MonoBehaviour + { + [FoldoutGroup("First")] + public int A; + + [FoldoutGroup("First")] + public int B; + + [FoldoutGroup("Second")] + public int C; + } + + + + + + + + + + + Gets a value indicating whether or not the foldout should be expanded by default. + + + + + Gets a value indicating whether or not the Expanded property has been set. + + + + + Adds the property to the specified foldout group. + + Name of the foldout group. + The order of the group in the inspector. + + + + Adds the property to the specified foldout group. + + Name of the foldout group. + Whether or not the foldout should be expanded by default. + The order of the group in the inspector. + + + + Combines the foldout property with another. + + The group to combine with. + + + + GUIColor is used on any property and changes the GUI color used to draw the property. + + + The following example shows how GUIColor is used on a properties to create a rainbow effect. + + public class MyComponent : MonoBehaviour + { + [GUIColor(1f, 0f, 0f)] + public int A; + + [GUIColor(1f, 0.5f, 0f, 0.2f)] + public int B; + + [GUIColor("GetColor")] + public int C; + + private Color GetColor() { return this.A == 0 ? Color.red : Color.white; } + } + + + + + + The GUI color of the property. + + + + + The name of a local field, member or property that returns a Color. Both static and instance methods are supported. + + + + + Sets the GUI color for the property. + + The red channel. + The green channel. + The blue channel. + The alpha channel. + + + + Sets the GUI color for the property. + + Specify the name of a local field, member or property that returns a Color. + + + + HideLabel is used on any property, and hides the label in the inspector. + Use this to hide the label of properties in the inspector. + + + The following example show how HideLabel is used to hide the label of a game object property. + + public class MyComponent : MonoBehaviour + { + [HideLabel] + public GameObject MyGameObjectWithoutLabel; + } + + + + + + + Indent is used on any property and moves the property's label to the right. + Use this to clearly organize properties in the inspector. + + + The following example shows how a property is indented by Indent. + + public class MyComponent : MonoBehaviour + { + [Indent] + public int IndentedInt; + } + + + + + + Indicates how much a property should be indented. + + + + + Indents a property in the inspector. + + How much a property should be indented. + + + + InfoBox is used on any property, and display a text box above the property in the inspector. + Use this to add comments or warn about the use of different properties. + + + The following example shows different info box types. + + public class MyComponent : MonoBehaviour + { + [InfoBox("This is an int property")] + public int MyInt; + + [InfoBox("This info box is a warning", InfoMessageType.Warning)] + public float MyFloat; + + [InfoBox("This info box is an error", InfoMessageType.Error)] + public object MyObject; + + [InfoBox("This info box is just a box", InfoMessageType.None)] + public Vector3 MyVector; + } + + + + The following example how info boxes can be hidden by fields and properties. + + public class MyComponent : MonoBehaviour + { + [InfoBox("This info box is hidden by an instance field.", "InstanceShowInfoBoxField")] + public int MyInt; + public bool InstanceShowInfoBoxField; + + [InfoBox("This info box is hideable by a static field.", "StaticShowInfoBoxField")] + public float MyFloat; + public static bool StaticShowInfoBoxField; + + [InfoBox("This info box is hidden by an instance property.", "InstanceShowInfoBoxProperty")] + public int MyOtherInt; + public bool InstanceShowInfoBoxProperty { get; set; } + + [InfoBox("This info box is hideable by a static property.", "StaticShowInfoBoxProperty")] + public float MyOtherFloat; + public static bool StaticShowInfoBoxProperty { get; set; } + } + + + + The following example shows how info boxes can be hidden by functions. + + public class MyComponent : MonoBehaviour + { + [InfoBox("This info box is hidden by an instance function.", "InstanceShowFunction")] + public int MyInt; + public bool InstanceShowFunction() + { + return this.MyInt == 0; + } + + [InfoBox("This info box is hidden by a static function.", "StaticShowFunction")] + public short MyShort; + public bool StaticShowFunction() + { + return true; + } + + // You can also specify a function with the same type of parameter. + // Use this to specify the same function, for multiple different properties. + [InfoBox("This info box is hidden by an instance function with a parameter.", "InstanceShowParameterFunction")] + public GameObject MyGameObject; + public bool InstanceShowParameterFunction(GameObject property) + { + return property != null; + } + + [InfoBox("This info box is hidden by a static function with a parameter.", "StaticShowParameterFunction")] + public Vector3 MyVector; + public bool StaticShowParameterFunction(Vector3 property) + { + return property.magnitude == 0f; + } + } + + + + + + + + The message to display in the info box. + + + + + The type of the message box. + + + + + Optional member field, property or function to show and hide the info box. + + + + + When true the InfoBox will ignore the GUI.enable flag and always draw as enabled. + + + + + Displays an info box above the property. + + The message for the message box. Supports referencing a member string field, property or method by using $. + The type of the message box. + Name of member bool to show or hide the message box. + + + + Displays an info box above the property. + + The message for the message box. Supports referencing a member string field, property or method by using $. + Name of member bool to show or hide the message box. + + + + Draw a special slider the user can use to specify a range between a min and a max value. + Uses a Vector2 where x is min and y is max. + + + The following example shows how MinMaxSlider is used. + + public class Player : MonoBehaviour + { + [MinMaxSlider(4, 5)] + public Vector2 SpawnRadius; + } + + + + + + The hardcoded min value for the slider. + + + + + The hardcoded max value for the slider. + + + + + The name of a field, property or method to get the min value from. Obsolete; use MinValueGetter instead. + + + + + A resolved string that should evaluate to a float value, which is used as the min bounds. + + + + + The name of a field, property or method to get the max value from. Obsolete; use MaxValueGetter instead. + + + + + A resolved string that should evaluate to a float value, which is used as the max bounds. + + + + + The name of a Vector2 field, property or method to get the min max values from. Obsolete; use MinMaxValueGetter instead. + + + + + A resolved string that should evaluate to a Vector2 value, which is used as the min/max bounds. If this is non-null, it overrides the behaviour of the MinValue, MinValueGetter, MaxValue and MaxValueGetter members. + + + + + Draw float fields for min and max value. + + + + + Draws a min-max slider in the inspector. X will be set to min, and Y will be set to max. + + The min value. + The max value. + If true number fields will drawn next to the MinMaxSlider. + + + + Draws a min-max slider in the inspector. X will be set to min, and Y will be set to max. + + A resolved string that should evaluate to a float value, which is used as the min bounds. + The max value. + If true number fields will drawn next to the MinMaxSlider. + + + + Draws a min-max slider in the inspector. X will be set to min, and Y will be set to max. + + The min value. + A resolved string that should evaluate to a float value, which is used as the max bounds. + If true number fields will drawn next to the MinMaxSlider. + + + + Draws a min-max slider in the inspector. X will be set to min, and Y will be set to max. + + A resolved string that should evaluate to a float value, which is used as the min bounds. + A resolved string that should evaluate to a float value, which is used as the max bounds. + If true number fields will drawn next to the MinMaxSlider. + + + + Draws a min-max slider in the inspector. X will be set to min, and Y will be set to max. + + A resolved string that should evaluate to a Vector2 value, which is used as the min/max bounds. If this is non-null, it overrides the behaviour of the MinValue, MinValueGetter, MaxValue and MaxValueGetter members. + If true number fields will drawn next to the MinMaxSlider. + + + + Draws the checkbox before the label instead of after. + + ToggleLeftAttribute can be used an all fields and properties of type boolean + + + public class MyComponent : MonoBehaviour + { + [ToggleLeft] + public bool MyBoolean; + } + + + + + + LabelText is used to change the labels of properties. + Use this if you want a different label than the name of the property. + + + The following example shows how LabelText is applied to a few property fields. + + public MyComponent : MonoBehaviour + { + [LabelText("1")] + public int MyInt1; + + [LabelText("2")] + public int MyInt2; + + [LabelText("3")] + public int MyInt3; + } + + + + + + + The new text of the label. + + + + + Whether the label text should be nicified before it is displayed, IE, "m_someField" becomes "Some Field". + If the label text is resolved via a member reference, an expression, or the like, then the evaluated result + of that member reference or expression will be nicified. + + + + + Give a property a custom label. + + The new text of the label. + + + + Give a property a custom label. + + The new text of the label. + Whether to nicify the label text. + + + + Customize the behavior for lists and arrays in the inspector. + + + This example shows how you can add your own custom add button to a list. + + [ListDrawerSettings(HideAddButton = true, OnTitleBarGUI = "DrawTitleBarGUI")] + public List<MyType> SomeList; + + #if UNITY_EDITOR + private void DrawTitleBarGUI() + { + if (SirenixEditorGUI.ToolbarButton(EditorIcons.Plus)) + { + this.SomeList.Add(new MyType()); + } + } + #endif + + + + This attribute is scheduled for refactoring. + + + + + If true, the add button will not be rendered in the title toolbar. You can use OnTitleBarGUI to implement your own add button. + + + true if [hide add button]; otherwise, false. + + + + + If true, the remove button will not be rendered on list items. You can use OnBeginListElementGUI and OnEndListElementGUI to implement your own remove button. + + + true if [hide remove button]; otherwise, false. + + + + + Specify the name of a member inside each list element which defines the label being drawn for each list element. + + + + + Override the default behaviour for adding objects to the list. + If the referenced member returns the list type element, it will be called once per selected object. + If the referenced method returns void, it will only be called once regardless of how many objects are selected. + + + + + Calls a method before each list element. The member referenced must have a return type of void, and an index parameter of type int which represents the element index being drawn. + + + + + Calls a method after each list element. The member referenced must have a return type of void, and an index parameter of type int which represents the element index being drawn. + + + + + If true, object/type pickers will never be shown when the list add button is clicked, and default(T) will always be added instantly instead, where T is the element type of the list. + + + + + Whether adding a new element should copy the last element. False by default. + + + + + A resolved string with "int index" and "Color defaultColor" parameters that lets you control the color of individual elements. + + + + + Override the default setting specified in the Advanced Odin Preferences window and explicitly tell whether paging should be enabled or not. + + + + + Override the default setting specified in the Advanced Odin Preferences window and explicitly tell whether items should be draggable or not. + + + + + Override the default setting specified in the Advanced Odin Preferences window and explicitly tells how many items each page should contain. + + + + + Mark a list as read-only. This removes all editing capabilities from the list such as Add, Drag and delete, + but without disabling GUI for each element drawn as otherwise would be the case if the was used. + + + + + Override the default setting specified in the Advanced Odin Preferences window and explicitly tell whether or not item count should be shown. + + + + + Override the default setting specified in the Advanced Odin Preferences window and explicitly tell whether or not the list should be expanded or collapsed by default. + + + + + If true, a label is drawn for each element which shows the index of the element. + + + + + Use this to inject custom GUI into the title-bar of the list. + + + + + Whether the Paging property is set. + + + + + Whether the ShowItemCount property is set. + + + + + Whether the NumberOfItemsPerPage property is set. + + + + + Whether the Draggable property is set. + + + + + Whether the IsReadOnly property is set. + + + + + Whether the Expanded property is set. + + + + + Whether the ShowIndexLabels property is set. + + + + + MaxValue is used on primitive fields. It caps value of the field to a maximum value. + Use this to define a maximum value for the field. + + + Note that this attribute only works in the editor! Values changed from scripting will not be capped at a maximum. + + + The following example shows a component where a speed value must be less than or equal to 200. + + public class Car : MonoBehaviour + { + // The speed of the car must be less than or equal to 200. + [MaxValue(200)] + public float Speed; + } + + + + The following example shows how MaxValue can be combined with . + + public class Health : MonoBehaviour + { + // The speed value must be between 0 and 200. + [MinValue(0), MaxValue(200)] + public float Speed; + } + + + + + + + The maximum value for the property. + + + + + The string with which to resolve a maximum value. This could be a field, property or method name, or an expression. + + + + + Sets a maximum value for the property in the inspector. + + The max value. + + + + Sets a maximum value for the property in the inspector. + + The string with which to resolve a maximum value. This could be a field, property or method name, or an expression. + + + + MinValue is used on primitive fields. It caps value of the field to a minimum value. + Use this to define a minimum value for the field. + + + Note that this attribute only works in the editor! Values changed from scripting will not be capped at a minimum. + + + The following example shows a player component that must have at least 1 life. + + public class Player : MonoBehaviour + { + // The life value must be set to at least 1. + [MinValue(1)] + public int Life; + } + + + + The following example shows how MinValue can be combined with + + public class Health : MonoBehaviour + { + // The health value must be between 0 and 100. + [MinValue(0), MaxValue(100)] + public float Health; + } + + + + + + + The minimum value for the property. + + + + + The string with which to resolve a minimum value. This could be a field, property or method name, or an expression. + + + + + Sets a minimum value for the property in the inspector. + + The minimum value. + + + + Sets a minimum value for the property in the inspector. + + The string with which to resolve a minimum value. This could be a field, property or method name, or an expression. + + + + MultiLineProperty is used on any string property. + Use this to allow users to edit strings in a multi line textbox. + + + MultiLineProperty is similar to Unity's but can be applied to both fields and properties. + + + The following example shows how MultiLineProperty is applied to properties. + + public class MyComponent : MonoBehaviour + { + [MultiLineProperty] + public string MyString; + + [ShowInInspector, MultiLineProperty(10)] + public string PropertyString; + } + + + + + + The number of lines for the text box. + + + + + Makes a multiline textbox for editing strings. + + The number of lines for the text box. + + + + PropertyTooltip is used on any property, and creates tooltips for when hovering the property in the inspector. + Use this to explain the purpose, or how to use a property. + + + This is similar to Unity's but can be applied to both fields and properties. + + + The following example shows how PropertyTooltip is applied to various properties. + + public class MyComponent : MonoBehaviour + { + [PropertyTooltip("This is an int property.")] + public int MyField; + + [ShowInInspector, PropertyTooltip("This is another int property.")] + public int MyProperty { get; set; } + } + + + + + + + + + + + The message shown in the tooltip. + + + + + Adds a tooltip to the property in the inspector. + + The message shown in the tooltip. + + + + ReadOnly is used on any property, and disabled the property from being changed in the inspector. + Use this for when you want to see the value of a property in the inspector, but don't want it to be changed. + + + This attribute only affects the inspector! Values can still be changed by script. + + + The following example shows how a field can be displayed in the editor, but not be editable. + + public class Health : MonoBehaviour + { + public int MaxHealth; + + [ReadOnly] + public int CurrentHealth; + } + + + + ReadOnly can also be combined with . + + public class Health : MonoBehaviour + { + public int MaxHealth; + + [ShowInInspector, ReadOnly] + private int currentHealth; + } + + + + + + + OnInspectorGUI is used on any property, and will call the specified function whenever the inspector code is running. + Use this to create custom inspector GUI for an object. + + + + + public MyComponent : MonoBehaviour + { + [OnInspectorGUI] + private void MyInspectorGUI() + { + GUILayout.Label("Label drawn from callback"); + } + } + + + + The following example shows how a callback can be set before another property. + + public MyComponent : MonoBehaviour + { + [OnInspectorGUI("MyInspectorGUI", false)] + public int MyField; + + private void MyInspectorGUI() + { + GUILayout.Label("Label before My Field property"); + } + } + + + + The following example shows how callbacks can be added both before and after a property. + + public MyComponent : MonoBehaviour + { + [OnInspectorGUI("GUIBefore", "GUIAfter")] + public int MyField; + + private void GUIBefore() + { + GUILayout.Label("Label before My Field property"); + } + + private void GUIAfter() + { + GUILayout.Label("Label after My Field property"); + } + } + + + + + + The resolved action string that defines the action to be invoked before the property is drawn, if any. + + + + + The resolved action string that defines the action to be invoked after the property is drawn, if any. + + + + + The name of the method to be called before the property is drawn, if any. Obsolete; use the Prepend member instead. + + + + + The name of the method to be called after the property is drawn, if any. Obsolete; use the Append member instead. + + + + + Calls a function decorated with this attribute, when the inspector is being drawn. + + + + + Adds callbacks to the specified action when the property is being drawn. + + The resolved action string that defines the action to be invoked. + If true the method will be called after the property has been drawn. Otherwise the method will be called before. + + + + Adds callbacks to the specified actions when the property is being drawn. + + The resolved action string that defines the action to be invoked before the property is drawn, if any. + The resolved action string that defines the action to be invoked after the property is drawn, if any. + + + + + OnValueChanged works on properties and fields, and calls the specified function + whenever the value has been changed via the inspector. + + + + Note that this attribute only works in the editor! Properties changed by script will not call the function. + + + The following example shows how OnValueChanged is used to provide a callback for a property. + + public class MyComponent : MonoBehaviour + { + [OnValueChanged("MyCallback")] + public int MyInt; + + private void MyCallback() + { + // .. + } + } + + + + The following example show how OnValueChanged can be used to get a component from a prefab property. + + public class MyComponent : MonoBehaviour + { + [OnValueChanged("OnPrefabChange")] + public GameObject MyPrefab; + + // RigidBody component of MyPrefab. + [SerializeField, HideInInspector] + private RigidBody myPrefabRigidbody; + + private void OnPrefabChange() + { + if(MyPrefab != null) + { + myPrefabRigidbody = MyPrefab.GetComponent<Rigidbody>(); + } + else + { + myPrefabRigidbody = null; + } + } + } + + + + + + Name of callback member function. Obsolete; use the Action member instead. + + + + + A resolved string that defines the action to perform when the value is changed, such as an expression or method invocation. + + + + + Whether to perform the action when a child value of the property is changed. + + + + + Whether to perform the action when an undo or redo event occurs via UnityEditor.Undo.undoRedoPerformed. True by default. + + + + + Whether to perform the action when the property is initialized. This will generally happen when the property is first viewed/queried (IE when the inspector is first opened, or when its containing foldout is first expanded, etc), and whenever its type or a parent type changes, or it is otherwise forced to rebuild. + + + + + Adds a callback for when the property's value is changed. + + A resolved string that defines the action to perform when the value is changed, such as an expression or method invocation. + Whether to perform the action when a child value of the property is changed. + + + + Attribute to derive from if you wish to create a new property group type, such as box groups or tab groups. + Note that this attribute has special behaviour for "combining" several attributes into one, as one group, + may be declared across attributes in several members, completely out of order. See . + + + All group attributes for a group with the same name (and of the same attribute type) are combined into a single representative group attribute using the method, which is called by the method. + This behaviour is a little unusual, but it is important that you understand it when creating groups with many custom parameters that may have to be combined. + + + This example shows how could be implemented. + + [AttributeUsage(AttributeTargets.All, AllowMultiple = false, Inherited = true)] + public class BoxGroupAttribute : PropertyGroupAttribute + { + public string Label { get; private set; } + public bool ShowLabel { get; private set; } + public bool CenterLabel { get; private set; } + + public BoxGroupAttribute(string group, bool showLabel = true, bool centerLabel = false, float order = 0) + : base(group, order) + { + this.Label = group; + this.ShowLabel = showLabel; + this.CenterLabel = centerLabel; + } + + protected override void CombineValuesWith(PropertyGroupAttribute other) + { + // The given attribute parameter is *guaranteed* to be of type BoxGroupAttribute. + var attr = other as BoxGroupAttribute; + + // If this attribute has no label, we the other group's label, thus preserving the label across combines. + if (this.Label == null) + { + this.Label = attr.Label; + } + + // Combine ShowLabel and CenterLabel parameters. + this.ShowLabel |= attr.ShowLabel; + this.CenterLabel |= attr.CenterLabel; + } + } + + + + + + + + + + + The ID used to grouping properties together. + + + + + The name of the group. This is the last part of the group ID if there is a path, otherwise it is just the group ID. + + + + + The order of the group. + + + + + Whether to hide the group by default when all its children are not visible. True by default. + + + + + If not null, this resolved string controls the group's visibility. Note that if is true, there must be *both* a visible child *and* this condition must be true, before the group is shown. + + + + + Whether to animate the visibility changes of this group or make the visual transition instantly. True by default. + + + + + Initializes a new instance of the class. + + The group identifier. + The group order. + + + + Initializes a new instance of the class. + + The group identifier. + + + + Combines this attribute with another attribute of the same type. + This method invokes the virtual method to invoke custom combine logic. + All group attributes are combined to one attribute used by a single OdinGroupDrawer. + Example: protected override void CombineValuesWith(PropertyGroupAttribute other) { this.Title = this.Title ?? (other as MyGroupAttribute).Title; } + + The attribute to combine with. + The instance that the method was invoked on. + The argument 'other' was null. + + Attributes to combine are not of the same type. + or + PropertyGroupAttributes to combine must have the same group id. + + + + + Override this method to add custom combine logic to your group attribute. This method determines how your group's parameters combine when spread across multiple attribute declarations in the same class. + Remember, in .NET, member order is not guaranteed, so you never know which order your attributes will be combined in. + + The attribute to combine with. This parameter is guaranteed to be of the correct attribute type. + + This example shows how attributes are combined. + + protected override void CombineValuesWith(PropertyGroupAttribute other) + { + // The given attribute parameter is *guaranteed* to be of type BoxGroupAttribute. + var attr = other as BoxGroupAttribute; + + // If this attribute has no label, we the other group's label, thus preserving the label across combines. + if (this.Label == null) + { + this.Label = attr.Label; + } + + // Combine ShowLabel and CenterLabel parameters. + this.ShowLabel |= attr.ShowLabel; + this.CenterLabel |= attr.CenterLabel; + } + + + + + + PropertyOrder is used on any property, and allows for ordering of properties. + Use this to define in which order your properties are shown. + + + Lower order values will be drawn before higher values. + There is unfortunately no way of ensuring that properties are in the same order, as they appear in your class. PropertyOrder overcomes this. + + + The following example shows how PropertyOrder is used to order properties in the inspector. + + public class MyComponent : MonoBehaviour + { + [PropertyOrder(1)] + public int MySecondProperty; + + [PropertyOrder(-1)] + public int MyFirstProperty; + } + + + + + + The order for the property. + + + + + Initializes a new instance of the class. + + + + + Defines a custom order for the property. + + The order for the property. + + + + Required is used on any object property, and draws a message in the inspector if the property is missing. + Use this to clearly mark fields as necessary to the object. + + + The following example shows different uses of the Required attribute. + + public class MyComponent : MonoBehaviour + { + [Required] + public GameObject MyPrefab; + + [Required(InfoMessageType.Warning)] + public Texture2D MyTexture; + + [Required("MyMesh is nessessary for this component.")] + public Mesh MyMesh; + + [Required("MyTransform might be important.", InfoMessageType.Info)] + public Transform MyTransform; + } + + + + + + + + The message of the info box. + + + + + The type of the info box. + + + + + Adds an error box to the inspector, if the property is missing. + + + + + Adds an info box to the inspector, if the property is missing. + + The message to display in the error box. + The type of info box to draw. + + + + Adds an error box to the inspector, if the property is missing. + + The message to display in the error box. + + + + Adds an info box to the inspector, if the property is missing. + + The type of info box to draw. + + + + SceneObjectsOnly is used on object properties, and restricts the property to scene objects, and not project assets. + Use this when you want to ensure an object is a scene object, and not from a project asset. + + + The following example shows a component with a game object property, that must be from a scene, and not a prefab asset. + + public MyComponent : MonoBehaviour + { + [SceneObjectsOnly] + public GameObject MyPrefab; + } + + + + + + + ValueDropdown is used on any property and creates a dropdown with configurable options. + Use this to give the user a specific set of options to select from. + + + Due to a bug in Unity, enums will sometimes not work correctly. The last example shows how this can be fixed. + + + The following example shows a how the ValueDropdown can be used on an int property. + + public class MyComponent : MonoBehaviour + { + [ValueDropdown("myValues")] + public int MyInt; + + // The selectable values for the dropdown. + private int[] myValues = { 1, 2, 3 }; + } + + + + The following example shows how ValueDropdownList can be used for objects, that do not implement a usable ToString. + + public class MyComponent : MonoBehaviour + { + [ValueDropdown("myVectorValues")] + public Vector3 MyVector; + + // The selectable values for the dropdown, with custom names. + private ValueDropdownList<Vector3> myVectorValues = new ValueDropdownList<Vector3>() + { + {"Forward", Vector3.forward }, + {"Back", Vector3.back }, + {"Up", Vector3.up }, + {"Down", Vector3.down }, + {"Right", Vector3.right }, + {"Left", Vector3.left }, + }; + } + + + + The following example shows how the ValueDropdown can on any member that implements IList. + + public class MyComponent : MonoBehaviour + { + // Member field of type float[]. + private float[] valuesField; + + [ValueDropdown("valuesField")] + public float MyFloat; + + // Member property of type List<thing>. + private List<string> ValuesProperty { get; set; } + + [ValueDropdown("ValuesProperty")] + public string MyString; + + // Member function that returns an object of type IList. + private IList<ValueDropdownItem<int>> ValuesFunction() + { + return new ValueDropdownList<int> + { + { "The first option", 1 }, + { "The second option", 2 }, + { "The third option", 3 }, + }; + } + + [ValueDropdown("ValuesFunction")] + public int MyInt; + } + + + + Due to a bug in Unity, enums member arrays will in some cases appear as empty. This example shows how you can get around that. + + public class MyComponent : MonoBehaviour + { + // Make the field static. + private static MyEnum[] MyStaticEnumArray = MyEnum[] { ... }; + + // Force Unity to serialize the field, and hide the property from the inspector. + [SerializeField, HideInInspector] + private MyEnum MySerializedEnumArray = MyEnum[] { ... }; + } + + + + + + + Name of any field, property or method member that implements IList. E.g. arrays or Lists. Obsolete; use the ValuesGetter member instead. + + + + + A resolved string that should evaluate to a value that is assignable to IList; e.g, arrays and lists are compatible. + + + + + The number of items before enabling search. Default is 10. + + + + + False by default. + + + + + True by default. If the ValueDropdown attribute is applied to a list, then disabling this, + will render all child elements normally without using the ValueDropdown. The ValueDropdown will + still show up when you click the add button on the list drawer, unless is true. + + + + + False by default. + + + + + If the ValueDropdown attribute is applied to a list, and is set to true, then enabling this, + will exclude existing values, instead of rendering a checkbox indicating whether the item is already included or not. + + + + + If the dropdown renders a tree-view, then setting this to true will ensure everything is expanded by default. + + + + + If true, instead of replacing the drawer with a wide dropdown-field, the dropdown button will be a little button, drawn next to the other drawer. + + + + + Disables the the GUI for the appended drawer. False by default. + + + + + By default, a single click selects and confirms the selection. + + + + + By default, the dropdown will create a tree view. + + + + + Gets or sets the width of the dropdown. Default is zero. + + + + + Gets or sets the height of the dropdown. Default is zero. + + + + + Gets or sets the title for the dropdown. Null by default. + + + + + False by default. + + + + + Whether to draw all child properties in a foldout. + + + + + Whether values selected by the value dropdown should be copies of the original or references (in the case of reference types). Defaults to true. + + + + + Creates a dropdown menu for a property. + + A resolved string that should evaluate to a value that is assignable to IList; e.g, arrays and lists are compatible. + + + + + + + + + Gets the label for the dropdown item. + + The label text for the item. + + + + Gets the value of the dropdown item. + + The value for the item. + + + + Use this with to specify custom names for values. + + The type of the value. + + + + Adds the specified value with a custom name. + + The name of the item. + The value. + + + + Adds the specified value. + + The value. + + + + + + + + + The name of the item. + + + + + The value of the item. + + + + + Initializes a new instance of the class. + + The text to display for the dropdown item. + The value for the dropdown item. + + + + The name of this item. + + + + + Gets the text. + + + + + Gets the value. + + + + + + + + + + The name of the item. + + + + + The value of the item. + + + + + Initializes a new instance of the class. + + The text to display for the dropdown item. + The value for the dropdown item. + + + + Gets the text. + + + + + Gets the value. + + + + + The name of this item. + + + + + ShowInInspector is used on any member, and shows the value in the inspector. Note that the value being shown due to this attribute DOES NOT mean that the value is being serialized. + + + This can for example be combined with to allow for live debugging of values. + + + + The following example shows how ShowInInspector is used to show properties in the inspector, that otherwise wouldn't. + + public class MyComponent : MonoBehaviour + { + [ShowInInspector] + private int myField; + + [ShowInInspector] + public int MyProperty { get; set; } + } + + + + + + TabGroup is used on any property, and organizes properties into different tabs. + Use this to organize different value to make a clean and easy to use inspector. + + + Use groups to create multiple tab groups, each with multiple tabs and even sub tabs. + + + The following example shows how to create a tab group with two tabs. + + public class MyComponent : MonoBehaviour + { + [TabGroup("First")] + public int MyFirstInt; + + [TabGroup("First")] + public int AnotherInt; + + [TabGroup("Second")] + public int MySecondInt; + } + + + + The following example shows how multiple groups of tabs can be created. + + public class MyComponent : MonoBehaviour + { + [TabGroup("A", "FirstGroup")] + public int FirstGroupA; + + [TabGroup("B", "FirstGroup")] + public int FirstGroupB; + + // The second tab group has been configured to have constant height across all tabs. + [TabGroup("A", "SecondGroup", true)] + public int SecondgroupA; + + [TabGroup("B", "SecondGroup")] + public int SecondGroupB; + + [TabGroup("B", "SecondGroup")] + public int AnotherInt; + } + + + + This example demonstrates how multiple tabs groups can be combined to create tabs in tabs. + + public class MyComponent : MonoBehaviour + { + [TabGroup("ParentGroup", "First Tab")] + public int A; + + [TabGroup("ParentGroup", "Second Tab")] + public int B; + + // Specify 'First Tab' as a group, and another child group to the 'First Tab' group. + [TabGroup("ParentGroup/First Tab/InnerGroup", "Inside First Tab A")] + public int C; + + [TabGroup("ParentGroup/First Tab/InnerGroup", "Inside First Tab B")] + public int D; + + [TabGroup("ParentGroup/Second Tab/InnerGroup", "Inside Second Tab")] + public int E; + } + + + + + + + The default tab group name which is used when the single-parameter constructor is called. + + + + + Name of the tab. + + + + + Should this tab be the same height as the rest of the tab group. + + + + + If true, the content of each page will not be contained in any box. + + + + + If true, the tab group will be hidden if it only contains one tab. + + + + + Organizes the property into the specified tab in the default group. + Default group name is '_DefaultTabGroup' + + The tab. + if set to true [use fixed height]. + The order. + + + + Organizes the property into the specified tab in the specified group. + + The group to attach the tab to. + The name of the tab. + Set to true to have a constant height across the entire tab group. + The order of the group. + + + + Name of all tabs in this group. + + + + + Combines the tab group with another group. + + The other group. + + + + Not yet documented. + + Not yet documented. + + + + Not yet documented. + + Not yet documented. + + + + Title is used to make a bold header above a property. + + + The following example shows how Title is used on different properties. + + public class TitleExamples : MonoBehaviour + { + [Title("Titles and Headers")] + [InfoBox( + "The Title attribute has the same purpose as Unity's Header attribute," + + "but it also supports properties, and methods." + + "\n\nTitle also offers more features such as subtitles, options for horizontal underline, bold text and text alignment." + + "\n\nBoth attributes, with Odin, supports either static strings, or refering to members strings by adding a $ in front.")] + public string MyTitle = "My Dynamic Title"; + public string MySubtitle = "My Dynamic Subtitle"; + + [Title("Static title")] + public int C; + public int D; + + [Title("Static title", "Static subtitle")] + public int E; + public int F; + + [Title("$MyTitle", "$MySubtitle")] + public int G; + public int H; + + [Title("Non bold title", "$MySubtitle", bold: false)] + public int I; + public int J; + + [Title("Non bold title", "With no line seperator", horizontalLine: false, bold: false)] + public int K; + public int L; + + [Title("$MyTitle", "$MySubtitle", TitleAlignments.Right)] + public int M; + public int N; + + [Title("$MyTitle", "$MySubtitle", TitleAlignments.Centered)] + public int O; + public int P; + + [Title("$Combined", titleAlignment: TitleAlignments.Centered)] + public int Q; + public int R; + + [ShowInInspector] + [Title("Title on a Property")] + public int S { get; set; } + + [Title("Title on a Method")] + [Button] + public void DoNothing() + { } + + public string Combined { get { return this.MyTitle + " - " + this.MySubtitle; } } + } + + + + + + + + The title displayed above the property in the inspector. + + + + + Optional subtitle. + + + + + If true the title will be displayed with a bold font. + + + + + Gets a value indicating whether or not to draw a horizontal line below the title. + + + + + Title alignment. + + + + + Creates a title above any property in the inspector. + + The title displayed above the property in the inspector. + Optional subtitle + Title alignment + Horizontal line + If true the title will be drawn with a bold font. + + + + Toggle is used on any field or property, and allows to enable or disable the property in the inspector. + Use this to create a property that can be turned off or on. + + + Toggle does current not support any static members for toggling. + + + The following example shows how Toggle is used to create a toggleable property. + + public class MyComponent : MonoBehaviour + { + [Toggle("Enabled")] + public MyToggleable MyToggler = new MyToggleable(); + } + + public class MyToggleable + { + public bool Enabled; + + public int MyValue; + } + + + + + + + + Name of any bool field or property to enable or disable the object. + + + + + If true, all other open toggle groups will collapse once another one opens. + + + + + Create a togglable property in the inspector. + + Name of any bool field or property to enable or disable the object. + + + + ToggleGroup is used on any field, and create a toggleable group of options. + Use this to create options that can be enabled or disabled. + + + The functions as the ID for the ToggleGroup, and therefore all members of a toggle group must specify the same toggle member. + This attribute does not support static members! + + + The following example shows how ToggleGroup is used to create two separate toggleable groups. + + public class MyComponent : MonoBehaviour + { + // This attribute has a title specified for the group. The title only needs to be applied to a single attribute for a group. + [ToggleGroup("FirstToggle", order: -1, groupTitle: "First")] + public bool FirstToggle; + + [ToggleGroup("FirstToggle")] + public int MyInt; + + // This group specifies a member string as the title of the group. A property or a function can also be used. + [ToggleGroup("SecondToggle", titleStringMemberName: "SecondGroupTitle")] + public bool SecondToggle { get; set; } + + [ToggleGroup("SecondToggle")] + public float MyFloat; + + [HideInInspector] + public string SecondGroupTitle = "Second"; + } + + + + "/> + + + + Title of the toggle group in the inspector. + If null will be used instead. + + + + + If true, all other open toggle groups will collapse once another one opens. + + + + + Creates a ToggleGroup. See . + + Name of any bool field or property to enable or disable the ToggleGroup. + The order of the group. + Use this to name the group differently than toggleMemberName. + + + + Creates a ToggleGroup. See . + + Name of any bool field or property to enable or disable the ToggleGroup. + Use this to name the group differently than toggleMemberName. + + + + Obsolete constructor overload. + + Obsolete overload. + Obsolete overload. + Obsolete overload. + Obsolete overload. + + + + Name of any bool field, property or function to enable or disable the ToggleGroup. + + + + + Name of any string field, property or function, to title the toggle group in the inspector. + If null will be used instead. + + + + + Combines the ToggleGroup with another ToggleGroup. + + Another ToggleGroup. + + + + ValidateInput is used on any property, and allows to validate input from inspector. + Use this to enforce correct values. + + + ValidateInput refuses invalid values. + ValidateInput only works in the editor. Values changed through scripting will not be validated. + + + The following examples shows how a speed value can be forced to be above 0. + + public class MyComponent : MonoBehaviour + { + [ValidateInput("ValidateInput")] + public float Speed; + + // Specify custom output message and message type. + [ValidateInput("ValidateInput", "Health must be more than 0!", InfoMessageType.Warning)] + public float Health; + + private bool ValidateInput(float property) + { + return property > 0f; + } + } + + + + The following example shows how a static function could also be used. + + public class MyComponent : MonoBehaviour + { + [ValidateInput("StaticValidateFunction")] + public int MyInt; + + private static bool StaticValidateFunction(int property) + { + return property != 0; + } + } + + + + + + + + Default message for invalid values. + + + + + OBSOLETE; use the Condition member instead. + A resolved string that should evaluate to a boolean value, and which should validate the input. Note that in expressions, the $value named parameter, and in methods, a parameter named value, can be used to get the validated value instead of referring to the value by its containing member. This makes it easier to reuse validation strings. + + + + + A resolved string that should evaluate to a boolean value, and which should validate the input. Note that in expressions, the $value named parameter, and in methods, a parameter named value, can be used to get the validated value instead of referring to the value by its containing member. This makes it easier to reuse validation strings. + + + + + The type of the message. + + + + + Whether to also trigger validation when changes to child values happen. This is true by default. + + + + + If true, the validation method will not only be executed when the User has changed the value. It'll run once every frame in the inspector. + + + + + Initializes a new instance of the class. + + A resolved string that should evaluate to a boolean value, and which should validate the input. Note that in expressions, the $value named parameter, and in methods, a parameter named value, can be used to get the validated value instead of referring to the value by its containing member. This makes it easier to reuse validation strings. + Default message for invalid values. + Type of the message. + + + + Obsolete. Rejecting invalid input is no longer supported. Use the other constructors instead. + + Obsolete overload. + Obsolete overload. + Obsolete overload. + Obsolete overload. + + + + ShowIf is used on any property and can hide the property in the inspector. + Use this to hide irrelevant properties based on the current state of the object. + + + This example shows a component with fields hidden by the state of another field. + + public class MyComponent : MonoBehaviour + { + public bool ShowProperties; + + [ShowIf("showProperties")] + public int MyInt; + + [ShowIf("showProperties", false)] + public string MyString; + + public SomeEnum SomeEnumField; + + [ShowIf("SomeEnumField", SomeEnum.SomeEnumMember)] + public string SomeString; + } + + + + This example shows a component with a field that is hidden when the game object is inactive. + + public class MyComponent : MonoBehaviour + { + [ShowIf("MyVisibleFunction")] + public int MyHideableField; + + private bool MyVisibleFunction() + { + return this.gameObject.activeInHierarchy; + } + } + + + + + + + + + The name of a bool member field, property or method. Obsolete; use the Condition member instead. + + + + + A resolved string that defines the condition to check the value of, such as a member name or an expression. + + + + + The optional condition value. + + + + + Whether or not to slide the property in and out when the state changes. + + + + + Shows a property in the inspector, based on the value of a resolved string. + + A resolved string that defines the condition to check the value of, such as a member name or an expression. + Whether or not to slide the property in and out when the state changes. + + + + Shows a property in the inspector, if the resolved string evaluates to the specified value. + + A resolved string that defines the condition to check the value of, such as a member name or an expression. + Value to check against. + Whether or not to slide the property in and out when the state changes. + + + + Wrap is used on most primitive property, and allows for wrapping the value when it goes out of the defined range. + Use this when you want a value that goes around in circle, like for example an angle. + + + Currently unsigned primitives are not supported. + + + The following example show how Wrap is used on a property. + + public class MyComponent : MonoBehaviour + { + [Wrap(-100, 100)] + public float MyFloat; + } + + + + + + + The lowest value for the property. + + + + + The highest value for the property. + + + + + Wraps the value of the property round when the values goes out of range. + + The lowest value for the property. + The highest value for the property. + + + + Type of info message box. This enum matches Unity's MessageType enum which could not be used since it is located in the UnityEditor assembly. + + + + + Generic message box with no type. + + + + + Information message box. + + + + + Warning message box. + + + + + Error message box. + + +
+
diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.OdinInspector.Attributes.xml.meta b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.OdinInspector.Attributes.xml.meta new file mode 100644 index 00000000..dd6fdd52 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.OdinInspector.Attributes.xml.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 47a84ebde4ec47fabb620b30cc7a096f +timeCreated: 1488828285 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.OdinInspector.Editor.dll b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.OdinInspector.Editor.dll new file mode 100644 index 00000000..124dccb9 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.OdinInspector.Editor.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6cb818ee40817ac405bf104202c656dc077d9fa2efb4accb94e498af57051e2c +size 1508352 diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.OdinInspector.Editor.dll.meta b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.OdinInspector.Editor.dll.meta new file mode 100644 index 00000000..c0512dfb --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.OdinInspector.Editor.dll.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: a4865f1ab4504ed8a368670db22f409c +timeCreated: 1488828285 +licenseType: Store +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + isOverridable: 0 + platformData: + Any: + enabled: 0 + settings: + Exclude Android: 1 + Exclude Editor: 0 + Exclude Linux: 1 + Exclude Linux64: 1 + Exclude LinuxUniversal: 1 + Exclude N3DS: 1 + Exclude OSXIntel: 1 + Exclude OSXIntel64: 1 + Exclude OSXUniversal: 1 + Exclude PS4: 1 + Exclude PSM: 1 + Exclude PSP2: 1 + Exclude SamsungTV: 1 + Exclude Tizen: 1 + Exclude WebGL: 1 + Exclude WiiU: 1 + Exclude Win: 1 + Exclude Win64: 1 + Exclude WindowsStoreApps: 1 + Exclude XboxOne: 1 + Exclude iOS: 1 + Exclude tvOS: 1 + Editor: + enabled: 1 + settings: + DefaultValueInitialized: true + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.OdinInspector.Editor.xml b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.OdinInspector.Editor.xml new file mode 100644 index 00000000..02756594 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.OdinInspector.Editor.xml @@ -0,0 +1,10940 @@ + + + + Sirenix.OdinInspector.Editor + + + + + An ActionResolver resolves a string to an action, given an InspectorProperty instance to use as context. Call to get an instance of an ActionResolver. + Action resolvers are a globally extendable system that can be hooked into and modified or changed by creating and registering an . + See Odin's tutorials for details and examples of how to use ActionResolvers. + + + + + The context of this ActionResolver, containing all of its configurations and values it needs to function. For performance and simplicity reasons, this is a single very large struct that is passed around by ref to anything that needs it. + + + + + The delegate that executes the actual action. You should not call this manually, but instead call . + + + + + The current error message that the resolver has, or null if there is no error message. This is a shortcut for writing "resolver.Context.ErrorMessage". + + + + + Whether there is an error message at the moment. This is a shortcut for writing "resolver.Context.ErrorMessage != null". + + + + + Draws an error message box if there is an error, and does nothing if there is no error. + + + + + Executes the resolved action for a given selection index. + + The selection index to execute the action on. Defaults to 0. + + + + Executes the action for all selection indices. + + + + + Creates a new action resolver instance from a pre-built context struct. This is a more advanced use that requires you to + know how the context needs to be set up before action resolution happens. However, this allows you to do more advanced + things like adjust various context values before string resolution happens. + + The pre-built context that should be used to get a resolver. + + + + Creates a new action resolver instance for a given string. + + The property that is the context for the resolution to happen in. + The string that should be resolved to an action. + + + + Creates a new action resolver instance for a given string. + + The property that is the context for the resolution to happen in. + The string that should be resolved to an action. + The extra named args that this resolver has access to. Passing in a named arg that already exists will silently override the pre-existing named arg. + + + + Gets a nicely formatted string that lists all the errors in the given set of action resolvers. The returned value is null if there are no errors. + + + + + Gets a nicely formatted string that lists all the errors in the given set of action resolvers. The returned value is null if there are no errors. + + + + + Draws error boxes for all errors in the given action resolvers, or does nothing if there are no errors. This is equivalent to calling DrawError() on all resolvers passed to this method. + + + + + Draws error boxes for all errors in the given action resolvers, or does nothing if there are no errors. This is equivalent to calling DrawError() on all resolvers passed to this method. + + + + + This struct contains all of an ActionResolver's configurations and values it needs to function. For performance and simplicity reasons, this is a single very large struct that lives on an ActionResolver instance and is passed around by ref to anything that needs it. + + + + + The property that *provides* the context for the action resolution. This is the instance that was passed to the resolver when it was created. Note that this is different from , which is based on this value, but almost always isn't the same InspectorProperty instance. + + + + + The error message, if a valid action resolution wasn't found, or if creation of the action resolver failed because was invalid, or if the action was executed but threw an exception. (In this last case, will be true.) + + + + + The named values that are available to the action resolver. Use this field only to get and set named values - once the ValueResolver has been created, new named values will have no effect. + + + + + This will be true if is not null and the message was caused by an exception thrown by code invoked during execution of the resolved action. + + + + + Whether exceptions thrown during action execution should be logged to the console. + + + + + The string that is resolved to perform an action. + + + + + Whether the action resolver should sync ref parameters of invoked methods with named values. If this is true, then if a ref or out parameter value is changed during action execution, the named value associated with that parameter will also be changed to the same value. + + + + + Whether this context has been resolved. + + + + + The type that is the parent of the action resolution, ie, the type that is the context. This is the same as .ValueEntry.TypeOfValue. + + + + + The property that *is* the context for the action resolution. This is not the instance that was passed to the resolver when it was created, but this value is based on that instance. This is the property that provides the actual context - for example, if is for a member of a type - or for an element in a collection contained by a member - this value will be the parent property for the type that contains that member. Only if is the tree's root property is the same as . + + + + + Gets the parent value which provides the context of the resolver. + + The selection index of the parent value to get. + + + + Sets the parent value which provides the context of the resolver. + + The selection index of the parent value to set. + The value to set. + + + + Adds the default named values of "property" and "value" to the context's named values. + This method is usually automatically invoked when a resolver is created, so there + is no need to invoke it manually. + + + + + A color palette. + + + + + Name of the color palette. + + + + + The colors. + + + + + Whether to show the alpha channel. + + + + + Add, Edit or remove custom color palettes used by the . + + You can modify the configuration in the Odin Preferences window found in 'Tools -> Odin Inspector -> Preferences -> Drawers -> Color Palettes', + or by locating the configuration file stored as a serialized object in the Sirenix folder under 'Odin Inspector/Config/Editor/ColorPaletteManager'. + + + + + + Specify the amount of spacing between each color in a color palette. + + + + + Specify the width of each color in a color palette. If StretchPalette is set to true, this will become the min-width. + + + + + If true, all color in a color palette is stretch so that the entire color-palette area is filled. + + + + + If true, a toolbar with the name of the color palette is shown above each color palette. + + + + + Gives you the list of all custom color palettes. + Remember to call UnityEditor.EditorUtility.SetDirty(ColorPaletteManager.Instance) after modifying the list. + + + + + Configurations for Odin DLLs import settings. + + + + + Gets or sets a value indicating whether or not Odin should automatically configure the import settings of its DLLs in a preprocess build step. + Keep in mind that this feature is only supported by Unity version 5.6 and up. + + + + + Gets a value indicating whether or not automatic configuration of Odin's DLL import settings is supported by the current Unity version. + + + + + Installed Odin Inspector Version Info. + + + + + Gets the name of the current running version of Odin Inspector. + + + + + Gets the current running version of Odin Inspector. + + + + + Whether the current version of Odin is an enterprise version. + + + + + This is a class for creating, getting and modifying a property's various states. An instance of this class always comes attached to an InspectorProperty. + See Odin's tutorials for more information about usage of the state system. + + + + + If set to true, all state changes for this property will be logged to the console. + + + + + Whether the property is visible in the inspector. + + + + + Whether the Visible state was true or not during the last layout event. + + + + + Whether the property is enabled in the inspector. + + + + + Whether the Enabled state was true or not during the last layout event. + + + + + Whether the property is expanded in the inspector. + + + + + Whether the Expanded state was true or not during the last layout event. + + + + + Creates a custom state with a given name. + + + + + + + + + Determines whether a state with the given key exists. + + The key to check. + True if the state exists, otherwise, false. + + + + Determines whether a state with the given key exists. + + The key to check. + If the state exists, this out parameter will be true if the state is persistent. + True if the state exists, otherwise, false. + + + + Determines whether a state with the given key exists. + + The key to check. + If the state exists, this out parameter will contain the type of value that the state contains. + True if the state exists, otherwise, false. + + + + Determines whether a state with the given key exists. + + The key to check. + If the state exists, this out parameter will be true if the state is persistent. + If the state exists, this out parameter will contain the type of value that the state contains. + True if the state exists, otherwise, false. + + + + Gets the value of a given state as an instance of type T. + + The type to get the state value as. An will be thrown if the state's value type cannot be assigned to T. + The key of the state to get. An will be thrown if a state with the given key does not exist. + The value of the state. + + + + Gets the value that a given state contained last layout as an instance of type T. + + The type to get the state value as. An will be thrown if the state's value type cannot be assigned to T. + The key of the state to get. An will be thrown if a state with the given key does not exist. + The value of the state during the last layout event. + + + + Sets the value of a given state to a given value. + + The type to set the state value as. An will be thrown if T cannot be assigned to the state's value type. + The key of the state to set the value of. An will be thrown if a state with the given key does not exist. + The value to set. + + + + Cleans the property state and prepares it for cached reuse of its containing PropertyTree. This will also reset the state. + + + + + Resets all states to their default values. Persistent states will be updated to their persistent cached value if one exists. + + + + + Contains information about a change that is going to occur/has occurred to a collection. + + + + + + Specifies the kinds of changes that can occur to collections. + + + + + Unknown collection change, the change was not specified by the invoking code. + + + + + The change is adding a value to the collection. Value and SelectionIndex will be set. + + + + + The change is inserting a value into the collection. Index, Value and SelectionIndex will be set. + + + + + The change is removing a value from the collection. Value and SelectionIndex will be set. + + + + + The change is removing a value at an index from the collection. Index and SelectionIndex will be set. + + + + + The change is clearing the collection. SelectionIndex will be set. + + + + + The change is removing a key from the collection. Key and SelectionIndex will be set. + + + + + The change is setting the value of a key in the collection. Key, Value and SelectionIndex will be set. + + + + + Handles all prefab modifications that apply to the targets of a property tree, if any. This class determines which properties have modifications, what the modifications are, auto-applies modifications if the current instance values do not correspond to the prefab values, and also provides an API for modifying those modifications. + NOTE: This class is liable to see a lot of changes, as the prefab modification system is slated to be redesigned for increased extendability in the future. Do not depend overly on the current API. + + + + + The prefabs for each prefab instance represented by the property tree, if any. + + + + + Whether any of the values the property tree represents are prefab instances. + + + + + A prefab tree for the prefabs of this property tree's prefab instances, if any exist. + + + + + Gets the Unity PropertyModification for the property at this path, if there are any. + + The property path to get the modification for. + The index of the tree target to get the modification for. + Whether any children of the path have modifications registered. + + + + + Gets the Odin prefab modification type of a given property, if any. + + The property to check. + + + The prefab modification type of the property if it has one, otherwise null. + + + + + Registers a modification of type for a given property. + + The property to register a modification for. + Selection index of the target to register a modification for. + The modified list length. + + Property " + property.Path + " does not have a value entry; cannot register prefab modification to this property. + or + newLength cannot be negative! + + + + + Registers a modification of type for a given property. + + The property to register a modification for. + Selection index of the target to register a modification for. + Whether to force the change to be registered immediately, rather than at the end of frame. + Property " + property.Path + " does not have a value entry; cannot register prefab modification to this property. + + + + Calculates a delta between the current dictionary property and its prefab counterpart, and registers that delta as a modification. + + The property to register a modification for. + Selection index of the target. + Property " + property.Path + " does not have a value entry; cannot register prefab modification to this property. + + + + Adds a remove key modification to the dictionary modifications of a given property. + + The property to register a modification for. + Selection index of the target. + The key to be removed. + Property " + property.Path + " does not have a value entry; cannot register prefab modification to this property. + + + + Adds an add key modification to the dictionary modifications of a given property. + + The property to register a modification for. + Selection index of the target. + The key to be added. + Property " + property.Path + " does not have a value entry; cannot register prefab modification to this property. + + + + Removes all dictionary modifications on a property for a given dictionary key value. + + The property to remove a key modification for. + Selection index of the target. + The key to remove modifications for. + key + + + + Removes all prefab modifications of a given type on a given property. + + The property to remove modifications for. + Selection index of the target. + Type of the modification to remove. + + + + Gets all prefab modifications in this property tree for a given selection index. + + + + + + + Default implementation and the version that will be used when no other OdinAttributeProcessorLocator instance have been given to a PropertyTree. + This implementation will find all AttributeProcessor definitions not marked with the . + + + + + Singleton instance of the DefaultOdinAttributeProcessorLocator class. + + + + + Type search index used for matching to properties. + + + + + Gets a list of to process attributes for the specified child member of the parent property. + + The parent of the member. + Child member of the parent property. + List of to process attributes for the specified member. + + + + Gets a list of to process attributes for the specified property. + + The property to find attribute porcessors for. + List of to process attributes for the speicied member. + + + + This attribute processor will take any attribute already applied to the property with the applied to, + and take all attributes applied to the attribute (except any ) and add to them to the property. + This allows for adding attributes to attributes in the property system. + + + + + Looks for attributes in the attributes list with a applied, and adds the attribute from those attributes to the property. + + The parent of the member. + The member that is being processed. + The list of attributes currently applied to the property. + + + + Finds all attributes attached to the specified member and adds to them to attribute list. + + + + + This attribute processor can only process for members. + + The property to process. + false. + + + + Finds all attributes attached to the specified member and adds to them to the attributes list. + + The parent property of the specified member. + The member to process attributes for. + The current attributes applied to the property. + + + + Attribute processor that can add, change and remove attributes from a property. + + + + + Instanciates an OdinAttributeProcessor instance of the specified type. + + The type of processor to instanciate. The type must inherit from . + A new instance of the specified type. + + + + Checks if the processor can process attributes for the specified member. + + The parent property of the member. + The member to be processed. + true if the processor can process for the specified member. Otherwise false. + + + + Checks if the processor can process attributes for the specified property. + + The property to process. + true if the processor can process attributes for the specified property. Otherwise false. + + + + Processes attributes for the specified member. + + The parent property of the specified member. + The member to process attributes for. + The current attributes applied to the property. + + + + Processes attributes for the specified property. + + The property to process attributes for. + The current attributes applied to the property. + + + + Attribute processor that can add, change and remove attributes from a property. + + + + + Base class definition for OdinAttributeProcessorLocator. Responsible for finding and creating instances to process attributes for properties. + Default OdinAttributeProcessorLocator have been implemented as . + + + + + Gets a list of to process attributes for the specified child member of the parent property. + + The parent of the member. + Child member of the parent property. + List of to process attributes for the specified member. + + + + Gets a list of to process attributes for the specified property. + + The property to find attribute porcessors for. + List of to process attributes for the speicied member. + + + + Find attributes attached to the type definition of a property and adds to them to attribute list. + + + + + This attribute processor can only process for properties. + + The parent of the specified member. + The member to process. + false. + + + + This attribute processor can only process for properties with an attached value entry. + + The property to process. + true if the specified property has a value entry. Otherwise false. + + + + Finds all attributes attached to the type and base types of the specified property value and adds them to the attribute list. + + The property to process. + The list of attributes for the property. + + + + Default implementation and the version that will be used by if no other instance have been specified. + + + + + Singleton instance of . + + + + + Gets an instance for the specified property. + + The property to get an instance for. + An instance of to resolver the specified property. + + + + Base class for locator of . Use for default implementation. + + + + + Gets an instance for the specified property. + + The property to get an instance for. + An instance of to resolver the specified property. + + + + Note: this interface may be temporary, and may eventually be substituted for a public-facing way of extending the prefab modification system. + + For now, it only exists to denote which internally defined resolvers support prefab modifications being set. + + + + + Responsible for getting and setting values on properties. + + The type of the owner. + The type of the value. + + + + + Whether the value is readonly. + + + + + Gets the type of the owner. + + + + + Gets the type of the value. + + + + + Initializes a new instance of the class. + + The field member to represent. + if set to true [is readonly]. + + + + Initializes a new instance of the class. + + The getter. + The setter. + getter + + + + Initializes a new instance of the class. + + The getter. + The setter. + getter + + + + Gets the value from a given owner. + + The owner. + The found value. + owner is null + + + + Gets the value from a given weakly typed owner. + + The weakly typed owner. + The found value. + + + + Sets the weakly typed value on a given weakly typed owner. + + The owner. + The value. + + + + Sets the value on a given owner. + + The owner. + The value. + + + + Gets all s for a given type. + + The parent property. + The type to get infos for. + if set to true members that are serialized by Odin will be included. + + + + Gets an aliased version of a member, with the declaring type name included in the member name, so that there are no conflicts with private fields and properties with the same name in different classes in the same inheritance hierarchy. + + + + + Gets the attribute that the OdinAttributeStateUpdater applies to. + + + + + Gets the strongly typed ValueEntry of the OdinAttributeStateUpdater's property. + + + + + Gets the strongly typed ValueEntry of the OdinValueStateUpdater's property. + + + + + Initializes this instance. + + + + + Draws the property with GUILayout support. This method is called by DrawPropertyImplementation if the GUICallType is set to GUILayout, which is the default. + + + + + Draws members marked with . + + + + + Draws a warning message for non-serialized properties that sports both the SerializeField and the ShowInInspector attribute. + + + + + Determines if the drawer can draw the property. + + The property to test. + true if the drawer can draw the property; otherwise false. + + + + Initializes the drawer. + + + + + Draws the warning message and calls the next drawer. + + The label for the property. + + + + Draws properties marked with . + + + + + + + + + + Draws a space for properties marked with the PropertySpace attribute. + + + + + Initializes this instance. + + + + + Draws the property. + + + + + Drawer for the ShowPropertyResolver attribute. + + + + + + TextArea attribute drawer. + + + + + Draws the property in the Rect provided. This method does not support the GUILayout, and is only called by DrawPropertyImplementation if the GUICallType is set to Rect, which is not the default. + If the GUICallType is set to Rect, both GetRectHeight and DrawPropertyRect needs to be implemented. + If the GUICallType is set to GUILayout, implementing DrawPropertyLayout will suffice. + + The label. This can be null, so make sure your drawer supports that. + + + + Draws properties marked with . + + + + + Initializes this instance. + + + + + Draws the property with GUILayout support. This method is called by DrawPropertyImplementation if the GUICallType is set to GUILayout, which is the default. + + + + + Drawer for the ResponsiveButtonGroupAttribute. + + + + + Draws the property with GUILayout support. + + + + + Drawer for the attribute. + + + + + Draws the property. + + + + + The default method drawer that draws most buttons. + + + + + Initializes this instance. + + + + + Draws the property layout. + + + + + Draws Color properties marked with . + + + + + Draws the property. + + + + + Draws char properties marked with . + + + + + Draws the property. + + + + + Draws string properties marked with . + + + + + Draws the property. + + + + + Draws sbyte properties marked with . + + + + + Draws the property. + + + + + Draws byte properties marked with . + + + + + Draws the property. + + + + + Draws short properties marked with . + + + + + Draws the property. + + + + + Draws ushort properties marked with . + + + + + Draws the property. + + + + + Draws int properties marked with . + + + + + Draws the property. + + + + + Draws uint properties marked with . + + + + + Draws the property. + + + + + Draws long properties marked with . + + + + + Draws the property. + + + + + Draws ulong properties marked with . + + + + + Draws the property. + + + + + Draws float properties marked with . + + + + + Draws the property. + + + + + Draws double properties marked with . + + + + + Draws the property. + + + + + Draws decimal properties marked with . + + + + + Draws the property. + + + + + Odin drawer for the . + + + + + Returns true if the drawer can draw the type. + + + + + Draws the property. + + + + + Draws properties marked with as a square ObjectField which renders a preview for UnityEngine.Object types. + This object field also adds support for drag and drop, dragging an object to another square object field, swaps the values. + If you hold down control while letting go it will replace the value, And you can control + click the object field to quickly delete the value it holds. + + + + + Draws the property. + + + + + The TableList attirbute drawer. + + + + + + Determines whether this instance [can draw attribute property] the specified property. + + + + + Initializes this instance. + + + + + Draws the property layout. + + + + + Draws Color properties marked with . + + + + + Draws the property. + + + + + Draws properties marked with . + + + + + + Not yet documented. + + + + + Initializes the drawer. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Initializes the drawer. + + + + + Not yet documented. + + + + + Adds customs generic menu options. + + + + + Draws properties marked with + + + + + Draws the property. + + + + + Draws properties marked with the . + + + + + + + + + + + + Draws the attribute. + + + + + + When first learning to use the Odin Inspector, it is common for people to misunderstand the OdinSerialize attribute, + and use it in places where it does not achive the deceired goal. + + + This drawer will display a warning message if the OdinSerialize attribute is potentially used in such cases. + + + + + + + Draws The Property. + + + + + Common base implementation for progress bar attribute drawers. + + + + + + Initialized the drawer. + + + + + Draws the property. + + + + + Generic implementation of progress bar field drawing. + + + + + Converts the generic value to a double. + + The generic value to convert. + The generic value as a double. + + + + Draws values decorated with . + + + + + + + Draws a progress bar for a byte property. + + + + + Converts the generic value to a double. + + The generic value to convert. + The generic value as a double. + + + + Draws values decorated with . + + + + + + + Draws a progress bar for a sbyte property. + + + + + Converts the generic value to a double. + + The generic value to convert. + The generic value as a double. + + + + Draws values decorated with . + + + + + + + Draws a progress bar for a short property. + + + + + Converts the generic value to a double. + + The generic value to convert. + The generic value as a double. + + + + Draws values decorated with . + + + + + + + Draws a progress bar for a ushort property. + + + + + Converts the generic value to a double. + + The generic value to convert. + The generic value as a double. + + + + Draws values decorated with . + + + + + + + Draws a progress bar for an int property. + + + + + Converts the generic value to a double. + + The generic value to convert. + The generic value as a double. + + + + Draws values decorated with . + + + + + + + Draws a progress bar for a uint property. + + + + + Converts the generic value to a double. + + The generic value to convert. + The generic value as a double. + + + + Draws values decorated with . + + + + + + + Draws a progress bar for a long property. + + + + + Converts the generic value to a double. + + The generic value to convert. + The generic value as a double. + + + + Draws values decorated with . + + + + + + + Draws a progress bar for a ulong property. + + + + + Converts the generic value to a double. + + The generic value to convert. + The generic value as a double. + + + + Draws values decorated with . + + + + + + + Draws a progress bar for a float property. + + + + + Converts the generic value to a double. + + The generic value to convert. + The generic value as a double. + + + + Draws values decorated with . + + + + + + + Draws a progress bar for a double property. + + + + + Converts the generic value to a double. + + The generic value to convert. + The generic value as a double. + + + + Draws values decorated with . + + + + + + + Draws a progress bar for a decimal property. + + + + + Converts the generic value to a double. + + The generic value to convert. + The generic value as a double. + + + + Draws byte properties marked with . + + + + + + + + + + + Initialized the drawer. + + + + + Draws the property. + + + + + Draws double properties marked with . + + + + + + + + + + + Initialized the drawer. + + + + + Draws the property. + + + + + Draws float properties marked with . + + + + + + + + + + + Initialized the drawer. + + + + + Draws the property. + + + + + Draws decimal properties marked with . + + + + + Initialized the drawer. + + + + + Draws the property. + + + + + Draws short properties marked with . + + + + + + + + + + + Initialized the drawer. + + + + + Draws the property. + + + + + Draws int properties marked with . + + + + + + + + + + + Initialized the drawer. + + + + + Draws the property. + + + + + Draws long properties marked with . + + + + + + + + + + + Initialized the drawer. + + + + + Draws the property. + + + + + Draws sbyte properties marked with . + + + + + + + + + + + Initialized the drawer. + + + + + Draws the property. + + + + + Draws ushort properties marked with . + + + + + + + + + + + Initialized the drawer. + + + + + Draws the property. + + + + + Draws uint properties marked with . + + + + + + + + + + + Initialized the drawer. + + + + + Draws the property. + + + + + Draws ulong properties marked with . + + + + + + + + + + + Initialized the drawer. + + + + + Draws the property. + + + + + Draws an enum in a horizontal button group instead of a dropdown. + + + + + Returns true if the drawer can draw the type. + + + + + Draws the property. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Draws char properties marked with . + + + + + Draws the property. + + + + + Draws string properties marked with . + + + + + Draws the property. + + + + + Draws sbyte properties marked with . + + + + + Draws the property. + + + + + Draws byte properties marked with . + + + + + Draws the property. + + + + + Draws short properties marked with . + + + + + Draws the property. + + + + + Draws ushort properties marked with . + + + + + Draws the property. + + + + + Draws int properties marked with . + + + + + Draws the property. + + + + + Draws uint properties marked with . + + + + + Draws the property. + + + + + Draws long properties marked with . + + + + + Draws the property. + + + + + Draws ulong properties marked with . + + + + + Draws the property. + + + + + Draws float properties marked with . + + + + + Draws the property. + + + + + Draws double properties marked with . + + + + + Draws the property. + + + + + Draws decimal properties marked with . + + + + + Draws the property. + + + + + Draws properties marked with . + + + + + + + + + Initializes this instance. + + + + + Draws the property. + + + + + Draws properties marked with . + This drawer sets the current GUI color, before calling the next drawer in the chain. + + + + + + + + + + Draws the property. + + + + + Static GUI information reguarding the InlineEditor attribute. + + + + + Gets a value indicating how many InlineEditors we are currently in. + + + + + Draws properties marked with . + + + + + + + Initializes this instance. + + + + + Draws the property layout. + + The label. + + + + Draws Vector2 properties marked with . + + + + + + + + + + + Show drawer chain attribute drawer. + + + + + Draws the property. + + + + + Draws properties marked with . + + + + + + Initializes this instance. + + + + + Draws the property. + + + + + Draws properties marked with . + + + + + + + + + Draws the property. + + + + + Draws properties marked with . + + + + + + Draws the property. + + + + + Draws byte properties marked with . + + + + + + + + + + + Draws the property. + + + + + Draws double properties marked with . + + + + + + + + + + + Draws the property. + + + + + Draws float properties marked with . + + + + + + + + + + + Draws the property. + + + + + Draws decimal properties marked with . + + + + + Draws the property. + + + + + Draws short properties marked with . + + + + + + + + + + + Draws the property. + + + + + Draws int properties marked with . + + + + + + + + + + + Draws the property. + + + + + Draws long properties marked with . + + + + + + + + + + + Draws the property. + + + + + Draws sbyte properties marked with . + + + + + + + + + + + Draws the property. + + + + + Draws ushort properties marked with . + + + + + + + + + + + Draws the property. + + + + + Draws uint properties marked with . + + + + + + + + + + + Draws the property. + + + + + Draws ulong properties marked with . + + + + + + + + + + + Draws the property. + + + + + Draws properties marked with . + Calls the properties ToString method to get the string to draw. + + + + + + + + + + + Draws the property. + + + + + Drawer for the + + + + + + Draws the property. + + + + + Drawer for the + + + + + + Draws the property. + + + + + Draws properties marked with . + + + + + + + Draws the property. + + + + + Char property drawer. + + + + + Draws the property. + + + + + Delegate property drawer. This drawer is rather simplistic for now, and will receive significant upgrades in the future. + + + + + See . + + + + + Draws the property. + + + + + Property drawer for . + + + + + Draws the property. + + + + + Base class to derive from for value drawers that merely wish to cause a value to be drawn by Unity. + + + + + Draws the property. + + + + + Gradient property drawer. + + + + + Int property drawer. + + + + + Draws the property. + + + + + The GUIStyleState Drawer + + + + + + Initializes this instance. + + + + + Draws the property with GUILayout support. + + + + + LayerMask property drawer. + + + + + Draws the property. + + + + + Base class for two-dimensional array drawers. + + + + + Override this method in order to define custom type constraints to specify whether or not a type should be drawn by the drawer. + Note that Odin's has full support for generic class constraints, so most often you can get away with not overriding CanDrawTypeFilter. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Draws the property. + + + + + This method gets called from DrawPropertyLayout right before the table and error message is drawn. + + + + + Compares the element. + + + + + Draws a table cell element. + + The rect. + The input value. + The output value. + + + + Draws the element. + + + + + Property drawer for nullables. + + + + + Draws the property. + + + + + Quaternion property drawer. + + + + + Draws the property. + + + + + Populates the generic menu for the property. + + + + + Type property drawer + + + + + + Draws the property. + + + + + Draws properties marked with . + Displays a configurable list of assets, where each item can be enabled or disabled. + + + + + + + + + + Draws the property. + + + + + Populates the generic menu for the property. + + + + + Odin drawer for . + + + + + Initializes the drawer. + + + + + Not yet documented. + + + + + Adds a generic menu option to properties marked with . + + + + + + + + Populates the generic menu for the property. + + + + + Draws the property. + + + + + Draws properties marked with . + + + + + + + + + + Draws the property. + + + + + Draws properties marked with . + + + + + + + + + + Draws the property. + + + + + Draws properties marked with . + + + + + + Draws the property. + + + + + Draws properties marked with . + Draws an info box above the property. Error and warning info boxes can be tracked by Odin Scene Validator. + + + + + + + + + Draws the property. + + + + + Draws properties marked with . + Creates a new GUIContent, with the provided label text, before calling further down in the drawer chain. + + + + + + + + + + + + Draws the attribute. + + + + + Draws string properties marked with . + This drawer only works for string fields, unlike . + + + + + + + + + + Draws the property. + + + + + Draws string properties marked with . + This drawer works for both string field and properties, unlike . + + + + + + + + + + Draws the property. + + + + + Draws properties marked with . + Calls the method, the attribute is either attached to, or the method that has been specified in the attribute, to allow for custom GUI drawing. + + + + + + + + + + Draws the property. + + + + + Draws properties marked with . + + + + + + + + + + Draws properties marked with . + + + + + Draws the property. + + + + + Initializes this instance. + + + + + Draws the property with GUILayout support. This method is called by DrawPropertyImplementation if the GUICallType is set to GUILayout, which is the default. + + + + + Draws properties marked with . + + + + + + + Draws the property. + + + + + Draws properties marked with . + + + + + + Draws the property. + + + + + Draws properties marked with . + + + + + + Draws the property. + + + + + Draws all Unity DecoratorDrawers within prepend attribute drawers within Odin. + + + + + Initializes the class. + + + + + Draws the property. + + + + + Draws all properties grouped together with the + + + + + + Initializes this instance. + + + + + Draws the property. + + + + + Draws all properties grouped together with the + + + + + + Draws the property. + + + + + Draws all properties grouped together with the + + + + + + Initializes this instance. + + + + + Draws the property. + + + + + Draws all properties grouped together with the + + + + + + Draws the property. + + + + + Draws properties marked with . + + + + + + Draws the property. + + + + + Draws all properties grouped together with the + + + + + + Draws the property. + + + + + Draws all nullable reference types, with an object field. + + + + + Draws the property. + + + + + Returns a value that indicates if this drawer can be used for the given property. + + + + + Evaluates all strings, enums and primitive types and ensures EditorGUI.showMixedValue is true if there are any value conflicts in the current selection. + + + + + Sets the drawer to only be evaluated on primitive types, strings and enums. + + + + + Draws the property. + + + + + Adds the right click area. + + + + + Adds the right click area. + + + + + Opens a context menu for any given property on right click. The context menu is populated by all relevant drawers that implements . + + + + + + Initializes the drawer. + + + + + Draws the property. + + + + + Draws all reference type properties, which has already been drawn elsewhere. This drawer adds an additional foldout to prevent infinite draw depth. + + + + + Prevents the drawer from being applied to UnityEngine.Object references since they are shown as an object field, and is not drawn in-line. + + + + + Draws the property. + + + + + Draws properties with a set. + + + + + Draws the property. + + + + + + When multiple objects are selected and inspected, this his drawer ensures UnityEditor.EditorGUI.showMixedValue + gets set to true if there are any conflicts in the selection for any given property. + Otherwise the next drawer is called. + + This drawer also implements and provides a right-click context menu item for resolving conflicts if any. + + + + + Draws the property. + + + + + Animation curve property drawer. + + + + + Bool property drawer. + + + + + Draws the property. + + + + + Byte property drawer. + + + + + Draws the property. + + + + + Color32 property drawer. + + + + + Draws the property. + + + + + Color property drawer. + + + + + Draws the property. + + + + + Color palette property drawer. + + + + + Draws the property. + + + + + Drawer for composite properties. + + + + + Draws the property. + + + + + Decimal property drawer. + + + + + Draws the property. + + + + + Double property drawer. + + + + + Draws the property. + + + + + Enum property drawer. + + + + + Returns true if the drawer can draw the type. + + + + + Draws the property. + + + + + Short property drawer. + + + + + Draws the property. + + + + + Int property drawer. + + + + + Draws the property. + + + + + Long property drawer. + + + + + Draws the property. + + + + + Property drawer for anything that has a . + + + + + Initializes the drawer. + + + + + Draws the property. + + + + + SByte property drawer. + + + + + Draws the property. + + + + + Float property drawer. + + + + + Draws the property. + + + + + String property drawer. + + + + + Draws the property. + + + + + Ushort property drawer. + + + + + Draws the property. + + + + + Uint property drawer. + + + + + Draws the property. + + + + + Ulong property drawer. + + + + + Draws the property. + + + + + Unity event drawer. + + + + + Draws the property. + + + + + Unity object drawer. + + + + + Initializes this instance. + + + + + Draws the property. + + + + + Vector2 proprety drawer. + + + + + Draws the property. + + + + + Populates the generic menu for the property. + + + + + Vector3 property drawer. + + + + + Draws the property. + + + + + Populates the generic menu for the property. + + + + + Vector4 property drawer. + + + + + Draws the property. + + + + + Populates the generic menu for the property. + + + + + Draws the property. + + + + + Descripes an attribute example. + + + + + The type of the example object. + + + + + The name of the example. + + + + + The description of the example. + + + + + Raw code of the example. + + + + + The example declared as a Unity component. + + + + + Sorting value of the example. Examples with lower order values should come before examples with higher order values. + + + + + Preview object of the example. + + + + + Extension method for List<Attribute> + + + + + Determines whether the list contains a specific attribute. + + The type of attribute. + The attribute list. + + true if the specified attribute list has attribute; otherwise, false. + + + + + Adds the attribute if not exist. + + The type of attribute. + The attribute list. + + + + + Adds the attribute if not exist. + + The type of attribute. + The attribute list. + + + + + Adds the attribute if not exist. + + The type of attribute. + The attribute list. + + + + + Adds the attribute if not exist. + + The type of attribute. + The attribute list. + The attribute. + + + + + Removes the type of the attribute of. + + The type of attribute. + The attribute list. + + + + + Odin has its own implementations for these attribute drawers; never use Unity's. + + + + + Gets the priority of a given drawer type. + + + + + Helper class to get values from InspectorProperties. This class is deprecated and fully replaced by . + + + + + If any error occurred while looking for members, it will be stored here. + + + + + Gets the referenced member information. + + + + + Gets the value. + + + + + Gets all values from all targets. + + + + + The content padding + + + + + Draws the menu tree. + + + + + Gets the value selected value. + + + + + Invokes BuildMenuTree. + + + + + Use this attribute to prevent a type from being included in Odin systems. + The attribute can be applied to Odin drawers, Odin property resolvers and Odin attribute processor types. + + + + + To safely change anything in the type cache, you must be holding this lock. + + + + + Put this attribute on a validator class to prevent the ValidatorDrawer from running that validator in the inspector. + Typically you would use this for a validation-related attribute that has its own, complex custom drawer that should + handle the validation and error/warning drawing while the inspector is being drawn, but still needs a validator to + run for the project validation scans. + + + + + Apply this to an assembly to register validators for the validation system. + This enables locating of all relevant validator types very quickly. + + + + + This attribute can be placed on an assembly to register a value resolver creator that should be queried when a value resolver is being created. + + + + + This attribute can be placed on an assembly to register a value resolver creator that should be queried when a value resolver is being created. + + The resolver + + + + + A ValueResolver resolves a string to a value of a given type, given an InspectorProperty instance to use as context. Call to get an instance of a ValueResolver. + Value resolvers are a globally extendable system that can be hooked into and modified or changed by creating and registering a . + See Odin's tutorials for details and examples of how to use ValueResolvers. + + + + + The context of this ValueResolver, containing all of its configurations and values it needs to function. For performance and simplicity reasons, this is a single very large struct that is passed around by ref to anything that needs it. + + + + + The current error message that the resolver has, or null if there is no error message. This is a shortcut for writing "resolver.Context.ErrorMessage". + + + + + Whether there is an error message at the moment. This is a shortcut for writing "resolver.Context.ErrorMessage != null". + + + + + The type of value that this resolver instance is supposed to get. + + + + + Gets a value from the value resolver in a weakly typed manner. + + The selection index at which to get the value, in the case of multi-selection. Defaults to 0. + The value that was gotten. + + + + Draws an error message box if there is an error, and does nothing if there is no error. + + + + + Creates a new value resolver instance from a pre-built context struct, in a weakly typed fashion, though the result + is the same as using a strongly typed generic overload. This is a more advanced use that requires you to + know how the context needs to be set up before value resolution happens. However, this allows you to do more advanced + things like adjust various context values before string resolution happens. + + The pre-built context that should be used to get a resolver. + + + + Creates a new value resolver instance from a pre-built context struct. This is a more advanced use that requires you to + know how the context needs to be set up before value resolution happens. However, this allows you to do more advanced + things like adjust various context values before string resolution happens. + + The pre-built context that should be used to get a resolver. + + + + Creates a new value resolver instance in a weakly typed fashion, though the result is the same as using a strongly typed generic overload. + This is useful when you don't know at compile time which type you want to resolve. + + The type of value that the new resolver should resolve. + The property that is the context for the resolution to happen in. + The string that should be resolved to a value. + + + + Creates a new value resolver instance in a weakly typed fashion, though the result is the same as using a strongly typed generic overload. + This is useful when you don't know at compile time which type you want to resolve. + + The type of value that the new resolver should resolve. + The property that is the context for the resolution to happen in. + The string that should be resolved to a value. + The extra named args that this resolver has access to. Passing in a named arg that already exists will silently override the pre-existing named arg. + + + + Creates a new value resolver instance. + + The type of value that the new resolver should resolve. + The property that is the context for the resolution to happen in. + The string that should be resolved to a value. + + + + Creates a new value resolver instance. + + The type of value that the new resolver should resolve. + The property that is the context for the resolution to happen in. + The string that should be resolved to a value. + The extra named args that this resolver has access to. Passing in a named arg that already exists will silently override the pre-existing named arg. + + + + Creates a new value resolver instance in a weakly typed fashion, though the result is the same as using a strongly typed generic overload. + This is useful when you don't know at compile time which type you want to resolve. + + The type of value that the new resolver should resolve. + The property that is the context for the resolution to happen in. + The string that should be resolved to a value. + The value that the resolver should return if the string cannot be resolved to anything, or if there is an error in creating a resolver, or if resolution itself throws an exception. + + + + Creates a new value resolver instance in a weakly typed fashion, though the result is the same as using a strongly typed generic overload. + This is useful when you don't know at compile time which type you want to resolve. + + The type of value that the new resolver should resolve. + The property that is the context for the resolution to happen in. + The string that should be resolved to a value. + The value that the resolver should return if the string cannot be resolved to anything, or if there is an error in creating a resolver, or if resolution itself throws an exception. + The extra named args that this resolver has access to. Passing in a named arg that already exists will silently override the pre-existing named arg. + + + + Creates a new value resolver instance meant to resolve a string value in particular. This is a shorthand for creating a string resolver that has the resolved string as a fallback value. + This special case will get you the behaviour where, if you pass in a string that is not meant to be resolved in a special way, the value resolver will just pass you that string back as the result value. + + The property that is the context for the resolution to happen in. + The string that should be resolved to a value. + + + + Creates a new value resolver instance meant to resolve a string value in particular. This is a shorthand for creating a string resolver that has the resolved string as a fallback value. + This special case will get you the behaviour where, if you pass in a string that is not meant to be resolved in a special way, the value resolver will just pass you that string back as the result value. + + The property that is the context for the resolution to happen in. + The string that should be resolved to a value. + The extra named args that this resolver has access to. Passing in a named arg that already exists will silently override the pre-existing named arg. + + + + Creates a new value resolver instance. + + The type of value that the new resolver should resolve. + The property that is the context for the resolution to happen in. + The string that should be resolved to a value. + The value that the resolver should return if the string cannot be resolved to anything, or if there is an error in creating a resolver, or if resolution itself throws an exception. + + + + Creates a new value resolver instance. + + The type of value that the new resolver should resolve. + The property that is the context for the resolution to happen in. + The string that should be resolved to a value. + The value that the resolver should return if the string cannot be resolved to anything, or if there is an error in creating a resolver, or if resolution itself throws an exception. + The extra named args that this resolver has access to. Passing in a named arg that already exists will silently override the pre-existing named arg. + + + + Gets a nicely formatted string that lists all the errors in the given set of value resolvers. The returned value is null if there are no errors. + + + + + Gets a nicely formatted string that lists all the errors in the given set of value resolvers. The returned value is null if there are no errors. + + + + + Draws error boxes for all errors in the given value resolvers, or does nothing if there are no errors. This is equivalent to calling DrawError() on all resolvers passed to this method. + + + + + Draws error boxes for all errors in the given value resolvers, or does nothing if there are no errors. This is equivalent to calling DrawError() on all resolvers passed to this method. + + + + + A ValueResolver resolves a string to a value of a given type, given an InspectorProperty instance to use as context. Call to get an instance of a ValueResolver. + Value resolvers are a globally extendable system that can be hooked into and modified or changed by creating and registering a . + See Odin's tutorials for details and examples of how to use ValueResolvers. + + + + + The delegate that does the actual value resolution. You should not call this manually, but instead call . + + + + + The type of value that this resolver instance is supposed to get. Always equal to typeof(). + + + + + Gets a value from the value resolver. + + The selection index at which to get the value, in the case of multi-selection. Defaults to 0. + The value that was gotten. + + + + Gets a value from the value resolver in a weakly typed manner. + + The selection index at which to get the value, in the case of multi-selection. Defaults to 0. + The value that was gotten. + + + + This struct contains all of a ValueResolver's configurations and values it needs to function. For performance and simplicity reasons, this is a single very large struct that lives on a ValueResolver instance and is passed around by ref to anything that needs it. + + + + + The property that *provides* the context for the value resolution. This is the instance that was passed to the resolver when it was created. Note that this is different from , which is based on this value, but almost always isn't the same InspectorProperty instance. + + + + + The error message, if a valid value resolution wasn't found, or if creation of the value resolver failed because was invalid, or if value resolution was run but threw an exception. (In this last case, will be true.) + + + + + The named values that are available to the value resolver. Use this field only to get and set named values - once the ValueResolver has been created, new named values will have no effect. + + + + + This is the fallback value that the value resolver will return if there is an error or failed resolution for any reason. + + + + + Whether there is a fallback value. This boolean exists because then null is also a valid fallback value. This boolean will always be true if an overload is used that takes a fallback value parameter. + + + + + This will be true if is not null and the message was caused by an exception thrown by code invoked during an actual value resolution. + + + + + Whether exceptions thrown during value resolution should be logged to the console. + + + + + The type of value that the resolver is resolving. + + + + + The string that is resolved to get a value. + + + + + Whether the value resolver should sync ref parameters of invoked methods with named values. If this is true, then if a ref or out parameter value is changed during value resolution, the named value associated with that parameter will also be changed to the same value. + + + + + Whether this context has been resolved. + + + + + The type that is the parent of the value resolution, ie, the type that is the context. This is the same as .ValueEntry.TypeOfValue. + + + + + The property that *is* the context for the value resolution. This is not the instance that was passed to the resolver when it was created, but this value is based on that instance. This is the property that provides the actual context - for example, if is for a member of a type - or for an element in a collection contained by a member - this value will be the parent property for the type that contains that member. Only if is the tree's root property is the same as . + + + + + Gets the parent value which provides the context of the resolver. + + The selection index of the parent value to get. + + + + Sets the parent value which provides the context of the resolver. + + The selection index of the parent value to set. + The value to set. + + + + Adds the default named values of "property" and "value" to the context's named values. + This method is usually automatically invoked when a resolver is created, so there + is no need to invoke it manually. + + + + + The Odin Getting Started Window + + + + + + Shows the window. + + + + + Initialize get called by OnEnable and by OnGUI after assembly reloads + which often happens when you recompile or enter and exit play mode. + + + + + Gets a value indicating whether the window should draw a scroll view. + + + + + Draws the Odin Editor Window. + + + + + Priority for and types. + + + + + Priority of the resolver. + + + + + Initializes a new instance of the class. + + The higher the priority, the earlier it will be processed. + + + + Draws an editor window with a menu tree. + + + + public class OdinMenuEditorWindowExample : OdinMenuEditorWindow + { + [SerializeField, HideLabel] + private SomeData someData = new SomeData(); + + protected override OdinMenuTree BuildMenuTree() + { + OdinMenuTree tree = new OdinMenuTree(supportsMultiSelect: true) + { + { "Home", this, EditorIcons.House }, // draws the someDataField in this case. + { "Odin Settings", null, EditorIcons.SettingsCog }, + { "Odin Settings/Color Palettes", ColorPaletteManager.Instance, EditorIcons.EyeDropper }, + { "Odin Settings/AOT Generation", AOTGenerationConfig.Instance, EditorIcons.SmartPhone }, + { "Camera current", Camera.current }, + { "Some Class", this.someData } + }; + + tree.AddAllAssetsAtPath("More Odin Settings", SirenixAssetPaths.OdinEditorConfigsPath, typeof(ScriptableObject), true) + .AddThumbnailIcons(); + + tree.AddAssetAtPath("Odin Getting Started", SirenixAssetPaths.SirenixPluginPath + "Getting Started With Odin.asset"); + + var customMenuItem = new OdinMenuItem(tree, "Menu Style", tree.DefaultMenuStyle); + tree.MenuItems.Insert(2, customMenuItem); + + tree.Add("Menu/Items/Are/Created/As/Needed", new GUIContent()); + tree.Add("Menu/Items/Are/Created", new GUIContent("And can be overridden")); + + // As you can see, Odin provides a few ways to quickly add editors / objects to your menu tree. + // The API also gives you full control over the selection, etc.. + // Make sure to check out the API Documentation for OdinMenuEditorWindow, OdinMenuTree and OdinMenuItem for more information on what you can do! + + return tree; + } + } + + + + + + + + + + + + + Called when the window is destroyed. Remember to call base.OnDestroy(); + + + + + Builds the menu tree. + + + + + Gets or sets the width of the menu. + + + + + Gets a value indicating whether the menu is resizable. + + + + + Gets the menu tree. + + + + + Gets or sets a value indicating whether to draw the menu search bar. + + + + + Gets or sets the custom search function. + + + + + Forces the menu tree rebuild. + + + + + Tries to select the menu item with the specified object. + + + + + Draws the menu tree selection. + + + + + Draws the Odin Editor Window. + + + + + The method that draws the menu. + + + + + A menu item that represents one or more objects. + + + + + + + + + + The default toggled state + + + + + Initializes a new instance of the class. + + The Odin menu tree instance the menu item belongs to. + The name of the menu item. + The instance the value item represents. + + + + Occurs right after the menu item is done drawing, and right before mouse input is handles so you can take control of that. + + + + + Occurs when the user has right-clicked the menu item. + + + + + Gets the child menu items. + + + The child menu items. + + + + + Gets the index location of the menu item. + + + + + Gets or sets a value indicating whether the menu item is visible. + Not that setting this to false will not hide its children as well. For that see use Toggled. + + + + + Gets or sets the icon that is used when the menu item is not selected. + + + + + Gets or sets the icon that is used when the menu item is selected. + + + + + Gets a value indicating whether this instance is selected. + + + + + Gets the menu tree instance. + + + + + Gets or sets the raw menu item name. + + + + + Gets or sets the search string used when searching for menu items. + + + + + Gets the next visual menu item. + + + + + Gets the parent menu item. + + + + + Gets the previous visual menu item. + + + + + Gets the drawn rect. + + + + + Gets the drawn label rect. + + + + + Gets or sets the style. If null is specified, then the menu trees DefaultMenuStyle is used. + + + + + Deselects this instance. + + + + + Selects the specified add to selection. + + + + + Gets the child menu items recursive in a DFS. + + Whether to include it self in the collection. + + + + Gets the child menu items recursive in a DFS. + + Whether to include it self in the collection. + Whether to include the root. + + + + Gets the full menu item path. + + + + + Gets the first object of the + + + + + Gets the object instances the menu item represents + + + + + Sets the object instance + + + + + Sets the object instances + + + + + Gets or sets the value the menu item represents. + + + + + Gets a nice menu item name. If the raw name value is null or a dollar sign, then the name is retrieved from the object itself via ToString(). + + + + + Gets or sets a value indicating whether this is toggled / expanded. This value tries it best to be persistent. + + + + + Gets or sets the icon getter. + + + + + Draws this menu item followed by all of its child menu items + + The indent level. + + + + Draws the menu item with the specified indent level. + + + + + Override this to add custom GUI to the menu items. + This is called right after the menu item is done drawing, and right before mouse input is handles so you can take control of that. + + + + + Handles the mouse events. + + The rect. + The triangle rect. + + + + The style settings used by . + + A nice trick to style your menu is to add the tree.DefaultMenuStyle to the tree itself, + and style it live. Once you are happy, you can hit the Copy CSharp Snippet button, + remove the style from the menu tree, and paste the style directly into your code. + + + + + + + + + + + Gets or sets the default selected style. + + + + + Gets or sets the selected label style. + + + + + The height of the menu item. + + + + + The global offset of the menu item content + + + + + The vertical offset of the menu item label + + + + + The number of pixels to indent per level indent level. + + + + + The size of the icon. + + + + + The size of the icon. + + + + + The transparency of icons when the menu item is not selected. + + + + + The padding between the icon and other content. + + + + + Whether to draw the a foldout triangle for menu items with children. + + + + + The size of the foldout triangle icon. + + + + + The padding between the foldout triangle icon and other content. + + + + + Whether or not to align the triangle left or right of the content. + If right, then the icon is pushed all the way to the right at a fixed position ignoring the indent level. + + + + + Whether to draw borders between menu items. + + + + + The horizontal border padding. + + + + + The border alpha. + + + + + The background color for when a menu item is selected. + + + + + The background color for when a menu item is selected. + + + + + The background color for when a menu item is selected. + + + + + The background color for when a menu item is selected. + + + + + Sets the height of the menu item. + + + + + Sets the global offset of the menu item content + + + + + Sets the number of pixels to indent per level indent level. + + + + + Sets the size of the icon. + + + + + Sets the size of the icon. + + + + + Sets the transparency of icons when the menu item is not selected. + + + + + Sets the padding between the icon and other content. + + + + + Sets whether to draw the a foldout triangle for menu items with children. + + + + + Sets the size of the foldout triangle icon. + + + + + Sets the padding between the foldout triangle icon and other content. + + + + + Sets whether or not to align the triangle left or right of the content. + If right, then the icon is pushed all the way to the right at a fixed position ignoring the indent level. + + + + + Sets whether to draw borders between menu items. + + + + + Sets the border alpha. + + + + + Sets the border alpha. + + + + + Sets the background color for when a menu item is selected. + + + + + Sets the background color for when a menu item is selected. + + + + + Creates and returns an instance of a menu style that makes it look like Unity's project window. + + + + + OdinMenuTree provides a tree of s, and helps with selection, inserting menu items into the tree, and can handle keyboard navigation for you. + + + + OdinMenuTree tree = new OdinMenuTree(supportsMultiSelect: true) + { + { "Home", this, EditorIcons.House }, + { "Odin Settings", null, EditorIcons.SettingsCog }, + { "Odin Settings/Color Palettes", ColorPaletteManager.Instance, EditorIcons.EyeDropper }, + { "Odin Settings/AOT Generation", AOTGenerationConfig.Instance, EditorIcons.SmartPhone }, + { "Camera current", Camera.current }, + { "Some Class", this.someData } + }; + + tree.AddAllAssetsAtPath("Some Menu Item", "Some Asset Path", typeof(ScriptableObject), true) + .AddThumbnailIcons(); + + tree.AddAssetAtPath("Some Second Menu Item", "SomeAssetPath/SomeAssetFile.asset"); + + var customMenuItem = new OdinMenuItem(tree, "Menu Style", tree.DefaultMenuStyle); + tree.MenuItems.Insert(2, customMenuItem); + + tree.Add("Menu/Items/Are/Created/As/Needed", new GUIContent()); + tree.Add("Menu/Items/Are/Created", new GUIContent("And can be overridden")); + + OdinMenuTrees are typically used with s but is made to work perfectly fine on its own for other use cases. + OdinMenuItems can be inherited and and customized to fit your needs. + + // Draw stuff + someTree.DrawMenuTree(); + // Draw stuff + someTree.HandleKeybaordMenuNavigation(); + + + + + + + + + + + Gets the currently active menu tree. + + + + + Gets the selection. + + + + + Gets the root menu items. + + + + + Gets the root menu item. + + + + + If true, all indent levels will be ignored, and all menu items with IsVisible == true will be drawn. + + + + + Adds a menu item with the specified object instance at the the specified path. + + + + + Adds a menu item with the specified object instance and icon at the the specified path. + + + + + Adds a menu item with the specified object instance and icon at the the specified path. + + + + + Adds a menu item with the specified object instance and icon at the the specified path. + + + + + Adds a collection of objects to the menu tree and returns all menu items created in random order. + + + + + Adds a collection of objects to the menu tree and returns all menu items created in random order. + + + + + Gets or sets the default menu item style from Config.DefaultStyle. + + + + + Gets or sets the default drawing configuration. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + if set to true [supports multi select]. + + + + Initializes a new instance of the class. + + if set to true [supports multi select]. + The default menu item style. + + + + Initializes a new instance of the class. + + + + + Scrolls to the specified menu item. + + + + + Enumerates the tree with a DFS. + + if set to true then the invisible root menu item is included. + + + + Enumerates the tree with a DFS. + + The predicate. + if set to true then the invisible root menu item is included. + + + + Enumerates the tree with a DFS. + + + + + Draws the menu tree recursively. + + + + + Marks the dirty. This will cause a tree.UpdateTree() in the beginning of the next Layout frame. + + + + + Draws the search toolbar. + + + + + Updates the menu tree. This method is usually called automatically when needed. + + + + + Handles the keyboard menu navigation. Call this at the end of your GUI scope, to prevent the menu tree from stealing input events from other text fields. + + Returns true, if anything was changed via the keyboard. + + + + Handles the keyboard menu navigation. Call this at the end of your GUI scope, to prevent the menu tree from stealing input events from other text fields. + + Returns true, if anything was changed via the keyboard. + + + + This class fixes a bug where Unity's Undo.RecordObject does not mark ScriptableObjects dirty when + a change is recorded for them. It does this by subscribing to the Undo.postprocessModifications + event, and marking all modified ScriptableObjects dirty manually. + + + + + The config used by OdinMenuTree to specify which features of the Menu Tree should be used when drawing. + + + + + Gets or sets the default menu item style. + + + + + The automatic scroll on selection changed. True by default. + + + + + Whether to draw the tree in a scrollable view. True by default. + + + + + Whether to handle keyboard navigation after it's done drawing. True by default. + + + + + Whether to draw a searchbar above the menu tree. True by default. + + + + + Whether to the menu items expanded state should be cached. True by default. + + + + + Whether to automatically set focus on the search bar when the tree is drawn for the first time. True by default. + + + + + The scroll-view position. + + + + + The search term. + + + + + The height of the search toolbar. + + + + + Gets or sets the search function. Null by default. + + + + + By default, the MenuTree.Selection is confirmed when menu items are double clicked, + Set this to false if you don't want that behaviour. + + + + + By default, the MenuTree.Selection is confirmed when menu items are double clicked, + Set this to false if you don't want that behaviour. + + + + + Class with utility methods for s and s. + + + + OdinMenuTree tree = new OdinMenuTree(); + tree.AddAllAssetsAtPath("Some Menu Item", "Some Asset Path", typeof(ScriptableObject), true) + .AddThumbnailIcons(); + tree.AddAssetAtPath("Some Second Menu Item", "SomeAssetPath/SomeAssetFile.asset"); + // etc... + + + + + + + + + + + Adds the menu item at the specified menu item path and populates the result list with all menu items created in order to add the menuItem at the specified path. + + The tree instance. + The result list. + The menu item path. + The menu item. + + + + Adds the menu item at specified menu item path, and returns all menu items created in order to add the menuItem at the specified path. + + The tree. + The menu item path. + The menu item. + Returns all menu items created in order to add the menu item at the specified menu item path. + + + + Gets the menu item at the specified path, returns null non was found. + + + + + Adds all asset instances from the specified path and type into a single at the specified menu item path, and returns all menu items created in order to add the menuItem at the specified path.. + + The tree. + The menu item path. + The asset folder path. + The type of objects. + Whether to search for assets in subdirectories as well. + Returns all menu items created in order to add the menu item at the specified menu item path. + + + + Adds all assets at the specified path. Each asset found gets its own menu item inside the specified menu item path. + + The tree. + The menu item path. + The asset folder path. + The type. + Whether to search for assets in subdirectories as well. + If true, sub-directories in the assetFolderPath will no longer get its own sub-menu item at the specified menu item path. + Returns all menu items created in order to add the menu item at the specified menu item path. + + + + Adds all assets at the specified path. Each asset found gets its own menu item inside the specified menu item path. + + The tree. + The menu item path. + The asset folder path. + Whether to search for assets in subdirectories as well. + If true, sub-directories in the assetFolderPath will no longer get its own sub-menu item at the specified menu item path. + Returns all menu items created in order to add the menu item at the specified menu item path. + + + + Adds the asset at the specified menu item path and returns all menu items created in order to end up at the specified menu path. + + The tree. + The menu item path. + The asset path. + Returns all menu items created in order to add the menu item at the specified menu item path. + + + + Adds the asset at the specified menu item path and returns all menu items created in order to end up at the specified menu path. + + The tree. + The menu item path. + The asset path. + The type. + Returns all menu items created in order to add the menu item at the specified menu item path. + + + + Sorts the entire tree of menu items recursively by name with respects to numbers. + + + + + Sorts the collection of menu items recursively by name with respects to numbers. This is a stable sort, meaning that equivalently ordered items will remain in the same order as they start. + + + + + Sorts the collection of menu items recursively using a given custom comparison. This is a stable sort, meaning that equivalently ordered items will remain in the same order as they start. + + + + + Adds the specified object at the specified menu item path and returns all menu items created in order to end up at the specified menu path. + + The tree. + The menu path. + The object instance. + Set this to true if you want Odin serialzied members such as dictionaries and generics to be shown as well. + Returns all menu items created in order to add the menu item at the specified menu item path. + + + + Assigns the specified icon to all menu items in the collection with the specified ObjectInstanceType. + + + + + Assigns the specified icon to all menu items in the collection with the specified ObjectInstanceType. + + + + + Assigns the specified icon to all menu items in the collection. + + + + + Assigns the specified icon to all menu items in the collection. + + + + + Assigns the specified icon to the last menu item in the collection. + + + + + Assigns the specified icon to the last menu item in the collection. + + + + + Assigns the specified icon to the last menu item in the collection. + + + + + Assigns the specified icon to the last menu item in the collection. + + + + + Assigns the specified icon to all menu items in the collection. + + + + + Assigns the specified icon to all menu items in the collection. + + + + + Assigns the specified icon to all menu items in the collection. + + + + + Assigns the asset mini thumbnail as an icon to all menu items in the collection. If the menu items object is null then a Unity folder icon is assigned. + + + + + Assigns the asset mini thumbnail as an icon to all menu items in the collection. If the menu items object is null then a Unity folder icon is assigned. + + + + + Constants which describe the type of change that was made to the OdinMenuTrees's Selection + + + + + + A menu item was removed. + + + + + A menu item was selected. + + + + + The selection was cleared. + + + + + Handles the selection of a Odin Menu Tree with support for multi selection. + + + + + + + + + + Initializes a new instance of the class. + + if set to true [supports multi select]. + + + + Occurs whenever the selection has changed. + + + + + Occurs whenever the selection has changed. + + + + + Usually occurs whenever the user hits return, or double click a menu item. + + + + + Gets the count. + + + + + Gets the first selected value, returns null if non is selected. + + + + + Gets all selected values. + + + + + Gets or sets a value indicating whether multi selection is supported. + + + + + Gets the at the specified index. + + + + + Adds a menu item to the selection. If the menu item is already selected, then the item is pushed to the bottom of the selection list. + If multi selection is off, then the previous selected menu item is removed first. + Adding a item to the selection triggers . + + The item. + + + + Clears the selection and triggers . + + + + + Determines whether an OdinMenuItem is selected. + + + + + Copies all the elements of the current array to the specified array starting at the specified destination array index. + + + + + Gets the enumerator. + + + + + Searches for the specified menu item and returns the index location. + + + + + Removes the specified menu item and triggers . + + + + + Removes the menu item at the specified index and triggers . + + + + + Triggers OnSelectionConfirmed. + + + + + Used in to associate name to a value in the GenericSelector. + + + + + + The value. + + + + + The name. + + + + + Initializes a new instance of the struct. + + + + + If the + + + + + Opens a window which displays a list of all icons available from . + + + + + Opens a window which displays a list of all icons available from . + + + + + Builds the selection tree. + + + + + A feature-rich enum selector with support for flag enums. + + + + KeyCode someEnumValue; + + [OnInspectorGUI] + void OnInspectorGUI() + { + // Use the selector manually. See the documentation for OdinSelector for more information. + if (GUILayout.Button("Open Enum Selector")) + { + EnumSelector<KeyCode> selector = new EnumSelector<KeyCode>(); + selector.SetSelection(this.someEnumValue); + selector.SelectionConfirmed += selection => this.someEnumValue = selection.FirstOrDefault(); + selector.ShowInPopup(); // Returns the Odin Editor Window instance, in case you want to mess around with that as well. + } + + // Draw an enum dropdown field which uses the EnumSelector popup: + this.someEnumValue = EnumSelector<KeyCode>.DrawEnumField(new GUIContent("My Label"), this.someEnumValue); + } + + // All Odin Selectors can be rendered anywhere with Odin. This includes the EnumSelector. + EnumSelector<KeyCode> inlineSelector; + + [ShowInInspector] + EnumSelector<KeyCode> InlineSelector + { + get { return this.inlineSelector ?? (this.inlineSelector = new EnumSelector<KeyCode>()); } + set { } + } + + + + + + + + + + + By default, the enum type will be drawn as the title for the selector. No title will be drawn if the string is null or empty. + + + + + Gets a value indicating whether this instance is flag enum. + + + + + Initializes a new instance of the class. + + + + + Populates the tree with all enum values. + + + + + When ShowInPopup is called, without a specified window width, this method gets called. + Here you can calculate and give a good default width for the popup. + The default implementation returns 0, which will let the popup window determine the width itself. This is usually a fixed value. + + + + + Gets the currently selected enum value. + + + + + Selects an enum. + + + + + Draws an enum selector field using the enum selector. + + + + + Draws an enum selector field using the enum selector. + + + + + Draws an enum selector field using the enum selector. + + + + + Draws an enum selector field using the enum selector. + + + + + In simple one-off use cases, making a custom OdinSelector might not be needed, as the GenericSelecor + can be populated with anything and customized a great deal. + + + + SomeType someValue; + + [OnInspectorGUI] + void OnInspectorGUI() + { + if (GUILayout.Button("Open Generic Selector Popup")) + { + List<SomeType> source = ...; + GenericSelector<SomeType> selector = new GenericSelector<SomeType>("Title", false, x => x.Path, source); + selector.SetSelection(this.someValue); + selector.SelectionTree.Config.DrawSearchToolbar = false; + selector.SelectionTree.DefaultMenuStyle.Height = 22; + selector.SelectionConfirmed += selection => this.someValue = selection.FirstOrDefault() + var window = selector.ShowInPopup(); + window.OnEndGUI += () => { EditorGUILayout.HelpBox("A quick way of injecting custom GUI to the editor window popup instance.", MessageType.Info); }; + window.OnClose += selector.SelectionTree.Selection.ConfirmSelection; // Confirm selection when window clses. + } + } + + + + + + + + + + + Gets or sets a value indicating whether [flattened tree]. + + + + + Gets or sets a value indicating whether [checkbox toggle]. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + + + + Gets the title. No title will be drawn if the string is null or empty. + + + + + Draws the selection tree. This gets drawn using the OnInspectorGUI attribute. + + + + + Builds the selection tree. + + + + + OdinSelectors is an abstract base class that combines OdinMenuTrees and OdinEditorWindows to help making feature-rich selectors and popup selectors. + + + + public class MySelector : OdinSelector<SomeType> + { + private readonly List<SomeType> source; + private readonly bool supportsMultiSelect; + + public MySelector(List<SomeType> source, bool supportsMultiSelect) + { + this.source = source; + this.supportsMultiSelect = supportsMultiSelect; + } + + protected override void BuildSelectionTree(OdinMenuTree tree) + { + tree.Config.DrawSearchToolbar = true; + tree.Selection.SupportsMultiSelect = this.supportsMultiSelect; + + tree.Add("Defaults/None", null); + tree.Add("Defaults/A", new SomeType()); + tree.Add("Defaults/B", new SomeType()); + + tree.AddRange(this.source, x => x.Path, x => x.SomeTexture); + } + + [OnInspectorGUI] + private void DrawInfoAboutSelectedItem() + { + SomeType selected = this.GetCurrentSelection().FirstOrDefault(); + + if (selected != null) + { + GUILayout.Label("Name: " + selected.Name); + GUILayout.Label("Data: " + selected.Data); + } + } + } + + Usage: + + void OnGUI() + { + if (GUILayout.Button("Open My Selector")) + { + List<SomeType> source = this.GetListOfThingsToSelectFrom(); + MySelector selector = new MySelector(source, false); + + selector.SetSelection(this.someValue); + + selector.SelectionCancelled += () => { }; // Occurs when the popup window is closed, and no slection was confirmed. + selector.SelectionChanged += col => { }; + selector.SelectionConfirmed += col => this.someValue = col.FirstOrDefault(); + + selector.ShowInPopup(); // Returns the Odin Editor Window instance, in case you want to mess around with that as well. + } + } + + // All Odin Selectors can be rendered anywhere with Odin. + [ShowInInspector] + MySelector inlineSelector; + + + + + + + + + + + If true, a confirm selection button will be drawn in the title-bar. + + + + + Enables the single click to select. + + + + + Occurs when the window is closed, and no slection was confirmed. + + + + + Occurs when the menuTrees selection is changed and IsValidSelection returns true. + + + + + Occurs when the menuTrees selection is confirmed and IsValidSelection returns true. + + + + + Gets the selection menu tree. + + + + + Gets the title. No title will be drawn if the string is null or empty. + + + + + Gets the current selection from the menu tree whether it's valid or not. + + + + + Determines whether the specified collection is a valid collection. + If false, the SlectionChanged and SelectionConfirm events will not be called. + By default, this returns true if the collection contains one or more items. + + + + + Sets the selection. + + + + + Sets the selection. + + + + + Opens up the selector instance in a popup at the specified rect position. + The width of the popup is determined by DefaultWindowWidth, and the height is automatically calculated. + + + + + Opens up the selector instance in a popup at the specified rect position. + + + + + Opens up the selector instance in a popup at the specified rect position. + + + + + The mouse position is used as the position for the window. + Opens up the selector instance in a popup at the specified position. + + + + + Opens up the selector instance in a popup at the specified position. + + + + + Opens up the selector instance in a popup at the specified rect position. + + + + + Opens up the selector instance in a popup at the specified position. + The width of the popup is determined by DefaultWindowWidth, and the height is automatically calculated. + + + + + Opens up the selector instance in a popup with the specified width and height. + The mouse position is used as the position for the window. + + + + + Builds the selection tree. + + + + + When ShowInPopup is called, without a specifed window width, this methods gets called. + Here you can calculate and give a good default width for the popup. + The default implementation returns 0, which will let the popup window determain the width itself. This is usually a fixed value. + + + + + Triggers the selection changed event, but only if the current selection is valid. + + + + + Draw the selecotr manually. + + + + + Draws the selection tree. This gets drawn using the OnInspectorGUI attribute. + + + + + Draws dropwdown field, that creates and binds the selector to the dropdown field. + + + + + Draws dropwdown field, that creates and binds the selector to the dropdown field. + + + + + Draws dropwdown field, that creates and binds the selector to the dropdown field. + + + + + Draws dropwdown field, that creates and binds the selector to the dropdown field. + + + + + A feature-rich type selector. + + + + Type[] selectedTypes; + + void OnGUI() + { + // Use the selector manually. See the documentation for OdinSelector for more information. + if (GUILayout.Button("Open My Selector")) + { + TypeSelector selector = new TypeSelector(customListOfTypes); + TypeSelector selector = new TypeSelector(AssemblyTypeFlags.CustomTypes, supportsMultiSelect: true); + selector.SetSelection(this.selectedTypes); + selector.SelectionConfirmed += selection => this.selectedTypes = selection.ToArray(); + selector.ShowInPopup(); // Returns the Odin Editor Window instance, in case you want to mess around with that as well. + } + } + + + + + private static Type currentSelectedType; + private static IEnumerable<Type> currentSource; + private static Func<Rect, OdinSelector<Type>> createTypeSelector = (rect) => + { + TypeSelector selector = new TypeSelector(currentSource, false); + selector.SetSelection(currentSelectedType); + selector.ShowInPopup(rect); + return selector; + }; + + public static Type DrawTypeSelectorDropdown(GUIContent label, Type selectedType, IEnumerable<Type> source) + { + currentSource = source; + currentSelectedType = selectedType; + + var dropdownText = selectedType == null ? "None" : selectedType.GetNiceName(); + var selected = TypeSelector.DrawSelectorDropdown(label, dropdownText, createTypeSelector); + if (selected != null && selected.Any()) + { + selectedType = selected.FirstOrDefault(); + } + return selectedType; + } + + + + + + Builds the selection tree. + + + + + 450 + + + + + Sets the selected types. + + + + + Editor Only Mode Utility. + + + + + Gaither all necessary information about the editor only state. + + + + + Disables Editor Only Mode. + + + + + Enables editor only mode. + + + + + Checks to see whether Editor Only Mode is enabled. + + + + + Checks to see whether Odin Inspector is installed in Source Code mode. + + + + + Contains general configuration for all Odin drawers. + + You can modify the configuration in the Odin Preferences window found in 'Tools -> Odin Inspector -> Preferences -> Drawers -> General', + or by locating the configuration file stored as a serialized object in the Sirenix folder under 'Odin Inspector/Config/Editor/GeneralDrawerConfig'. + + + + + + Specify whether or not the script selector above components should be drawn. + + + + + Specify whether or not the warning for properties that do not support prefab modifications should be shown in the inspector. + + + + + Specify whether or not the warning for properties that do not support prefab modifications should be shown in the inspector. + + + + + Specifies the maximum depth to which a property can draw itself recursively before the system refuses to draw it any deeper. + + + + + If set to true, most foldouts throughout the inspector will be expanded by default. + + + + + If set to true, buttons will show the result values from invoking them in the inspector by default. + + + + + If set to true, type matching for things such as drawers will be precomputed in a separate thread based on a cache from the previously loaded AppDomain that is stored on disk in the Project's Temp folder, resulting in some overall speedups in some cases when doing first-time type matching. Requires a recompile/project reload before it takes any effect. + + + + + Specify the animation speed for most foldouts throughout the inspector. + + + + + Specify the shaking duration for most shaking animations throughout the inspector. + + + + + Specify the animation speed for + + + + + When true the component labels, for vector fields, will be hidden when the field is too narrow. + + + + + Specify how the Quaternion struct should be shown in the inspector. + + + + + Gets or sets a value indicating whether [use improved enum drop down]. + + + + + Gets or sets a value indicating whether [use improved enum drop down]. + + + + + Specify whether or not a list should hide the foldout triangle when the list is empty. + + + + + Specifies whether a list should hide the foldout triangle when the list is empty. + + + + + Specify whether or not lists should hide the paging buttons when the list is collapsed. + + + + + Specify whether or not lists should hide the paging buttons when there is only one page. + + + + + Specify the number of elements drawn per page. + + + + + Specify whether or not lists should be expanded or collapsed by default. + + + + + Specify whether or not to include a button which expands the list, showing all pages at once. + + + + + Specify whether or not lists should show item count. + + + + + Specify whether or not lists should show item count. + + + + + Specify the color of even list elements when in the dark skin. + + + + + Specify the color of odd list elements when in the dark skin. + + + + + Specify the color of even list elements when in the light skin. + + + + + Specify the color of odd list elements when in the light skin. + + + + + Gets or sets the default size of the preview object field. + + + + + Gets or sets the default alignment of the preview object field. + + + + + Gets or sets which types should be drawn by default by the preview object field. + + + + + Resets all settings to default. + + + + + + Tell Odin which types should be drawn or should not be drawn by Odin. + + + You can modify which types should be drawn by Odin in the Preferences window found in 'Tools -> Odin Inspector -> Preferences -> Editor Types', + or by locating the configuration file stored as a serialized object in the Sirenix folder under 'Odin Inspector/Config/Editor/InspectorConfig'. + + + + + + Whether Odin is enabled in the inspector or not. + + + + + InspectorDefaultEditors is a bitmask used to tell which types should have an Odin Editor generated. + + + + + The config which contains configuration data for which types Odin should draw in the inspector. + + + + + Updates Unity with the current Odin editor configuration. + + + + + InspectorDefaultEditors is a bitmask used to tell which types should have an Odin Editor generated. + + + + + + Excludes all types. + + + + + UserTypes includes all custom user scripts that are not located in an editor or plugin folder. + + + + + PluginTypes includes all types located in the plugins folder and are not located in an editor folder. + + + + + UnityTypes includes all types depended on UnityEngine and from UnityEngine, except editor, plugin and user types. + + + + + OtherTypes include all other types that are not depended on UnityEngine or UnityEditor. + + + + + Contains configuration data for which types Odin should draw in the inspector. + + + Note that this class supports assigning arbitrary editor types to inspect any Unity object type. The Editor Types GUI in preferences simply does not, as of now, support assigning editors of any other type than . However, the API is open to further customization. + When an editor is generated for a type, a new editor type is added to the GeneratedOdinEditors assembly, which is derived from the assigned editor type - in most cases, . + You can check if an editor is compatible using . + + . + . + + + + The type binder that the uses to bind types to names, and names to types. + This is usually an instance of . + + + + + Resets the drawing configuration to the default values. + + + + + Gets a list of all drawn types that have entries in the drawing config. + + + + + Forces the config's internal drawer type to value type lookup cache to rebuild itself. + + + + + Clears the editor type entry for the given drawer, so it will be set to Unity's default. + + The drawn type to clear the editor for. + drawnType is null + + + + Assigns a given editor to draw a given type. + + The drawn type to assign an editor type for. + The editor type to assign. When generating editors, a type derived from this editor will be created and set to draw the given drawn type. + drawnType + The type " + editorType.GetNiceName() + " is not a valid base editor for type " + drawnType.GetNiceName() + ". Check criteria using . + + + + Determines whether an editor value has been assigned for a given drawn type. + + The drawn type to check. + drawnType is null + + + + Gets which editor type would draw the given type. If the type has not been assigned a custom editor type in the config, the default editor type is returned using . + + The drawn type to get an editor type for. + The editor that would draw the given type. + drawnType is null + + + + Gets the default editor that this type would have, if no custom editor was set for this type in particular. This is calculated using the value of . + + The drawn type to get the default editor for. + The editor that would draw this type by default, or null, if there is no default Odin-defined editor for the drawn type. + drawnType is null + + + + Checks whether the given editor can be assigned to draw any type using the class. + + Type of the editor to check. + True if the editor is valid, otherwise false + + + + Checks whether the given editor can be assigned to draw a given type using the class. + This method checks the attribute on the type for whether the given type is compatible. + + Type of the editor to check. + Type of the drawn value to check. If this parameter is null, the drawn type is not checked for compatibility with the editor type; only the editor type itself is checked for validity. + True if the editor is valid, otherwise false + editorType + + + + Gets the type that an editor draws, by extracting it from the editor's attribute, if it is declared. + This method returns null for abstract editor types, as those can never draw anything. + + Type of the editor. + Whether the editor in question is also an editor for types derived from the given type. + + editorType + + + + A type that indicates that a drawer is missing. + + + + + Draws an instance, and contains methods getting all types that should be drawn by Odin. + Note that this class keeps a lot of static state, and is only intended to draw the instance of that exists in the singleton asset. If used to draw other instances, odd behaviour may occur. + + . + . + + + + Determines whether Odin is capable of creating a custom editor for a given type. + + + + + Gets an array of all assigned editor types, and the types they have to draw. + + + + + Draws the property. + + + + + Contains information about an editor type which is assigned to draw a certain type in the inspector. + This class uses the instance to bind types to names, and names to types. + + . + . + . + + + + A default, empty value. + + + + + The name of the type to be drawn. + + + + + The name of the editor type. + + + + + Initializes a new instance of the struct. + + The drawn type. + drawnType is null + + + + Initializes a new instance of the struct. + + The drawn type. + The editor type. + drawnType is null + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Returns a hash code for this instance. + + + A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + + + + + Determines whether the specified , is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Implements the operator ==. + + The x. + The y. + + The result of the operator. + + + + + Implements the operator !=. + + The x. + The y. + + The result of the operator. + + + + + Represents a weakly typed collection of values for a - one value per selected inspector target. + + + + + Whether the values have been changed since was last called. + + + + + Marks the value collection as being clean again. This is typically called at the end of the current GUI frame, during . + + + + + Marks the value collection as being dirty, regardless of any value changes. + + + + + Reverts the value collection to its origin values (found in ) from the last call, and marks the value collection as being clean again. + + + + + Force sets the value, ignoring whether it is editable or not. + Note that this will fail on list element value entries where is true on the parent value entry. + + The selection index of the value. + The value to be set. + + + + The original values of the value collection, such as they were immediately after the last call. + + + + + Represents a strongly typed collection of values for a - one value per selected inspector target. + + + + + Gets the value at the given selection index. + + + + + The number of values in the collection. + + + + + The original values of the value collection, such as they were immediately after the last call. + + + + + Force sets the value, ignoring whether it is editable or not. + Note that this will fail on list element value entries where is true on the parent value entry. + + The selection index of the value. + The value to be set. + + + + Represents an alias for a strongly typed collection of values for a - one value per selected inspector target. + This class ensures that polymorphism works in the inspector, and can be strongly typed in applicable cases. + + The type of the aliased collection. + The polymorphic type of this collection, which is assignable to . + + + + + + Initializes a new instance of the class. + + The property. + The aliased collection. + Not yet documented. + Not yet documented. + aliasedCollection + + + + Whether the values have been changed since was last called. + + + + + The number of values in the collection. + + + + + Gets a value indicating whether this instance is synchronized. + + + true if this instance is synchronized; otherwise, false. + + + + + Gets the synchronization root object. + + + The synchronization root object. + + + + + The original values of the (loosely typed) value collection, such as they were immediately after the last call. + + + + + The original values of the value collection, such as they were immediately after the last call. + + + + + Gets or sets the at the specified index. + + + The . + + The index. + + + + + Gets an enumerator for the collection. + + + + + + Marks the value collection as being clean again. This is typically called at the end of the current GUI frame, during . + + + + + Reverts the value collection to its origin values (found in ) from the last call, and marks the value collection as being clean again. + + + + + Determines whether the collection contains the specified value. + + The value. + + true if the collection contains the specified value; otherwise, false. + + + + + Gets the index of the given value, or -1 if the value was not found. + + The value to get the index of. + + The index of the given value, or -1 if the value was not found. + + + + + Copies the collection to an array. + + The array to copy to. + The index to copy from. + + + + Gets the weakly typed value at the given index. + + The index of the value to get. + + The weakly typed value at the given index + + + + + Sets the weakly typed value at the given index. + + The index to set the value of. + The value to set. + + + + Force sets the value, ignoring whether it is editable or not. + Note that this will fail on list element value entries where is true on the parent value entry. + + The selection index of the value. + The value to be set. + + + + Force sets the value, ignoring whether it is editable or not. + Note that this will fail on list element value entries where is true on the parent value entry. + + The selection index of the value. + The value to be set. + + + + Marks the value collection as being dirty, regardless of any value changes. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Represents the values of an , and contains utilities for querying the values' type and getting and setting them. + + + + + The number of parallel values this entry represents. This will always be exactly equal to the count of . + + + + + Whether this value entry is editable or not. + + + + + If this value entry has the override type , this is the path of the property it references. + + + + + The actual serialization backend for this value entry, possibly inherited from the serialization backend of the root property this entry is a child of. + Note that this is *not* always equal to . + + + + + The property whose values this value entry represents. + + + + + Provides access to the weakly typed values of this value entry. + + + + + Whether this value entry has been changed from its prefab counterpart. + + + + + Whether this value entry has had its list length changed from its prefab counterpart. + + + + + Whether this value entry has had its dictionary values changes from its prefab counterpart. + + + + + A weakly typed smart value that represents the first element of the value entry's value collection, but has "smart logic" for setting the value that detects relevant changes and applies them in parallel. + This lets you often just use the smart value instead of having to deal with the tedium of multiple parallel values. + + + + + The type from which this value entry comes. If this value entry represents a member value, this is the declaring type of the member. If the value entry represents a collection element, this is the type of the collection. + + + + + The most precise known contained type of the value entry. If polymorphism is in effect, this will be some type derived from . + + + + + The base type of the value entry. If this is value entry represents a member value, this is the type of the member. If the value entry represents a collection element, this is the element type of the collection. + + + + + The special state of the value entry. + + + + + Whether this value entry is an alias, or not. Value entry aliases are used to provide strongly typed value entries in the case of polymorphism. + + + + + The context container of this property. + + + + + Whether this type is marked as an atomic type using a . + + + + + An event that is invoked during , when any values have changed. + + + + + An event that is invoked during , when any child values have changed. + + + + + Updates the values contained in this value entry to the actual values in the target objects, and updates its state (override, type of value, etc.) accordingly. + + + + + Applies the changes made to this value entry to the target objects, and registers prefab modifications as necessary. + + True if any changes were made, otherwise, false. + + + + Checks whether the values in this value entry are equal to the values in another value entry. + Note, both value entries must have the same value type, and must represent values that are .NET value types. + + + + + Determines whether the value at the given selection index is different from the given prefab value, as is relevant for prefab modification checks. + If the value is a reference type, null and type difference is checked. If value is a value type, a comparer from is used. + This method is best ignored unless you know what you are doing. + + The value to check differences against. + The selection index to compare against. + + + + Represents the strongly typed values of an , and contains utilities for querying the values' type and getting and setting them. + + + + + Provides access to the strongly typed values of this value entry. + + + + + A strongly typed smart value that represents the first element of the value entry's value collection, but has "smart logic" for setting the value that detects relevant changes and applies them in parallel. + This lets you often just use the smart value instead of having to deal with the tedium of multiple parallel values. + + + + + Determines whether the value at the given selection index is different from the given prefab value, as is relevant for prefab modification checks. + If the value is a reference type, null and type difference is checked. If value is a value type, a comparer from is used. + This method is best ignored unless you know what you are doing. + + The value to check differences against. + The selection index to compare against. + + + + A polymorphic alias for a instance, used to implement strongly typed polymorphism in Odin. + + + + + The number of parallel values this entry represents. This will always be exactly equal to the count of . + + + + + Whether this value entry is editable or not. + + + + + If this value entry has the override type , this is the path of the property it references. + + + + + The actual serialization backend for this value entry, possibly inherited from the serialization backend of the root property this entry is a child of. + Note that this is *not* always equal to . + + + + + The property whose values this value entry represents. + + + + + Provides access to the weakly typed values of this value entry. + + + + + Whether this value entry has been changed from its prefab counterpart. + + + + + Whether this value entry has had its list length changed from its prefab counterpart. + + + + + Whether this value entry has had its dictionary values changes from its prefab counterpart. + + + + + A weakly typed smart value that represents the first element of the value entry's value collection, but has "smart logic" for setting the value that detects relevant changes and applies them in parallel. + This lets you often just use the smart value instead of having to deal with the tedium of multiple parallel values. + + + + + The type from which this value entry comes. If this value entry represents a member value, this is the declaring type of the member. If the value entry represents a collection element, this is the type of the collection. + + + + + The most precise known contained type of the value entry. If polymorphism is in effect, this will be some type derived from . + + + + + The base type of the value entry. If this is value entry represents a member value, this is the type of the member. If the value entry represents a collection element, this is the element type of the collection. + + + + + The special state of the value entry. + + + + + Whether this value entry is an alias, or not. Value entry aliases are used to provide strongly typed value entries in the case of polymorphism. + + + + + The context container of this property. + + + + + Whether this type is marked as an atomic type using a . + + + + + An event that is invoked during , when any values have changed. + + + + + An event that is invoked during , when any child values have changed. + + + + + Applies the changes made to this value entry to the target objects, and registers prefab modifications as necessary. + + + True if any changes were made, otherwise, false. + + + + + Updates the values contained in this value entry to the actual values in the target objects, and updates its state (override, type of value, etc.) accordingly. + + + + + Checks whether the values in this value entry are equal to the values in another value entry. + Note, both value entries must have the same value type, and must represent values that are .NET value types. + + + + + Sets the actual value of a value entry, for a given selection index. + + + + + Determines whether the value at the given selection index is different from the given prefab value, as is relevant for prefab modification checks. + If the value is a reference type, null and type difference is checked. If value is a value type, a comparer from is used. + This method is best ignored unless you know what you are doing. + + The value to check differences against. + The selection index to compare against. + + + + A polymorphic alias for a instance, used to implement strongly typed polymorphism in Odin. + + + + + Initializes a new instance of the class. + + The value entry to alias. + valueEntry is null + + + + Provides access to the strongly typed values of this value entry. + + + + + A strongly typed smart value that represents the first element of the value entry's value collection, but has "smart logic" for setting the value that detects relevant changes and applies them in parallel. + This lets you often just use the smart value instead of having to deal with the tedium of multiple parallel values. + + + + + A weakly typed smart value that represents the first element of the value entry's value collection, but has "smart logic" for setting the value that detects relevant changes and applies them in parallel. + This lets you often just use the smart value instead of having to deal with the tedium of multiple parallel values. + + + + + The number of parallel values this entry represents. This will always be exactly equal to the count of . + + + + + Whether this value entry is editable or not. + + + + + If this value entry has the override type , this is the path of the property it references. + + + + + The actual serialization backend for this value entry, possibly inherited from the serialization backend of the root property this entry is a child of. + Note that this is *not* always equal to . + + + + + The property whose values this value entry represents. + + + + + Provides access to the weakly typed values of this value entry. + + + + + Whether this value entry has been changed from its prefab counterpart. + + + + + Whether this value entry has had its list length changed from its prefab counterpart. + + + + + Whether this value entry has had its dictionary values changes from its prefab counterpart. + + + + + The type from which this value entry comes. If this value entry represents a member value, this is the declaring type of the member. If the value entry represents a collection element, this is the type of the collection. + + + + + The most precise known contained type of the value entry. If polymorphism is in effect, this will be some type derived from . + + + + + The base type of the value entry. If this is value entry represents a member value, this is the type of the member. If the value entry represents a collection element, this is the element type of the collection. + + + + + The special state of the value entry. + + + + + Whether this type is marked as an atomic type using a . + + + + + An event that is invoked during , when any values have changed. + + + + + An event that is invoked during , when any child values have changed. + + + + + Applies the changes made to this value entry to the target objects, and registers prefab modifications as necessary. + + + True if any changes were made, otherwise, false. + + + + + Updates the values contained in this value entry to the actual values in the target objects, and updates its state (override, type of value, etc.) accordingly. + + + + + Checks whether the values in this value entry are equal to the values in another value entry. + Note, both value entries must have the same value type, and must represent values that are .NET value types. + + + + + Sets the actual value of a value entry, for a given selection index. + + + + + Determines whether the value at the given selection index is different from the given prefab value, as is relevant for prefab modification checks. + If the value is a reference type, null and type difference is checked. If value is a value type, a comparer from is used. + This method is best ignored unless you know what you are doing. + + The value to check differences against. + The selection index to compare against. + + + + Determines whether the value at the given selection index is different from the given prefab value, as is relevant for prefab modification checks. + If the value is a reference type, null and type difference is checked. If value is a value type, a comparer from is used. + This method is best ignored unless you know what you are doing. + + The value to check differences against. + The selection index to compare against. + + + + Draws short properties marked with . + + + + + + Not yet documented. + + + + + Draws int properties marked with . + + + + + + Not yet documented. + + + + + Draws long properties marked with . + + + + + + Not yet documented. + + + + + Draws float properties marked with . + + + + + + Not yet documented. + + + + + Draws double properties marked with . + + + + + + Not yet documented. + + + + + Draws decimal properties marked with . + + + + + + Not yet documented. + + + + + Draws Vector2 properties marked with . + + + + + + Not yet documented. + + + + + Draws Vector3 properties marked with . + + + + + + Not yet documented. + + + + + Draws Vector4 properties marked with . + + + + + + Not yet documented. + + + + + Draws properties marked with . + + + + + + + + + Draws the property. + + + + + Base class for creating editor windows using Odin. + + + + public class SomeWindow : OdinEditorWindow + { + [MenuItem("My Game/Some Window")] + private static void OpenWindow() + { + GetWindow<SomeWindow>().Show(); + } + + [Button(ButtonSizes.Large)] + public void SomeButton() { } + + [TableList] + public SomeType[] SomeTableData; + } + + + + + public class DrawSomeSingletonInAnEditorWindow : OdinEditorWindow + { + [MenuItem("My Game/Some Window")] + private static void OpenWindow() + { + GetWindow<DrawSomeSingletonInAnEditorWindow>().Show(); + } + + protected override object GetTarget() + { + return MySingleton.Instance; + } + } + + + + + private void InspectObjectInWindow() + { + OdinEditorWindow.InspectObject(someObject); + } + + private void InspectObjectInDropDownWithAutoHeight() + { + var btnRect = GUIHelper.GetCurrentLayoutRect(); + OdinEditorWindow.InspectObjectInDropDown(someObject, btnRect, btnRect.width); + } + + private void InspectObjectInDropDown() + { + var btnRect = GUIHelper.GetCurrentLayoutRect(); + OdinEditorWindow.InspectObjectInDropDown(someObject, btnRect, new Vector2(btnRect.width, 100)); + } + + private void InspectObjectInACenteredWindow() + { + var window = OdinEditorWindow.InspectObject(someObject); + window.position = GUIHelper.GetEditorWindowRect().AlignCenter(270, 200); + } + + private void OtherStuffYouCanDo() + { + var window = OdinEditorWindow.InspectObject(this.someObject); + + window.position = GUIHelper.GetEditorWindowRect().AlignCenter(270, 200); + window.titleContent = new GUIContent("Custom title", EditorIcons.RulerRect.Active); + window.OnClose += () => Debug.Log("Window Closed"); + window.OnBeginGUI += () => GUILayout.Label("-----------"); + window.OnEndGUI += () => GUILayout.Label("-----------"); + } + + + + + + + Occurs when the window is closed. + + + + + Occurs at the beginning the OnGUI method. + + + + + Occurs at the end the OnGUI method. + + + + + Gets the label width to be used. Values between 0 and 1 are treated as percentages, and values above as pixels. + + + + + Gets or sets the window padding. x = left, y = right, z = top, w = bottom. + + + + + Gets a value indicating whether the window should draw a scroll view. + + + + + Gets a value indicating whether the window should draw a Unity editor preview, if possible. + + + + + Gets the default preview height for Unity editors. + + + + + Gets the target which which the window is supposed to draw. By default it simply returns the editor window instance itself. By default, this method is called by (). + + + + + Gets the targets to be drawn by the editor window. By default this simply yield returns the method. + + + + + At the start of each OnGUI event when in the Layout event, the GetTargets() method is called and cached into a list which you can access from here. + + + + + + Pops up an editor window for the given object in a drop-down window which closes when it loses its focus. + This particular overload uses a few frames to calculate the height of the content before showing the window with a height that matches its content. + + Protip: You can subscribe to OnClose if you want to know when that occurs. + + + + + Measures the GUILayout content height and adjusts the window height accordingly. + Note that this feature becomes pointless if any layout group expands vertically. + + The max height of the window. + When the window height expands below the screen bounds, it will move the window + upwards when needed, enabling this will move it back down when the window height is decreased. + + + + + Pops up an editor window for the given object in a drop-down window which closes when it loses its focus. + + Protip: You can subscribe to OnClose if you want to know when that occurs. + + + + + + Pops up an editor window for the given object in a drop-down window which closes when it loses its focus. + + Protip: You can subscribe to OnClose if you want to know when that occurs. + + + + + + Pops up an editor window for the given object in a drop-down window which closes when it loses its focus. + + Protip: You can subscribe to OnClose if you want to know when that occurs. + + + + + + Pops up an editor window for the given object in a drop-down window which closes when it loses its focus. + + Protip: You can subscribe to OnClose if you want to know when that occurs. + + + + + + Pops up an editor window for the given object in a drop-down window which closes when it loses its focus. + + Protip: You can subscribe to OnClose if you want to know when that occurs. + + + + + + Pops up an editor window for the given object in a drop-down window which closes when it loses its focus. + + Protip: You can subscribe to OnClose if you want to know when that occurs. + + + + + Pops up an editor window for the given object. + + + + + Inspects the object using an existing OdinEditorWindow. + + + + + Creates an editor window instance for the specified object, without opening the window. + + + + + The Odin property tree drawn. + + + + + Draws the Odin Editor Window. + + + + + Calls DrawEditor(index) for each of the currently drawing targets. + + + + + Initialize get called by OnEnable and by OnGUI after assembly reloads + which often happens when you recompile or enter and exit play mode. + + + + + Called when the window is enabled. Remember to call base.OnEnable(); + + + + + Draws the editor for the this.CurrentDrawingTargets[index]. + + + + + Uses the method to draw a preview for the this.CurrentDrawingTargets[index]. + + + + + Called when the window is destroyed. Remember to call base.OnDestroy(); + + + + + Called before starting to draw all editors for the . + + + + + Called after all editors for the has been drawn. + + + + + See ISerializationCallbackReceiver.OnBeforeSerialize for documentation on how to use this method. + + + + + Implement this method to receive a callback after unity serialized your object. + + + + + Unity property drawer for abstract types. + + + + + Initializes the property drawer. + + + + + Draws the property. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Draws the default Odin inspector. + + + + + Draws the default Unity inspector. + + + + + Not yet documented. + + + + + Draws the property tree. + + + + + Called by Unity. + + + + + Called by Unity. + + + + + Unity property attribute drawer. + + + + + Initializes the drawer. + + + + + Draws the proprety. + + + + + Not yet documented. + + + + + Utility class for locating and sorting property drawers for the inspector. + See Odin manual section 'Drawers in Depth' for details on how the DrawerLocator determines which drawers to use. + + + + + + Base class for all group drawers. Use this class to create your own custom group drawers. OdinGroupDrawer are used to group multiple properties together using an attribute. + + + + Note that all box group attributes needs to inherit from the + + + + Remember to provide your custom drawer with an + in order for it to be located by the . + + + + + + Checkout the manual for more information. + + + + + [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property | AttributeTargets.Method, AllowMultiple = false, Inherited = true)] + public class MyBoxGroupAttribute : PropertyGroupAttribute + { + public MyBoxGroupAttribute(string group, float order = 0) : base(group, order) + { + } + } + + // Remember to wrap your custom group drawer within a #if UNITY_EDITOR condition, or locate the file inside an Editor folder. + + public class BoxGroupAttributeDrawer : OdinGroupDrawer<MyBoxGroupAttribute> + { + protected override void DrawPropertyGroupLayout(InspectorProperty property, MyBoxGroupAttribute attribute, GUIContent label) + { + GUILayout.BeginVertical("box"); + for (int i = 0; i < property.Children.Count; i++) + { + InspectorUtilities.DrawProperty(property.Children[i]); + } + GUILayout.EndVertical(); + } + } + + // Usage: + public class MyComponent : MonoBehaviour + { + [MyBoxGroup("MyGroup")] + public int A; + + [MyBoxGroup("MyGroup")] + public int B; + + [MyBoxGroup("MyGroup")] + public int C; + } + + + + + + + + + + + + + + + + + + Draws the property with GUILayout support. + + The label. This can be null, so make sure your drawer supports that. + + + + Base drawer to inherit from to draw methods. + + + + + + DrawerPriority is used in conjunction with + to specify the priority of any given drawer. It consists of 3 components: + Super, Wrapper, Value, where Super is the most significant component, + and Standard is the least significant component. + + + + + + + + Auto priority is defined by setting all of the components to zero. + If no is defined on a drawer, it will default to AutoPriority. + + + + + The standard priority. Mostly used by s. + + + + + The attribute priority. Mostly used by s. + + + + + The wrapper priority. Mostly used by drawers used to decorate properties. + + + + + The super priority. Mostly used by drawers that wants to wrap the entire property but don't draw the actual property. + These drawers typically don't draw the property itself, and calls CallNextDrawer. + + + + + The value priority. Mostly used by s and s. + + + + + The wrapper priority. Mostly used by drawers used to decorate properties. + + + + + The super priority. Mostly used by drawers that wants to wrap the entire property but don't draw the actual property. + These drawers typically don't draw the property itself, and calls CallNextDrawer. + + + + + Initializes a new instance of the struct. + + The priority. + + + + Initializes a new instance of the struct. + + + The super priority. Mostly used by drawers that wants to wrap the entire property but don't draw the actual property. + These drawers typically don't draw the property itself, and calls CallNextDrawer. + The wrapper priority. Mostly used by drawers used to decorate properties. + The value priority. Mostly used by s and s. + + + + Implements the operator >. + + The LHS. + The RHS. + + The result of the operator. + + + + + Implements the operator <. + + The LHS. + The RHS. + + The result of the operator. + + + + + Implements the operator <=. + + The LHS. + The RHS. + + The result of the operator. + + + + + Implements the operator >=. + + The LHS. + The RHS. + + The result of the operator. + + + + + Implements the operator +. + + The LHS. + The RHS. + + The result of the operator. + + + + + Implements the operator -. + + The LHS. + The RHS. + + The result of the operator. + + + + + Implements the operator ==. + + The LHS. + The RHS. + + The result of the operator. + + + + + Implements the operator !=. + + The LHS. + The RHS. + + The result of the operator. + + + + + Gets the priority level. + + + + + Returns a that represents this instance. + + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format. + + A that represents this instance. + + + + + Determines whether the specified , is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Returns a hash code for this instance. + + + A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + + + + + Equals the specified other. + + The other. + + + + + Compares to. + + The other. + + + + + DrawerPriority is used on inspector drawers and indicates the priority of the drawer. + Use this to make your custom drawer to come before or after other drawers, and potentially hide other drawers. + + + The following example shows how DrawerPriority could be apply to a value drawer. + + [DrawerPriority(DrawerPriorityLevel.ValuePriority)] + + public sealed class MyIntDrawer : InspectorValuePropertyDrawer<int> + { + // ... + } + + + + The following example shows how DrawerPriority is used to mark a custom int drawer as a high priority drawer. + + [DrawerPriority(1, 0, 0)] + + public sealed class MySpecialIntDrawer : InspectorValuePropertyDrawer<int> + { + // ... + } + + + + + + + + The priority of the drawer. + + + + + Indicates the priority of an inspector drawer. + + Option for priority for the inspector drawer. + + + + Indicates the priority of an inspector drawer. + + + The super priority. Mostly used by drawers that wants to wrap the entire property but don't draw the actual property. + These drawers typically don't draw the property itself, and calls CallNextDrawer. + The wrapper priority. Mostly used by drawers used to decorate properties. + The value priority. Mostly used by s and s. + + + + + DrawerPriorityLevel is used in conjunction with . + + + + + + + + Auto priority is defined by setting all of the components to zero. + If no is defined on a drawer, it will default to AutoPriority. + + + + + The value priority. Mostly used by s. + + + + + The attribute priority. Mostly used by s. + + + + + The wrapper priority. Mostly used by drawers used to decorate properties. + + + + + The super priority. Mostly used by drawers that wants to wrap the entire property but don't draw the actual property. + These drawers typically don't draw the property itself, and calls CallNextDrawer. + + + + + Base class for emitted MonoBehaviour-derived types that have been created by the . + + + + + The field that backs the value of this MonoBehaviour. + + + + + Sets the value contained in this scriptable object. + + + + + Gets the value contained in this scriptable object. + + + + + Strongly typed base class for emitted MonoBehaviour-derived types that have been created by the . + + + + + Sets the value contained in this scriptable object. + + + + + Gets the value contained in this scriptable object. + + + + + Sets the value contained in this scriptable object. + + + + + Gets the value contained in this scriptable object. + + + + + Base class for emitted ScriptableObject-derived types that have been created by the . + + + + + The field that backs the value of this scriptable object. + + + + + Sets the value contained in this scriptable object. + + + + + Gets the value contained in this scriptable object. + + + + + Strongly typed base class for emitted scriptable object types that have been created by the . + + + + + Sets the value contained in this scriptable object. + + + + + Gets the value contained in this scriptable object. + + + + + Sets the value contained in this scriptable object. + + + + + Gets the value contained in this scriptable object. + + + + + This class fixes Unity's about window, by invoking "UnityEditor.VisualStudioIntegration.UnityVSSupport.GetAboutWindowLabel" before any dynamic assemblies have been defined. + This is because dynamic assemblies in the current AppDomain break that method, and Unity's about window depends on it. + + + + + + If you mark any of Unity's assemblies with the [AssemblyVersion] attribute to get a rolling assembly + version that changes sometimes (or all the time), Odin's hardcoded assembly references to user types + will break. + + + To fix this case, and all other cases of references to wrongly versioned Unity types not being resolved, + we overload the app domain's type resolution and resolve Unity user assemblies properly regardless of + version. + + + + + + Specifies hows any given drawer should drawer the property. + Changing this behavior, also changes which methods should be overridden in the drawer. + + + + + + + + + GUILayout enabled the use of GUILayout, EditorGUILayout and + + + + + Draws the property using Unity's GUI, and EditorGUI. + + + + + + Base class for attribute drawers. Use this class to create your own custom attribute drawers that will work for all types. + Alternatively you can derive from if you want to only support specific types. + + + + Odin supports the use of GUILayout and takes care of undo for you. It also takes care of multi-selection + in many simple cases. Check the manual for more information on handling multi-selection. + + + + Also note that Odin does not require that your custom attribute inherits from Unity's PropertyAttribute. + + + + The attribute that this drawer should be applied to. + + + Checkout the manual for more information. + + + + Example using the . + + [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false)] + public class CustomRangeAttribute : System.Attribute + { + public float Min; + public float Max; + + public CustomRangeAttribute(float min, float max) + { + this.Min = min; + this.Max = max; + } + } + + // Remember to wrap your custom attribute drawer within a #if UNITY_EDITOR condition, or locate the file inside an Editor folder. + + public sealed class CustomRangeAttributeDrawer : OdinAttributeDrawer<CustomRangeAttribute, float> + { + protected override void DrawPropertyLayout(GUIContent label) + { + this.ValueEntry.SmartValue = EditorGUILayout.Slider(label, this.ValueEntry.SmartValue, this.Attribute.Min, this.Attribute.Max); + } + } + + // Usage: + public class MyComponent : MonoBehaviour + { + [CustomRangeAttribute(0, 1)] + public float MyFloat; + } + + + + + Example using the . + + [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false)] + public class GUITintColorAttribute : System.Attribute + { + public Color Color; + + public GUITintColorAttribute(float r, float g, float b, float a = 1) + { + this.Color = new Color(r, g, b, a); + } + } + + // Remember to wrap your custom attribute drawer within a #if UNITY_EDITOR condition, or locate the file inside an Editor folder. + + public sealed class GUITintColorAttributeDrawer : OdinAttributeDrawer<GUITintColorAttribute> + { + protected override void DrawPropertyLayout(GUIContent label) + { + Color prevColor = GUI.color; + GUI.color *= this.Attribute.Color; + this.CallNextDrawer(label); + GUI.color = prevColor; + } + } + + // Usage: + public class MyComponent : MonoBehaviour + { + [GUITintColor(0, 1, 0)] + public float MyFloat; + } + + + + + + Odin uses multiple drawers to draw any given property, and the order in which these drawers are + called are defined using the . + Your custom drawer injects itself into this chain of drawers based on its . + If no is defined, a priority is generated automatically based on the type of the drawer. + Each drawer can ether choose to draw the property or not, or pass on the responsibility to the + next drawer by calling CallNextDrawer(), as the f attribute does in the example above. + + + + This means that there is no guarantee that your drawer will be called, sins other drawers + could have a higher priority than yours and choose not to call CallNextDrawer(). + + + + Note that Odin's has full support for generic class constraints, + and if that is not enough, you can also add additional type constraints by overriding CanDrawTypeFilter + + + + Also note that all custom property drawers needs to handle cases where the label provided by the DrawPropertyLayout is null, + otherwise exceptions will be thrown when in cases where the label is hidden. For instance when [HideLabel] is used, or the property is drawn within a list where labels are also not shown. + + + + [DrawerPriority(DrawerPriorityLevel.AttributePriority)] + public sealed class MyCustomAttributeDrawer<T> : OdinAttributeDrawer<MyCustomAttribute, T> where T : class + { + public override bool CanDrawTypeFilter(Type type) + { + return type != typeof(string); + } + + protected override void DrawPropertyLayout(GUIContent label) + { + // Draw property here. + } + } + + + + + + + + + + + + + + + + + + Gets the attribute that the OdinAttributeDrawer draws for. + + + + + Tells whether or not multiple attributes are allowed. + + + + + Draws the property with the given label. + Override this to implement your custom OdinAttributeDrawer. + + Optional label for the property. + + + + Tests if the drawer can draw for the specified property. + + The property to test. + true if the drawer can drawn the property. Otherwise false. + + + + Tests if the attribute drawer can draw for the specified property. + + The property to test. + true if the drawer can drawn the property. Otherwise false. + + + + + Base class for all type specific attribute drawers. For non-type specific attribute drawers see . + + + + Odin supports the use of GUILayout and takes care of undo for you. It also takes care of multi-selection + in many simple cases. Checkout the manual for more information on handling multi-selection. + + + + Also note that Odin does not require that your custom attribute inherits from Unity's PropertyAttribute. + + + + The attribute that this drawer should be applied to. + The type of the value the drawer should be drawing. Note that Odin's has full support for generic constraints. + + + Checkout the manual for more information. + + + + Example using the . + + [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false)] + public class CustomRangeAttribute : System.Attribute + { + public float Min; + public float Max; + + public CustomRangeAttribute(float min, float max) + { + this.Min = min; + this.Max = max; + } + } + + // Remember to wrap your custom attribute drawer within a #if UNITY_EDITOR condition, or locate the file inside an Editor folder. + + public sealed class CustomRangeAttributeDrawer : OdinAttributeDrawer<CustomRangeAttribute, float> + { + protected override void DrawPropertyLayout(GUIContent label) + { + this.ValueEntry.SmartValue = EditorGUILayout.Slider(label, this.ValueEntry.SmartValue, this.Attribute.Min, this.Attribute.Max); + } + } + + // Usage: + public class MyComponent : MonoBehaviour + { + [CustomRangeAttribute(0, 1)] + public float MyFloat; + } + + + + + Example using the . + + [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false)] + public class GUITintColorAttribute : System.Attribute + { + public Color Color; + + public GUITintColorAttribute(float r, float g, float b, float a = 1) + { + this.Color = new Color(r, g, b, a); + } + } + + // Remember to wrap your custom attribute drawer within a #if UNITY_EDITOR condition, or locate the file inside an Editor folder. + + public sealed class GUITintColorAttributeDrawer : OdinAttributeDrawer<GUITintColorAttribute> + { + protected override void DrawPropertyLayout(GUIContent label) + { + Color prevColor = GUI.color; + GUI.color *= this.Attribute.Color; + this.CallNextDrawer(label); + GUI.color = prevColor; + } + } + + // Usage: + public class MyComponent : MonoBehaviour + { + [GUITintColor(0, 1, 0)] + public float MyFloat; + } + + + + + + Odin uses multiple drawers to draw any given property, and the order in which these drawers are + called is defined using the . + Your custom drawer injects itself into this chain of drawers based on its . + If no is defined, a priority is generated automatically based on the type of the drawer. + Each drawer can ether choose to draw the property or not, or pass on the responsibility to the + next drawer by calling CallNextDrawer(), as the GUITintColor attribute does in the example above. + + + + This means that there is no guarantee that your drawer will be called, since other drawers + could have a higher priority than yours and choose not to call CallNextDrawer(). + + + + Note that Odin's has full support for generic class constraints, + and if that is not enough, you can also add additional type constraints by overriding CanDrawTypeFilter + + + + Also note that all custom property drawers needs to handle cases where the label provided by the DrawPropertyLayout is null, + otherwise exceptions will be thrown when in cases where the label is hidden. For instance when [HideLabel] is used, or the property is drawn within a list where labels are also not shown. + + + + [DrawerPriority(DrawerPriorityLevel.AttributePriority)] + public class MyCustomAttributeDrawer<T> : OdinAttributeDrawer<MyCustomAttribute, T> where T : class + { + public override bool CanDrawTypeFilter(Type type) + { + return type != typeof(string); + } + + protected override void DrawPropertyLayout(GUIContent label) + { + // Draw property here. + } + } + + + + + + + + + + + + + + + + + + Gets the strongly typed ValueEntry of the OdinAttributeDrawer's property. + + + + + Draws the property with the given label. + Override this to implement your custom OdinAttributeDrawer. + + Optional label for the property. + + + + Tests if the drawer can draw for the specified property. + + The property to test. + true if the drawer can drawn the property. Otherwise false. + + + + Tests if the attribute drawer can draw for the specified property. + + The property to test. + true if the drawer can drawn the property. Otherwise false. + + + + Some drawers don't want to have its GUI disabled, even if the property is read-only or a ReadOnly attribute is defined on the property. + Use this attribute on any drawer to force GUI being enabled in these cases. + + + + + [AllowGUIEnabledForReadonly] + public sealed class SomeDrawerDrawer<T> : OdinValueDrawer<T> where T : class + { + } + + + + + + + Base class for all Odin drawers. In order to create your own custom drawers you need to derive from one of the following drawers: + + + + + + + + Remember to provide your custom drawer with an in order for it to be located by the . + Drawers require a context, and are instantiated automatically by the . + Odin supports the use of GUILayout and takes care of undo for you. It also takes care of multi-selection in many simple cases. Checkout the manual for more information. + + + + + + + + + + + + + + + + + If true then this drawer will be skipped in the draw chain. Otherwise the drawer will be called as normal in the draw chain. + + + + + Gets a value indicating if the drawer has been initialized yet. + + + + + Gets the property this drawer draws for. + + + + + Override this method in order to define custom type constraints to specify whether or not a type should be drawn by the drawer. + Note that Odin's has full support for generic class constraints, so most often you can get away with not overriding CanDrawTypeFilter. + + The type. + + Returns true by default, unless overridden. + + + + + Initializes the drawer instance. + + + + + + Initializes the drawer instance. Override this to implement your own initialization logic. + + + + + Draws the property with a custom label. + + The label. Null is allow if you wish no label should be drawn. + + + + Draws the property with GUILayout support. + + The label. This can be null, so make sure your drawer supports that. + + + + Calls the next drawer in the draw chain. + + The label to pass on to the next drawer. + + + + Gets a value indicating if the drawer can draw for the specified property. + Override this to implement a custom property filter for your drawer. + + The property to test. + true if the drawer can draw for the property. Otherwise false. + + + + Provides a variety of miscellaneous utilities widely used in the inspector. + + + + + Converts an Odin property path to a deep reflection path. + + + + + Converts an Odin property path (without groups included) into a Unity property path. + + + + + Prepares a property tree for drawing, and handles management of undo, as well as marking scenes and drawn assets dirty. + + The tree to be drawn. + Whether to register undo commands for the changes made to the tree. This can only be set to true if the tree has a to represent. + tree is null + + + + Ends drawing a property tree, and handles management of undo, as well as marking scenes and drawn assets dirty. + + The tree. + + + + Draws all properties in a given property tree; must be wrapped by a and . + + The tree to be drawn. + + + + Draws a property in the inspector using a given label. + + + + + Odin property system exception. + + + + + Initializes a new instance of OdinPropertyException. + + The message for the exception. + An inner exception. + + + + + Base class for all value drawers. Use this class to create your own custom drawers for any specific type. + + + + Remember to provide your custom drawer with an + in order for it to be located by the . + + + + Odin supports the use of GUILayout and takes care of undo for you. It also takes care of multi-selection + in many simple cases. Checkout the manual for more information on handling multi-selection. + + + + + Checkout the manual for more information. + + + + + public class MyCustomBaseType + { + + } + + public class MyCustomType : MyCustomBaseType + { + + } + + // Remember to wrap your custom attribute drawer within a #if UNITY_EDITOR condition, or locate the file inside an Editor folder. + + public sealed class MyCustomBaseTypeDrawer<T> : OdinValueDrawer<T> where T : MyCustomBaseType + { + protected override void DrawPropertyLayout(IPropertyValueEntry<T> entry, GUIContent label) + { + T value = entry.SmartValue; + // Draw your custom drawer here using GUILayout and EditorGUILAyout. + } + } + + // Usage: + // Both values will be drawn using the MyCustomBaseTypeDrawer + public class MyComponent : SerializedMonoBehaviour + { + public MyCustomBaseType A; + + public MyCustomType B; + } + + + + + + Odin uses multiple drawers to draw any given property, and the order in which these drawers are + called are defined using the . + Your custom drawer injects itself into this chain of drawers based on its . + If no is defined, a priority is generated automatically based on the type of the drawer. + Each drawer can ether choose to draw the property or not, or pass on the responsibility to the + next drawer by calling CallNextDrawer(). An example of this is provided in the documentation for . + + + + This means that there is no guarantee that your drawer will be called, sins other drawers + could have a higher priority than yours and choose not to call CallNextDrawer(). + + + + To avoid this, you can tell Odin, that your drawer is a PrependDecorator or an AppendDecorator drawer (see ) as shown in the example shows below. + Prepend and append decorators are always drawn and are also ordered by the . + + + + Note that Odin's have full support for generic class constraints, + and if that is not enough, you can also add additional type constraints by overriding CanDrawTypeFilter(Type type). + + + + Also note that all custom property drawers needs to handle cases where the label provided by the DrawPropertyLayout is null, + otherwise exceptions will be thrown when in cases where the label is hidden. For instance when [HideLabel] is used, or the property is drawn within a list where labels are also not shown. + + + + // [OdinDrawer(OdinDrawerBehaviour.DrawProperty)] // default + // [OdinDrawer(OdinDrawerBehaviour.AppendDecorator)] + [OdinDrawer(OdinDrawerBehaviour.PrependDecorator)] + [DrawerPriority(DrawerPriorityLevel.AttributePriority)] + public sealed class MyCustomTypeDrawer<T> : OdinValueDrawer<T> where T : MyCustomType + { + public override bool CanDrawTypeFilter(Type type) + { + return type != typeof(SomeType); + } + + protected override void DrawPropertyLayout(IPropertyValueEntry<T> entry, GUIContent label) + { + T value = entry.SmartValue; + // Draw property here. + } + } + + + + + + + + + + + + + + + + + + + The value entry of the property. + + + + + Draws the property with GUILayout support. + + The label. This can be null, so make sure your drawer supports that. + + + + Gets a value indicating if the drawer can draw for the specified property. + + The property to test. + true if the drawer can draw for the property. Otherwise false. + + + + Gets a value indicating if the drawer can draw for the specified property. + Override this to implement a custom property filter for your drawer. + + The property to test. + true if the drawer can draw for the property. Otherwise false. + + + + Custom types used by the can choose to implement the ITemporaryContext + interface in order to be notified when the context gets reset. + + + + + Called by when the context gets reset. + + + + + Used by all InspectorProperty to tell Odin how to set or get a value on any given property. + + + + + Whether the value is readonly. + + + + + Gets the type of the owner. + + + + + Gets the type of the value. + + + + + Sets the weakly typed value on a given weakly typed owner. + + The owner. + The value. + + + + Gets the value from a given weakly typed owner. + + The weakly typed owner. + The found value. + + + + Used by all to tell Odin how to set or get a value on any given property. + + + + + Sets the value on a given owner. + + The owner. + The value. + + + + Gets the value from a given owner. + + The owner. + + + + When creating custom property drawers with or etc, + an OdinDrawerAttribute must be defined on the custom drawer class itself in order to specify that the drawer is meant to be included in the inspector. + If no OdinDrawerAttribute is defined, the will ignore your drawer. + + + Checkout the manual for more information. + + + + // Specify that this drawer must be included in the inspector; without this, it will not be drawn + public class MyCustomTypeDrawer<T> : OdinValueDrawer<T> where T : MyCustomBaseType + { + protected override void DrawPropertyLayout(IPropertyValueEntry<T> entry, GUIContent label) + { + T value = entry.SmartValue; + // Draw property here. + + // Optionally, call the next drawer in line. + this.CallNextDrawer(entry, label); + } + } + + + + + + + + + + + + Initializes a new instance of the class. + + + + + Property drawer for primitive composite properties. + + + + + Draws the property. + + + + + Draws the property field. + + + + + Represents the children of an . + + + + + The that this instance handles children for. + + + + + Gets a child by index. This is an alias for . + + The index of the child to get. + The child at the given index. + + + + Gets a child by name. This is an alias for . + + The name of the child to get. + The child, if a child was found; otherwise, null. + + + + Gets a child by name. This is an alias for . + + The name of the child to get. + The child, if a child was found; otherwise, null. + + + + Initializes a new instance of the class. + + The property to handle children for. + property is null + + + + The number of children on the property. + + + + + Updates this instance of . + + + + + Gets a child by name. + + The name of the child to get. + The child, if a child was found; otherwise, null. + name + + + + Gets a child by name. + + The name of the child to get. + The child, if a child was found; otherwise, null. + name + + + + Gets a child by index. + + The index of the child to get. + + The child at the given index. + + The given index was out of range. + + + + Gets the path of the child at a given index. + + The index to get the path of. + The path of the child at the given index. + The given index was out of range. + + + + Returns an IEnumerable that recursively yields all children of the property, depth first. + + + + + Gets the property's already created children. If the child count is less than or equal to 10000, children are returned in order. If the count is larger than 10000, they are returned in no particular order. + + + + + Gets the enumerator. + + + + + Gets the enumerator. + + + + + Represents a weakly typed collection of values for a - one value per selected inspector target. + + + + + The property whose values are represented. + + + + + Initializes a new instance of the class. + + The property to represent. + property is null + + + + Whether the values have been changed since was last called. + + + + + The number of values in the collection. + + + + + Gets a value indicating whether this instance is synchronized. + + + true if this instance is synchronized; otherwise, false. + + + + + Gets the synchronization root object. + + + The synchronization root object. + + + + + The original values of the (loosely typed) value collection, such as they were immediately after the last call. + + + + + Gets or sets the weakly typed at the specified index. + + + The value. + + The index to set. + + + + Gets an enumerator for the collection. + + + + + Marks the value collection as being clean again. This is typically called at the end of the current GUI frame, during . + + + + + Reverts the value collection to its origin values (found in ) from the last call, and marks the value collection as being clean again. + + + + + Determines whether the collection contains the specified value. + + The value. + + true if the collection contains the specified value; otherwise, false. + + + + + Copies the collection to an array. + + The array to copy to. + The index to copy from. + + + + Gets the index of the given value, or -1 if the value was not found. + + The value to get the index of. + The index of the given value, or -1 if the value was not found. + + + + Gets the weakly typed value at the given index. + + The index of the value to get. + The weakly typed value at the given index + + + + Sets the weakly typed value at the given index. + + The index to set the value of. + The value to set. + + + + Force sets the value, ignoring whether it is editable or not. + Note that this will fail on list element value entries where is true on the parent value entry. + + The selection index of the value. + The value to be set. + + + + Marks the value collection as being dirty, regardless of any value changes. + + + + + Represents a strongly typed collection of values for a - one value per selected inspector target. + + The element type of the collection. + + + + + Initializes a new instance of the class. + + The property. + The internal array. + The original array. + The internal atom array. + The original atom array. + + + + Whether the values have been changed since was last called. + + + + + The number of values in the collection. + + + + + Gets a value indicating whether this instance is synchronized. + + + true if this instance is synchronized; otherwise, false. + + + + + Gets the synchronization root object. + + + The synchronization root object. + + + + + The original values of the (loosely typed) value collection, such as they were immediately after the last call. + + + + + Gets or sets the at the specified index. + + + The . + + The index. + + + + + Gets an enumerator for the collection. + + + + + Marks the value collection as being clean again. This is typically called at the end of the current GUI frame, during . + + + + + Reverts the value collection to its origin values (found in ) from the last call, and marks the value collection as being clean again. + + + + + Copies the collection to an array. + + The array to copy to. + The index to copy from. + + + + Gets the weakly typed value at the given index. + + The index of the value to get. + + The weakly typed value at the given index + + + + + Sets the weakly typed value at the given index. + + The index to set the value of. + The value to set. + + + + Determines whether the collection contains the specified value. + + The value. + + true if the collection contains the specified value; otherwise, false. + + + + + Gets the index of the given value, or -1 if the value was not found. + + The value to get the index of. + + The index of the given value, or -1 if the value was not found. + + + + + Force sets the value, ignoring whether it is editable or not. + Note that this will fail on list element value entries where is true on the parent value entry. + + The selection index of the value. + The value to be set. + + + + Force sets the value, ignoring whether it is editable or not. + Note that this will fail on list element value entries where is true on the parent value entry. + + The selection index of the value. + The value to be set. + + + + + Marks the value collection as being dirty, regardless of any value changes. + + + + + A contextual value attached to an , mapped to a key, contained in a . + + + + + The contained value. + + + + + Creates a new PropertyContext. + + + + + Performs an explicit conversion from to . + + The context. + + The result of the conversion. + + + + + Returns a that represents this instance, of the format ": Value.ToString()". + + + A that represents this instance. + + + + + Contains a context for an , which offers the ability to address persistent values by key across several editor GUI frames. + Use this in drawers to store contextual editor-only values such as the state of a foldout. + + + + + Initializes a new instance of the class. + + The property. + property + + + + Gets a global context value for a given key, using a given delegate to generate a default value if the context doesn't already exist. + Global contexts are not associated with any one specific drawer, and so are shared across all drawers for this property. + + The type of the context value to get. + The key of the context value to get. + A delegate for generating a default value. + The found context. + + + + Gets a global context value for a given key, using a given default value if the context doesn't already exist. + Global contexts are not associated with any one specific drawer, and so are shared across all drawers for this property. + + The type of the context value to get. + The key of the context value to get. + The default value to set if the context value doesn't exist yet. + The found context. + + + + Gets a global context value for a given key, and creates a new instance of as a default value if the context doesn't already exist. + Global contexts are not associated with any one specific drawer, and so are shared across all drawers for this property. + + The type of the context value to get. + The key of the context value to get. + The found context. + + + + Local property contexts are obsolete. Use local drawer fields instead. + + + + + Local property contexts are obsolete. Use local drawer fields instead. + + + + + Local property contexts are obsolete. Use local drawer fields instead. + + + + + Local property contexts are obsolete. Use local drawer fields instead. + + + + + Local property contexts are obsolete. Use local drawer fields instead. + + + + + Local property contexts are obsolete. Use local drawer fields instead. + + + + + Local property contexts are obsolete. Use local drawer fields instead. + + + + + Local property contexts are obsolete. Use local drawer fields instead. + + + + + Local property contexts are obsolete. Use local drawer fields instead. + + + + + Local property contexts are obsolete. Use local drawer fields instead. + + + + + Local property contexts are obsolete. Use local drawer fields instead. + + + + + Local property contexts are obsolete. Use local drawer fields instead. + + + + + Local property contexts are obsolete. Use local drawer fields instead. + + + + + Local property contexts are obsolete. Use local drawer fields instead. + + + + + Local property contexts are obsolete. Use local drawer fields instead. + + + + + Gets a object and creates a object for it. + + The type of the value of the context. + The instance of the drawer. + The key for the context. + The default value for the context. + + + + Gets a object and creates a object for it. + Returns true when the is first created. Otherwise false. + + The type of the value of the context. + The instance of the drawer. + The key for the context. + The object. + Returns true when the is first created. Otherwise false. + + + + Swaps context values with a given . + + The context to swap with. + + + + An can implement this interface to indicate that it defines right-click context menu items for properties that it draws. + + + + + Method that is invoked when a user has right-clicked a property, and the context menu is being built. The method is invoked in order of drawer priority. + + The property that has been right-clicked on. + The generic menu instance that is being built. Add items to this. + + + + A polymorphic alias for getting and setting the values of an . + + The type of the owner. + The type of the value. + The type of the property owner. + The type of the property value. + + + + Gets the type of the owner. + + + + + Gets the type of the value. + + + + + Whether the value is readonly. + + + + + Initializes a new instance of the class. + + The information. + info + + + + Gets the value from a given weakly typed owner. + + The weakly typed owner. + The found value. + + + + Gets the value from a given owner. + + The owner. + owner is null + + + + Sets the weakly typed value on a given weakly typed owner. + + The owner. + The value. + + + + Sets the value on a given owner. + + The owner. + The value. + + + + Contains meta-data information about a property in the inspector, that can be used to create an actual property instance. + + + + + The name of the property. + + + + + Gets a value indicating whether this InspectorPropertyInfo has any backing members. + + + + + Gets a value indicating whether this InspectorPropertyInfo has only a single backing member. + + + + + The member info of the property. If the property has many member infos, such as if it is a group property, the first member info of is returned. + + + + + Indicates which type of property it is. + + + + + The serialization backend for this property. + + + + + The type on which this property is declared. + + + + + The base type of the value which this property represents. If there is no value, this will be null. + + + + + Whether this property is editable or not. + + + + + All member infos of the property. There will only be more than one member if it is an . + + + + + The order value of this property. Properties are (by convention) ordered by ascending order, IE, lower order values are shown first in the inspector. The final actual ordering of properties is decided upon by the property resolver. + + + + + The attributes associated with this property. + + + + + Whether this property only exists as a Unity , and has no associated managed member to represent it. + This case requires some special one-off custom behaviour in a few places. + + + + + Returns a that represents this instance. + + + A that represents this instance. + + + + + Gets the first attribute of a given type on this property. + + + + + Gets the first attribute of a given type on this property, which is not contained in a given hashset. + + The attributes to exclude. + + + + Gets all attributes of a given type on the property. + + + + + The s of all the individual properties in this group. + + + + + Gets the property's method delegate, if there is one. Note that this is null if a method property is backed by an actual method member. + + + + + Represents a property in the inspector, and provides the hub for all functionality related to that property. + + + + + Gets the property which is the ultimate root of this property's serialization. + + + + + The name of the property. + + + + + The nice name of the property, usually as converted by . + + + + + The cached label of the property, usually containing . + + + + + The full Odin path of the property. To get the Unity property path, see . + + + + + The child index of this property. + + + + + Gets the resolver for this property's children. + + + + + The current recursive draw depth, incremented for each time that the property has caused itself to be drawn recursively. + Note that this is the current recursion level, not the total amount of recursions so far this frame. + + + + + The amount of times that the property has been drawn so far this frame. + + + + + How deep in the drawer chain the property currently is, in the current drawing session as determined by . + + + + + Whether this property supports having prefab modifications applied or not. + + + + + Gets an immutable list of the components attached to the property. + + + + + Gets an immutable list of processed attributes for the property. + + + + + Gets an array of the state updaters of the property. Don't change the contents of this array! + + + + + The value entry that represents the base value of this property. + + + + + The value entry that represents the strongly typed value of the property; this is possibly an alias entry in case of polymorphism. + + + + + The parent of the property. If null, this property is a root-level property in the . + + + + + The of this property. + + + + + The that this property exists in. + + + + + The children of this property. + + + + + The context container of this property. + + + + + The last rect that this property was drawn within. + + + + + The type on which this property is declared. This is the same as . + + + + + The parent values of this property, by selection index; this represents the values that 'own' this property, on which it is declared. + + + + + The full Unity property path of this property; note that this is merely a converted version of , and not necessarily a path to an actual Unity property. + In the case of Odin-serialized data, for example, no Unity properties will exist at this path. + + + + + The full path of this property as used by deep reflection, containing all the necessary information to find this property through reflection only. This is used as the path for prefab modifications. + + + + + The full path of this property as used by prefab modifications and the deep reflection system, containing all the necessary information to find this property through reflection only. + + + + + The PropertyState of the property at the current draw count index. + + + + + Gets the component of a given type on the property, or null if the property does not have a component of the given type. + + + + + Marks the property's serialization root values dirty if they are derived from UnityEngine.Object. + + + + + Records the property's serialization root for undo to prepare for undoable changes, with a custom string that includes the property path and Unity object name. If a message is specified, it is included in the custom undo string. + + + + + Gets the first attribute of a given type on this property. + + + + + Gets the first attribute of a given type on this property, which is not contained in a given hashset. + + The attributes to exclude. + + + + Gets all attributes of a given type on the property. + + + + + Returns a that represents this instance. + + + A that represents this instance. + + + + + Draws this property in the inspector. + + + + + Draws this property in the inspector with a given default label. This default label may be overridden by attributes on the drawn property. + + + + + Push a draw session. This is used by and . + + + + + Increments the current drawer chain index. This is used by . + + + + + Pop a draw session. This is used by and . + + + + + Gets the next property in the , or null if none is found. + + Whether to include children or not. + Whether to only include visible properties. + + + + Finds the first parent property that matches a given predicate. + + + + + Finds the first child recursively, that matches a given predicate. + + + + + Updates the property. This method resets the temporary context, and updates the value entry and the property children. + + If true, the property will update regardless of whether it has already updated for the current . + + + + Populates a generic menu with items from all drawers for this property that implement . + + + + + Determines whether this property is the child of another property in the hierarchy. + + The property to check whether this property is the child of. + other is null + + + + Determines whether this property is a parent of another property in the hierarchy. + + The property to check whether this property is the parent of. + other is null + + + + Represents a set of values of the same type as a tree of properties that can be drawn in the inspector, and provides an array of utilities for querying the tree of properties. + + + + + Delegate for on property value changed callback. + + + + + The component providers that create components for each property in the tree. If you change this list after the tree has been used, you should call tree.RootProperty.RefreshSetup() to make the changes update properly throughout the tree. + + + + + The that this tree represents, if the tree was created for a . + + + + + The current update ID of the tree. This is incremented once, each update, and is used by to avoid updating multiple times in the same update round. + + + + + The type of the values that the property tree represents. + + + + + The actual values that the property tree represents. + + + + + The number of root properties in the tree. + + + + + The prefab modification handler of the tree. + + + + + Whether this property tree also represents members that are specially serialized by Odin. + + + + + Gets a value indicating whether or not to draw the mono script object field at the top of the property tree. + + + + + Gets a value indicating whether or not the PropertyTree is inspecting a static type. + + + + + Gets or sets the for the PropertyTree. + + + + + Gets or sets the for the PropertyTree. + + + + + Gets or sets the for the PropertyTree. + + + + + Gets or sets the for the PropertyTree. + + + + + An event that is invoked whenever an undo or a redo is performed in the inspector. + The advantage of using this event on a property tree instance instead of + is that this event will be desubscribed from + when the selection changes and the property + tree is no longer being used, allowing the GC to collect the property tree. + + + + + This event is invoked whenever the value of any property in the entire property tree is changed through the property system. + + + + + Creates a new for all target values of a . + + + + + Gets the root property of the tree. + + + + + Gets the secret root property of the tree, which hosts the property resolver used to resolve the "actual" root properties of the tree. + + + + + Registers that a given property is dirty and needs its changes to be applied at the end of the current frame. + + + + + Schedules a delegate to be invoked at the end of the current GUI frame. + + The action delegate to be delayed. + + + + Schedules a delegate to be invoked at the end of the next Repaint GUI frame. + + The action to be delayed. + + + + Enumerates over the properties of the tree. + + Whether to include children of the root properties or not. If set to true, every property in the entire tree will be enumerated. + Whether to only include visible properties. Properties whose parents are invisible are considered invisible. + + + + Gets the property at the given path. Note that this is the path found in , not the Unity path. + + The path of the property to get. + + + + Gets the property at the given path. Note that this is the path found in , not the Unity path. + + The path of the property to get. + + + + + Gets the property at the given Unity path. + + The Unity path of the property to get. + + + + Gets the property at the given Unity path. + + The Unity path of the property to get. + + + + + Gets the property at the given deep reflection path. + + The deep reflection path of the property to get. + + + + Gets the property at the given Odin prefab modification path. + + The prefab modification path of the property to get. + + + + Gets the property at the given Odin prefab modification path. + + The prefab modification path of the property to get. + + + + + Draw the property tree, and handles management of undo, as well as marking scenes and drawn assets dirty. + + This is a shorthand for calling + , + and . + . + + + + + + Draws a search bar for the property tree, and draws the search results if the search bar is used. + If this method returns true, the property tree should generally not be drawn normally afterwards. + Note that this method will throw exceptions if the property tree is not set up to be searchable; for that, see . + + True if the property tree is being searched and is currently drawing its search results, otherwise false. + + + + Gets a Unity property for the given Odin or Unity path. If there is no for this property tree, or no such property is found in the , a property will be emitted using . + + The Odin or Unity path to the property to get. + + + + Gets a Unity property for the given Odin or Unity path. If there is no for this property tree, or no such property is found in the , a property will be emitted using . + + The Odin or Unity path to the property to get. + The backing field of the Unity property. + + + + Checks whether a given object instance is referenced anywhere in the tree, and if it is, gives the path of the first time the object reference was encountered as an out parameter. + + The reference value to check. + The first found path of the object. + + + + Gets the number of references to a given object instance in this tree. + + + + + Updates all properties in the entire tree, and validates the prefab state of the tree, if applicable. + + + + + Replaces all occurrences of a value with another value, in the entire tree. + + The value to find all instances of. + The value to replace the found values with. + + + + Gets the root tree property at a given index. + + The index of the property to get. + + + + Invokes the actions that have been delayed using and . + + + + + Applies all changes made with properties to the inspected target tree values, and marks all changed Unity objects dirty. + + true if any values were changed, otherwise false + + + + Invokes the OnValidate method on the property tree's targets if they are derived from and have the method defined. + + + + + Registers an object reference to a given path; this is used to ensure that objects are always registered after having been encountered once. + + The referenced object. + The property that contains the reference. + + + + Creates a PropertyTree to inspect the static values of the given type. + + The type to inspect. + A PropertyTree instance for inspecting the type. + + + + Creates a new for a given target value. + + The target to create a tree for. + target is null + + + + Creates a new for a set of given target values. + Note that the targets all need to be of the same type. + + The targets to create a tree for. + targets is null + + + + Creates a new for all target values of a . + + The serialized object to create a tree for. + serializedObject is null + + + + Creates a new for a set of given target values. + Note that the targets all need to be of the same type. + + The targets to create a tree for. + + + + Creates a new for a set of given target values, represented by a given . + Note that the targets all need to be of the same type. + + The targets to create a tree for. + The serialized object to create a tree for. Note that the target values of the given must be the same values given in the targets parameter. + + + + Sets whether the property tree should be searchable or not, and allows the passing in of a custom SearchableAttribute instance to configure the search. + + Whether the tree should be set to be searchable or not. + If the tree is set to be searchable, then if this parameter is not null, it will be used to configure the property tree search. If the parameter is null, the SearchableAttribute on the tree's will be used. If that property has no such attribute, then default search settings will be applied. + + + + Represents a set of strongly typed values as a tree of properties that can be drawn in the inspector, and provides an array of utilities for querying the tree of properties. + This class also handles management of prefab modifications. + + + + + Gets the root property of the tree. + + + + + Gets the secret root property of the PropertyTree. + + + + + Gets the for the PropertyTree. + + + + + The current update ID of the tree. This is incremented once, each update, and is used by to avoid updating multiple times in the same update round. + + + + + The that this tree represents, if the tree was created for a . + + + + + The type of the values that the property tree represents. + + + + + The strongly types actual values that the property tree represents. + + + + + The weakly types actual values that the property tree represents. + + + + + The number of root properties in the tree. + + + + + Whether this property tree also represents members that are specially serialized by Odin. + + + + + Initializes a new instance of the class, inspecting only the target () type's static members. + + + + + Initializes a new instance of the class. + + The serialized object to represent. + + + + Initializes a new instance of the class. + + The targets to represent. + + + + Initializes a new instance of the class. + + The targets to represent. + The serialized object to represent. Note that the target values of the given must be the same values given in the targets parameter. + targets is null + + There must be at least one target. + or + A given target is a null value. + + + + + Applies all changes made with properties to the inspected target tree values. + + + true if any values were changed, otherwise false + + + + + Registers that a given property is dirty and needs its changes to be applied at the end of the current frame. + + + + + + + Updates all properties in the entire tree, and validates the prefab state of the tree, if applicable. + + + + + Checks whether a given object instance is referenced anywhere in the tree, and if it is, gives the path of the first time the object reference was encountered as an out parameter. + + The reference value to check. + The first found path of the object. + + + + Gets the number of references to a given object instance in this tree. + + + + + + Gets the property at the given path. Note that this is the path found in , not the Unity path. + + The path of the property to get. + + + + Gets the property at the given path. Note that this is the path found in , not the Unity path. + + The path of the property to get. + + + + + Finds the property at the specified unity path. + + The unity path for the property. + The property found at the path. + + + + Finds the property at the specified unity path. + + The unity path for the property. + + The property found at the path. + + + + Finds the property at the specified modification path. + + The prefab modification path for the property. + The property found at the path. + + + + Finds the property at the specified modification path. + + The prefab modification path for the property. + + The property found at the path. + + + + Gets a Unity property for the given Odin or Unity path. If there is no for this property tree, or no such property is found in the , a property will be emitted using . + + The Odin or Unity path to the property to get. + The backing field of the Unity property. + + + + Enumerates over the properties of the tree. WARNING: For tree that have large targets with lots of data, this may involve massive amounts of work as the full tree structure is resolved. USE THIS METHOD SPARINGLY AND ONLY WHEN ABSOLUTELY NECESSARY! + + Whether to include children of the root properties or not. If set to true, every property in the entire tree will be enumerated. + /// Whether to only include visible properties. Properties whose parents are invisible are considered invisible. + + + + Replaces all occurrences of a value with another value, in the entire tree. + + The value to find all instances of. + The value to replace the found values with. + + The value to replace with must either be null or be the same type as the value to replace (" + from.GetType().Name + "). + + + + Gets the root tree property at a given index. + + The index of the property to get. + + + + Schedules a delegate to be invoked at the end of the current GUI frame. + + The action delegate to be delayed. + action + + + + Schedules a delegate to be invoked at the end of the next Repaint GUI frame. + + The action to be delayed. + action + + + + Invokes the actions that have been delayed using and . + + + + + Enumeration describing the different types of properties that exist. + + + + + Property represents a value. + + + + + Property represents a method. + + + + + Property represents a named group of properties. + + + + + Enumeration for designating whether a has a special state,. + + + + + The value entry has no special state. + + + + + The property is a reference to another property. Get the path of the referenced property from . + + + + + The value entry is a null value. + + + + + The value entry has a primitive value conflict across selected indices. + A primitive value conflict is when primitive values, such a strings or floats, differ. + + + + + The value entry has a reference value conflict across selected indices. + A reference value conflict is when the types of reference type values differ, or when some values are null while others are not. + + + + + The value entry has a reference path conflict across selected indices. + A reference path conflict is when the property consists of references to many conflicting paths. Use to get paths to all referenced objects. + + + + + The value entry has a collection length conflict across selected indices. + A collection length conflict is when the property represents multiple parallel collections, and their lengths differ. + + + + + Class that describes the different possible serialization backends that a property can have, + and specifies the capabilities of each backend. + + + + + The property is serialized by Unity's polymorphic serialization backend via the [SerializeReference] attribute. Polymorphism, null values and cyclical references are supported. + + + + + The property is serialized by Unity's classic serialization backend. Polymorphism, null values and types such as are not supported. + + + + + The property is serialized by Odin. Polymorphism, null values and types such as are supported. + + + + + The property is not serialized by anything - possibly because it is a method, possibly because it is a field or property shown in the inspector without being serialized. + In the case of fields or properties, polymorphism, null values and types such as are supported, but will not be saved. + + + + + The property is not serialized by anything - possibly because it is a method, possibly because it is a field or property shown in the inspector without being serialized. + In the case of fields or properties, polymorphism, null values and types such as are supported, but will not be saved. + + + + + The property is serialized by Unity's classic serialization backend. Polymorphism, null values and types such as are not supported. + + + + + The property is serialized by Unity's polymorphic serialization backend via the [SerializeReference] attribute. Polymorphism, null values and cyclical references are supported. + + + + + The property is serialized by Odin. Polymorphism, null values and types such as are supported. + + + + + An internally used interface that is used by value entries during , that lets value entries force each other to set values directly to their target objects. + This interface should not be used by people who do not know what they are doing. + + + + + Sets the actual value of a value entry, for a given selection index. + + + + + An internally used interface that is used by value entries during , that lets value entries force each other to set values directly to their target objects. + This interface should not be used by people who do not know what they are doing. + + + + + Sets the actual value of a value entry, for a given selection index. + + + + + Represents the values of an , and contains utilities for querying the values' type and getting and setting them. + + + + + + Delegate type used for the events and . + + + + + The nearest parent property that has a value. + That is, the property from which this value + entry will fetch its parentvalues from in order + to extract its own values. + + If is null, this is a root property. + + + + + Whether this value entry represents a boxed value type. + + + + + The number of parallel values this entry represents. This will always be exactly equal to the count of . + + + + + Whether this value entry is editable or not. + + + + + If this value entry has the override type , this is the path of the property it references. + + + + + The actual serialization backend for this value entry, possibly inherited from the serialization backend of the root property this entry is a child of. + Note that this is *not* always equal to . + + + + + The property whose values this value entry represents. + + + + + Provides access to the weakly typed values of this value entry. + + + + + Whether this value entry has been changed from its prefab counterpart. + + + + + Whether this value entry has had its list length changed from its prefab counterpart. + + + + + Whether this value entry has had its dictionary values changes from its prefab counterpart. + + + + + A weakly typed smart value that represents the first element of the value entry's value collection, but has "smart logic" for setting the value that detects relevant changes and applies them in parallel. + This lets you often just use the smart value instead of having to deal with the tedium of multiple parallel values. + + + + + The type from which this value entry comes. If this value entry represents a member value, this is the declaring type of the member. If the value entry represents a collection element, this is the type of the collection. + + + + + The most precise known contained type of the value entry. If polymorphism is in effect, this will be some type derived from . + + + + + The base type of the value entry. If this is value entry represents a member value, this is the type of the member. If the value entry represents a collection element, this is the element type of the collection. + + + + + The special state of the value entry. + + + + + Whether this value entry is an alias, or not. Value entry aliases are used to provide strongly typed value entries in the case of polymorphism. + + + + + The context container of this property. + + + + + Whether this type is marked as an atomic type using a . + + + + + An event that is invoked during , when any values have changed. + + + + + An event that is invoked during , when any child values have changed. + + + + + Updates the values contained in this value entry to the actual values in the target objects, and updates its state (override, type of value, etc.) accordingly. + + + + + Checks whether the values in this value entry are equal to the values in another value entry. + Note, both value entries must have the same value type, and must represent values that are .NET value types. + + + + + + + Applies the changes made to this value entry to the target objects, and registers prefab modifications as necessary. + + + True if any changes were made, otherwise, false. + + + + + Determines the value state of this value entry. + + + + + Determines what the most precise contained type is on this value entry. + + + + + Updates all values in this value entry from the target tree values. + + + + + Initializes this value entry. + + + + + Creates an alias value entry of a given type, for a given value entry. This is used to implement polymorphism in Odin. + + + + + Creates a value entry for a given property, of a given value type. Note that the created value entry is returned un-updated, and needs to have called on it before it can be used. + + + + + Determines whether the value at the given selection index is different from the given prefab value, as is relevant for prefab modification checks. + If the value is a reference type, null and type difference is checked. If value is a value type, a comparer from is used. + This method is best ignored unless you know what you are doing. + + The value to check differences against. + The selection index to compare against. + + + + Represents the values of an , and contains utilities for querying the values' type and getting and setting them. + + The type of the value. + + + + + An equality comparer for comparing values of type . This is gotten using . + + + + + Whether .is a primitive type; that is, the type is primitive, a string, or an enum. + + + + + Whether is a value type. + + + + + Whether is derived from . + + + + + Whether the type of the value is marked atomic. + + + + + If the type of the value is marked atomic, this an instance of an atom handler for the value type. + + + + + Initializes a new instance of the class. + + + + + Provides access to the weakly typed values of this value entry. + + + + + Provides access to the strongly typed values of this value entry. + + + + + Whether this type is marked as an atomic type using a . + + + + + A weakly typed smart value that represents the first element of the value entry's value collection, but has "smart logic" for setting the value that detects relevant changes and applies them in parallel. + This lets you often just use the smart value instead of having to deal with the tedium of multiple parallel values. + + + + + A strongly typed smart value that represents the first element of the value entry's value collection, but has "smart logic" for setting the value that detects relevant changes and applies them in parallel. + This lets you often just use the smart value instead of having to deal with the tedium of multiple parallel values. + + + + + An array containing the original values as they were at the beginning of frame. + + + + + An array containing the current modified set of values. + + + + + An array containing the current modified set of atomic values. + + + + + An array containing the original set of atomic values. + + + + + Initializes this value entry. + + + + + Sets the actual target tree value. + + + + + Checks whether the values in this value entry are equal to the values in another value entry. + Note, both value entries must have the same value type, and must represent values that are .NET value types. + + + + + Determines whether the value at the given selection index is different from the given prefab value, as is relevant for prefab modification checks. + If the value is a reference type, null and type difference is checked. If value is a value type, a comparer from is used. + This method is best ignored unless you know what you are doing. + + The value to check differences against. + The selection index to compare against. + + + + Determines whether the value at the given selection index is different from the given prefab value, as is relevant for prefab modification checks. + If the value is a reference type, null and type difference is checked. If value is a value type, a comparer from is used. + This method is best ignored unless you know what you are doing. + + The value to check differences against. + The selection index to compare against. + + + + Represents the values of an , and contains utilities for querying the values' type and getting and setting them. + + The type of the parent. + The type of the value. + + + + + The type from which this value entry comes. If this value entry represents a member value, this is the declaring type of the member. If the value entry represents a collection element, this is the type of the collection. + + + + + Determines what the most precise contained type is on this value entry. + + + + + Initializes this value entry. + + + + + Updates all values in this value entry from the target tree values. + + + + + Determines the value state of this value entry. + + + + + Applies the changes made to this value entry to the target objects, and registers prefab modifications as necessary. + + + True if any changes were made, otherwise, false. + + + + + Gets the parent value at the given index. + + + + + Adds menu items to the Unity Editor, draws the About window, and the preference window found under Edit > Preferences > Odin Inspector. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Sirenix preferences window. + + + + + Open preferences page for configuration object. + + + + + Opens the Odin inspector preferences window. + + + + + Opens the Odin inspector preferences window. + + + + + This class has been made fully obsolete, and has been replaced by . + It was a helper class to handle strings for labels and other similar purposes. + + + + + If any error occurred while looking for members, it will be stored here. + + + + + Obsolete. Use other constructor. + + + + + Obsolete. Use other constructor. + + + + + Creates a StringMemberHelper to get a display string. + + Inspector property to get string from. + The input string. If the first character is a '$', then StringMemberHelper will look for a member string field, property or method, and will try to parse it as an expression if it starts with '@'. + + + + Creates a StringMemberHelper to get a display string. + + Inspector property to get string from. + The input string. If the first character is a '$', then StringMemberHelper will look for a member string field, property or method, and will try to parse it as an expression if it starts with '@'./// The input string. If the first character is a '$', then StringMemberHelper will look for a member string field, property or method. + + + + Gets a value indicating whether or not the string is retrived from a from a member. + + + + + Gets the type of the object. + + + + + Gets the string from the StringMemberHelper. + Only updates the string buffer in Layout events. + + The property entry, to get the instance reference from. + The current display string. + + + + Gets the string from the StringMemberHelper. + Only updates the string buffer in Layout events. + + The property, to get the instance reference from. + The current string. + + + + Gets the string from the StringMemberHelper. + Only updates the string buffer in Layout events. + + The instance, for evt. member references. + The current string. + + + + Gets the string from the StringMemberHelper. + + The property entry, to get the instance reference from. + The current string. + + + + Gets the string from the StringMemberHelper. + + The property, to get the instance reference from. + The current string. + + + + Gets the string from the StringMemberHelper. + + The instance, for evt. member references. + The current string. + + + + Gets a unique key for any given property within a drawer. + + + + + public class MyCustomTypeDrawer<T> : OdinValueDrawer<T> where T : MyCustomBaseType + { + protected override void DrawPropertyLayout(IPropertyValueEntry<T> entry, GUIContent label) + { + var isToggled = entry.Context(this, "toggled", false); + isToggled.Value = SirenixEditorGUI.Label(isToggled.Value, label); + if (SirenixEditorGUI.BeginFadeGroup(UniqueDrawerKey.Create(entry, this), isToggled.Value)) + { + EditorGUI.indentLevel++; + this.CallNextDrawer(entry.Property, null); + EditorGUI.indentLevel--; + } + SirenixEditorGUI.EndFadeGroup(); + } + } + + + + + + Gets a unique key for any given property within a drawer. + + The property entry. + The drawer. + + + + + Gets a unique key for any given property within a drawer. + + The property. + The drawer. + + + + + Checks if two keys are identical. + + The other key. + + + + Checks if two keys are identical. + + + + + Returns a hash code for this instance. + + + A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + + + + + Unity property drawer. + + + + + Initializes the property drawer. + + + + + Draws the property. + + + + + Provides utilities for emitting ScriptableObject and MonoBehaviour-derived types with specific property names and types, and providing instances of with those names and types. + + + + + A handle for a set of emitted Unity objects. When disposed (or collected by the GC) this handle will queue the emitted object instances for destruction. + + + + + The unity property to represent. + + + + + The Unity objects to represent. + + + + + Initializes a new instance of the class. + + The unity property to represent. + The objects to represent. + + + + Finalizes an instance of the class. + + + + + Creates an emitted MonoBehaviour-based . + + Name of the field to emit. + Type of the value to create a property for. + The target count of the tree to create a property for. + The game object that the MonoBehaviour of the property is located on. + + fieldName is null + or + valueType is null + + Target count must be equal to or higher than 1. + + + + Creates an emitted ScriptableObject-based . + + Name of the field to emit. + Type of the value to create a property for. + The target count of the tree to create a property for. + + fieldName is null + or + valueType is null + + Target count must be equal to or higher than 1. + + + + Context that persists across reloading and restarting Unity. + + + + + Time stamp for when the persistent context value was last used. + Used for purging unused context. + + + + + Instatiates a persistent context. + + + + + Updates the time stamp to now. + + + + + Context that persists across reloading and restarting Unity. + + The type of the context value. + + + + The value of the context. + + + + + Creates a new persistent context object. + + + + + Formats a string with the time stamp, and the value. + + + + + Helper class that provides a local copy of a . + When the local value is changed, it also changed the global value, but the global value does not change the local value. + + The type of the context value. + + + + The value of the context. + Changing this value, also changes the global context value, but the global value does not change the local value. + + + + + Creates a local context object for the provided global context. + + The global context object. + + + + Updates the local value to the current global value. + + + + + OdinDrawer extensions. + + + + + Gets a persistent value that will survive past multiple Unity Editor Application sessions. + The value is stored in the PersistentContextCache, which has a customizable max cache size. + + + + + Provides context objects that still persist when Unity reloads or is restarted. + + + + + Gets a GlobalPersistentContext object for the specified key. + + The type of the first key. + The type of the value stored in the context object. + The first key. + The default value, used for when the context object is first created. + + + + Gets a GlobalPersistentContext object for the specified keys. + + The type of the first key. + The type of the second key. + The type of the value stored in the context object. + The first key. + The second key. + The default value, used for when the context object is first created. + + + + Gets a GlobalPersistentContext object for the specified keys. + + The type of the first key. + The type of the second key. + The type of the third key. + The type of the value stored in the context object. + The first key. + The second key. + The third key. + The default value, used for when the context object is first created. + + + + Gets a GlobalPersistentContext object for the specified keys. + + The type of the first key. + The type of the second key. + The type of the third key. + The type of the fourth key. + The type of the value stored in the context object. + The first key. + The second key. + The third key. + The fourth key. + The default value, used for when the context object is first created. + + + + Gets a GlobalPersistentContext object for the specified keys. + + The type of the first key. + The type of the second key. + The type of the third key. + The type of the fourth key. + The type of the fifth key. + The type of the value stored in the context object. + The first key. + The second key. + The third key. + The fourth key. + The fifth key. + The default value, used for when the context object is first created. + + + + Gets a GlobalPersistentContext object for the specified key. + Returns true when the context is first created. Otherwise false. + + The type of the first key. + The type of the value stored in the context object. + The first key. + The persistent context object. + Returns true when the context is first created. Otherwise false. + + + + Gets a GlobalPersistentContext object for the specified keys. + Returns true when the context is first created. Otherwise false. + + The type of the first key. + The type of the second key. + The type of the value stored in the context object. + The first key. + The second key. + The persistent context object. + Returns true when the context is first created. Otherwise false. + + + + Gets a GlobalPersistentContext object for the specified keys. + Returns true when the context is first created. Otherwise false. + + The type of the first key. + The type of the second key. + The type of the third key. + The type of the value stored in the context object. + The first key. + The second key. + The third key. + The persistent context object. + Returns true when the context is first created. Otherwise false. + + + + Gets a GlobalPersistentContext object for the specified keys. + Returns true when the context is first created. Otherwise false. + + The type of the first key. + The type of the second key. + The type of the third key. + The type of the fourth key. + The type of the value stored in the context object. + The first key. + The second key. + The third key. + The fourth key. + The persistent context object. + Returns true when the context is first created. Otherwise false. + + + + Gets a GlobalPersistentContext object for the specified keys. + Returns true when the context is first created. Otherwise false. + + The type of the first key. + The type of the second key. + The type of the third key. + The type of the fourth key. + The type of the fifth key. + The type of the value stored in the context object. + The first key. + The second key. + The third key. + The fourth key. + The fifth key. + The persistent context object. + Returns true when the context is first created. Otherwise false. + + + + Gets a LocalPersistentContext object for the specified key. + + The type of the first key. + The type of the value stored in the context object. + The first key. + The default value, used for when the context object is first created. + + + + Gets a LocalPersistentContext object for the specified keys. + + The type of the first key. + The type of the second key. + The type of the value stored in the context object. + The first key. + The second key. + The default value, used for when the context object is first created. + + + + Gets a LocalPersistentContext object for the specified keys. + + The type of the first key. + The type of the second key. + The type of the third key. + The type of the value stored in the context object. + The first key. + The second key. + The third key. + The default value, used for when the context object is first created. + + + + Gets a LocalPersistentContext object for the specified keys. + + The type of the first key. + The type of the second key. + The type of the third key. + The type of the fourth key. + The type of the value stored in the context object. + The first key. + The second key. + The third key. + The fourth key. + The default value, used for when the context object is first created. + + + + Gets a LocalPersistentContext object for the specified keys. + + The type of the first key. + The type of the second key. + The type of the third key. + The type of the fourth key. + The type of the fifth key. + The type of the value stored in the context object. + The first key. + The second key. + The third key. + The fourth key. + The fifth key. + The default value, used for when the context object is first created. + + + + Gets a LocalPersistentContext object for the specified key. + Returns true when the context is first created. Otherwise false. + + The type of the first key. + The type of the value stored in the context object. + The first key. + The persistent context object. + Returns true when the context is first created. Otherwise false. + + + + Gets a LocalPersistentContext object for the specified keys. + Returns true when the context is first created. Otherwise false. + + The type of the first key. + The type of the second key. + The type of the value stored in the context object. + The first key. + The second key. + The persistent context object. + Returns true when the context is first created. Otherwise false. + + + + Gets a LocalPersistentContext object for the specified keys. + Returns true when the context is first created. Otherwise false. + + The type of the first key. + The type of the second key. + The type of the third key. + The type of the value stored in the context object. + The first key. + The second key. + The third key. + The persistent context object. + Returns true when the context is first created. Otherwise false. + + + + Gets a LocalPersistentContext object for the specified keys. + Returns true when the context is first created. Otherwise false. + + The type of the first key. + The type of the second key. + The type of the third key. + The type of the fourth key. + The type of the value stored in the context object. + The first key. + The second key. + The third key. + The fourth key. + The persistent context object. + Returns true when the context is first created. Otherwise false. + + + + Gets a LocalPersistentContext object for the specified keys. + Returns true when the context is first created. Otherwise false. + + The type of the first key. + The type of the second key. + The type of the third key. + The type of the fourth key. + The type of the fifth key. + The type of the value stored in the context object. + The first key. + The second key. + The third key. + The fourth key. + The fifth key. + The persistent context object. + Returns true when the context is first created. Otherwise false. + + + + Persistent Context cache object. + + + + + Estimated cache size in bytes. + + + + + The current number of context entries in the cache. + + + + + If true then persistent context is disabled entirely. + + + + + If true the context will be saved to a file in the temp directory. + + + + + The max size of the cache in bytes. + + + + + Delete the persistent cache file. + + + + + Access the StaticInspectorWindow from Tools > Odin Inspector > Static Inspector. + + + + + Member filter for access modifiers. + + + + + include public members. + + + + + Include Non-public members. + + + + + Include both public and non-public members. + + + + + Member filter for member types. + + + + + No members included. + + + + + Include field members. + + + + + Include property members. + + + + + Include method members. + + + + + Include group members. + + + + + Include members from the base types. + + + + + Include members marked with the Obsolete attribute. + + + + + Include all members except members marked with the Obsolete attribute. + + + + + Shows the window. + + + + + Opens a new static inspector window for the given type. + + + + + Draws the Odin Editor Window. + + + + + Draws the editor for the this.CurrentDrawingTargets[index]. + + + + + Contains references to UnityEngine.Networking types. These types have been removed in Unity 2019+, and thus may be null. + + + + + Contains configuration for generating an assembly that provides increased AOT support in Odin. + + + + + + Whether to automatically scan the project and generate an AOT dll, right before builds. This will only affect platforms that are in the list. + + + **This will only work on Unity 5.6 and higher!** + + + + + + Whether to automatically delete the generated AOT dll after a build has completed. + + + + + A list of platforms to automatically scan the project and generate an AOT dll for, right before builds. This will do nothing unless is true. + + + + + The path to the AOT folder that the AOT .dll and linker file is created in, relative to the current project folder. + + + + + Scans the entire project for types to support AOT serialization for. + + + + + Generates an AOT DLL, using the current configuration of the AOTGenerationConfig instance. + + + + + The Odin Inspector Serialization Debugger Window. + + + + + + Opens the Serialization Debugger Window with the last debugged type. + + + + + Opens the Serialization Debugger Window and debugs the given type. + + The type to debug serialization of. + + + + Initializes the Serialization Debugger Window. + + + + diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.OdinInspector.Editor.xml.meta b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.OdinInspector.Editor.xml.meta new file mode 100644 index 00000000..53bd1df8 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.OdinInspector.Editor.xml.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a4865f1ab4504ed8a368670db22f096f +timeCreated: 1488828285 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.Serialization.Config.dll b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.Serialization.Config.dll new file mode 100644 index 00000000..6f012fe6 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.Serialization.Config.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a4e0901a359a663c81a8094c9807576420de704ba5e9c4d4fede0d426c0816c0 +size 17408 diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.Serialization.Config.dll.meta b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.Serialization.Config.dll.meta new file mode 100644 index 00000000..6b0a88ab --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.Serialization.Config.dll.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 74721b9f0af448f5ae2e91102a1a5edd +timeCreated: 1488828285 +licenseType: Store +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + isOverridable: 0 + platformData: + Any: + enabled: 1 + settings: + Exclude Android: 0 + Exclude Editor: 0 + Exclude Linux: 0 + Exclude Linux64: 0 + Exclude LinuxUniversal: 0 + Exclude N3DS: 0 + Exclude OSXIntel: 0 + Exclude OSXIntel64: 0 + Exclude OSXUniversal: 0 + Exclude PS4: 0 + Exclude PSM: 0 + Exclude PSP2: 0 + Exclude SamsungTV: 0 + Exclude Tizen: 0 + Exclude WebGL: 0 + Exclude WiiU: 0 + Exclude Win: 0 + Exclude Win64: 0 + Exclude WindowsStoreApps: 0 + Exclude XboxOne: 0 + Exclude iOS: 0 + Exclude tvOS: 0 + Editor: + enabled: 0 + settings: + DefaultValueInitialized: true + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.Serialization.Config.xml b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.Serialization.Config.xml new file mode 100644 index 00000000..f9e16abb --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.Serialization.Config.xml @@ -0,0 +1,202 @@ + + + + Sirenix.Serialization.Config + + + + + A helper class for quickly and easily defining custom loggers. + + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Specifies a data format to read and write in. + + + + + A custom packed binary format. This format is most efficient and almost allocation-free, + but its serialized data is not human-readable. + + + + + A JSON format compliant with the json specification found at "http://www.json.org/". + + This format has rather sluggish performance and allocates frightening amounts of string garbage. + + + + + A format that does not serialize to a byte stream, but to a list of data nodes in memory + which can then be serialized by Unity. + + This format is highly inefficient, and is primarily used for ensuring that Unity assets + are mergeable by individual values when saved in Unity's text format. This makes + serialized values more robust and data recovery easier in case of issues. + + This format is *not* recommended for use in builds. + + + + + Defines default loggers for serialization and deserialization. This class and all of its loggers are thread safe. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + The policy for handling errors during serialization and deserialization. + + + + + Attempts will be made to recover from errors and continue serialization. Data may become invalid. + + + + + Exceptions will be thrown when errors are logged. + + + + + Exceptions will be thrown when warnings or errors are logged. + + + + + Not yet documented. + + + + + Text for the cautionary serialization warning shown in the inspector. + + + + + Text for the hide button for the cautionary serialization warning shown in the inspector. + + + + + Text for the hide button for the cautionary prefab warning shown in the inspector. + + + + + Whether the user has chosen to hide the cautionary serialization warning. + + + + + Whether the user has chosen to hide the warning messages related to the OdinSerialize attribute. + + + + + Whether the user has chosen to hide the warning messages related to the SerializeField and ShowInInspector attributes on non-serialized members. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Implements methods for logging warnings, errors and exceptions during serialization and deserialization. + + + + + Logs a warning. + + The warning to log. + + + + Logs an error. + + The error to log. + + + + Logs an exception. + + The exception to log. + + + + The policy for which level of logging to do during serialization and deserialization. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.Serialization.Config.xml.meta b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.Serialization.Config.xml.meta new file mode 100644 index 00000000..31b62364 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.Serialization.Config.xml.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 74721b9f0af448f5ae2e91102a1a096f +timeCreated: 1488828285 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.Serialization.dll b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.Serialization.dll new file mode 100644 index 00000000..9ba6518d --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.Serialization.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ed43a7fe0568b7d1a396ca576aca37a616597a1cef388b458d24817a9b917bd3 +size 369152 diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.Serialization.dll.meta b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.Serialization.dll.meta new file mode 100644 index 00000000..5b6100df --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.Serialization.dll.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 5f3147f7af4c49739579b966c458f5e4 +timeCreated: 1488828285 +licenseType: Store +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + isOverridable: 0 + platformData: + Any: + enabled: 0 + settings: + Exclude Android: 1 + Exclude Editor: 0 + Exclude Linux: 1 + Exclude Linux64: 1 + Exclude LinuxUniversal: 1 + Exclude N3DS: 1 + Exclude OSXIntel: 1 + Exclude OSXIntel64: 1 + Exclude OSXUniversal: 1 + Exclude PS4: 1 + Exclude PSM: 1 + Exclude PSP2: 1 + Exclude SamsungTV: 1 + Exclude Tizen: 1 + Exclude WebGL: 1 + Exclude WiiU: 1 + Exclude Win: 1 + Exclude Win64: 1 + Exclude WindowsStoreApps: 1 + Exclude XboxOne: 1 + Exclude iOS: 1 + Exclude tvOS: 1 + Editor: + enabled: 1 + settings: + DefaultValueInitialized: true + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.Serialization.xml b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.Serialization.xml new file mode 100644 index 00000000..491c5c93 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.Serialization.xml @@ -0,0 +1,9565 @@ + + + + Sirenix.Serialization + + + + + Custom formatter for MethodInfo, since Unity Mono's MethodInfo ISerializable implementation will often crash if the method no longer exists upon deserialization. + + + + + + Provides the actual implementation for deserializing a value of type . + + The uninitialized value to serialize into. This value will have been created earlier using . + The reader to deserialize with. + + + + Provides the actual implementation for serializing a value of type . + + The value to serialize. + The writer to serialize with. + + + + Get an uninitialized object of type . WARNING: If you override this and return null, the object's ID will not be automatically registered and its OnDeserializing callbacks will not be automatically called, before deserialization begins. + You will have to call and immediately after creating the object yourself during deserialization. + + + An uninitialized object of type . + + + + + Custom generic formatter for the generic type definition . + + The element type of the formatted queue. + + + + + Returns null. + + + A null value. + + + + + Provides the actual implementation for deserializing a value of type . + + The uninitialized value to serialize into. This value will have been created earlier using . + The reader to deserialize with. + + + + Provides the actual implementation for serializing a value of type . + + The value to serialize. + The writer to serialize with. + + + + Custom generic formatter for the generic type definition and types derived from it. + + The element type of the formatted stack. + + + + + Returns null. + + + A null value. + + + + + Provides the actual implementation for deserializing a value of type . + + The uninitialized value to serialize into. This value will have been created earlier using . + The reader to deserialize with. + + + + Provides the actual implementation for serializing a value of type . + + The value to serialize. + The writer to serialize with. + + + + Custom formatter for the type. + + + + + + Reads into the specified value using the specified reader. + + The value to read into. + The reader to use. + + + + Writes from the specified value using the specified writer. + + The value to write from. + The writer to use. + + + + + Applying this attribute to a type indicates that in the case where, when expecting to deserialize an instance of the type + or any of its derived types, but encountering an incompatible, uncastable type in the data being read, the serializer + should attempt to deserialize an instance of the expected type using the stored, possibly invalid data. + + + This is equivalent to the option, expect type-specific instead + of global. + + + + + + This class gathers info about the current architecture for the purpose of determinining + the unaligned read/write capabilities that we have to work with. + + + + + This will be false on some ARM architectures, such as ARMv7. + In these cases, we will have to perform slower but safer int-by-int read/writes of data. + + Since this value will never change at runtime, performance hits from checking this + everywhere should hopefully be negligible, since branch prediction from speculative + execution will always predict it correctly. + + + + + Scans the project's build scenes and resources, plus their dependencies, for serialized types to support. Progress bars are shown during the scan. + + The serialized types to support. + Whether to scan the project's build scenes. + Whether to scan all the project's asset bundles. + Whether to scan the project's preloaded assets. + Whether to scan the project's resources. + An optional list of the resource paths to scan. Only has an effect if the scanResources argument is true. All the resources will be scanned if null. + true if the scan succeeded, false if the scan failed or was cancelled + + + + Generates an AOT DLL, using the given parameters. + + + + + Indicates that an Odin-serialized Unity object provides its own serialization policy rather than using the default policy. + + Note that THE VALUES RETURNED BY THIS INTERFACE WILL OVERRIDE THE PARAMETERS PASSED TO and . + + + + + Defines how an assembly's import settings should be configured. + + + + + Include the assembly in the build, but not in the editor. + + + + + Include the assembly in the editor, but not in the build. + + + + + Include the assembly in both the build and in the editor. + + + + + Exclude the assembly from both the build and from the editor. + + + + + Utility for correctly setting import on OdinSerializer assemblies based on platform and scripting backend. + + + + + All valid Unity BuildTarget platforms. + + + + + All valid Unity BuildTarget platforms that support Just In Time compilation. + + + + + All scripting backends that support JIT. + + + + + All API compatibility levels that support JIT. + + + + + Set the import settings on the assembly. + + The path to the assembly to configure import settings from. + The import settings to configure for the assembly at the path. + + + + Set the import settings on the assembly. + + The path to the assembly to configure import settings from. + Indicates if the assembly should be included in the build. + Indicates if the assembly should be included in the Unity editor. + + + + Gets the current scripting backend for the build from the Unity editor. This method is Unity version independent. + + + + + + Gets the current API compatibility level from the Unity Editor. This method is Unity version independent. + + + + + + Gets a value that indicates if the specified platform supports JIT. + + The platform to test. + true if the platform supports JIT; otherwise false. + + + + Gets a value that indicates if the specified scripting backend supports JIT. + + The backend to test. + true if the backend supports JIT; otherwise false. + + + + Gets a value that indicates if the specified api level supports JIT. + + The api level to test. + true if the api level supports JIT; otherwise false. + + + + Gets a value that indicates if the specified build settings supports JIT. + + The platform build setting. + The scripting backend build settting. + The api level build setting. + true if the build settings supports JIT; otherwise false. + + + + FieldInfo method extensions. + + + + + Determines whether the specified field is an alias. + + The field to check. + + true if the specified field is an alias; otherwise, false. + + + + + Returns the original, backing field of an alias field if the field is an alias. + + The field to check. + /// if set to true an exception will be thrown if the field is not aliased. + + The field was not aliased; this only occurs if throwOnNotAliased is true. + + + + Garbage free enumerator methods. + + + + + Garbage free enumerator for lists. + + + + + Garbage free enumerator for dictionaries. + + + + + Garbage free enumator for dictionary values. + + + + + Garbage free enumerator for hashsets. + + + + + List iterator. + + + + + Creates a list iterator. + + + + + Gets the enumerator. + + + + + Gets the current value. + + + + + Moves to the next value. + + + + + Disposes the iterator. + + + + + Hashset iterator. + + + + + Creates a hashset iterator. + + + + + Gets the enumerator. + + + + + Gets the current value. + + + + + Moves to the next value. + + + + + Disposes the iterator. + + + + + Dictionary iterator. + + + + + Creates a dictionary iterator. + + + + + Gets the enumerator. + + + + + Gets the current value. + + + + + Moves to the next value. + + + + + Disposes the iterator. + + + + + Dictionary value iterator. + + + + + Creates a dictionary value iterator. + + + + + Gets the enumerator. + + + + + Gets the current value. + + + + + Moves to the next value. + + + + + Disposes the iterator. + + + + + Various LinQ extensions. + + + + + Perform an action on each item. + + The source. + The action to perform. + + + + Perform an action on each item. + + The source. + The action to perform. + + + + Add a collection to the end of another collection. + + The collection. + The collection to append. + + + + MemberInfo method extensions. + + + + + Returns true if the attribute whose type is specified by the generic argument is defined on this member + + + + + Returns true if the attribute whose type is specified by the generic argument is defined on this member + + + + + Returns the first found custom attribute of type T on this member + Returns null if none was found + + + + + Returns the first found non-inherited custom attribute of type T on this member + Returns null if none was found + + + + + Gets all attributes of the specified generic type. + + The member. + + + + Gets all attributes of the specified generic type. + + The member. + If true, specifies to also search the ancestors of element for custom attributes. + + + + Gets all attribute instances defined on a MemeberInfo. + + The member. + + + + Gets all attribute instances on a MemberInfo. + + The member. + If true, specifies to also search the ancestors of element for custom attributes. + + + + If this member is a method, returns the full method name (name + params) otherwise the member name paskal splitted + + + + + Determines whether a FieldInfo, PropertyInfo or MethodInfo is static. + + The member. + + true if the specified member is static; otherwise, false. + + + + + + Determines whether the specified member is an alias. + + The member to check. + + true if the specified member is an alias; otherwise, false. + + + + + Returns the original, backing member of an alias member if the member is an alias. + + The member to check. + /// if set to true an exception will be thrown if the member is not aliased. + + The member was not aliased; this only occurs if throwOnNotAliased is true. + + + + Various extensions for MethodInfo. + + + + + Returns the specified method's full name "methodName(argType1 arg1, argType2 arg2, etc)" + Uses the specified gauntlet to replaces type names, ex: "int" instead of "Int32" + + + + + Returns a string representing the passed method parameters names. Ex "int num, float damage, Transform target" + + + + + Returns the specified method's full name. + + + + + Tests if a method is an extension method. + + + + + Determines whether the specified method is an alias. + + The method to check. + + true if the specified method is an alias; otherwise, false. + + + + + Returns the original, backing method of an alias method if the method is an alias. + + The method to check. + /// if set to true an exception will be thrown if the method is not aliased. + + The method was not aliased; this only occurs if throwOnNotAliased is true. + + + + Determines the type of operator. + + + + + + The == operator. + + + + + The != operator. + + + + + The + operator. + + + + + The - operator. + + + + + The * operator. + + + + + The / operator. + + + + + The < operator. + + + + + The > operator. + + + + + The <= operator. + + + + + The >= operator. + + + + + The % operator. + + + + + The >> operator. + + + + + The << operator. + + + + + The & operator. + + + + + The | operator. + + + + + The ^ operator. + + + + + The ~ operator. + + + + + The && operator. + + + + + The || operator. + + + + + The ! operator. + + + + + DirectoryInfo method extensions. + + + + + Determines whether the directory has a given directory in its hierarchy of children. + + The parent directory. + The sub directory. + + + + PropertyInfo method extensions. + + + + + Determines whether a property is an auto property with a usable getter and setter. + + + + + Determines whether the specified property is an alias. + + The property to check. + + true if the specified property is an alias; otherwise, false. + + + + + Returns the original, backing property of an alias property if the property is an alias. + + The property to check. + /// if set to true an exception will be thrown if the property is not aliased. + + The property was not aliased; this only occurs if throwOnNotAliased is true. + + + + String method extensions. + + + + + Eg MY_INT_VALUE => MyIntValue + + + + + Returns true if this string is null, empty, or contains only whitespace. + + The string to check. + true if this string is null, empty, or contains only whitespace; otherwise, false. + + + + Type method extensions. + + + + + Type name alias lookup. + TypeNameAlternatives["Single"] will give you "float", "UInt16" will give you "ushort", "Boolean[]" will give you "bool[]" etc.. + + + + + Checks whether a given string is a valid CSharp identifier name. This also checks full type names including namespaces. + + The identifier to check. + + + + Determines whether a type can be casted to another type. + + From. + To. + if set to true an implicit or explicit operator must be defined on the given type. + + + + If a type can be casted to another type, this provides a function to manually convert the type. + + From. + To. + if set to true an implicit or explicit operator must be defined on the given type. + + + + If a type can be casted to another type, this provides a function to manually convert the type. + + if set to true an implicit or explicit operator must be defined on the given type. + + + + If a type can be casted to another type, this provides the method info of the method in charge of converting the type. + + From. + To. + if set to true an implicit or explicit operator must be defined on the given type. + + + + Gets an equality comparer delegate used to compare the equality of values of a given type. In order, this will be: + + 1. The == operator, if one is defined on the type. + 2. A delegate that uses , if the type implements that interface. + 3. .NET's own + + + Note that in the special case of the type , a special equality comparer is returned that only checks whether all the Quaternion components are equal. + This is because, by default, Quaternion's equality operator is broken when operating on invalid quaternions; "default(Quaternion) == default(Quaternion)" evaluates to false, and this causes a multitude of problems. + Special delegates are also returned for float and double, that consider float.NaN to be equal to float.NaN, and double.NaN to be equal to double.NaN. + + + + + Gets the first attribute of type T. Returns null in the no attribute of type T was found. + + The type. + If true, specifies to also search the ancestors of element for custom attributes. + + + + Determines whether a type implements or inherits from another type. + + The type. + To. + + + + Determines whether a type implements an open generic interface or class such as IList<> or List<>. + + Type of the candidate. + Type of the open generic type. + + + + + Determines whether a type implements an open generic interface such as IList<>. + + Type of the candidate. + Type of the open generic interface. + + Type " + openGenericInterfaceType.Name + " is not a generic type definition and an interface. + + + + Determines whether a type implements an open generic class such as List<>. + + Type of the candidate. + Type of the open generic interface. + + + + Gets the generic arguments of an inherited open generic class or interface. + + Type of the candidate. + The open generic type to get the arguments of. + + + + Gets the generic arguments of an inherited open generic class. + + Type of the candidate. + Type of the open generic class. + + + + Gets the generic arguments of an inherited open generic interface. + + Type of the candidate. + Type of the open generic interface. + + + + Gets the MethodInfo of a specific operator kind, with the given left and right operands. This overload is *far* faster than any of the other GetOperatorMethod implementations, and should be used whenever possible. + + + + + Gets the MethodInfo of a specific operator type. + + + + + Gets the MethodInfo of a specific operator type. + + + + + Gets all members from a given type, including members from all base types if the flag isn't set. + + + + + Gets all members from a given type, including members from all base types. + + + + + Gets all members of a specific type from a type, including members from all base types, if the flag isn't set. + + + + + Gets the generic type definition of an open generic base type. + + + + + Gets the generic type definition of an open generic base type. + + + + + Returns a lazy enumerable of all the base types of this type including interfaces and classes + + + + + Returns a lazy enumerable of all the base classes of this type + + + + + Used to filter out unwanted type names. Ex "int" instead of "Int32" + + + + + Returns a nicely formatted name of a type. + + + + + Returns a nicely formatted full name of a type. + + + + + Gets the name of the compilable nice. + + The type. + + + + Gets the full name of the compilable nice. + + The type. + + + + Returns the first found custom attribute of type T on this type + Returns null if none was found + + + + + Returns the first found non-inherited custom attribute of type T on this type + Returns null if none was found + + + + + Gets all attributes of type T. + + The type. + + + + Gets all attributes of type T. + + The type + If true, specifies to also search the ancestors of element for custom attributes. + + + + Returns true if the attribute whose type is specified by the generic argument is defined on this type + + + + + Returns true if the attribute whose type is specified by the generic argument is defined on this type + + + + + Determines whether a type inherits or implements another type. Also include support for open generic base types such as List<>. + + + + + + Determines whether a type inherits or implements another type. Also include support for open generic base types such as List<>. + + + + + + + Gets the number of base types between given type and baseType. + + + + + Determines whether a method has the specified parameter types. + + + + + FieldInfo will return the fieldType, propertyInfo the PropertyType, MethodInfo the return type and EventInfo will return the EventHandlerType. + + The MemberInfo. + + + + Gets the value contained in a given . Currently only and is supported. + + The to get the value of. + The instance to get the value from. + The value contained in the given . + Can't get the value of the given type. + + + + Sets the value of a given MemberInfo. Currently only and is supported. + + The to set the value of. + The object to set the value on. + The value to set. + + Property has no setter + or + Can't set the value of the given type. + + + + + Tries to infer a set of valid generic parameters for a generic type definition, given a subset of known parameters. + + The generic type definition to attempt to infer parameters for. + The inferred parameters, if inferral was successful. + The known parameters to infer from. + True if the parameters could be inferred, otherwise, false. + + genericTypeDefinition is null + or + knownParameters is null + + The genericTypeDefinition parameter must be a generic type definition. + + + + Checks whether an array of types satisfy the constraints of a given generic type definition. + If this method returns true, the given parameters can be safely used with with the given generic type definition. + + The generic type definition to check. + The parameters to check validity for. + + genericType is null + or + types is null + + The genericType parameter must be a generic type definition. + + + + Checks whether an array of types satisfy the constraints of a given generic method definition. + If this method returns true, the given parameters can be safely used with with the given generic method definition. + + The generic method definition to check. + The parameters to check validity for. + + genericType is null + or + types is null + + The genericMethod parameter must be a generic method definition. + + + + Before calling this method we must ALWAYS hold a lock on the GenericConstraintsSatisfaction_LOCK object, as that is an implicit assumption it works with. + + + + + Not yet documented. + + + + + Formats a string with the specified generic parameter constraints on any given type. Example output: where T : class + + + + + Determines whether a generic type contains the specified generic argument constraints. + + The type. + The generic argument types. + + + + Determines whether a type is a fully constructed generic type. + + + + + Determines whether a type is nullable by ensuring the type is neither a PrimitiveType, ValueType or an Enum. + + + + + Gets the enum bitmask in a ulong. + + enumType + + + + Extends various Unity classes. + + + + + Determines whether a Unity object is null or "fake null", + without ever calling Unity's own equality operators. + This method is useful for checking if a Unity object is + null, destroyed or missing at times when it is not allowed + to call Unity's own equality operators, for example when + not running on the main thread. + + The Unity object to check. + True if the object is null, missing or destroyed; otherwise false. + + + + Provides an easy way of claiming and freeing cached values of any non-abstract reference type with a public parameterless constructor. + + Cached types which implement the interface will receive notifications when they are claimed and freed. + + Only one thread should be holding a given cache instance at a time if is implemented, since the invocation of + is not thread safe, IE, weird stuff might happen if multiple different threads are trying to free + the same cache instance at the same time. This will practically never happen unless you're doing really strange stuff, but the case is documented here. + + The type which is cached. + + + + + Gets or sets the maximum size of the cache. This value can never go beneath 1. + + + The maximum size of the cache. + + + + + The cached value. + + + + + Gets a value indicating whether this cached value is free. + + + true if this cached value is free; otherwise, false. + + + + + Claims a cached value of type . + + A cached value of type . + + + + Releases a cached value. + + The cached value to release. + The cached value to release is null. + + + + Performs an implicit conversion from to . + + The cache to convert. + + The result of the conversion. + + + + + Releases this cached value. + + + + + Releases this cached value. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Provides utilities for using the namespace. + + This class is due for refactoring. Use at your own peril. + + + + + Gets a value indicating whether emitting is supported on the current platform. + + + true if the current platform can emit; otherwise, false. + + + + + Creates a delegate which gets the value of a field. If emitting is not supported on the current platform, the delegate will use reflection to get the value. + + The type of the field to get a value from. + The instance describing the field to create a getter for. + A delegate which gets the value of the given field. + The fieldInfo parameter is null. + + + + Creates a delegate which gets the value of a field. If emitting is not supported on the current platform, the delegate will use reflection to get the value. + + The instance describing the field to create a getter for. + A delegate which gets the value of the given field. + The fieldInfo parameter is null. + + + + Creates a delegate which sets the value of a field. If emitting is not supported on the current platform, the delegate will use reflection to set the value. + + The type of the field to set a value to. + The instance describing the field to create a setter for. + A delegate which sets the value of the given field. + The fieldInfo parameter is null. + + + + Creates a delegate which sets the value of a field. If emitting is not supported on the current platform, the delegate will use reflection to set the value. + + The instance describing the field to create a setter for. + A delegate which sets the value of the given field. + The fieldInfo parameter is null. + + + + Creates a delegate which gets the value of a field. If emitting is not supported on the current platform, the delegate will use reflection to get the value. + + The type of the instance to get a value from. + The type of the field to get a value from. + The instance describing the field to create a getter for. + A delegate which gets the value of the given field. + The fieldInfo parameter is null. + + + + Creates a delegate which gets the value of a field from a weakly typed instance of a given type. If emitting is not supported on the current platform, the delegate will use reflection to get the value. + + The type of the field to get a value from. + The of the instance to get a value from. + The instance describing the field to create a getter for. + A delegate which gets the value of the given field. + The fieldInfo parameter is null. + + + + Creates a delegate which gets the weakly typed value of a field from a weakly typed instance of a given type. If emitting is not supported on the current platform, the delegate will use reflection to get the value. + + The of the instance to get a value from. + The instance describing the field to create a getter for. + A delegate which gets the value of the given field. + The fieldInfo parameter is null. + + + + Creates a delegate which sets the value of a field. If emitting is not supported on the current platform, the delegate will use reflection to set the value. + + The type of the instance to set a value on. + The type of the field to set a value to. + The instance describing the field to create a setter for. + A delegate which sets the value of the given field. + The fieldInfo parameter is null. + + + + Creates a delegate which sets the value of a field on a weakly typed instance of a given type. If emitting is not supported on the current platform, the delegate will use reflection to set the value. + + The type of the field to set a value to. + Type of the instance. + The instance describing the field to create a setter for. + + A delegate which sets the value of the given field. + + The fieldInfo parameter is null. + Field cannot be static. + + + + Creates a delegate which sets the weakly typed value of a field on a weakly typed instance of a given type. If emitting is not supported on the current platform, the delegate will use reflection to set the value. + + Type of the instance. + The instance describing the field to create a setter for. + + A delegate which sets the value of the given field. + + The fieldInfo parameter is null. + Field cannot be static. + + + + Creates a delegate which gets the weakly typed value of a field from a weakly typed instance of a given type. If emitting is not supported on the current platform, the delegate will use reflection to get the value. + + The of the instance to get a value from. + The instance describing the field to create a getter for. + A delegate which gets the value of the given field. + The fieldInfo parameter is null. + + + + Creates a delegate which sets the weakly typed value of a property on a weakly typed instance of a given type. If emitting is not supported on the current platform, the delegate will use reflection to set the value. + + Type of the instance. + The instance describing the property to create a setter for. + + A delegate which sets the value of the given field. + + The fieldInfo parameter is null. + Property cannot be static. + + + + Creates a delegate which sets the value of a property. If emitting is not supported on the current platform, the delegate will use reflection to set the value. + + The type of the property to set a value to. + The instance describing the property to create a setter for. + A delegate which sets the value of the given property. + The propertyInfo parameter is null. + + + + Creates a delegate which gets the value of a property. If emitting is not supported on the current platform, the delegate will use reflection to get the value. + + The type of the property to get a value from. + The instance describing the property to create a getter for. + A delegate which gets the value of the given property. + The propertyInfo parameter is null. + + + + Creates a delegate which sets the value of a property. If emitting is not supported on the current platform, the delegate will use reflection to set the value. + + The type of the instance to set a value on. + The type of the property to set a value to. + The instance describing the property to create a setter for. + A delegate which sets the value of the given property. + The propertyInfo parameter is null. + + + + Creates a delegate which gets the value of a property. If emitting is not supported on the current platform, the delegate will use reflection to get the value. + + The type of the instance to get a value from. + The type of the property to get a value from. + The instance describing the property to create a getter for. + A delegate which gets the value of the given property. + The propertyInfo parameter is null. + + + + Creates a fast delegate method which calls a given parameterless instance method and returns the result. + + The type of the class which the method is on. + The type which is returned by the given method info. + The method info instance which is used. + A delegate which calls the method and returns the result, except it's hundreds of times faster than MethodInfo.Invoke. + + + + Creates a fast delegate method which calls a given parameterless static method. + + The method info instance which is used. + A delegate which calls the method and returns the result, except it's hundreds of times faster than MethodInfo.Invoke. + + + + Creates a fast delegate method which calls a given parameterless weakly typed instance method. + + The method info instance which is used. + A delegate which calls the method and returns the result, except it's hundreds of times faster than MethodInfo.Invoke. + + + + Not yet documented. + + + + + Creates a fast delegate method which calls a given weakly typed instance method with one argument and returns a value. + + The type of the result. + The type of the first argument. + The method info instance which is used. + + A delegate which calls the method and returns the result, except it's hundreds of times faster than MethodInfo.Invoke. + + methodInfo + + Given method ' + methodInfo.Name + ' is static when it has to be an instance method. + or + Given method ' + methodInfo.Name + ' must return type + typeof(TResult) + . + or + Given method ' + methodInfo.Name + ' must have exactly one parameter. + or + The first parameter of the method ' + methodInfo.Name + ' must be of type + typeof(TArg1) + . + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Creates a fast delegate method which calls a given parameterless instance method on a reference type. + + The type of the class which the method is on. + The method info instance which is used. + A delegate which calls the method and returns the result, except it's hundreds of times faster than MethodInfo.Invoke. + + + + Creates a fast delegate method which calls a given instance method with a given argument on a reference type. + + The type of the class which the method is on. + The type of the argument with which to call the method. + The method info instance which is used. + A delegate which calls the method and returns the result, except it's hundreds of times faster than MethodInfo.Invoke. + + + + Creates a fast delegate method which calls a given parameterless instance method. + + The type of the class which the method is on. + The method info instance which is used. + A delegate which calls the method and returns the result, except it's hundreds of times faster than MethodInfo.Invoke. + + + + Creates a fast delegate method which calls a given instance method with a given argument on a struct type. + + The type of the class which the method is on. + The type of the argument with which to call the method. + The method info instance which is used. + A delegate which calls the method and returns the result, except it's hundreds of times faster than MethodInfo.Invoke. + + + + Compares types by reference before comparing them using the default type equality operator. + This can constitute a *significant* speedup when used as the comparer for dictionaries. + + + + + + This class encapsulates common combinations. + + + + + Search criteria encompassing all public and non-public members, including base members. + Note that you also need to specify either the Instance or Static flag. + + + + + Search criteria encompassing all public instance members, including base members. + + + + + Search criteria encompassing all non-public instance members, including base members. + + + + + Search criteria encompassing all public and non-public instance members, including base members. + + + + + Search criteria encompassing all public static members, including base members. + + + + + Search criteria encompassing all non-public static members, including base members. + + + + + Search criteria encompassing all public and non-public static members, including base members. + + + + + Search criteria encompassing all public instance members, excluding base members. + + + + + Search criteria encompassing all non-public instance members, excluding base members. + + + + + Search criteria encompassing all public and non-public instance members, excluding base members. + + + + + Search criteria encompassing all public static members, excluding base members. + + + + + Search criteria encompassing all non-public static members, excluding base members. + + + + + Search criteria encompassing all public and non-public static members, excluding base members. + + + + + Search criteria encompassing all members, including base and static members. + + + + + Search criteria encompassing all members (public and non-public, instance and static), including base members. + + + + + Provides notification callbacks for values that are cached using the class. + + + + + Called when the cached value is freed. + + + + + Called when the cached value is claimed. + + + + + Interface for immutable list. + + + + + Interface for generic immutable list. + + + + + Index accessor. + + + + + Immutable list wraps another list, and allows for reading the inner list, without the ability to change it. + + + + + Creates an immutable list around another list. + + + + + Number of items in the list. + + + + + Immutable list cannot be changed directly, so it's size is always fixed. + + + + + Immutable list are always readonly. + + + + + Returns true if the inner list is synchronized. + + + + + Gets the sync root object. + + + + + Index accessor. + + Index. + + + + Returns true if the item is contained in the list. + + The item's value. + + + + Copy the list to an array, + + Target array. + Index. + + + + Copy the list to an array, + + Target array. + Index. + + + + Gets an enumerator. + + + + + Get the index of a value. + + The item's value. + + + + Immutable list cannot be edited. + + Index. + + + + Immutable list cannot be edited. + + Index. + Item. + + + + Immutable list cannot be edited. + + Item. + + + + Immutable list cannot be edited. + + + + + Immutable list cannot be edited. + + Item. + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Immutable list wraps another list, and allows for reading the inner list, without the ability to change it. + + + + + Creates an immutable list around another list. + + + + + Number of items in the list. + + + + + Immutable list are always readonly. + + + + + Index accessor. + + Index. + + + + Returns true if the item is contained in the list. + + + + + Copies the list to an array. + + + + + Gets an enumerator. + + + + + Gets the index of an item. + + + + + Provides a methods of representing imaginary fields which are unique to serialization. + + We aggregate the FieldInfo associated with this member and return a mangled form of the name. + + + + + + The default fake name separator string. + + + + + Initializes a new instance of the class. + + The field to alias. + The name prefix to use. + + + + Initializes a new instance of the class. + + The field to alias. + The name prefix to use. + The separator string to use. + + + + Gets the aliased field. + + + The aliased field. + + + + + Gets the module in which the type that declares the member represented by the current is defined. + + + + + Gets a value that identifies a metadata element. + + + + + Gets the name of the current member. + + + + + Gets the class that declares this member. + + + + + Gets the class object that was used to obtain this instance of MemberInfo. + + + + + Gets the type of the field. + + + The type of the field. + + + + + Gets a RuntimeFieldHandle, which is a handle to the internal metadata representation of a field. + + + + + Gets the attributes. + + + The attributes. + + + + + When overridden in a derived class, returns an array of all custom attributes applied to this member. + + True to search this member's inheritance chain to find the attributes; otherwise, false. This parameter is ignored for properties and events; see Remarks. + + An array that contains all the custom attributes applied to this member, or an array with zero elements if no attributes are defined. + + + + + When overridden in a derived class, returns an array of custom attributes applied to this member and identified by . + + The type of attribute to search for. Only attributes that are assignable to this type are returned. + True to search this member's inheritance chain to find the attributes; otherwise, false. This parameter is ignored for properties and events; see Remarks. + + An array of custom attributes applied to this member, or an array with zero elements if no attributes assignable to have been applied. + + + + + When overridden in a derived class, indicates whether one or more attributes of the specified type or of its derived types is applied to this member. + + The type of custom attribute to search for. The search includes derived types. + True to search this member's inheritance chain to find the attributes; otherwise, false. This parameter is ignored for properties and events; see Remarks. + + True if one or more instances of or any of its derived types is applied to this member; otherwise, false. + + + + + Gets the value of the field. + + The object instance to get the value from. + The value of the field. + + + + When overridden in a derived class, sets the value of the field supported by the given object. + + The object whose field value will be set. + The value to assign to the field. + A field of Binder that specifies the type of binding that is desired (for example, Binder.CreateInstance or Binder.ExactBinding). + A set of properties that enables the binding, coercion of argument types, and invocation of members through reflection. If is null, then Binder.DefaultBinding is used. + The software preferences of a particular culture. + + + + Provides a methods of representing aliased methods. + + In this case, what we're representing is a method on a parent class with the same name. + + We aggregate the MethodInfo associated with this member and return a mangled form of the name. + The name that we return is "parentname+methodName". + + + + + + The default fake name separator string. + + + + + Initializes a new instance of the class. + + The method to alias. + The name prefix to use. + + + + Initializes a new instance of the class. + + The method to alias. + The name prefix to use. + The separator string to use. + + + + Gets the aliased method. + + + The aliased method. + + + + + Gets the custom attributes for the return type. + + + + + Gets a handle to the internal metadata representation of a method. + + + + + Gets the attributes associated with this method. + + + + + Gets the class that declares this member. + + + + + Gets the name of the current member. + + + + + Gets the class object that was used to obtain this instance of MemberInfo. + + + + + When overridden in a derived class, returns the MethodInfo object for the method on the direct or indirect base class in which the method represented by this instance was first declared. + + + A MethodInfo object for the first implementation of this method. + + + + + When overridden in a derived class, returns an array of all custom attributes applied to this member. + + true to search this member's inheritance chain to find the attributes; otherwise, false. This parameter is ignored for properties and events; see Remarks. + + An array that contains all the custom attributes applied to this member, or an array with zero elements if no attributes are defined. + + + + + When overridden in a derived class, returns an array of custom attributes applied to this member and identified by . + + The type of attribute to search for. Only attributes that are assignable to this type are returned. + true to search this member's inheritance chain to find the attributes; otherwise, false. This parameter is ignored for properties and events; see Remarks. + + An array of custom attributes applied to this member, or an array with zero elements if no attributes assignable to have been applied. + + + + + When overridden in a derived class, returns the flags. + + + The MethodImplAttributes flags. + + + + + When overridden in a derived class, gets the parameters of the specified method or constructor. + + + An array of type ParameterInfo containing information that matches the signature of the method (or constructor) reflected by this MethodBase instance. + + + + + When overridden in a derived class, invokes the reflected method or constructor with the given parameters. + + The object on which to invoke the method or constructor. If a method is static, this argument is ignored. If a constructor is static, this argument must be null or an instance of the class that defines the constructor. + A bitmask that is a combination of 0 or more bit flags from . If is null, this parameter is assigned the value ; thus, whatever you pass in is ignored. + An object that enables the binding, coercion of argument types, invocation of members, and retrieval of MemberInfo objects via reflection. If is null, the default binder is used. + An argument list for the invoked method or constructor. This is an array of objects with the same number, order, and type as the parameters of the method or constructor to be invoked. If there are no parameters, this should be null.If the method or constructor represented by this instance takes a ByRef parameter, there is no special attribute required for that parameter in order to invoke the method or constructor using this function. Any object in this array that is not explicitly initialized with a value will contain the default value for that object type. For reference-type elements, this value is null. For value-type elements, this value is 0, 0.0, or false, depending on the specific element type. + An instance of CultureInfo used to govern the coercion of types. If this is null, the CultureInfo for the current thread is used. (This is necessary to convert a String that represents 1000 to a Double value, for example, since 1000 is represented differently by different cultures.) + + An Object containing the return value of the invoked method, or null in the case of a constructor, or null if the method's return type is void. Before calling the method or constructor, Invoke checks to see if the user has access permission and verifies that the parameters are valid.CautionElements of the array that represent parameters declared with the ref or out keyword may also be modified. + + + + + When overridden in a derived class, indicates whether one or more attributes of the specified type or of its derived types is applied to this member. + + The type of custom attribute to search for. The search includes derived types. + true to search this member's inheritance chain to find the attributes; otherwise, false. This parameter is ignored for properties and events; see Remarks. + + true if one or more instances of or any of its derived types is applied to this member; otherwise, false. + + + + + Provides a methods of representing imaginary properties which are unique to serialization. + + We aggregate the PropertyInfo associated with this member and return a mangled form of the name. + + + + + + The default fake name separator string. + + + + + Initializes a new instance of the class. + + The property to alias. + The name prefix to use. + + + + Initializes a new instance of the class. + + The property to alias. + The name prefix to use. + The separator string to use. + + + + The backing PropertyInfo that is being aliased. + + + + + Gets the module in which the type that declares the member represented by the current is defined. + + + + + Gets a value that identifies a metadata element. + + + + + Gets the name of the current member. + + + + + Gets the class that declares this member. + + + + + Gets the class object that was used to obtain this instance of MemberInfo. + + + + + Gets the type of the property. + + + The type of the property. + + + + + Gets the attributes. + + + The attributes. + + + + + Gets a value indicating whether this instance can read. + + + true if this instance can read; otherwise, false. + + + + + Gets a value indicating whether this instance can write. + + + true if this instance can write; otherwise, false. + + + + + When overridden in a derived class, returns an array of all custom attributes applied to this member. + + True to search this member's inheritance chain to find the attributes; otherwise, false. This parameter is ignored for properties and events; see Remarks. + + An array that contains all the custom attributes applied to this member, or an array with zero elements if no attributes are defined. + + + + + When overridden in a derived class, returns an array of custom attributes applied to this member and identified by . + + The type of attribute to search for. Only attributes that are assignable to this type are returned. + True to search this member's inheritance chain to find the attributes; otherwise, false. This parameter is ignored for properties and events; see Remarks. + + An array of custom attributes applied to this member, or an array with zero elements if no attributes assignable to have been applied. + + + + + When overridden in a derived class, indicates whether one or more attributes of the specified type or of its derived types is applied to this member. + + The type of custom attribute to search for. The search includes derived types. + True to search this member's inheritance chain to find the attributes; otherwise, false. This parameter is ignored for properties and events; see Remarks. + + True if one or more instances of or any of its derived types is applied to this member; otherwise, false. + + + + + Returns an array whose elements reflect the public and, if specified, non-public get, set, and other accessors of the property reflected by the current instance. + + Indicates whether non-public methods should be returned in the MethodInfo array. true if non-public methods are to be included; otherwise, false. + + An array of objects whose elements reflect the get, set, and other accessors of the property reflected by the current instance. If is true, this array contains public and non-public get, set, and other accessors. If is false, this array contains only public get, set, and other accessors. If no accessors with the specified visibility are found, this method returns an array with zero (0) elements. + + + + + When overridden in a derived class, returns the public or non-public get accessor for this property. + + Indicates whether a non-public get accessor should be returned. true if a non-public accessor is to be returned; otherwise, false. + + A MethodInfo object representing the get accessor for this property, if is true. Returns null if is false and the get accessor is non-public, or if is true but no get accessors exist. + + + + + Gets the index parameters of the property. + + The index parameters of the property. + + + + When overridden in a derived class, returns the set accessor for this property. + + Indicates whether the accessor should be returned if it is non-public. true if a non-public accessor is to be returned; otherwise, false. + + Value Condition A object representing the Set method for this property. The set accessor is public.-or- is true and the set accessor is non-public. null is true, but the property is read-only.-or- is false and the set accessor is non-public.-or- There is no set accessor. + + + + + Gets the value of the property on the given instance. + + The object to invoke the getter on. + The to invoke with. + The binder to use. + The indices to use. + The culture to use. + The value of the property on the given instance. + + + + Sets the value of the property on the given instance. + + The object to set the value on. + The value to set. + The to invoke with. + The binder to use. + The indices to use. + The culture to use. + + + + Compares objects by reference only, ignoring equality operators completely. This is used by the property tree reference dictionaries to keep track of references. + + + + + A default, cached instance of this generic variant of the reference equality comparer. + + + + + Returns true if the object references are equal. + + + + + Returns the result of the object's own GetHashCode method. + + + + + Utility class indicating current Unity version. + + + + + Tests current Unity version is equal or greater. + + Minimum major version. + Minimum minor version. + true if the current Unity version is greater. Otherwise false. + + + + The current Unity version major. + + + + + The current Unity version minor. + + + + + Contains utilities for performing common unsafe operations. + + + + + Blindly creates an array of structs from an array of bytes via direct memory copy/blit. + + + + + Blindly creates an array of structs from an array of bytes via direct memory copy/blit. + + + + + Blindly copies an array of structs into an array of bytes via direct memory copy/blit. + + + + + Blindly copies an array of structs into an array of bytes via direct memory copy/blit. + + + + + Creates a new string from the contents of a given byte buffer. + + + + + Writes the contents of a string into a given byte buffer. + + + + + Blindly mem-copies a given number of bytes from the memory location of one object to another. WARNING: This method is ridiculously dangerous. Only use if you know what you're doing. + + + + + Provides basic functionality and overridable abstract methods for implementing a data reader. + + If you inherit this class, it is VERY IMPORTANT that you implement each abstract method to the *exact* specifications the documentation specifies. + + + + + + + Initializes a new instance of the class. + + The base stream of the reader. + The deserialization context to use. + The stream or context is null. + Cannot read from stream. + + + + Gets the current node id. If this is less than zero, the current node has no id. + + + The current node id. + + + + + Gets the current node depth. In other words, the current count of the node stack. + + + The current node depth. + + + + + Gets the name of the current node. + + + The name of the current node. + + + + + Gets or sets the base stream of the reader. + + + The base stream of the reader. + + value + Cannot read from stream + + + + Gets the deserialization context. + + + The deserialization context. + + + + + Tries to enter a node. This will succeed if the next entry is an . + + This call MUST (eventually) be followed by a corresponding call to + + This call will change the values of the , , and properties to the correct values for the current node. + + The type of the node. This value will be null if there was no metadata, or if the reader's serialization binder failed to resolve the type name. + true if entering a node succeeded, otherwise false + + + + Exits the current node. This method will keep skipping entries using until an is reached, or the end of the stream is reached. + + This call MUST have been preceded by a corresponding call to . + + This call will change the values of the , , and to the correct values for the node that was prior to the current node. + + true if the method exited a node, false if it reached the end of the stream. + + + + Tries to enters an array node. This will succeed if the next entry is an . + + This call MUST (eventually) be followed by a corresponding call to + + This call will change the values of the , , and properties to the correct values for the current array node. + + The length of the array that was entered. + true if an array was entered, otherwise false + + + + Exits the closest array. This method will keep skipping entries using until an is reached, or the end of the stream is reached. + + This call MUST have been preceded by a corresponding call to . + + This call will change the values of the , , and to the correct values for the node that was prior to the exited array node. + + true if the method exited an array, false if it reached the end of the stream. + + + + Reads a primitive array value. This call will succeed if the next entry is an . + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The element type of the primitive array. Valid element types can be determined using . + The resulting primitive array. + true if reading a primitive array succeeded, otherwise false + + + + Peeks ahead and returns the type of the next entry in the stream. + + The name of the next entry, if it has one. + The type of the next entry. + + + + Reads an internal reference id. This call will succeed if the next entry is an . + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The internal reference id. + true if reading the value succeeded, otherwise false + + + + Reads an external reference index. This call will succeed if the next entry is an . + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The external reference index. + true if reading the value succeeded, otherwise false + + + + Reads an external reference guid. This call will succeed if the next entry is an . + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The external reference guid. + true if reading the value succeeded, otherwise false + + + + Reads an external reference string. This call will succeed if the next entry is an . + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The external reference string. + + true if reading the value succeeded, otherwise false + + + + + Reads a value. This call will succeed if the next entry is an . + + If the string of the entry is longer than 1 character, the first character of the string will be taken as the result. + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The value that has been read. + true if reading the value succeeded, otherwise false + + + + Reads a value. This call will succeed if the next entry is an . + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The value that has been read. + true if reading the value succeeded, otherwise false + + + + Reads a value. This call will succeed if the next entry is an . + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The value that has been read. + true if reading the value succeeded, otherwise false + + + + Reads an value. This call will succeed if the next entry is an . + + If the value of the stored integer is smaller than or larger than , the result will be default(). + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The value that has been read. + true if reading the value succeeded, otherwise false + + + + Reads a value. This call will succeed if the next entry is an . + + If the value of the stored integer is smaller than or larger than , the result will be default(). + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The value that has been read. + true if reading the value succeeded, otherwise false + + + + Reads an value. This call will succeed if the next entry is an . + + If the value of the stored integer is smaller than or larger than , the result will be default(). + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The value that has been read. + true if reading the value succeeded, otherwise false + + + + Reads a value. This call will succeed if the next entry is an . + + If the value of the stored integer is smaller than or larger than , the result will be default(). + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The value that has been read. + true if reading the value succeeded, otherwise false + + + + Reads a value. This call will succeed if the next entry is an . + + If the value of the stored integer is smaller than or larger than , the result will be default(). + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The value that has been read. + true if reading the value succeeded, otherwise false + + + + Reads an value. This call will succeed if the next entry is an . + + If the value of the stored integer is smaller than or larger than , the result will be default(). + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The value that has been read. + true if reading the value succeeded, otherwise false + + + + Reads an value. This call will succeed if the next entry is an . + + If the value of the stored integer is smaller than or larger than , the result will be default(). + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The value that has been read. + true if reading the value succeeded, otherwise false + + + + Reads an value. This call will succeed if the next entry is an . + + If the value of the stored integer is smaller than or larger than , the result will be default(). + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The value that has been read. + true if reading the value succeeded, otherwise false + + + + Reads a value. This call will succeed if the next entry is an or an . + + If the stored integer or floating point value is smaller than or larger than , the result will be default(). + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The value that has been read. + true if reading the value succeeded, otherwise false + + + + Reads a value. This call will succeed if the next entry is an or an . + + If the stored integer or floating point value is smaller than or larger than , the result will be default(). + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The value that has been read. + true if reading the value succeeded, otherwise false + + + + Reads a value. This call will succeed if the next entry is an or an . + + If the stored integer or floating point value is smaller than or larger than , the result will be default(). + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The value that has been read. + true if reading the value succeeded, otherwise false + + + + Reads a value. This call will succeed if the next entry is an . + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The value that has been read. + true if reading the value succeeded, otherwise false + + + + Reads a null value. This call will succeed if the next entry is an . + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + true if reading the value succeeded, otherwise false + + + + Skips the next entry value, unless it is an or an . If the next entry value is an or an , all of its contents will be processed, deserialized and registered in the deserialization context, so that internal reference values are not lost to entries further down the stream. + + + + + Disposes all resources and streams kept by the data reader. + + + + + Tells the reader that a new serialization session is about to begin, and that it should clear all cached values left over from any prior serialization sessions. + This method is only relevant when the same reader is used to deserialize several different, unrelated values. + + + + + Gets a dump of the data being read by the writer. The format of this dump varies, but should be useful for debugging purposes. + + + + + Peeks the current entry. + + The peeked entry. + + + + Consumes the current entry, and reads to the next one. + + The next entry. + + + + Implements functionality that is shared by both data readers and data writers. + + + + + Gets or sets the context's or writer's serialization binder. + + + The reader's or writer's serialization binder. + + + + + Gets a value indicating whether the reader or writer is in an array node. + + + true if the reader or writer is in an array node; otherwise, false. + + + + + Gets the current node depth. In other words, the current count of the node stack. + + + The current node depth. + + + + + Gets the current node, or if there is no current node. + + + The current node. + + + + + Pushes a node onto the node stack. + + The node to push. + + + + Pushes a node with the given name, id and type onto the node stack. + + The name of the node. + The id of the node. + The type of the node. + + + + Pushes an array node onto the node stack. This uses values from the current node to provide extra info about the array node. + + + + + Pops the current node off of the node stack. + + The name of the node to pop. + + There are no nodes to pop. + or + Tried to pop node with given name, but the current node's name was different. + + + + + Pops the current node if the current node is an array node. + + + + + Provides basic functionality and overridable abstract methods for implementing a data writer. + + If you inherit this class, it is VERY IMPORTANT that you implement each abstract method to the *exact* specifications the documentation specifies. + + + + + + + Initializes a new instance of the class. + + The base stream of the writer. + The serialization context to use. + The stream or context is null. + Cannot write to the stream. + + + + Gets or sets the base stream of the writer. + + + The base stream of the writer. + + value + Cannot write to stream + + + + Gets the serialization context. + + + The serialization context. + + + + + Flushes everything that has been written so far to the writer's base stream. + + + + + Writes the beginning of a reference node. + + This call MUST eventually be followed by a corresponding call to , with the same name. + + The name of the reference node. + The type of the reference node. If null, no type metadata will be written. + The id of the reference node. This id is acquired by calling . + + + + Begins a struct/value type node. This is essentially the same as a reference node, except it has no internal reference id. + + This call MUST eventually be followed by a corresponding call to , with the same name. + + The name of the struct node. + The type of the struct node. If null, no type metadata will be written. + + + + Ends the current node with the given name. If the current node has another name, an is thrown. + + The name of the node to end. This has to be the name of the current node. + + + + Begins an array node of the given length. + + The length of the array to come. + + + + Ends the current array node, if the current node is an array node. + + + + + Writes a primitive array to the stream. + + The element type of the primitive array. Valid element types can be determined using . + The primitive array to write. + + + + Writes a null value to the stream. + + The name of the value. If this is null, no name will be written. + + + + Writes an internal reference to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes an external index reference to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes an external guid reference to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes an external string reference to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes a value to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes a value to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes a value to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes an value to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes a value to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes an value to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes a value to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes a value to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes an value to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes an value to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes an value to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes a value to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes a value to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes a value to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes a value to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Disposes all resources and streams kept by the data writer. + + + + + Tells the writer that a new serialization session is about to begin, and that it should clear all cached values left over from any prior serialization sessions. + This method is only relevant when the same writer is used to serialize several different, unrelated values. + + + + + Gets a dump of the data currently written by the writer. The format of this dump varies, but should be useful for debugging purposes. + + + + + Reads data from a stream that has been written by a . + + + + + + Initializes a new instance of the class. + + The base stream of the reader. + The deserialization context to use. + + + + Disposes all resources kept by the data reader, except the stream, which can be reused later. + + + + + Peeks ahead and returns the type of the next entry in the stream. + + The name of the next entry, if it has one. + + The type of the next entry. + + + + + Tries to enters an array node. This will succeed if the next entry is an . + + This call MUST (eventually) be followed by a corresponding call to + This call will change the values of the , , and properties to the correct values for the current array node. + + The length of the array that was entered. + + true if an array was entered, otherwise false + + + + + Tries to enter a node. This will succeed if the next entry is an . + + This call MUST (eventually) be followed by a corresponding call to + This call will change the values of the , , and properties to the correct values for the current node. + + The type of the node. This value will be null if there was no metadata, or if the reader's serialization binder failed to resolve the type name. + + true if entering a node succeeded, otherwise false + + + + + Exits the closest array. This method will keep skipping entries using until an is reached, or the end of the stream is reached. + + This call MUST have been preceded by a corresponding call to . + + This call will change the values of the , , and to the correct values for the node that was prior to the exited array node. + + + true if the method exited an array, false if it reached the end of the stream. + + + + + Exits the current node. This method will keep skipping entries using until an is reached, or the end of the stream is reached. + + This call MUST have been preceded by a corresponding call to . + + This call will change the values of the , , and to the correct values for the node that was prior to the current node. + + + true if the method exited a node, false if it reached the end of the stream. + + + + + Reads a primitive array value. This call will succeed if the next entry is an . + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The element type of the primitive array. Valid element types can be determined using . + The resulting primitive array. + + true if reading a primitive array succeeded, otherwise false + + Type + typeof(T).Name + is not a valid primitive array type. + + + + Reads a value. This call will succeed if the next entry is an . + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The value that has been read. + + true if reading the value succeeded, otherwise false + + + + + Reads an value. This call will succeed if the next entry is an . + + If the value of the stored integer is smaller than or larger than , the result will be default(). + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The value that has been read. + + true if reading the value succeeded, otherwise false + + + + + Reads a value. This call will succeed if the next entry is an . + + If the value of the stored integer is smaller than or larger than , the result will be default(). + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The value that has been read. + + true if reading the value succeeded, otherwise false + + + + + Reads a value. This call will succeed if the next entry is an . + + If the value of the stored integer is smaller than or larger than , the result will be default(). + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The value that has been read. + + true if reading the value succeeded, otherwise false + + + + + Reads an value. This call will succeed if the next entry is an . + + If the value of the stored integer is smaller than or larger than , the result will be default(). + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The value that has been read. + + true if reading the value succeeded, otherwise false + + + + + Reads an value. This call will succeed if the next entry is an . + + If the value of the stored integer is smaller than or larger than , the result will be default(). + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The value that has been read. + + true if reading the value succeeded, otherwise false + + + + + Reads an value. This call will succeed if the next entry is an . + + If the value of the stored integer is smaller than or larger than , the result will be default(). + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The value that has been read. + + true if reading the value succeeded, otherwise false + + + + + Reads a value. This call will succeed if the next entry is an . + + If the value of the stored integer is smaller than or larger than , the result will be default(). + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The value that has been read. + + true if reading the value succeeded, otherwise false + + + + + Reads an value. This call will succeed if the next entry is an . + + If the value of the stored integer is smaller than or larger than , the result will be default(). + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The value that has been read. + + true if reading the value succeeded, otherwise false + + + + + Reads a value. This call will succeed if the next entry is an . + + If the string of the entry is longer than 1 character, the first character of the string will be taken as the result. + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The value that has been read. + + true if reading the value succeeded, otherwise false + + + + + Reads a value. This call will succeed if the next entry is an or an . + + If the stored integer or floating point value is smaller than or larger than , the result will be default(). + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The value that has been read. + + true if reading the value succeeded, otherwise false + + + + + Reads a value. This call will succeed if the next entry is an or an . + + If the stored integer or floating point value is smaller than or larger than , the result will be default(). + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The value that has been read. + + true if reading the value succeeded, otherwise false + + + + + Reads a value. This call will succeed if the next entry is an or an . + + If the stored integer or floating point value is smaller than or larger than , the result will be default(). + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The value that has been read. + + true if reading the value succeeded, otherwise false + + + + + Reads an external reference guid. This call will succeed if the next entry is an . + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The external reference guid. + + true if reading the value succeeded, otherwise false + + + + + Reads a value. This call will succeed if the next entry is an . + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The value that has been read. + + true if reading the value succeeded, otherwise false + + + + + Reads an external reference index. This call will succeed if the next entry is an . + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The external reference index. + + true if reading the value succeeded, otherwise false + + + + + Reads an external reference string. This call will succeed if the next entry is an . + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The external reference string. + + true if reading the value succeeded, otherwise false + + + + + Reads a null value. This call will succeed if the next entry is an . + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + + true if reading the value succeeded, otherwise false + + + + + Reads an internal reference id. This call will succeed if the next entry is an . + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The internal reference id. + + true if reading the value succeeded, otherwise false + + + + + Reads a value. This call will succeed if the next entry is an . + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The value that has been read. + + true if reading the value succeeded, otherwise false + + + + + Tells the reader that a new serialization session is about to begin, and that it should clear all cached values left over from any prior serialization sessions. + This method is only relevant when the same reader is used to deserialize several different, unrelated values. + + + + + Peeks the current entry. + + The peeked entry. + + + + Consumes the current entry, and reads to the next one. + + The next entry. + + + + Writes data to a stream that can be read by a . + + + + + + Initializes a new instance of the class. + + The base stream of the writer. + The serialization context to use. + + + + Begins an array node of the given length. + + The length of the array to come. + + + + Writes the beginning of a reference node. + + This call MUST eventually be followed by a corresponding call to , with the same name. + + The name of the reference node. + The type of the reference node. If null, no type metadata will be written. + The id of the reference node. This id is acquired by calling . + + + + Begins a struct/value type node. This is essentially the same as a reference node, except it has no internal reference id. + + This call MUST eventually be followed by a corresponding call to , with the same name. + + The name of the struct node. + The type of the struct node. If null, no type metadata will be written. + + + + Disposes all resources kept by the data writer, except the stream, which can be reused later. + + + + + Ends the current array node, if the current node is an array node. + + + + + Ends the current node with the given name. If the current node has another name, an is thrown. + + The name of the node to end. This has to be the name of the current node. + + + + Writes a primitive array to the stream. + + The element type of the primitive array. Valid element types can be determined using . + The primitive array to write. + Type + typeof(T).Name + is not a valid primitive array type. + + + + Writes a value to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes a value to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes a value to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes a value to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes a value to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes a value to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes an external guid reference to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes an external index reference to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes an external string reference to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes an value to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes a value to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes a null value to the stream. + + The name of the value. If this is null, no name will be written. + + + + Writes an internal reference to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes an value to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes a value to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes a value to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes a value to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes an value to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes an value to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes an value to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Tells the writer that a new serialization session is about to begin, and that it should clear all cached values left over from any prior serialization sessions. + This method is only relevant when the same writer is used to serialize several different, unrelated values. + + + + + Entry types in the binary format written by . + + + + + An invalid entry. + + + + + Entry denoting a named start of a reference node. + + + + + Entry denoting an unnamed start of a reference node. + + + + + Entry denoting a named start of a struct node. + + + + + Entry denoting an unnamed start of a struct node. + + + + + Entry denoting an end of node. + + + + + Entry denoting the start of an array. + + + + + Entry denoting the end of an array. + + + + + Entry denoting a primitive array. + + + + + Entry denoting a named internal reference. + + + + + Entry denoting an unnamed internal reference. + + + + + Entry denoting a named external reference by index. + + + + + Entry denoting an unnamed external reference by index. + + + + + Entry denoting a named external reference by guid. + + + + + Entry denoting an unnamed external reference by guid. + + + + + Entry denoting a named sbyte. + + + + + Entry denoting an unnamed sbyte. + + + + + Entry denoting a named byte. + + + + + Entry denoting an unnamed byte. + + + + + Entry denoting a named short. + + + + + Entry denoting an unnamed short. + + + + + Entry denoting a named ushort. + + + + + Entry denoting an unnamed ushort. + + + + + Entry denoting a named int. + + + + + Entry denoting an unnamed int. + + + + + Entry denoting a named uint. + + + + + Entry denoting an unnamed uint. + + + + + Entry denoting a named long. + + + + + Entry denoting an unnamed long. + + + + + Entry denoting a named ulong. + + + + + Entry denoting an unnamed ulong. + + + + + Entry denoting a named float. + + + + + Entry denoting an unnamed float. + + + + + Entry denoting a named double. + + + + + Entry denoting an unnamed double. + + + + + Entry denoting a named decimal. + + + + + Entry denoting an unnamed decimal. + + + + + Entry denoting a named char. + + + + + Entry denoting an unnamed char. + + + + + Entry denoting a named string. + + + + + Entry denoting an unnamed string. + + + + + Entry denoting a named guid. + + + + + Entry denoting an unnamed guid. + + + + + Entry denoting a named boolean. + + + + + Entry denoting an unnamed boolean. + + + + + Entry denoting a named null. + + + + + Entry denoting an unnamed null. + + + + + Entry denoting a type name. + + + + + Entry denoting a type id. + + + + + Entry denoting that the end of the stream has been reached. + + + + + Entry denoting a named external reference by string. + + + + + Entry denoting an unnamed external reference by string. + + + + + Provides a set of methods for reading data stored in a format written by a corresponding class. + + If you implement this interface, it is VERY IMPORTANT that you implement each method to the *exact* specifications the documentation specifies. + + It is strongly recommended to inherit from the class if you wish to implement a new data reader. + + + + + + Gets or sets the reader's serialization binder. + + + The reader's serialization binder. + + + + + Gets or sets the base stream of the reader. + + + The base stream of the reader. + + + + + Gets a value indicating whether the reader is in an array node. + + + true if the reader is in an array node; otherwise, false. + + + + + Gets the name of the current node. + + + The name of the current node. + + + + + Gets the current node id. If this is less than zero, the current node has no id. + + + The current node id. + + + + + Gets the current node depth. In other words, the current count of the node stack. + + + The current node depth. + + + + + Gets the deserialization context. + + + The deserialization context. + + + + + Gets a dump of the data being read by the writer. The format of this dump varies, but should be useful for debugging purposes. + + + + + Tries to enter a node. This will succeed if the next entry is an . + + This call MUST (eventually) be followed by a corresponding call to + + This call will change the values of the , , and properties to the correct values for the current node. + + The type of the node. This value will be null if there was no metadata, or if the reader's serialization binder failed to resolve the type name. + true if entering a node succeeded, otherwise false + + + + Exits the current node. This method will keep skipping entries using until an is reached, or the end of the stream is reached. + + This call MUST have been preceded by a corresponding call to . + + This call will change the values of the , , and to the correct values for the node that was prior to the current node. + + true if the method exited a node, false if it reached the end of the stream. + + + + Tries to enters an array node. This will succeed if the next entry is an . + + This call MUST (eventually) be followed by a corresponding call to + + This call will change the values of the , , and properties to the correct values for the current array node. + + The length of the array that was entered. + true if an array was entered, otherwise false + + + + Exits the closest array. This method will keep skipping entries using until an is reached, or the end of the stream is reached. + + This call MUST have been preceded by a corresponding call to . + + This call will change the values of the , , and to the correct values for the node that was prior to the exited array node. + + true if the method exited an array, false if it reached the end of the stream. + + + + Reads a primitive array value. This call will succeed if the next entry is an . + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The element type of the primitive array. Valid element types can be determined using . + The resulting primitive array. + true if reading a primitive array succeeded, otherwise false + + + + Peeks ahead and returns the type of the next entry in the stream. + + The name of the next entry, if it has one. + The type of the next entry. + + + + Reads an internal reference id. This call will succeed if the next entry is an . + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The internal reference id. + true if reading the value succeeded, otherwise false + + + + Reads an external reference index. This call will succeed if the next entry is an . + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The external reference index. + true if reading the value succeeded, otherwise false + + + + Reads an external reference guid. This call will succeed if the next entry is an . + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The external reference guid. + true if reading the value succeeded, otherwise false + + + + Reads an external reference string. This call will succeed if the next entry is an . + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The external reference string. + true if reading the value succeeded, otherwise false + + + + Reads a value. This call will succeed if the next entry is an . + + If the string of the entry is longer than 1 character, the first character of the string will be taken as the result. + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The value that has been read. + true if reading the value succeeded, otherwise false + + + + Reads a value. This call will succeed if the next entry is an . + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The value that has been read. + true if reading the value succeeded, otherwise false + + + + Reads a value. This call will succeed if the next entry is an . + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The value that has been read. + true if reading the value succeeded, otherwise false + + + + Reads an value. This call will succeed if the next entry is an . + + If the value of the stored integer is smaller than or larger than , the result will be default(). + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The value that has been read. + true if reading the value succeeded, otherwise false + + + + Reads a value. This call will succeed if the next entry is an . + + If the value of the stored integer is smaller than or larger than , the result will be default(). + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The value that has been read. + true if reading the value succeeded, otherwise false + + + + Reads an value. This call will succeed if the next entry is an . + + If the value of the stored integer is smaller than or larger than , the result will be default(). + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The value that has been read. + true if reading the value succeeded, otherwise false + + + + Reads a value. This call will succeed if the next entry is an . + + If the value of the stored integer is smaller than or larger than , the result will be default(). + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The value that has been read. + true if reading the value succeeded, otherwise false + + + + Reads a value. This call will succeed if the next entry is an . + + If the value of the stored integer is smaller than or larger than , the result will be default(). + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The value that has been read. + true if reading the value succeeded, otherwise false + + + + Reads an value. This call will succeed if the next entry is an . + + If the value of the stored integer is smaller than or larger than , the result will be default(). + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The value that has been read. + true if reading the value succeeded, otherwise false + + + + Reads an value. This call will succeed if the next entry is an . + + If the value of the stored integer is smaller than or larger than , the result will be default(). + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The value that has been read. + true if reading the value succeeded, otherwise false + + + + Reads an value. This call will succeed if the next entry is an . + + If the value of the stored integer is smaller than or larger than , the result will be default(). + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The value that has been read. + true if reading the value succeeded, otherwise false + + + + Reads a value. This call will succeed if the next entry is an or an . + + If the stored integer or floating point value is smaller than or larger than , the result will be default(). + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The value that has been read. + true if reading the value succeeded, otherwise false + + + + Reads a value. This call will succeed if the next entry is an or an . + + If the stored integer or floating point value is smaller than or larger than , the result will be default(). + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The value that has been read. + true if reading the value succeeded, otherwise false + + + + Reads a value. This call will succeed if the next entry is an or an . + + If the stored integer or floating point value is smaller than or larger than , the result will be default(). + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The value that has been read. + true if reading the value succeeded, otherwise false + + + + Reads a value. This call will succeed if the next entry is an . + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The value that has been read. + true if reading the value succeeded, otherwise false + + + + Reads a null value. This call will succeed if the next entry is an . + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + true if reading the value succeeded, otherwise false + + + + Skips the next entry value, unless it is an or an . If the next entry value is an or an , all of its contents will be processed, deserialized and registered in the deserialization context, so that internal reference values are not lost to entries further down the stream. + + + + + Tells the reader that a new serialization session is about to begin, and that it should clear all cached values left over from any prior serialization sessions. + This method is only relevant when the same reader is used to deserialize several different, unrelated values. + + + + + Provides a set of methods for reading data stored in a format that can be read by a corresponding class. + + If you implement this interface, it is VERY IMPORTANT that you implement each method to the *exact* specifications the documentation specifies. + + It is strongly recommended to inherit from the class if you wish to implement a new data writer. + + + + + + Gets or sets the reader's serialization binder. + + + The reader's serialization binder. + + + + + Gets or sets the base stream of the writer. + + + The base stream of the writer. + + + + + Gets a value indicating whether the writer is in an array node. + + + true if the writer is in an array node; otherwise, false. + + + + + Gets the serialization context. + + + The serialization context. + + + + + Gets a dump of the data currently written by the writer. The format of this dump varies, but should be useful for debugging purposes. + + + + + Flushes everything that has been written so far to the writer's base stream. + + + + + Writes the beginning of a reference node. + + This call MUST eventually be followed by a corresponding call to , with the same name. + + The name of the reference node. + The type of the reference node. If null, no type metadata will be written. + The id of the reference node. This id is acquired by calling . + + + + Begins a struct/value type node. This is essentially the same as a reference node, except it has no internal reference id. + + This call MUST eventually be followed by a corresponding call to , with the same name. + + The name of the struct node. + The type of the struct node. If null, no type metadata will be written. + + + + Ends the current node with the given name. If the current node has another name, an is thrown. + + The name of the node to end. This has to be the name of the current node. + + + + Begins an array node of the given length. + + The length of the array to come. + + + + Ends the current array node, if the current node is an array node. + + + + + Writes a primitive array to the stream. + + The element type of the primitive array. Valid element types can be determined using . + The primitive array to write. + + + + Writes a null value to the stream. + + The name of the value. If this is null, no name will be written. + + + + Writes an internal reference to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes an external index reference to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes an external guid reference to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes an external string reference to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes a value to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes a value to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes a value to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes an value to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes a value to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes an value to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes a value to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes a value to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes an value to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes an value to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes an value to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes a value to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes a value to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes a value to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes a value to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Tells the writer that a new serialization session is about to begin, and that it should clear all cached values left over from any prior serialization sessions. + This method is only relevant when the same writer is used to serialize several different, unrelated values. + + + + + Contains various string constants used by the , and classes. + + + + + The named of a node id entry. + + + + + The name of a type entry. + + + + + The name of a regular array length entry. + + + + + The name of a primitive array length entry. + + + + + The name of a regular array content entry. + + + + + The name of a primitive array content entry. + + + + + The beginning of the content of an internal reference entry. + + + + + The beginning of the content of an external reference by index entry. + + + + + The beginning of the content of an external reference by guid entry. + + + + + The beginning of the content of an external reference by string entry. + + + + + Reads json data from a stream that has been written by a . + + + + + + Initializes a new instance of the class. + + The base stream of the reader. + The deserialization context to use. + + + + Gets or sets the base stream of the reader. + + + The base stream of the reader. + + + + + Disposes all resources kept by the data reader, except the stream, which can be reused later. + + + + + Peeks ahead and returns the type of the next entry in the stream. + + The name of the next entry, if it has one. + + The type of the next entry. + + + + + Tries to enter a node. This will succeed if the next entry is an . + + This call MUST (eventually) be followed by a corresponding call to + This call will change the values of the , , and properties to the correct values for the current node. + + The type of the node. This value will be null if there was no metadata, or if the reader's serialization binder failed to resolve the type name. + + true if entering a node succeeded, otherwise false + + + + + Exits the current node. This method will keep skipping entries using until an is reached, or the end of the stream is reached. + + This call MUST have been preceded by a corresponding call to . + + This call will change the values of the , , and to the correct values for the node that was prior to the current node. + + + true if the method exited a node, false if it reached the end of the stream. + + + + + Tries to enters an array node. This will succeed if the next entry is an . + + This call MUST (eventually) be followed by a corresponding call to + This call will change the values of the , , and properties to the correct values for the current array node. + + The length of the array that was entered. + + true if an array was entered, otherwise false + + + + + Exits the closest array. This method will keep skipping entries using until an is reached, or the end of the stream is reached. + + This call MUST have been preceded by a corresponding call to . + + This call will change the values of the , , and to the correct values for the node that was prior to the exited array node. + + + true if the method exited an array, false if it reached the end of the stream. + + + + + Reads a primitive array value. This call will succeed if the next entry is an . + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The element type of the primitive array. Valid element types can be determined using . + The resulting primitive array. + + true if reading a primitive array succeeded, otherwise false + + Type + typeof(T).Name + is not a valid primitive array type. + + + + Reads a value. This call will succeed if the next entry is an . + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The value that has been read. + + true if reading the value succeeded, otherwise false + + + + + Reads an internal reference id. This call will succeed if the next entry is an . + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The internal reference id. + + true if reading the value succeeded, otherwise false + + + + + Reads an external reference index. This call will succeed if the next entry is an . + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The external reference index. + + true if reading the value succeeded, otherwise false + + + + + Reads an external reference guid. This call will succeed if the next entry is an . + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The external reference guid. + + true if reading the value succeeded, otherwise false + + + + + Reads an external reference string. This call will succeed if the next entry is an . + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The external reference string. + + true if reading the value succeeded, otherwise false + + + + + Reads a value. This call will succeed if the next entry is an . + + If the string of the entry is longer than 1 character, the first character of the string will be taken as the result. + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The value that has been read. + + true if reading the value succeeded, otherwise false + + + + + Reads a value. This call will succeed if the next entry is an . + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The value that has been read. + + true if reading the value succeeded, otherwise false + + + + + Reads a value. This call will succeed if the next entry is an . + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The value that has been read. + + true if reading the value succeeded, otherwise false + + + + + Reads an value. This call will succeed if the next entry is an . + + If the value of the stored integer is smaller than or larger than , the result will be default(). + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The value that has been read. + + true if reading the value succeeded, otherwise false + + + + + Reads a value. This call will succeed if the next entry is an . + + If the value of the stored integer is smaller than or larger than , the result will be default(). + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The value that has been read. + + true if reading the value succeeded, otherwise false + + + + + Reads an value. This call will succeed if the next entry is an . + + If the value of the stored integer is smaller than or larger than , the result will be default(). + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The value that has been read. + + true if reading the value succeeded, otherwise false + + + + + Reads a value. This call will succeed if the next entry is an . + + If the value of the stored integer is smaller than or larger than , the result will be default(). + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The value that has been read. + + true if reading the value succeeded, otherwise false + + + + + Reads a value. This call will succeed if the next entry is an . + + If the value of the stored integer is smaller than or larger than , the result will be default(). + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The value that has been read. + + true if reading the value succeeded, otherwise false + + + + + Reads an value. This call will succeed if the next entry is an . + + If the value of the stored integer is smaller than or larger than , the result will be default(). + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The value that has been read. + + true if reading the value succeeded, otherwise false + + + + + Reads an value. This call will succeed if the next entry is an . + + If the value of the stored integer is smaller than or larger than , the result will be default(). + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The value that has been read. + + true if reading the value succeeded, otherwise false + + + + + Reads an value. This call will succeed if the next entry is an . + + If the value of the stored integer is smaller than or larger than , the result will be default(). + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The value that has been read. + + true if reading the value succeeded, otherwise false + + + + + Reads a value. This call will succeed if the next entry is an or an . + + If the stored integer or floating point value is smaller than or larger than , the result will be default(). + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The value that has been read. + + true if reading the value succeeded, otherwise false + + + + + Reads a value. This call will succeed if the next entry is an or an . + + If the stored integer or floating point value is smaller than or larger than , the result will be default(). + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The value that has been read. + + true if reading the value succeeded, otherwise false + + + + + Reads a value. This call will succeed if the next entry is an or an . + + If the stored integer or floating point value is smaller than or larger than , the result will be default(). + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The value that has been read. + + true if reading the value succeeded, otherwise false + + + + + Reads a null value. This call will succeed if the next entry is an . + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + + true if reading the value succeeded, otherwise false + + + + + Tells the reader that a new serialization session is about to begin, and that it should clear all cached values left over from any prior serialization sessions. + This method is only relevant when the same reader is used to deserialize several different, unrelated values. + + + + + Peeks the current entry. + + The peeked entry. + + + + Consumes the current entry, and reads to the next one. + + The next entry. + + + + Writes json data to a stream that can be read by a . + + + + + + Initializes a new instance of the class. + + The base stream of the writer. + The serialization context to use.> + Whether the json should be packed, or formatted as human-readable. + + + + Gets or sets a value indicating whether the json should be packed, or formatted as human-readable. + + + true if the json should be formatted as human-readable; otherwise, false. + + + + + Whether to enable an optimization that ensures any given type name is only written once into the json stream, and thereafter kept track of by ID. + + + + + Enable the "just started" flag, causing the writer to start a new "base" json object container. + + + + + Flushes everything that has been written so far to the writer's base stream. + + + + + Writes the beginning of a reference node. + + This call MUST eventually be followed by a corresponding call to , with the same name. + + The name of the reference node. + The type of the reference node. If null, no type metadata will be written. + The id of the reference node. This id is acquired by calling . + + + + Begins a struct/value type node. This is essentially the same as a reference node, except it has no internal reference id. + + This call MUST eventually be followed by a corresponding call to , with the same name. + + The name of the struct node. + The type of the struct node. If null, no type metadata will be written. + + + + Ends the current node with the given name. If the current node has another name, an is thrown. + + The name of the node to end. This has to be the name of the current node. + + + + Begins an array node of the given length. + + The length of the array to come. + + + + Ends the current array node, if the current node is an array node. + + + + + Writes a primitive array to the stream. + + The element type of the primitive array. Valid element types can be determined using . + The primitive array to write. + Type + typeof(T).Name + is not a valid primitive array type. + array + + + + Writes a value to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes a value to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes a value to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes a value to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes a value to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes an value to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes a value to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes a null value to the stream. + + The name of the value. If this is null, no name will be written. + + + + Writes an internal reference to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes an value to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes a value to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes a value to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes a value to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes a value to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes an value to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes an value to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes an external index reference to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes an external guid reference to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes an external string reference to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Writes an value to the stream. + + The name of the value. If this is null, no name will be written. + The value to write. + + + + Disposes all resources kept by the data writer, except the stream, which can be reused later. + + + + + Tells the writer that a new serialization session is about to begin, and that it should clear all cached values left over from any prior serialization sessions. + This method is only relevant when the same writer is used to serialize several different, unrelated values. + + + + + Parses json entries from a stream. + + + + + + The current deserialization context used by the text reader. + + + + + Initializes a new instance of the class. + + The stream to parse from. + The deserialization context to use. + The stream is null. + Cannot read from the stream. + + + + Resets the reader instance's currently peeked char and emergency playback queue. + + + + + Disposes all resources kept by the text reader, except the stream, which can be reused later. + + + + + Reads to (but not past) the beginning of the next json entry, and returns the entry name, contents and type. + + The name of the entry that was parsed. + The content of the entry that was parsed. + The type of the entry that was parsed. + + + + A serialization node as used by the format. + + + + + The name of the node. + + + + + The entry type of the node. + + + + + The data contained in the node. Depending on the entry type and name, as well as nodes encountered prior to this one, the format can vary wildly. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Tries to enters an array node. This will succeed if the next entry is an . + + This call MUST (eventually) be followed by a corresponding call to + This call will change the values of the , , and properties to the correct values for the current array node. + + The length of the array that was entered. + + true if an array was entered, otherwise false + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Reads a primitive array value. This call will succeed if the next entry is an . + + If the call fails (and returns false), it will skip the current entry value, unless that entry is an or an . + + The element type of the primitive array. Valid element types can be determined using . + The resulting primitive array. + + true if reading a primitive array succeeded, otherwise false + + Type + typeof(T).Name + is not a valid primitive array type. + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Peeks the current entry. + + The peeked entry. + + + + Consumes the current entry, and reads to the next one. + + The next entry. + + + + Shared config class for and . + + + + + The string to use to separate node id's from their names. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Begins an array node of the given length. + + The length of the array to come. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Formatter for all non-primitive one-dimensional arrays. + + The element type of the formatted array. + + + + + Returns null. + + + A null value. + + + + + Provides the actual implementation for deserializing a value of type . + + The uninitialized value to serialize into. This value will have been created earlier using . + The reader to deserialize with. + + + + Provides the actual implementation for serializing a value of type . + + The value to serialize. + The writer to serialize with. + + + + Custom formatter for the type . + + + + + + Returns null. + + + A null value. + + + + + Provides the actual implementation for deserializing a value of type . + + The uninitialized value to serialize into. This value will have been created earlier using . + The reader to deserialize with. + + + + Provides the actual implementation for serializing a value of type . + + The value to serialize. + The writer to serialize with. + + + + Provides common functionality for serializing and deserializing values of type , and provides automatic support for the following common serialization conventions: + + , , , , and . + + The type which can be serialized and deserialized by the formatter. + + + + + The on serializing callbacks for type . + + + + + The on serialized callbacks for type . + + + + + The on deserializing callbacks for type . + + + + + The on deserialized callbacks for type . + + + + + Whether the serialized value is a value type. + + + + + Gets the type that the formatter can serialize. + + + The type that the formatter can serialize. + + + + + Serializes a value using a specified . + + The value to serialize. + The writer to use. + + + + Deserializes a value using a specified . + + The reader to use. + + The deserialized value. + + + + + Deserializes a value of type using a specified . + + The reader to use. + + The deserialized value. + + + + + Serializes a value of type using a specified . + + The value to serialize. + The writer to use. + + + + Get an uninitialized object of type . WARNING: If you override this and return null, the object's ID will not be automatically registered and its OnDeserializing callbacks will not be automatically called, before deserialization begins. + You will have to call and immediately after creating the object yourself during deserialization. + + An uninitialized object of type . + + + + Registers the given object reference in the deserialization context. + + NOTE that this method only does anything if is not a value type. + + The value to register. + The reader which is currently being used. + + + + Invokes all methods on the object with the [OnDeserializing] attribute. + + WARNING: This method will not be called automatically if you override GetUninitializedObject and return null! You will have to call it manually after having created the object instance during deserialization. + + The value to invoke the callbacks on. + The deserialization context. + + + + Invokes all methods on the object with the [OnDeserializing] attribute. + + WARNING: This method will not be called automatically if you override GetUninitializedObject and return null! You will have to call it manually after having created the object instance during deserialization. + + The value to invoke the callbacks on. + The deserialization context. + + + + Provides the actual implementation for deserializing a value of type . + + The uninitialized value to serialize into. This value will have been created earlier using . + The reader to deserialize with. + + + + Provides the actual implementation for serializing a value of type . + + The value to serialize. + The writer to serialize with. + + + + Custom formatter for the type. + + + + + + Reads into the specified value using the specified reader. + + The value to read into. + The reader to use. + + + + Writes from the specified value using the specified writer. + + The value to write from. + The writer to use. + + + + Custom formatter for the type. + + + + + + Reads into the specified value using the specified reader. + + The value to read into. + The reader to use. + + + + Writes from the specified value using the specified writer. + + The value to write from. + The writer to use. + + + + Formatter for all delegate types. + + This formatter can handle anything but delegates for dynamic methods. + + + + + + + Provides the actual implementation for deserializing a value of type . + + The uninitialized value to serialize into. This value will have been created earlier using . + The reader to deserialize with. + + + + Provides the actual implementation for serializing a value of type . + + The value to serialize. + The writer to serialize with. + + + + Get an uninitialized object of type . WARNING: If you override this and return null, the object's ID will not be automatically registered and its OnDeserializing callbacks will not be automatically called, before deserialization begins. + You will have to call and immediately after creating the object yourself during deserialization. + + + An uninitialized object of type . + + + + + Emergency hack class to support serialization of types derived from dictionary + + + + + Returns null. + + + A value of null. + + + + + Provides the actual implementation for deserializing a value of type . + + The uninitialized value to serialize into. This value will have been created earlier using . + The reader to deserialize with. + + + + Provides the actual implementation for serializing a value of type . + + The value to serialize. + The writer to serialize with. + + + + Custom generic formatter for the generic type definition . + + The type of the dictionary key. + The type of the dictionary value. + + + + + Creates a new instance of . + + + + + Returns null. + + + A value of null. + + + + + Provides the actual implementation for deserializing a value of type . + + The uninitialized value to serialize into. This value will have been created earlier using . + The reader to deserialize with. + + + + Provides the actual implementation for serializing a value of type . + + The value to serialize. + The writer to serialize with. + + + + Custom Odin serialization formatter for . + + Type of primary key. + Type of secondary key. + Type of value. + + + + Creates a new instance of . + + + + + Returns null. + + + + + Provides the actual implementation for serializing a value of type . + + The value to serialize. + The writer to serialize with. + + + + Provides the actual implementation for deserializing a value of type . + + The uninitialized value to serialize into. This value will have been created earlier using . + The reader to deserialize with. + + + + Provides an easy way of implementing custom formatters. + + The type which can be serialized and deserialized by the formatter. + + + + Reads through all entries in the current node one at a time, and calls for each entry. + + The uninitialized value to serialize into. This value will have been created earlier using . + The reader to deserialize with. + + + + Calls directly. + + The value to serialize. + The writer to serialize with. + + + + Reads a data entry into the value denoted by the entry name. + + The value to read into. + The name of the entry. + The type of the entry. + The reader currently used for deserialization. + + + + Write the serialized values of a value of type . + + The value to serialize. + The writer currently used for serialization. + + + + Indicates that this formatter type has been emitted. Never put this on a type! + + + + + A formatter for empty types. It writes no data, and skips all data that is to be read, deserializing a "default" value. + + + + + Skips the entry to read. + + + + + Does nothing at all. + + + + + Utility class for emitting formatters using the namespace. + + NOTE: Some platforms do not support emitting. Check whether you can emit on the current platform using . + + + + + The name of the pre-generated assembly that contains pre-emitted formatters for use on AOT platforms where emitting is not supported. Note that this assembly is not always present. + + + + + The name of the runtime-generated assembly that contains runtime-emitted formatters for use on non-AOT platforms where emitting is supported. Note that this assembly is not always present. + + + + + Base type for all AOT-emitted formatters. + + + + + Shortcut class that makes it easier to emit empty AOT formatters. + + + + + Skips the entry to read. + + + + + Does nothing at all. + + + + + Gets an emitted formatter for a given type. + + NOTE: Some platforms do not support emitting. On such platforms, this method logs an error and returns null. Check whether you can emit on the current platform using . + + The type to emit a formatter for. + The serialization policy to use to determine which members the emitted formatter should serialize. If null, is used. + The type of the emitted formatter. + The type argument is null. + + + + Emits a formatter for a given type into a given module builder, using a given serialization policy to determine which members to serialize. + + Type to create a formatter for. + The module builder to emit a formatter into. + The serialization policy to use for creating the formatter. + The fully constructed, emitted formatter type. + + + + Utility class for the class. + + + + + Determines whether the specified type can be formatted by a . + + The following criteria are checked: type implements , type is not abstract, type is not a generic type definition, type is not an interface, type has a public parameterless constructor. + + The collection type to check. + The element type of the collection. + true if the type can be formatted by a , otherwise false + The type argument is null. + + + + Formatter for all eligible types that implement the interface , and which have no other formatters specified. + + Eligibility for formatting by this class is determined by the method. + + The type of the collection. + The type of the element. + + + + Creates a new instance of . + + + + + Gets a new object of type . + + + A new object of type . + + + + + Provides the actual implementation for deserializing a value of type . + + The uninitialized value to serialize into. This value will have been created earlier using . + The reader to deserialize with. + + + + Provides the actual implementation for serializing a value of type . + + The value to serialize. + The writer to serialize with. + + + + Custom generic formatter for the generic type definition . + + The element type of the formatted list. + + + + + Returns null. + + + A null value. + + + + + Provides the actual implementation for deserializing a value of type . + + The uninitialized value to serialize into. This value will have been created earlier using . + The reader to deserialize with. + + + + Provides the actual implementation for serializing a value of type . + + The value to serialize. + The writer to serialize with. + + + + Serializes and deserializes a given type. + + NOTE that if you are implementing a custom formatter and registering it using the , it is not enough to implement - you have to implement . + + + + + Gets the type that the formatter can serialize. + + + The type that the formatter can serialize. + + + + + Serializes a value using a specified . + + The value to serialize. + The writer to use. + + + + Deserializes a value using a specified . + + The reader to use. + + The deserialized value. + + + + + Serializes and deserializes a given type T. + + The type which can be serialized and deserialized by the formatter. + + + + Serializes a value of type using a specified . + + The value to serialize. + The writer to use. + + + + Deserializes a value of type using a specified . + + The reader to use. + + The deserialized value. + + + + + Custom generic formatter for the generic type definition . + + The type of the key. + The type of the value. + + + + + Provides the actual implementation for serializing a value of type . + + The value to serialize. + The writer to serialize with. + + + + Provides the actual implementation for deserializing a value of type . + + The uninitialized value to serialize into. This value will have been created earlier using . + The reader to deserialize with. + + + + Custom generic formatter for the generic type definition . + + The element type of the formatted list. + + + + + Returns null. + + + A null value. + + + + + Provides the actual implementation for deserializing a value of type . + + The uninitialized value to serialize into. This value will have been created earlier using . + The reader to deserialize with. + + + + Provides the actual implementation for serializing a value of type . + + The value to serialize. + The writer to serialize with. + + + + Minimal baseline formatter. Doesn't come with all the bells and whistles of any of the other BaseFormatter classes. + Common serialization conventions aren't automatically supported, and common deserialization callbacks are not automatically invoked. + + The type which can be serialized and deserialized by the formatter. + + + + Whether the serialized value is a value type. + + + + + Gets the type that the formatter can serialize. + + + The type that the formatter can serialize. + + + + + Deserializes a value of type using a specified . + + The reader to use. + + The deserialized value. + + + + + Serializes a value of type using a specified . + + The value to serialize. + The writer to use. + + + + Serializes a value using a specified . + + The value to serialize. + The writer to use. + + + + Deserializes a value using a specified . + + The reader to use. + + The deserialized value. + + + + + Get an uninitialized object of type . WARNING: If you override this and return null, the object's ID will not be automatically registered. + You will have to call immediately after creating the object yourself during deserialization. + + An uninitialized object of type . + + + + Reads into the specified value using the specified reader. + + The value to read into. + The reader to use. + + + + Writes from the specified value using the specified writer. + + The value to write from. + The writer to use. + + + + Registers the given object reference in the deserialization context. + + NOTE that this method only does anything if is not a value type. + + The value to register. + The reader which is currently being used. + + + + Formatter for all arrays with more than one dimension. + + The type of the formatted array. + The element type of the formatted array. + + + + + Returns null. + + + A null value. + + + + + Provides the actual implementation for deserializing a value of type . + + The uninitialized value to serialize into. This value will have been created earlier using . + The reader to deserialize with. + + + + Provides the actual implementation for serializing a value of type . + + The value to serialize. + The writer to serialize with. + + + + Formatter for all types. + + The type that is nullable. + + + + + Creates a new instance of . + + + + + Provides the actual implementation for deserializing a value of type . + + The uninitialized value to serialize into. This value will have been created earlier using . + The reader to deserialize with. + + + + Provides the actual implementation for serializing a value of type . + + The value to serialize. + The writer to serialize with. + + + + Formatter for all primitive one-dimensional arrays. + + The element type of the formatted array. This type must be an eligible primitive array type, as determined by . + + + + + Returns null. + + + A null value. + + + + + Reads into the specified value using the specified reader. + + The value to read into. + The reader to use. + + + + Writes from the specified value using the specified writer. + + The value to write from. + The writer to use. + + + + Final fallback formatter for all types which have no other formatters. This formatter relies on reflection to work, and is thus comparatively slow and creates more garbage than a custom formatter. + + The type which can be serialized and deserialized by the formatter. + + + + + Provides the actual implementation for deserializing a value of type . + + The uninitialized value to serialize into. This value will have been created earlier using . + The reader to deserialize with. + + + + Provides the actual implementation for serializing a value of type . + + The value to serialize. + The writer to serialize with. + + + + Formatter for types that implement the interface. + + + + + + + Calls on the value to deserialize. + + + + + Calls on the value to deserialize. + + + + + Formatter for all types that implement the ISerializable interface. + + The type which can be serialized and deserialized by the formatter. + + + + + Get an uninitialized object of type . WARNING: If you override this and return null, the object's ID will not be automatically registered and its OnDeserializing callbacks will not be automatically called, before deserialization begins. + You will have to call and immediately after creating the object yourself during deserialization. + + + An uninitialized object of type . + + + + + Provides the actual implementation for deserializing a value of type . + + The uninitialized value to serialize into. This value will have been created earlier using . + The reader to deserialize with. + + + + Provides the actual implementation for serializing a value of type . + + The value to serialize. + The writer to serialize with. + + + + Creates and reads into a instance using a given reader and context. + + The reader to use. + + The which was read. + + + + + Writes the given using the given writer. + + The to write. + The writer to use. + + + + Custom formatter for the type. + + + + + + Reads into the specified value using the specified reader. + + The value to read into. + The reader to use. + + + + Writes from the specified value using the specified writer. + + The value to write from. + The writer to use. + + + + Formatter for the type which uses the reader/writer's to bind types. + + + + + + Reads into the specified value using the specified reader. + + The value to read into. + The reader to use. + + + + Writes from the specified value using the specified writer. + + The value to write from. + The writer to use. + + + + Returns null. + + null. + + + + Helper class for quickly and easily implementing the interface. + + + + + Initializes a new instance of the class. + + The policy ID. + if set to true non serializable types will be allowed. + The delegate to use for determining whether members should be serialized. + + The id argument or the shouldSerializeFunc argument was null. + + + + + Gets the identifier of the policy. This can be stored in the serialization metadata, so the policy used to serialize it can be recovered without knowing the policy at runtime. This ID should preferably be unique. + + + The identifier of the policy. + + + + + Gets a value indicating whether to allow non serializable types. (Types which are not decorated with .) + + + true if serializable types are allowed; otherwise, false. + + + + + Gets a value indicating whether a given should be serialized or not. + + The member to check. + + true if the given member should be serialized, otherwise, false. + + + + + Use this attribute to specify that a type that implements the + interface should *always* format itself regardless of other formatters being specified. + + This means that the interface will be used to format all types derived from the type that + is decorated with this attribute, regardless of custom formatters for the derived types. + + + + + + Attribute indicating that a class which implements the interface somewhere in its hierarchy is a custom formatter for the type T. + + + + + + The priority of the formatter. Of all the available custom formatters, the formatter with the highest priority is always chosen. + + + + + Initializes a new instance of the class with priority 0. + + + + + Initializes a new instance of the class. + + The priority of the formatter. Of all the available custom formatters, the formatter with the highest priority is always chosen. + + + + Attribute indicating that a generic type definition class which implements the interface somewhere in its hierarchy is a custom formatter for *any variation* of the generic type definition T. + + The formatter's generic type parameters are mapped onto the serialized type's generic type parameters. + + For example, implements , where T is . + + + + + + The generic type definition of the serialized type. + + + + + Initializes a new instance of the class. + + The generic type definition of the serialized type. + The priority of the formatter. Of all the available custom formatters, the formatter with the highest priority is always chosen. + was null. + The type given in is not a generic type definition. + + + + An attribute that lets you help the DefaultSerializationBinder bind type names to types. This is useful if you're renaming a type, + that would result in data loss, and what to specify the new type name to avoid loss of data. + + + + + [assembly: OdinSerializer.BindTypeNameToType("Namespace.OldTypeName", typeof(Namespace.NewTypeName))] + //[assembly: OdinSerializer.BindTypeNameToType("Namespace.OldTypeName, OldFullAssemblyName", typeof(Namespace.NewTypeName))] + + namespace Namespace + { + public class SomeComponent : SerializedMonoBehaviour + { + public IInterface test; // Contains an instance of OldTypeName; + } + + public interface IInterface { } + + public class NewTypeName : IInterface { } + + //public class OldTypeName : IInterface { } + } + + + + + + Initializes a new instance of the class. + + Old old full type name. If it's moved to new a new assembly you must specify the old assembly name as well. See example code in the documentation. + The new type. + + + + Provides a default, catch-all implementation. This binder only includes assembly names, without versions and tokens, in order to increase compatibility. + + + + + + + Bind a type to a name. + + The type to bind. + The debug context to log to. + + The name that the type has been bound to. + + The type argument is null. + + + + Determines whether the specified type name is mapped. + + + + + Binds a name to type. + + The name of the type to bind. + The debug context to log to. + + The type that the name has been bound to, or null if the type could not be resolved. + + The typeName argument is null. + + + + The context of a given deserialization session. This class maintains all internal and external references during deserialization. + + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The streaming context to use. + + + + Initializes a new instance of the class. + + The formatter converter to use. + + + + Initializes a new instance of the class. + + The streaming context to use. + The formatter converter to use. + The formatterConverter parameter is null. + + + + Gets or sets the context's type binder. + + + The context's serialization binder. + + + + + Gets or sets the string reference resolver. + + + The string reference resolver. + + + + + Gets or sets the Guid reference resolver. + + + The Guid reference resolver. + + + + + Gets or sets the index reference resolver. + + + The index reference resolver. + + + + + Gets the streaming context. + + + The streaming context. + + + + + Gets the formatter converter. + + + The formatter converter. + + + + + Gets or sets the serialization configuration. + + + The serialization configuration. + + + + + Registers an internal reference to a given id. + + The id to register the reference with. + The reference to register. + + + + Gets an internal reference from a given id, or null if the id has not been registered. + + The id of the reference to get. + An internal reference from a given id, or null if the id has not been registered. + + + + Gets an external object reference by index, or null if the index could not be resolved. + + The index to resolve. + An external object reference by the given index, or null if the index could not be resolved. + + + + Gets an external object reference by guid, or null if the guid could not be resolved. + + The guid to resolve. + An external object reference by the given guid, or null if the guid could not be resolved. + + + + Gets an external object reference by an id string, or null if the id string could not be resolved. + + The id string to resolve. + An external object reference by an id string, or null if the id string could not be resolved. + + + + Resets the deserialization context completely to baseline status, as if its constructor has just been called. + This allows complete reuse of a deserialization context, with all of its internal reference buffers. + + + + + An entry type which is part of a stream being read by a . + + + + + Could not parse entry. + + + + + Entry is a primitive value of type string or char. + + + + + Entry is a primitive value of type guid. + + + + + Entry is a primitive value of type sbyte, byte, short, ushort, int, uint, long or ulong. + + + + + Entry is a primitive value of type float, double or decimal. + + + + + Entry is a primitive boolean value. + + + + + Entry is a null value. + + + + + Entry marks the start of a node, IE, a complex type that contains values of its own. + + + + + Entry marks the end of a node, IE, a complex type that contains values of its own. + + + + + Entry contains an ID that is a reference to a node defined previously in the stream. + + + + + Entry contains the index of an external object in the DeserializationContext. + + + + + Entry contains the guid of an external object in the DeserializationContext. + + + + + Entry marks the start of an array. + + + + + Entry marks the end of an array. + + + + + Entry marks a primitive array. + + + + + Entry indicating that the reader has reached the end of the data stream. + + + + + Entry contains the string id of an external object in the DeserializationContext. + + + + + + Causes Odin's inspector to completely ignore a given member, preventing it from even being included in an Odin PropertyTree, + and such will not cause any performance hits in the inspector. + + Note that Odin can still serialize an excluded member - it is merely ignored in the inspector itself. + + + + + Resolves external guid references to reference objects during serialization and deserialization. + + + + + Gets or sets the next resolver in the chain. + + + The next resolver in the chain. + + + + + Tries to resolve a reference from a given Guid. + + The Guid to resolve. + The resolved value. + true if the value was resolved; otherwise, false. + + + + Determines whether this resolver can reference the specified value with a Guid. + + The value to check. + The Guid which references the value. + true if the value can be referenced; otherwise, false. + + + + Resolves external index references to reference objects during serialization and deserialization. + + + + + Tries to resolve the given reference index to a reference value. + + The index to resolve. + The resolved value. + true if the index could be resolved to a value, otherwise false. + + + + Determines whether the specified value can be referenced externally via this resolver. + + The value to reference. + The index of the resolved value, if it can be referenced. + true if the reference can be resolved, otherwise false. + + + + Resolves external strings references to reference objects during serialization and deserialization. + + + + + Gets or sets the next resolver in the chain. + + + The next resolver in the chain. + + + + + Tries to resolve a reference from a given Guid. + + The to resolve. + The resolved value. + true if the value was resolved; otherwise, false. + + + + Determines whether this resolver can reference the specified value with a string. + + The value to check. + The string which references the value. + true if the value can be referenced; otherwise, false. + + + + Specifies that a type is capable of serializing itself using an and an + . + + The deserialized type instance will be created without a constructor call using the + + method if it is a reference type, otherwise it will be created using default(type). + + Use to specify that a class which implements this + interface should *always* format itself regardless of other formatters being specified. + + + + + Serializes the instance's data using the given writer. + + + + + Deserializes data into the instance using the given reader. + + + + + Defines which members to serialize and deserialize when there aren't any custom formatters for a type. + Usually, it governs the behaviour of the and classes. + + + + + Gets the identifier of the policy. This can be stored in the serialization metadata, so the policy used to serialize can be recovered upon deserialization without knowing the policy ahead of time. This ID should preferably be unique. + + + The identifier of the policy. + + + + + Gets a value indicating whether to allow non serializable types. (Types which are not decorated with .) + + + true if serializable types are allowed; otherwise, false. + + + + + Gets a value indicating whether a given should be serialized or not. + + The member to check. + true if the given member should be serialized, otherwise, false. + + + + Contains information about a node during deserialization and serialization. + + + + + An empty node. + + + + + The name of the node. + + + + + The id of the node, or -1 if the node has no id. + + + + + The type of the node, or null if the node has no type metadata. + + + + + Whether the node is an array or not. + + + + + Whether the node is an empty node. + + + + + Initializes a new instance of the struct. + + The name of the node. + The id of the node. + The type of the node. + If set to true the node is an array node. + + + + Implements the operator == between and . + + The first . + The second . + + true if the nodes were equal; otherwise, false. + + + + + Implements the operator != between and . + + The first . + The second . + + true if the nodes were not equal; otherwise, false. + + + + + Determines whether the specified , is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Returns a hash code for this instance. + + + A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + + + + + Indicates that an instance field or auto-property was previously serialized with a different name, so that values serialized with the old name will be properly deserialized into this member. + + This does the same as Unity's FormerlySerializedAs attribute, except it can also be applied to properties. + + + + + + The former name. + + + + + Initializes a new instance of the class. + + The former name. + + + + An exception thrown when the serialization system has encountered an issue so severe that serialization is being aborted. If this exception is caught in the serialization system somewhere, it should be rethrown. + + + + + Initializes a new instance of the class. + + The message. + + + + Initializes a new instance of the class. + + The message. + The inner exception. + + + + Defines the configuration during serialization and deserialization. This class is thread-safe. + + + + + Initializes a new instance of the class. + + + + + + Setting this member to true indicates that in the case where, when expecting to deserialize an instance of a certain type, + but encountering an incompatible, uncastable type in the data being read, the serializer should attempt to deserialize an + instance of the expected type using the stored, possibly invalid data. + + + This is equivalent to applying the attribute, except global + instead of specific to a single type. Note that if this member is set to false, individual types may still be deserialized + with invalid data if they are decorated with the attribute. + + + + + + Gets or sets the serialization policy. This value is never null; if set to null, it will default to . + + + The serialization policy. + + + + + Gets or sets the debug context. This value is never null; if set to null, a new default instance of will be created upon the next get. + + + The debug context. + + + + + Resets the configuration to a default configuration, as if the constructor had just been called. + + + + + Defines a context for debugging and logging during serialization and deserialization. This class is thread-safe. + + + + + The logger to use for logging messages. + + + + + The logging policy to use. + + + + + The error handling policy to use. + + + + + Log a warning. Depending on the logging policy and error handling policy, this message may be suppressed or result in an exception being thrown. + + + + + Log an error. Depending on the logging policy and error handling policy, this message may be suppressed or result in an exception being thrown. + + + + + Log an exception. Depending on the logging policy and error handling policy, this message may be suppressed or result in an exception being thrown. + + + + + The context of a given serialization session. This class maintains all internal and external references during serialization. + + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The streaming context to use. + + + + Initializes a new instance of the class. + + The formatter converter to use. + + + + Initializes a new instance of the class. + + The streaming context to use. + The formatter converter to use. + The formatterConverter parameter is null. + + + + Gets or sets the context's type binder. + + + The context's serialization binder. + + + + + Gets the streaming context. + + + The streaming context. + + + + + Gets the formatter converter. + + + The formatter converter. + + + + + Gets or sets the index reference resolver. + + + The index reference resolver. + + + + + Gets or sets the string reference resolver. + + + The string reference resolver. + + + + + Gets or sets the Guid reference resolver. + + + The Guid reference resolver. + + + + + Gets or sets the serialization configuration. + + + The serialization configuration. + + + + + Tries to get the id of an internally referenced object. + + The reference to get the id of. + The id that was found, or -1 if no id was found. + true if a reference was found, otherwise false. + + + + Tries to register an internal reference. Returns true if the reference was registered, otherwise, false when the reference has already been registered. + + The reference to register. + The id of the registered reference. + true if the reference was registered, otherwise, false when the reference has already been registered. + + + + Tries to register an external index reference. + + The object to reference. + The index of the referenced object. + true if the object could be referenced by index; otherwise, false. + + + + Tries to register an external guid reference. + + The object to reference. + The guid of the referenced object. + true if the object could be referenced by guid; otherwise, false. + + + + Tries to register an external string reference. + + The object to reference. + The id string of the referenced object. + true if the object could be referenced by string; otherwise, false. + + + + Resets the context's internal reference map. + + + + + Resets the serialization context completely to baseline status, as if its constructor has just been called. + This allows complete reuse of a serialization context, with all of its internal reference buffers. + + + + + Indicates that an instance field or auto-property should be serialized by Odin. + + + + + + Binds types to strings during serialization, and strings to types during deserialization. + + + + + Provides a default, catch-all implementation. This binder only includes assembly names, without versions and tokens, in order to increase compatibility. + + + + + Bind a type to a name. + + The type to bind. + The debug context to log to. + The name that the type has been bound to. + + + + Binds a name to a type. + + The name of the type to bind. + The debug context to log to. + The type that the name has been bound to, or null if the type could not be resolved. + + + + Determines whether the specified type name is mapped. + + + + + Contains a set of default implementations of the interface. + + NOTE: Policies are not necessarily compatible with each other in intuitive ways. + Data serialized with the policy + will for example fail to deserialize auto-properties with , + even if only strict data is needed. + It is best to ensure that you always use the same policy for serialization and deserialization. + + This class and all of its policies are thread-safe. + + + + + Tries to get a serialization policy by its id, in case a serialization graph has the policy used for serialization stored by name. + + + + + All fields not marked with are serialized. If a field is marked with both and , then the field will be serialized. + + + + + Public fields, as well as fields or auto-properties marked with or and not marked with , are serialized. + + There are two exceptions: + 1) All fields in tuples, as well as in private nested types marked as compiler generated (e.g. lambda capture classes) are also serialized. + 2) Virtual auto-properties are never serialized. Note that properties specified by an implemented interface are automatically marked virtual by the compiler. + + + + + Only fields and auto-properties marked with or and not marked with are serialized. + + There are two exceptions: + 1) All fields in private nested types marked as compiler generated (e.g. lambda capture classes) are also serialized. + 2) Virtual auto-properties are never serialized. Note that properties specified by an implemented interface are automatically marked virtual by the compiler. + + + + + Serializer for the type. + + + + + + Reads a value of type . + + The reader to use. + + The value which has been read. + + + + + Writes a value of type . + + The name of the value to write. + The value to write. + The writer to use. + + + + Serializer for the type. + + + + + + Reads a value of type . + + The reader to use. + + The value which has been read. + + + + + Writes a value of type . + + The name of the value to write. + The value to write. + The writer to use. + + + + Serializer for the type. + + + + + + Reads a value of type . + + The reader to use. + + The value which has been read. + + + + + Writes a value of type . + + The name of the value to write. + The value to write. + The writer to use. + + + + Serializer for all complex types; IE, types which are not primitives as determined by the method. + + The type which the can serialize and deserialize. + + + + + Reads a value of type . + + The reader to use. + + The value which has been read. + + + + + Writes a value of type . + + The name of the value to write. + The value to write. + The writer to use. + + + + Serializer for the type. + + + + + + Reads a value of type . + + The reader to use. + + The value which has been read. + + + + + Writes a value of type . + + The name of the value to write. + The value to write. + The writer to use. + + + + Serializer for the type. + + + + + + Reads a value of type . + + The reader to use. + + The value which has been read. + + + + + Writes a value of type . + + The name of the value to write. + The value to write. + The writer to use. + + + + Serializer for all enums. + + The type of the enum to serialize and deserialize. + + + + + Reads an enum value of type . + + The reader to use. + + The value which has been read. + + + + + Writes an enum value of type . + + The name of the value to write. + The value to write. + The writer to use. + + + + Serializer for the type. + + + + + + Reads a value of type . + + The reader to use. + + The value which has been read. + + + + + Writes a value of type . + + The name of the value to write. + The value to write. + The writer to use. + + + + Serializer for the type. + + + + + + Reads a value of type . + + The reader to use. + + The value which has been read. + + + + + Writes a value of type . + + The name of the value to write. + The value to write. + The writer to use. + + + + Serializer for the type. + + + + + + Reads a value of type . + + The reader to use. + + The value which has been read. + + + + + Writes a value of type . + + The name of the value to write. + The value to write. + The writer to use. + + + + Serializer for the type. + + + + + + Reads a value of type . + + The reader to use. + + The value which has been read. + + + + + Writes a value of type . + + The name of the value to write. + The value to write. + The writer to use. + + + + Serializer for the type. + + + + + + Reads a value of type . + + The reader to use. + + The value which has been read. + + + + + Writes a value of type . + + The name of the value to write. + The value to write. + The writer to use. + + + + Serializer for the type. + + + + + + Reads a value of type . + + The reader to use. + + The value which has been read. + + + + + Writes a value of type . + + The name of the value to write. + The value to write. + The writer to use. + + + + Serializes and deserializes a given type, and wraps serialization and deserialization with all the proper calls to free formatters from tedious boilerplate. + + Whenever serializing or deserializing anything, it is *strongly recommended* to use to get a proper wrapping serializer for that type. + + NOTE: This class should NOT be inherited from; it is hard-coded into the system. + + To extend the serialization system, instead create custom formatters, which are used by the class. + + + + + Editor-only event that fires whenever a serializer serializes a type. + + + + + Fires the event. + + + + + Gets a for the given value. If the value is null, it will be treated as a value of type . + + The value to get a for. + A for the given value. + + + + Gets a for type T. + + The type to get a for. + A for type T. + + + + Gets a for the given type. + + The type to get a for. + A for the given type. + The type argument is null. + + + + Reads a value weakly, casting it into object. Use this method if you don't know what type you're going to be working with at compile time. + + The reader to use. + The value which has been read. + + + + Writes a weakly typed value. Use this method if you don't know what type you're going to be working with at compile time. + + The value to write. + The writer to use. + + + + Writes a weakly typed value with a given name. Use this method if you don't know what type you're going to be working with at compile time. + + The name of the value to write. + The value to write. + The writer to use. + + + + Serializes and deserializes the type , and wraps serialization and deserialization with all the proper calls to free formatters from tedious boilerplate. + + Whenever serializing or deserializing anything, it is *strongly recommended* to use to get a proper wrapping serializer for that type. + + NOTE: This class should NOT be inherited from; it is hard-coded into the system. + + To extend the serialization system, instead create custom formatters, which are used by the class. + + The type which the can serialize and deserialize. + + + + Reads a value of type weakly, casting it into object. Use this method if you don't know what type you're going to be working with at compile time. + + The reader to use. + + The value which has been read. + + + + + Writes a weakly typed value of type with a given name. Use this method if you don't know what type you're going to be working with at compile time. + + The name of the value to write. + The value to write. + The writer to use. + + + + Reads a value of type . + + The reader to use. + + The value which has been read. + + + + + Writes a value of type . + + The value to write. + The writer to use. + + + + Writes a value of type with a given name. + + The name of the value to write. + The value to write. + The writer to use. + + + + Fires the event with the T generic argument of the serializer. + + + + + Serializer for the type. + + + + + + Reads a value of type . + + The reader to use. + + The value which has been read. + + + + + Writes a value of type . + + The name of the value to write. + The value to write. + The writer to use. + + + + Serializer for the type. + + + + + + Reads a value of type . + + The reader to use. + + The value which has been read. + + + + + Writes a value of type . + + The name of the value to write. + The value to write. + The writer to use. + + + + Serializer for the type. + + + + + + Reads a value of type . + + The reader to use. + + The value which has been read. + + + + + Writes a value of type . + + The name of the value to write. + The value to write. + The writer to use. + + + + Serializer for the type. + + + + + + Reads a value of type . + + The reader to use. + + The value which has been read. + + + + + Writes a value of type . + + The name of the value to write. + The value to write. + The writer to use. + + + + Serializer for the type. + + + + + + Reads a value of type . + + The reader to use. + + The value which has been read. + + + + + Writes a value of type . + + The name of the value to write. + The value to write. + The writer to use. + + + + Serializer for the type. + + + + + + Reads a value of type . + + The reader to use. + + The value which has been read. + + + + + Writes a value of type . + + The name of the value to write. + The value to write. + The writer to use. + + + + Custom formatter for the type. + + + + + + Returns null. + + + A null value. + + + + + Reads into the specified value using the specified reader. + + The value to read into. + The reader to use. + + + + Writes from the specified value using the specified writer. + + The value to write from. + The writer to use. + + + + Custom formatter for the type. + + + + + + Reads into the specified value using the specified reader. + + The value to read into. + The reader to use. + + + + Writes from the specified value using the specified writer. + + The value to write from. + The writer to use. + + + + Custom formatter for the type. + + + + + + Reads into the specified value using the specified reader. + + The value to read into. + The reader to use. + + + + Writes from the specified value using the specified writer. + + The value to write from. + The writer to use. + + + + Custom formatter for the type. + + + + + + Reads into the specified value using the specified reader. + + The value to read into. + The reader to use. + + + + Writes from the specified value using the specified writer. + + The value to write from. + The writer to use. + + + + Custom formatter for the type. + + + + + + Reads into the specified value using the specified reader. + + The value to read into. + The reader to use. + + + + Writes from the specified value using the specified writer. + + The value to write from. + The writer to use. + + + + + Custom formatter for the type. + This serializes nothing and always deserializes null, + and only exists to ensure that no coroutine instances + are ever created by the serialization system, since they + will in almost all cases be invalid instances. + + + Invalid coroutine instances crash Unity instantly when + they are garbage collected. + + + + + + Gets the type that the formatter can serialize. + + + The type that the formatter can serialize. + + + + + Returns null. + + + + + Returns null. + + + + + Does nothing. + + + + + Does nothing. + + + + + Not yet documented. + + Not yet documented. + + + + Not yet documented. + + + + + Not yet documented. + + Not yet documented. + Not yet documented. + + + + Not yet documented. + + Not yet documented. + Not yet documented. + + + + Not yet documented. + + Not yet documented. + Not yet documented. + Not yet documented. + + + + Not yet documented. + + + + + Gets the provider identifier. + + + + + Gets the path string from key. + + The key. + + + + Gets the key from path string. + + The path string. + + + + Compares the specified x. + + The x. + The y. + + + + Not yet documented. + + + + + Gets the path string from key. + + The key. + + + + Gets the key from path string. + + The path string. + + + + Compares the specified x. + + The x. + The y. + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Dictionary key path provider for + + + + + Custom formatter for the type. + + + + + + Reads into the specified value using the specified reader. + + The value to read into. + The reader to use. + + + + Writes from the specified value using the specified writer. + + The value to write from. + The writer to use. + + + + Custom formatter for the type. + + + + + + Reads into the specified value using the specified reader. + + The value to read into. + The reader to use. + + + + Writes from the specified value using the specified writer. + + The value to write from. + The writer to use. + + + + Custom formatter for the type. + + + + + + Reads into the specified value using the specified reader. + + The value to read into. + The reader to use. + + + + Writes from the specified value using the specified writer. + + The value to write from. + The writer to use. + + + + Indicates that an Odin-serialized Unity object controls its own serialization format. Every time it is serialized, it will be asked which format to use. + + + + + Gets the format to use for serialization. + + + + + Indicates that an Odin-serialized Unity object supports prefab serialization. + + + + + Gets or sets the serialization data of the object. + + + + + Custom formatter for the type. + + + + + + Reads into the specified value using the specified reader. + + The value to read into. + The reader to use. + + + + Writes from the specified value using the specified writer. + + The value to write from. + The writer to use. + + + + Custom formatter for the type. + + + + + + Reads into the specified value using the specified reader. + + The value to read into. + The reader to use. + + + + Writes from the specified value using the specified writer. + + The value to write from. + The writer to use. + + + + Custom formatter for the type. + + + + + + Reads into the specified value using the specified reader. + + The value to read into. + The reader to use. + + + + Writes from the specified value using the specified writer. + + The value to write from. + The writer to use. + + + + Custom formatter for the type. + + + + + + Reads into the specified value using the specified reader. + + The value to read into. + The reader to use. + + + + Writes from the specified value using the specified writer. + + The value to write from. + The writer to use. + + + + Unity serialized data struct that contains all data needed by Odin serialization. + + + + + The name of the field. + + + + + The name of the field. + + + + + The name of the field. + + + + + The data format used by the serializer. This field will be automatically set to the format specified in the global serialization config + when the Unity object gets serialized, unless the Unity object implements the interface. + + + + + The serialized data when serializing with the Binray format. + + + + + All serialized Unity references. + + + + + Whether the object contains any serialized data. + + + + + Gets a value indicating whether the struct contains any data. + If this is false, then it could mean that Unity has not yet deserialized the struct. + + + + + The serialized data when serializing with the JSON format. + + + + + The reference to the prefab this is only populated in prefab scene instances. + + + + + All serialized Unity references. + + + + + All Odin serialized prefab modifications. + + + + + The serialized data when serializing with the Nodes format. + + + + + Resets all data. + + + + + Custom generic formatter for the , , and types. + + The type of UnityEvent that this formatter can serialize and deserialize. + + + + + Get an uninitialized object of type . + + + An uninitialized object of type . + + + + + Resolves external index references to Unity objects. + + + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with a list of Unity objects. + + The referenced Unity objects. + + + + Gets the currently referenced Unity objects. + + A list of the currently referenced Unity objects. + + + + Sets the referenced Unity objects of the resolver to a given list, or a new list if the value is null. + + The referenced Unity objects to set, or null if a new list is required. + + + + Determines whether the specified value can be referenced externally via this resolver. + + The value to reference. + The index of the resolved value, if it can be referenced. + + true if the reference can be resolved, otherwise false. + + + + + Tries to resolve the given reference index to a reference value. + + The index to resolve. + The resolved value. + + true if the index could be resolved to a value, otherwise false. + + + + + Resets this instance. + + + + + Utility class which initializes the Sirenix serialization system to be compatible with Unity. + + + + + Initializes the Sirenix serialization system to be compatible with Unity. + + + + + Custom formatter for the type. + + + + + + Reads into the specified value using the specified reader. + + The value to read into. + The reader to use. + + + + Writes from the specified value using the specified writer. + + The value to write from. + The writer to use. + + + + Custom formatter for the type. + + + + + + Reads into the specified value using the specified reader. + + The value to read into. + The reader to use. + + + + Writes from the specified value using the specified writer. + + The value to write from. + The writer to use. + + + + Custom formatter for the type. + + + + + + Reads into the specified value using the specified reader. + + The value to read into. + The reader to use. + + + + Writes from the specified value using the specified writer. + + The value to write from. + The writer to use. + + + + Provides a way of claiming and releasing cached array buffers. + + The element type of the array to buffer. + + + + + Gets the total element count of the buffered array. This will always be a power of two. + + + The total element count of the buffered array. + + Cannot access a buffer while it is freed. + + + + Gets the buffered array. + + + The buffered array. + + Cannot access a buffer while it is freed. + + + + Gets a value indicating whether this buffer is free. + + + true if this buffer is free; otherwise, false. + + + + + Claims a buffer with the specified minimum capacity. Note: buffers always have a capacity equal to or larger than 256. + + The minimum capacity. + A buffer which has a capacity equal to or larger than the specified minimum capacity. + Requested size of buffer must be larger than 0. + + + + Frees the specified buffer. + + The buffer to free. + The buffer argument is null. + + + + Frees this buffer. + + + + + Frees this buffer. + + + + + Utility class for locating and caching formatters for all non-primitive types. + + + + + Editor-only event that fires whenever an emittable formatter has been located. + This event is used by the AOT formatter pre-emitter to locate types that need to have formatters pre-emitted. + + + + + Editor-only event that fires whenever a formatter has been located. + + + + + This event is invoked before everything else when a formatter is being resolved for a given type. If any invoked delegate returns a valid formatter, that formatter is used and the resolve process stops there. + + This can be used to hook into and extend the serialization system's formatter resolution logic. + + + + + Gets a formatter for the type . + + The type to get a formatter for. + The serialization policy to use if a formatter has to be emitted. If null, is used. + + A formatter for the type . + + + + + Gets a formatter for a given type. + + The type to get a formatter for. + The serialization policy to use if a formatter has to be emitted. If null, is used. + + A formatter for the given type. + + The type argument is null. + + + + Provides an array of utility methods which are commonly used by serialization formatters. + + + + + Gets a map of all serializable members on the given type. This will also properly map names extracted from and to their corresponding members. + + The type to get a map for. + The serialization policy to use. If null, is used. + A map of all serializable members on the given type. + + + + Gets an array of all serializable members on the given type. + + The type to get serializable members for. + The serialization policy to use. If null, is used. + An array of all serializable members on the given type. + + + + Creates a fake Unity null value of a given type, for the given -derived owning type. + + Unity uses these kinds of values to indicate missing object references. + + Type of the null value. + Type of the owning value. This is the value which changes the which you get. + A fake Unity null value of a given type. + The nullType or owningType parameter is null. + + The type given in the nullType parameter is not a Unity object. + or + The type given in the owningType parameter is not a Unity object. + + + + + Determines whether a given type is a primitive type to the serialization system. + + The following criteria are checked: type.IsPrimitive or type.IsEnum, or type is a , or . + + The type to check. + true if the given type is a primitive type; otherwise, false. + + + + Determines whether a given type is a primitive array type. Namely, arrays with primitive array types as elements are primitive arrays. + + The following types are primitive array types: , , , , , , , , , , , , and . + + The type to check. + true if the given type is a primitive array type; otherwise, false. + + + + Gets the type contained in the given . Currently only and is supported. + + The to get the contained type of. + The type contained in the given . + Can't get the contained type of the given type. + + + + Gets the value contained in a given . Currently only and is supported. + + The to get the value of. + The instance to get the value from. + The value contained in the given . + Can't get the value of the given type. + + + + Sets the value of a given MemberInfo. Currently only and is supported. + + The to set the value of. + The object to set the value on. + The value to set. + + Property has no setter + or + Can't set the value of the given type. + + + + + Gets an aliased version of a member, with the declaring type name included in the member name, so that there are no conflicts with private fields and properties with the same name in different classes in the same inheritance hierarchy. + + Marked internal in Odin because this method MUST NOT BE CALLED FROM ODIN'S INSPECTOR CODE. + Odin has its own version of this, and there must be no conflict. These aliases must not be + mixed into Odin's own. Use InspectorPropertyInfoUtility.GetPrivateMemberAlias instead. + + + + + Provides utility methods for handling dictionary keys in the prefab modification system. + + + + + A smart comparer for dictionary keys, that uses the most appropriate available comparison method for the given key types. + + + + + Not yet documented. + + Not yet documented. + Not yet documented. + Not yet documented. + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + An Odin-serialized prefab modification, containing all the information necessary to apply the modification. + + + + + The type of modification to be made. + + + + + The deep reflection path at which to make the modification. + + + + + A list of all deep reflection paths in the target object where the value referenced by this modification was also located. + + + + + The modified value to set. + + + + + The new list length to set. + + + + + The dictionary keys to add. + + + + + The dictionary keys to remove. + + + + + Applies the modification to the given Object. + + + + + Types of prefab modification that can be applied. + + + + + A value has been changed at a given path. + + + + + A list length has been changed at a given path. + + + + + A dictionary has been changed at a given path. + + + + + Corresponds to the .NET class, but works only with buffers and so never allocates garbage. + + This class always writes and reads bytes in a little endian format, regardless of system architecture. + + + + + Converts a byte array into a hexadecimal string. + + + + + Converts a hexadecimal string into a byte array. + + + + + Reads two bytes from a buffer and converts them into a value. + + The buffer to read from. + The index to start reading at. + The converted value. + + + + Reads two bytes from a buffer and converts them into a value. + + The buffer to read from. + The index to start reading at. + The converted value. + + + + Reads four bytes from a buffer and converts them into an value. + + The buffer to read from. + The index to start reading at. + The converted value. + + + + Reads four bytes from a buffer and converts them into an value. + + The buffer to read from. + The index to start reading at. + The converted value. + + + + Reads eight bytes from a buffer and converts them into a value. + + The buffer to read from. + The index to start reading at. + The converted value. + + + + Reads eight bytes from a buffer and converts them into an value. + + The buffer to read from. + The index to start reading at. + The converted value. + + + + Reads four bytes from a buffer and converts them into an value. + + The buffer to read from. + The index to start reading at. + The converted value. + + + + Reads eight bytes from a buffer and converts them into an value. + + The buffer to read from. + The index to start reading at. + The converted value. + + + + Reads sixteen bytes from a buffer and converts them into a value. + + The buffer to read from. + The index to start reading at. + The converted value. + + + + Reads sixteen bytes from a buffer and converts them into a value. + + The buffer to read from. + The index to start reading at. + The converted value. + + + + Turns a value into two bytes and writes those bytes to a given buffer. + + The buffer to write to. + The index to start writing at. + The value to write. + + + + Turns an value into two bytes and writes those bytes to a given buffer. + + The buffer to write to. + The index to start writing at. + The value to write. + + + + Turns an value into four bytes and writes those bytes to a given buffer. + + The buffer to write to. + The index to start writing at. + The value to write. + + + + Turns an value into four bytes and writes those bytes to a given buffer. + + The buffer to write to. + The index to start writing at. + The value to write. + + + + Turns a value into eight bytes and writes those bytes to a given buffer. + + The buffer to write to. + The index to start writing at. + The value to write. + + + + Turns an value into eight bytes and writes those bytes to a given buffer. + + The buffer to write to. + The index to start writing at. + The value to write. + + + + Turns a value into four bytes and writes those bytes to a given buffer. + + The buffer to write to. + The index to start writing at. + The value to write. + + + + Turns a value into eight bytes and writes those bytes to a given buffer. + + The buffer to write to. + The index to start writing at. + The value to write. + + + + Turns a value into sixteen bytes and writes those bytes to a given buffer. + + The buffer to write to. + The index to start writing at. + The value to write. + + + + Turns a value into sixteen bytes and writes those bytes to a given buffer. + + The buffer to write to. + The index to start writing at. + The value to write. + + + + Provides an array of utility wrapper methods for easy serialization and deserialization of objects of any type. + + + + + Creates an for a given format. + + The stream to write to. + The serialization context to use. + The format to write. + + An for a given format. + + + + + + Creates an for a given format. + + The stream to read from. + The deserialization context to use. + The format to read. + + An for a given format. + + + + + + Serializes the given value using the given writer. + + The value to serialize. + The writer to use. + + + + Serializes the given value, using the given writer. + + The value to serialize. + The writer to use. + A list of the Unity objects which were referenced during serialization. + + + + Serializes the given value using the given writer. + + The type of the value to serialize. + The value to serialize. + The writer to use. + + + + Serializes the given value, using the given writer. + + The type of the value to serialize. + The value to serialize. + The writer to use. + A list of the Unity objects which were referenced during serialization. + + + + Serializes the given value to a given stream in the specified format. + + The value to serialize. + The stream to serialize to. + The format to serialize in. + The context. + + + + Serializes the given value to a given stream in the specified format. + + The value to serialize. + The stream to serialize to. + The format to serialize in. + A list of the Unity objects which were referenced during serialization. + The context. + + + + Serializes the given value to a given stream in the specified format. + + The type of the value to serialize. + The value to serialize. + The stream to serialize to. + The format to serialize in. + The context. + + + + Serializes the given value to a given stream in the specified format. + + The type of the value to serialize. + The value to serialize. + The stream to serialize to. + The format to serialize in. + A list of the Unity objects which were referenced during serialization. + The context. + + + + Serializes the given value using the specified format, and returns the result as a byte array. + + The value to serialize. + The format to use. + The context. + A byte array containing the serialized value. + + + + Serializes the given value using the specified format, and returns the result as a byte array. + + The value to serialize. + The format to use. + A list of the Unity objects which were referenced during serialization. + A byte array containing the serialized value. + + + + Serializes the given value using the specified format, and returns the result as a byte array. + + The type of the value to serialize. + The value to serialize. + The format to use. + The context to use. + A byte array containing the serialized value. + + + + Serializes the given value using the specified format and returns the result as a byte array. + + The type of the value to serialize. + The value to serialize. + The format to use. + A list of the Unity objects which were referenced during serialization. + The context to use. + A byte array containing the serialized value. + + + + Deserializes a value from the given reader. This might fail with primitive values, as they don't come with metadata. + + The reader to use. + The deserialized value. + + + + Deserializes a value from the given reader, using the given list of Unity objects for external index reference resolution. This might fail with primitive values, as they don't come with type metadata. + + The reader to use. + The list of Unity objects to use for external index reference resolution. + + The deserialized value. + + + + + Deserializes a value from the given reader. + + The type to deserialize. + The reader to use. + The deserialized value. + + + + Deserializes a value of a given type from the given reader, using the given list of Unity objects for external index reference resolution. + + The type to deserialize. + The reader to use. + The list of Unity objects to use for external index reference resolution. + + The deserialized value. + + + + + Deserializes a value from the given stream in the given format. This might fail with primitive values, as they don't come with type metadata. + + The reader to use. + The format to read. + The context. + + The deserialized value. + + + + + Deserializes a value from the given stream in the given format, using the given list of Unity objects for external index reference resolution. This might fail with primitive values, as they don't come with type metadata. + + The stream to read from. + The format to read. + The list of Unity objects to use for external index reference resolution. + The context. + + The deserialized value. + + + + + Deserializes a value of a given type from the given stream in the given format. + + The type to deserialize. + The stream to read from. + The format to read. + The context. + + The deserialized value. + + + + + Deserializes a value of a given type from the given stream in the given format, using the given list of Unity objects for external index reference resolution. + + The type to deserialize. + The stream to read from. + The format to read. + The list of Unity objects to use for external index reference resolution. + The context. + + The deserialized value. + + + + + Deserializes a value from the given byte array in the given format. This might fail with primitive values, as they don't come with type metadata. + + The bytes to deserialize from. + The format to read. + The context. + + The deserialized value. + + + + + Deserializes a value from the given byte array in the given format, using the given list of Unity objects for external index reference resolution. This might fail with primitive values, as they don't come with type metadata. + + The bytes to deserialize from. + The format to read. + The list of Unity objects to use for external index reference resolution. + + The deserialized value. + + + + + Deserializes a value of a given type from the given byte array in the given format. + + The type to deserialize. + The bytes to deserialize from. + The format to read. + The context to use. + + The deserialized value. + + + + + Deserializes a value of a given type from the given byte array in the given format, using the given list of Unity objects for external index reference resolution. + + The type to deserialize. + The bytes to deserialize from. + The format to read. + The list of Unity objects to use for external index reference resolution. + The context to use. + + The deserialized value. + + + + + Creates a deep copy of an object. Returns null if null. All Unity objects references will remain the same - they will not get copied. + + + + + Provides an array of utility wrapper methods for easy serialization and deserialization of Unity objects of any type. + Note that, during serialization, it is always assumed that we are running on Unity's main thread. Deserialization can + happen on any thread, and all API's interacting with deserialization are thread-safe. + + Note that setting the IndexReferenceResolver on contexts passed into methods on this class will have no effect, as it will always + be set to a UnityReferenceResolver. + + + + + From the new scriptable build pipeline package + + + + + Note: it is assumed that code calling this is holding the DeserializePrefabCaches_LOCK lock, and will continue to hold it while the returned hashset is being modified + + + + + Whether to always force editor mode serialization. This member only exists in the editor. + + + + + Not yet documented. + + + + + Checks whether Odin will serialize a given member. + + The member to check. + Whether to allow serialization of members that will also be serialized by Unity. + The policy that Odin should be using for serialization of the given member. If this parameter is null, it defaults to . + True if Odin will serialize the member, otherwise false. + + + + Guesses whether or not Unity will serialize a given member. This is not completely accurate. + + The member to check. + True if it is guessed that Unity will serialize the member, otherwise false. + The parameter is null. + + + + Guesses whether or not Unity will serialize a given type. This is not completely accurate. + + The type to check. + True if it is guessed that Unity will serialize the type, otherwise false. + The parameter is null. + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Creates an object with default values initialized in the style of Unity; strings will be "", classes will be instantiated recursively with default values, and so on. + + + + + In 2020.1, Unity changed EditorApplication.delayCall from a field to an event, meaning + we now have to use reflection to access it consistently across all versions of Unity. + + + + + A Unity Behaviour which is serialized by the Sirenix serialization system. + + + + + Invoked after deserialization has taken place. + + + + + Invoked before serialization has taken place. + + + + + A Unity Component which is serialized by the Sirenix serialization system. + + + + + Invoked after deserialization has taken place. + + + + + Invoked before serialization has taken place. + + + + + A Unity MonoBehaviour which is serialized by the Sirenix serialization system. + + + + + Invoked after deserialization has taken place. + + + + + Invoked before serialization has taken place. + + + + + A Unity ScriptableObject which is serialized by the Sirenix serialization system. + + + + + Invoked after deserialization has taken place. + + + + + Invoked before serialization has taken place. + + + + + A Unity StateMachineBehaviour which is serialized by the Sirenix serialization system. + + + + + Invoked after deserialization has taken place. + + + + + Invoked before serialization has taken place. + + + + + A Unity ScriptableObject which is serialized by the Sirenix serialization system. + + + + + Invoked after deserialization has taken place. + + + + + Invoked before serialization has taken place. + + + + diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.Serialization.xml.meta b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.Serialization.xml.meta new file mode 100644 index 00000000..6ef56cac --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.Serialization.xml.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5f3147f7af4c49739579b966c458096f +timeCreated: 1488828285 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.Utilities.Editor.dll b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.Utilities.Editor.dll new file mode 100644 index 00000000..7285a1db --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.Utilities.Editor.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0b01362982e91e4a36efe1b86722b2ff5d0846027d52c65ee08dc16385733189 +size 542720 diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.Utilities.Editor.dll.meta b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.Utilities.Editor.dll.meta new file mode 100644 index 00000000..9a780880 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.Utilities.Editor.dll.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 5c65184932ff4fd48a343e2360256baf +timeCreated: 1488828285 +licenseType: Store +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + isOverridable: 0 + platformData: + Any: + enabled: 0 + settings: + Exclude Android: 1 + Exclude Editor: 0 + Exclude Linux: 1 + Exclude Linux64: 1 + Exclude LinuxUniversal: 1 + Exclude N3DS: 1 + Exclude OSXIntel: 1 + Exclude OSXIntel64: 1 + Exclude OSXUniversal: 1 + Exclude PS4: 1 + Exclude PSM: 1 + Exclude PSP2: 1 + Exclude SamsungTV: 1 + Exclude Tizen: 1 + Exclude WebGL: 1 + Exclude WiiU: 1 + Exclude Win: 1 + Exclude Win64: 1 + Exclude WindowsStoreApps: 1 + Exclude XboxOne: 1 + Exclude iOS: 1 + Exclude tvOS: 1 + Editor: + enabled: 1 + settings: + DefaultValueInitialized: true + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.Utilities.Editor.xml b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.Utilities.Editor.xml new file mode 100644 index 00000000..394035db --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.Utilities.Editor.xml @@ -0,0 +1,7788 @@ + + + + Sirenix.Utilities.Editor + + + + + Icon for using in editor GUI. + + + + + Gets the raw input icon texture. + + + + + Gets the icon's highlighted texture. + + + + + Gets the icon's active texture. + + + + + Gets the icon's inactive texture. + + + + + Gets a GUIContent object with the active texture. + + + + + Gets a GUIContent object with the inactive texture. + + + + + Gets a GUIContent object with the highlighted texture. + + + + + Draws the icon in a square rect, with a custom shader that makes the icon look better when down-scaled. + This also handles mouseover effects, and linier color spacing. + + + + + Draws the icon in a square rect, with a custom shader that makes the icon look better when down-scaled. + This also handles mouseover effects, and linier color spacing. + + + + + Draws the icon in a square rect, with a custom shader that makes the icon look better when down-scaled. + This also handles mouseover effects, and linier color spacing. + + + + + Collection of EditorIcons for use in GUI drawing. + + + + + Gets an icon of an airplane symbol. + + + + + Gets an icon of an alert circle symbol. + + + + + Gets an icon of an alert triangle symbol. + + + + + Gets an icon of an arrow down symbol. + + + + + Gets an icon of an arrow left symbol. + + + + + Gets an icon of an arrow right symbol. + + + + + Gets an icon of an arrow up symbol. + + + + + Gets an icon of a bell symbol. + + + + + Gets an icon of a car symbol. + + + + + Gets an icon of a char1 symbol. + + + + + Gets an icon of a char2 symbol. + + + + + Gets an icon of a char3 symbol. + + + + + Gets an icon of a char graph symbol. + + + + + Gets an icon of a checkmark symbol. + + + + + Gets an icon of a clock symbol. + + + + + Gets an icon of a clouds symbol. + + + + + Gets an icon of a clouds rainy symbol. + + + + + Gets an icon of a clouds rainy sunny symbol. + + + + + Gets an icon of a clouds rainy thunder symbol. + + + + + Gets an icon of a clouds thunder symbol. + + + + + Gets an icon of a crosshair symbol. + + + + + Gets an icon of a cut symbol. + + + + + Gets an icon of a day calendar symbol. + + + + + Gets an icon of a download symbol. + + + + + Gets an icon of an eject symbol. + + + + + Gets an icon of an eye dropper symbol. + + + + + Gets an icon of a female symbol. + + + + + Gets an icon of a file symbol. + + + + + Gets an icon of a file cabinet symbol. + + + + + Gets an icon of a finnish banner symbol. + + + + + Gets an icon of a flag symbol. + + + + + Gets an icon of a flag finnish symbol. + + + + + Gets an icon of a folder symbol. + + + + + Gets an icon of a folder back symbol. + + + + + Gets an icon of a gKey symbol. + + + + + Gets an icon of a globe symbol. + + + + + Gets an icon of a grid blocks symbol. + + + + + Gets an icon of a grid image text symbol. + + + + + Gets an icon of a grid image text list symbol. + + + + + Gets an icon of a grid layout symbol. + + + + + Gets an icon of a hamburger menu symbol. + + + + + Gets an icon of a house symbol. + + + + + Gets an icon of an image symbol. + + + + + Gets an icon of an image collection symbol. + + + + + Gets an icon of an info symbol. + + + + + Gets an icon of a letter symbol. + + + + + Gets an icon of a light bulb symbol. + + + + + Gets an icon of a link symbol. + + + + + Gets an icon of a list symbol. + + + + + Gets an icon of a loading bar symbol. + + + + + Gets an icon of a lock locked symbol. + + + + + Gets an icon of a lock unlocked symbol. + + + + + Gets an icon of a lock unloacked symbol. + + + + + Gets an icon of a magnifying glass symbol. + + + + + Gets an icon of a male symbol. + + + + + Gets an icon of a marker symbol. + + + + + Gets an icon of a maximize symbol. + + + + + Gets an icon of a microphone symbol. + + + + + Gets an icon of a minimize symbol. + + + + + Gets an icon of a minus symbol. + + + + + Gets an icon of a mobile phone symbol. + + + + + Gets an icon of a money symbol. + + + + + Gets an icon of a move symbol. + + + + + Gets an icon of a multi user symbol. + + + + + Gets an icon of a next symbol. + + + + + Gets an icon of a pacman ghost symbol. + + + + + Gets an icon of a paperclip symbol. + + + + + Gets an icon of a pause symbol. + + + + + Gets an icon of a pen symbol. + + + + + Gets an icon of a pen add symbol. + + + + + Gets an icon of a pen minus symbol. + + + + + Gets an icon of a play symbol. + + + + + Gets an icon of a plus symbol. + + + + + Gets an icon of a podium symbol. + + + + + Gets an icon of a previous symbol. + + + + + Gets an icon of a reception signal symbol. + + + + + Gets an icon of a redo symbol. + + + + + Gets an icon of a refresh symbol. + + + + + Gets an icon of a rotate symbol. + + + + + Gets an icon of a ruler symbol. + + + + + Gets an icon of a ruler rect symbol. + + + + + Gets an icon of a settings cog symbol. + + + + + Gets an icon of a shopping basket symbol. + + + + + Gets an icon of a shopping cart symbol. + + + + + Gets an icon of a single user symbol. + + + + + Gets an icon of a smart phone symbol. + + + + + Gets an icon of a sound symbol. + + + + + Gets an icon of a speech bubble round symbol. + + + + + Gets an icon of a speech bubble square symbol. + + + + + Gets an icon of a speech bubbles round symbol. + + + + + Gets an icon of a speech bubbles square symbol. + + + + + Gets an icon of a star pointer symbol. + + + + + Gets an icon of a stop symbol. + + + + + Gets an icon of a stretch symbol. + + + + + Gets an icon of a table symbol. + + + + + Gets an icon of a tag symbol. + + + + + Gets an icon of a test tube symbol. + + + + + Gets an icon of a timer symbol. + + + + + Gets an icon of a traffic stop light symbol. + + + + + Gets an icon of a transparent symbol. + + + + + Gets an icon of a tree symbol. + + + + + Gets an icon of a triangle down symbol. + + + + + Gets an icon of a triangle left symbol. + + + + + Gets an icon of a triangle right symbol. + + + + + Gets an icon of a triangle up symbol. + + + + + Gets an icon of an undo symbol. + + + + + Gets an icon of an upload symbol. + + + + + Gets an icon of a wifi signal symbol. + + + + + Gets an icon of an x symbol. + + + + + Gets a texture of a test inconclusive symbol. + + + + + Gets a texture of a test failed symbol. + + + + + Gets a texture of a test normal symbol. + + + + + Gets a texture of a test passed symbol. + + + + + Gets a texture of a console info icon symbol. + + + + + Gets a texture of a console warnicon symbol. + + + + + Gets a texture of a console error icon symbol. + + + + + Gets a texture of an odin inspector logo symbol. + + + + + Gets a texture of a scene asset icon symbol. + + + + + Gets an icon representing a GameObject. + + + + + Gets an icon of a unity info icon. + + + + + Gets an icon of a unity warning icon. + + + + + Gets an icon of a unity error icon. + + + + + Gets an icon of a unity folder. + + + + + Lazy loading Editor Icon. + + + + + Loads an EditorIcon from the spritesheet. + + + + + Gets the icon's highlight texture. + + + + + Gets the icon's active texture. + + + + + Gets the icon's inactive texture. + + + + + Not yet documented. + + + + + Utility for parsing and emitting expression delegates. + + + + Parses an expression and tries to emit a delegate method. + The expression to parse. + Indicates if the expression should be static instead of instanced. + The context type for the execution of the expression. + Output for any errors that may occur. + If true then error message will be formatted with color tags. Otherwise, the error message will be formatted with text only. + Returns the emitted delegate if the expression is compiled successfully. Otherwise, null. + + + Parses an expression and tries to emit a delegate method. + The expression to parse. + Indicates if the expression should be static instead of instanced. + The context type for the execution of the expression. + The parameters of the expression delegate. + Output for any errors that may occur. + If true then error message will be formatted with color tags. Otherwise, the error message will be formatted with text only. + Returns the emitted delegate if the expression is compiled successfully. Otherwise, null. + + + Parses an expression and tries to emit a delegate method. + The expression to parse. + Indicates if the expression should be static instead of instanced. + The context type for the execution of the expression. + The parameters of the expression delegate. + The names of the expression's parameters, for use with the named parameter syntax. + Output for any errors that may occur. + If true then error message will be formatted with color tags. Otherwise, the error message will be formatted with text only. + Returns the emitted delegate if the expression is compiled successfully. Otherwise, null. + + + Parses an expression and tries to emit a delegate method. + The expression to parse. + The emit context. + Output for any errors that may occur. + If true then error message will be formatted with color tags. Otherwise, the error message will be formatted with text only. + Returns the emitted delegate if the expression is compiled successfully. Otherwise, null. + + + Parses an expression and tries to emit a delegate of the specified type. + The expression to parse. + The emit context. + The type of the delegate to emit. + Output for any errors that may occur. + If true then error message will be formatted with color tags. Otherwise, the error message will be formatted with text only. + Returns the emitted delegate if the expression is compiled successfully. Otherwise, null. + + + Parses an expression and emits an ExpressionFunc method. + The expression to parse. + The context type for the execution of the expression. + Output for any errors that may occur. + If true then error message will be formatted with color tags. Otherwise, the error message will be formatted with text only. + Returns the emitted ExpressionFunc if the expression is compiled successfully. Otherwise, null. + + + Parses an expression and emits an ExpressionFunc method. + The expression to parse. + Indicates if the expression should be static instead of instanced. + The context type for the execution of the expression. + Output for any errors that may occur. + If true then error message will be formatted with color tags. Otherwise, the error message will be formatted with text only. + Returns the emitted ExpressionFunc if the expression is compiled successfully. Otherwise, null. + + + Parses an expression and emits an ExpressionFunc method. + The expression to parse. + Indicates if the expression should be static instead of instanced. + The context type for the execution of the expression. + Output for any errors that may occur. + If true then error message will be formatted with color tags. Otherwise, the error message will be formatted with text only. + Returns the emitted ExpressionFunc if the expression is compiled successfully. Otherwise, null. + + + Parses an expression and emits an ExpressionFunc method. + The expression to parse. + Indicates if the expression should be static instead of instanced. + The context type for the execution of the expression. + Output for any errors that may occur. + If true then error message will be formatted with color tags. Otherwise, the error message will be formatted with text only. + Returns the emitted ExpressionFunc if the expression is compiled successfully. Otherwise, null. + + + Parses an expression and emits an ExpressionFunc method. + The expression to parse. + Indicates if the expression should be static instead of instanced. + The context type for the execution of the expression. + Output for any errors that may occur. + If true then error message will be formatted with color tags. Otherwise, the error message will be formatted with text only. + Returns the emitted ExpressionFunc if the expression is compiled successfully. Otherwise, null. + + + Parses an expression and emits an ExpressionFunc method. + The expression to parse. + Indicates if the expression should be static instead of instanced. + The context type for the execution of the expression. + Output for any errors that may occur. + If true then error message will be formatted with color tags. Otherwise, the error message will be formatted with text only. + Returns the emitted ExpressionFunc if the expression is compiled successfully. Otherwise, null. + + + Parses an expression and emits an ExpressionFunc method. + The expression to parse. + Indicates if the expression should be static instead of instanced. + The context type for the execution of the expression. + Output for any errors that may occur. + If true then error message will be formatted with color tags. Otherwise, the error message will be formatted with text only. + Returns the emitted ExpressionFunc if the expression is compiled successfully. Otherwise, null. + + + Parses an expression and emits an ExpressionFunc method. + The expression to parse. + Indicates if the expression should be static instead of instanced. + The context type for the execution of the expression. + Output for any errors that may occur. + If true then error message will be formatted with color tags. Otherwise, the error message will be formatted with text only. + Returns the emitted ExpressionFunc if the expression is compiled successfully. Otherwise, null. + + + Parses an expression and emits an ExpressionFunc method. + The expression to parse. + Indicates if the expression should be static instead of instanced. + The context type for the execution of the expression. + Output for any errors that may occur. + If true then error message will be formatted with color tags. Otherwise, the error message will be formatted with text only. + Returns the emitted ExpressionFunc if the expression is compiled successfully. Otherwise, null. + + + Parses an expression and emits an ExpressionFunc method. + The expression to parse. + Indicates if the expression should be static instead of instanced. + The context type for the execution of the expression. + Output for any errors that may occur. + If true then error message will be formatted with color tags. Otherwise, the error message will be formatted with text only. + Returns the emitted ExpressionFunc if the expression is compiled successfully. Otherwise, null. + + + Parses an expression and emits an ExpressionAction method. + The expression to parse. + The context type for the execution of the expression. + Output for any errors that may occur. + If true then error message will be formatted with color tags. Otherwise, the error message will be formatted with text only. + Returns the emitted ExpressionAction if the expression is compiled successfully. Otherwise, null. + + + Parses an expression and emits an ExpressionAction method. + The expression to parse. + Indicates if the expression should be static instead of instanced. + The context type for the execution of the expression. + Output for any errors that may occur. + If true then error message will be formatted with color tags. Otherwise, the error message will be formatted with text only. + Returns the emitted ExpressionAction if the expression is compiled successfully. Otherwise, null. + + + Parses an expression and emits an ExpressionAction method. + The expression to parse. + Indicates if the expression should be static instead of instanced. + The context type for the execution of the expression. + Output for any errors that may occur. + If true then error message will be formatted with color tags. Otherwise, the error message will be formatted with text only. + Returns the emitted ExpressionAction if the expression is compiled successfully. Otherwise, null. + + + Parses an expression and emits an ExpressionAction method. + The expression to parse. + Indicates if the expression should be static instead of instanced. + The context type for the execution of the expression. + Output for any errors that may occur. + If true then error message will be formatted with color tags. Otherwise, the error message will be formatted with text only. + Returns the emitted ExpressionAction if the expression is compiled successfully. Otherwise, null. + + + Parses an expression and emits an ExpressionAction method. + The expression to parse. + Indicates if the expression should be static instead of instanced. + The context type for the execution of the expression. + Output for any errors that may occur. + If true then error message will be formatted with color tags. Otherwise, the error message will be formatted with text only. + Returns the emitted ExpressionAction if the expression is compiled successfully. Otherwise, null. + + + Parses an expression and emits an ExpressionAction method. + The expression to parse. + Indicates if the expression should be static instead of instanced. + The context type for the execution of the expression. + Output for any errors that may occur. + If true then error message will be formatted with color tags. Otherwise, the error message will be formatted with text only. + Returns the emitted ExpressionAction if the expression is compiled successfully. Otherwise, null. + + + Parses an expression and emits an ExpressionAction method. + The expression to parse. + Indicates if the expression should be static instead of instanced. + The context type for the execution of the expression. + Output for any errors that may occur. + If true then error message will be formatted with color tags. Otherwise, the error message will be formatted with text only. + Returns the emitted ExpressionAction if the expression is compiled successfully. Otherwise, null. + + + Parses an expression and emits an ExpressionAction method. + The expression to parse. + Indicates if the expression should be static instead of instanced. + The context type for the execution of the expression. + Output for any errors that may occur. + If true then error message will be formatted with color tags. Otherwise, the error message will be formatted with text only. + Returns the emitted ExpressionAction if the expression is compiled successfully. Otherwise, null. + + + Parses an expression and emits an ExpressionAction method. + The expression to parse. + Indicates if the expression should be static instead of instanced. + The context type for the execution of the expression. + Output for any errors that may occur. + If true then error message will be formatted with color tags. Otherwise, the error message will be formatted with text only. + Returns the emitted ExpressionAction if the expression is compiled successfully. Otherwise, null. + + + Parses an expression and emits an ExpressionAction method. + The expression to parse. + Indicates if the expression should be static instead of instanced. + The context type for the execution of the expression. + Output for any errors that may occur. + If true then error message will be formatted with color tags. Otherwise, the error message will be formatted with text only. + Returns the emitted ExpressionAction if the expression is compiled successfully. Otherwise, null. + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Drag and drop utilities for both Unity and non-unity objects. + + + + + Gets the position from where the last drag started from in screen space. + + + + + Gets the delta position between the currrent mouse position and where the last drag originated from. + + + + + Gets the hovering accepted drop zone ID. + + + + + Gets a value indicating whether an instance is currently being dragged. + + + + + Gets the currently dragging identifier. + + + + + Gets the current hovering drop zone identifier. + + + + + Gets a more percistent id for drag and drop. + + + + + Draws a objectpicker button in the given rect. This one is designed to look good on top of DrawDropZone(). + + + + + Draws a objectpicker butter, in the given rect. This one is designed to look good on top of DrawDropZone(). + + + + + Draws the graphics for a DropZone. + + + + + A draggable zone for both Unity and non-unity objects. + + + + + A drop zone area for bot Unity and non-unity objects. + + + + + A drop zone area for bot Unity and non-unity objects. + + + + + A drop zone area for bot Unity and non-unity objects. + + + + + A drop zone area for bot Unity and non-unity objects. + + + + + A drop zone area for bot Unity and non-unity objects. + + + + + A drop zone area for bot Unity and non-unity objects. + + + + + A drop zone area for bot Unity and non-unity objects. + + + + + A drop zone area for bot Unity and non-unity objects. + + + + + Disalloweds the drop area for next drag zone. Follow this function call by a DragZone. + + + + + A draggable zone for both Unity and non-unity objects. + + + + + A draggable zone for both Unity and non-unity objects. + + + + + A draggable zone for both Unity and non-unity objects. + + + + + A draggable zone for both Unity and non-unity objects. + + + + + Collection of extension methods for . + + + + + Returns true when the user presses the specified mouse button. + + The . + The mouse button the user has to press. + If true then the method will call on the event. + true on mouse down events with the specified button. Otherwise false. + + + + Returns true when the user clicks a rect with the mouse. + + The event. + The rect the user can click on. + The button the user has to press. + If true then the method will call on the event. + true on mouse down events with the specified button. Otherwise false. + + + + Returns true when the user releases the specified mouse button. + + The . + The mouse button the user has to release. + If true then the method will call on the event. + true on mouse up events, with the specified button. Otherwise false. + + + + Returns true when the user releases the specified mouse button over the specified rect. + + The . + The rect the user has to release the mouse button over. + The mouse button the user has to release. + If true then the method will call on the event. + true on mouse up events, with the specified button and over the specified rect. Otherwise false. + + + + Returns true when the user left clicks a rect. + + The . + The rect the user can click. + If true then the method will call on the event. + true on left click events, on the specified rect. Otherwise false. + + + + Returns true when the user right clicks a rect. + + The . + The rect the user can right click. + If true then the method will call on the event. + true on context click events, on the specified rect. Otherwise false. + + + + Returns true when the user presses the specified key. + + The . + The key the user has to press. + If true then the method will call on the event. + true on key down events with the specified key code. Otherwise false. + + + + Returns true when the user releases the specified key. + + The . + The key the user has to release. + If true then the method will call on the event. + true on key up events with the specified key code. Otherwise false. + + + + Returns true whene the user moves or drags the mouse. + + The . + If true then the method will call on the event. + true on mouse move or mouse drag events. Otherwise false. + + + + Returns true when the user hovers the mouse over the specified rect. + + The . + The rect the user can hover. + true on any event where the mouse is hovering the specified rect. Otherwise false. + + + + Returns true on repaint events. + + The . + true on repaint events. Otherwise false. + + + + Returns true on layout events. + + The . + true on layout events. Otherwise false. + + + + Returns true on the specified event. + + The . + The required event type. + true on the specified event. Otherwise false. + + + + Collection of extension methods for . + + + + + Removes all menu items with a given name from the GenericMenu. + + The GenericMenu to remove items from. + The name of the items to remove. + True if any items were removed, otherwise false. + + + + Replaces the first found menu item with a given name with a new menu item, or if no such element is found, adds a new one. + + The GenericMenu to replace items in. + The name of the items to remove. + The func to replace or add. + The on value to set the new menu item with. + True if an item was replaced, otherwise false. + + + + Replaces the first found menu item with a given name with a new menu item, or if no such element is found, adds a new one. + + The GenericMenu to replace items in. + The name of the items to remove. + The on value to set the new menu item with. + The func to replace or add. + The user data. + + True if an item was replaced, otherwise false. + + + + + This class is due to undergo refactoring. + + + + + The value. + + + + + Performs an implicit conversion from to . + + + + + How the square object field should be aligned. + + + + + + Left aligned. + + + + + Centered. + + + + + Right aligned. + + + + + This class is due to undergo refactoring. Use the new DragAndDropUtilities instead. + + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + This class is due to undergo refactoring. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + This class is due to undergo refactoring. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + This class is due to undergo refactoring. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + This class is due to undergo refactoring. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + This class is due to undergo refactoring. + + + + + Emitted wrapper for the internal "UnityEngine.GUIClip" class. + + + + + Not yet documented. + + + + + Gets the top most clipped rect. + + + + + Gets the visible rect. + + + + + Gets the top rect. + + + + + Unclips the specified position. + + The position. + + + + + Unclips the specified rect. + + The rect. + + + + + A helper class to control paging of n number of elements in various situations. + + + + + Disables the paging, and show all elements. + + + + + Initializes a new instance of the class. + + + + + Updates all values based on and . + + + Call update right before using and in your for loop. + + The total number of elements to apply paging for. + + + + Gets or sets a value indicating whether this instance is enabled. + + + true if this instance is enabled; otherwise, false. + + + + + Gets a value indicating whether this instance is on the frist page. + + + true if this instance is on frist page; otherwise, false. + + + + + Gets a value indicating whether this instance is on the last page. + + + true if this instance is on last page; otherwise, false. + + + + + Gets or sets the number of items per page. + + + The number of items pr page. + + + + + Gets or sets the current page. + + + The current page. + + + + + Gets the start index. + + + The start index. + + + + + Gets the end index. + + + The end index. + + + + + Gets or sets the page count. + + + The page count. + + + + + Gets the total number of elements. + Use to change the value. + + + + + Draws right-aligned toolbar paging buttons. + + + + + A Utility class for creating tables in Unity's editor GUI. + A table can either be created from scratch using new GUITable(xCount,yCount), or created using one of the static GUITable.Create overloads. + See the online documentation, for examples and more information. + + + Creating a matrix table for a two-dimentional array. + + private GUITable table; + + private void Init() + { + bool[,] boolArr = new bool[20,20]; + + this.table = GUITable.Create( + twoDimArray: boolArr, + drawElement: (rect, x, y) => boolArr[x, y] = EditorGUI.Toggle(rect, boolArr[x, y]), + horizontalLabel: "Optional Horizontal Label", // horizontalLabel is optional and can be null. + columnLabels: (rect, x) => GUI.Label(rect, x.ToString()), // columnLabels is optional and can be null. + verticalLabel: "Optional Vertical Label", // verticalLabel is optional and can be null. + rowLabels: (rect, x) => GUI.Label(rect, x.ToString()) // rowLabels is optional and can be null. + ); + } + + private void OnGUI() + { + this.table.DrawTable(); + } + + + + Creating a table for a list. + + private GUITable table; + + private void Init() + { + Listt<SomeClasst> someList = new List<SomeClass>() { new SomeClass(), new SomeClass(), new SomeClass() }; + + this.table = GUITable.Create(someList, "Optional Title", + new GUITableColumn() + { + ColumnTitle = "A", + OnGUI = (rect, i) => someList[i].A = EditorGUI.TextField(rect, someList[i].A), + Width = 200, + MinWidth = 100, + }, + new GUITableColumn() + { + ColumnTitle = "B", + OnGUI = (rect, i) => someList[i].B = EditorGUI.IntField(rect, someList[i].B), + Resizable = false, + }, + new GUITableColumn() + { + ColumnTitle = "C", + OnGUI = (rect, i) => someList[i].C = EditorGUI.IntField(rect, someList[i].C), + SpanColumnTitle = true, + } + ); + } + + private void OnGUI() + { + this.table.DrawTable(); + } + + private class SomeClass + { + public string A; + public int B; + public int C; + public int D; + } + + + + Styling a cell. + Each has two events, OnGUI and OnGUIStyle. OnGUIStyle is called right before OnGUI, but only in repaint events. + + guiTable[x,y].GUIStyle += rect => EditorGUI.DrawRect(rect, Color.red); + + + + Row and column span. + A cell will span and cover all neighbour cells that are null. + + // Span horizontally: + guiTable[x - 2,y] = null; + guiTable[x - 1,y] = null; + guiTable[x,y].SpanX = true; + guiTable[x + 1,y] = null; + + // Span vertically: + guiTable[x,y - 2] = null; + guiTable[x,y - 1] = null; + guiTable[x,y].SpanY = true; + guiTable[x,y + 1] = null; + + + + + + + + The row count. + + + + + The column count. + + + + + The Table Rect. + + + + + Whether to respect the current GUI indent level. + + + + + Gets or sets a from the . + + + + + Initializes a new instance of the class. + + + + + Draws the table. + + + + + Recaluclates cell and column sizes in the next frame. + + + + + Recalculates the layout for the entire table. + This method gets called whenever the table is initialized, resized or adjusted. If you are manipulating + the width or height of individual table cells, remember to call this method when you're done. + + + + + Creates a table. + + + + + Creates a table. + + + + + Creates a table. + + + + + Creates a table. + + + + + A cell of a + + + + + The minimum width. + + + + + The width of the cell. Default is width is 0. + The width the column is determained by the widest cell in the column. + Width = 0 = auto. + + + + + The height of the cell. Default is height is 22. + The height the column is determained by the tallest cell in the row. + + + + + If true, the cell will expand vertically, covering all neighbour null cells. + + + + + If true, the cell will expand horizontally, covering all neighbour null cells. + + + + + The table column index. + + + + + The table row index. + + + + + The GUI style + + + + + Gets the rect. + + + + + GUITableColumns used creating a table list using GUITable.Create(). + + + + + + + Draws a cell at the given row index for this column. + + + + + The column title text. If there are is columns with a title, there we not be rendered an additional table row for column titles. + + + + + The minimum with of the column. + + + + + The width of the Column. + 0 = auto, and is also the default. + + + + + If true, the column becomes resiziable. + Default is true. + + + + + If true, the column title cell, will span horizontally to neighbour columns, which column titles are null. + Default is false. + + + + + The GUITabGroup is a utility class to draw animated tab groups. + + + + var tabGroup = SirenixEditorGUI.CreateAnimatedTabGroup(someKey); + // Register your tabs before starting BeginGroup. + var tab1 = tabGroup.RegisterTab("tab 1"); + var tab2 = tabGroup.RegisterTab("tab 2"); + + tabGroup.BeginGroup(drawToolbar: true); + { + if (tab1.BeginPage()) + { + // Draw GUI for the first tab page; + } + tab1.EndPage(); + + if (tab2.BeginPage()) + { + // Draw GUI for the second tab page; + } + tab2.EndPage(); + } + tabGroup.EndGroup(); + + // Control the animation speed. + tabGroup.AnimationSpeed = 0.2f; + + // If true, the tab group will have the height equal to the biggest page. Otherwise the tab group will animate in height as well when changing page. + tabGroup.FixedHeight = true; + + // You can change page by calling: + tabGroup.GoToNextPage(); + tabGroup.GoToPreviousPage(); + + + + + + + The animation speed (1 / s) + + + + + The animation speed + + + + + Gets the outer rect of the entire tab group. + + + + + The inner rect of the current tab page. + + + + + If true, the tab group will have the height equal to the biggest page. Otherwise the tab group will animate in height as well when changing page. + + + Sets the current page. + + The page to switch to. + + + + Gets the current page. + + + + + Gets the t. + + + + + The height of the tab buttons. + + + + + Registers the tab. + + + + + Begins the group. + + if set to true a tool-bar for changing pages is drawn. + The style. + + + + Ends the group. + + + + + Goes to page. + + + + + Goes to next page. + + + + + Goes to previous page. + + + + + Various helper function for GUI. + + + + + Gets the bold default font. + + + + + An alternative to GUI.FocusControl(null), which does not take focus away from the current GUI.Window. + + + + + Whether the inspector is currently in the progress of drawing a dictionary key. + + + + + Hides the following draw calls. Remember to call when done. + + + + + Unhides the following draw calls after having called . + + + + + Determines whether the specified EditorWindow is docked. + + The editor window. + true if the editor window is docked. Otherwise false. + + + + Not yet documented. + + + + + Opens a new inspector window for the specified object. + + The unity object. + unityObj + + + + Gets or sets a value indicating whether labels are currently bold. + + + true if this instance is bold label; otherwise, false. + + + + + Gets the size of the current window border. + + + The size of the current window border. + + + + + Gets the editor screen point offset. + + + The editor screen point offset. + + + + + Gets the current editor gui context width. Only set these if you know what it does. + Setting this has been removed. Use PushContextWidth and PopContextWidth instead. + + + + + Unity EditorGUIUtility.labelWidth only works reliablly in Repaint events. + BetterLabelWidth does a better job at giving you the correct LabelWidth in non-repaint events. + + + + + Odin will set this for you whenever an Odin property tree is drawn. + But if you're using BetterLabelWidth and BetterContextWidth without Odin, then + you need to set BetterContextWidth in the beginning of each GUIEvent. + + + + + Gets the current indent amount. + + + The current indent amount. + + + + + Gets the mouse screen position. + + + The mouse screen position. + + + + + Gets the current editor window. + + + The current editor window. + + + + + Gets a value indicating whether the current editor window is focused. + + + true if the current window has focus. Otherwise, false. + + + + + Gets the ID of the current editor window. + + + The ID of the current editor window. + + + + + Gets a value indicating whether a repaint has been requested. + + + true if repaint has been requested. Otherwise false. + + + + + Gets or sets the actual EditorGUIUtility.LabelWidth, regardless of the current hierarchy mode or context width. + + + + + Requests a repaint. + + + + + Requests a repaint. + + + + + Begins the layout measuring. Remember to end with . + + + + + Ends the layout measuring started by + + The measured rect. + + + + Gets the current layout rect. + + The current layout rect. + + + + Gets the current layout rect. + + The current layout rect. + + + + Gets the playmode color tint. + + The playmode color tint. + + + + Pushes a context width to the context width stack. + Remember to pop the value again with . + + The width to push. + + + + Pops a value pushed by . + + + + + Pushes a color to the GUI color stack. Remember to pop the color with . + + The color to push the GUI color.. + if set to true blend with alpha. + + + + Takes a screenshot of the GUI within the specified rect. + + The rect. + The screenshot as a render texture. + + + + Pops the GUI color pushed by . + + + + + Pushes a state to the GUI enabled stack. Remember to pop the state with . + + If set to true GUI will be enabled. Otherwise GUI will be disabled. + + + + Pops the GUI enabled pushed by + + + + + Pushes a state to the IsDrawingDictionaryKey stack. Remember to pop the state with . + + + + + Pops the state pushed by + + + + + Pushes the hierarchy mode to the stack. Remember to pop the state with . + + The hierachy mode state to push. + Changing hierachy mode also changes how label-widths are calcualted. By default, we try to keep the current label width. + + + + Pops the hierarchy mode pushed by . + + + + + Pushes bold label state to the stack. Remember to pop with . + + Value indicating if labels should be bold or not. + + + + Pops the bold label state pushed by . + + + + + Pushes the indent level to the stack. Remember to pop with . + + The indent level to push. + + + + Pops the indent level pushed by . + + + + + Pushes the content color to the stack. Remember to pop with . + + The content color to push.. + If set to true blend with alpha. + + + + Pops the content color pushed by . + + + + + Pushes the label color to the stack. Remember to pop with . + + The label color to push. + + + + Pops the label color pushed by . + + + + + Pushes the GUI position offset to the stack. Remember to pop with . + + The GUI offset. + + + + Pops the GUI position offset pushed by . + + + + + Pushes a GUI matrix to the stack. Remember to pop with . + + The GUI matrix to push. + + + + Pops the GUI matrix pushed by . + + + + + Ignores input on following GUI calls. Remember to end with . + + + + + Ends the ignore input started by . + + + + + Pushes the event type to the stack. Remember to pop with . + + The type of event to push. + + + + Pops the event type pushed by . + + + + + Pushes the width to the editor GUI label width to the stack. Remmeber to Pop with . + + The editor GUI label width to push. + + + + Pops editor gui label widths pushed by . + + + + + Pushes the value to the responsive vector component fields stack. Remeber to pop with . + + + + + Pops responsive vector component fields value pushed by . + + + + + Pushes the value to the fade group duration stack. Remeber to pop with . + + + + + Pops fade group duration value pushed by . + + + + + Pushes the value to the tab page slide animation duration stack. Remember to pop with . + + + + + + Pops tab page slide animation duration value pushed by . + + + + + Clears the repaint request. + + + + + Gets a temporary value context. + + The type of the config value. + The key for the config. + The name of the config. + GUIConfig for the specified key and name. + + + + Gets a temporary value context. + + The type of the value. + The key for the config. + The ID for the config. + GUIConfig for the specified key and ID. + + + + Gets a temporary value context. + + The type of the value. + The primary key. + The secondary key. + GUIConfig for the specified primary and secondary key. + + + + Gets a temporary value context. + + The type of the value. + The key for the context. + GUIConfig for the specified key. + + + + Gets a temporary nullable value context. + + Key for context. + Name for the context. + + + + Gets a temporary nullable value context. + + Key for context. + Id of the context. + + + + Gets a temporary nullable value context. + + Primary key for the context. + Secondary key for the context. + + + + Gets a temporary nullable value context. + + Key for the context. + + + + Gets a temporary context. + + Key for the context. + Name for the context. + Default value of the context. + + + + Gets a temporary context. + + Key for the context. + Id for the context. + Default value of the context. + + + + Gets a temporary context. + + Primary key for the context. + Secondary key for the context. + Default value of the context. + + + + Gets a temporary context. + + Key for the context. + Default value of the context. + + + + Gets a temporary GUIContent with the specified text. + + The text for the GUIContent. + Temporary GUIContent instance. + + + + Gets a temporary GUIContent with the specified text and tooltip. + + The text for the GUIContent. + The tooltip for the GUIContent. + Temporary GUIContent instance. + + + + Gets a temporary GUIContent with the specified image and tooltip. + + The image for the GUIContent. + The tooltip for the GUIContent. + Temporary GUIContent instance. + + + + Gets a temporary GUIContent with the specified text, image and tooltip. + + The text for the GUIContent. + The image for the GUIContent. + The tooltip for the GUIContent. + Temporary GUIContent instance. + + + + Indents the rect by the current indent amount. + + The rect to indent. + Indented rect. + + + + Indents the rect by the current indent amount. + + The rect to indent. + + + + Repaints the EditorWindow if a repaint has been requested. + + The window to repaint. + + + + Repaints the editor if a repaint has been requested. If the currently rendering window is not an InspectorWindow, Repaint() will be called on the current window as well. + + The editor to repaint. + + + + Gets the best thumbnail icon given the provided arguments provided. + + + + + + + + + Configuration for progress bar fields. + + + + + The height of the progress bar field. Default 12 pixel. + + + + + The foreground color of the progress bar field. + + + + + The background color of the progress bar field. + + + + + If true the progress bar field will draw a label ontop to show the current value. + + + + + Alignment of the progress bar field overlay. + + + + + Default configuration. + + + + + Creates a copy of the configuration. + + The configuration to copy. + + + + Creates a progress bar configuration. + + The height of the progress bar. + The foreground color of the progress bar. + The background color of the progress bar. + If true there will be drawn a overlay on top of the field. + The alignment of the text overlay. + + + + Draw mode of quaternion fields. + + + + + + + Draw the quaterion as euler angles. + + + + + Draw the quaterion in as an angle and an axis. + + + + + Draw the quaternion as raw x, y, z and w values. + + + + + Field drawing functions for various types. + + + + + The width of the X, Y and Z labels in structs. + + + + + When true the component labels, for vector fields, will be hidden when the field is too narrow. + + + + + Draws a regular Unity ObjectField, but supports labels being nulls, and also adds a small button that will open the object in a new inspector window. + + Position and size of the field. + The label to use, or null if no label should be used. + The Unity object. + The Unity object type. This supports inheritance. + Wheather or not to allow scene objects. + + + + Draws a regular Unity ObjectField, but supports labels being nulls, and also adds a small button that will open the object in a new inspector window. + + Position and size of the field. + The label to use, or null if no label should be used. + The Unity object. + The Unity object type. This supports inheritance. + Wheather or not to allow scene objects. + + + + Draws a regular Unity ObjectField, but supports labels being nulls, and also adds a small button that will open the object in a new inspector window. + + Position and size of the field. + The Unity object. + The Unity object type. This supports inheritance. + Wheather or not to allow scene objects. + + + + Draws a regular Unity ObjectField, but supports labels being nulls, and also adds a small button that will open the object in a new inspector window. + + The label to use, or null if no label should be used. + The Unity object. + The Unity object type. This supports inheritance. + Wheather or not to allow scene objects. + Layout options. + + + + Draws a regular Unity ObjectField, but supports labels being nulls, and also adds a small button that will open the object in a new inspector window. + + The label to use, or null if no label should be used. + The Unity object. + The Unity object type. This supports inheritance. + Wheather or not to allow scene objects. + Layout options. + + + + Draws a regular Unity ObjectField, but supports labels being nulls, and also adds a small button that will open the object in a new inspector window. + + The Unity object. + The Unity object type. This supports inheritance. + Wheather or not to allow scene objects. + Layout options. + + + + Draws a square ObjectField which renders a preview for UnityEngine.Object types. + This object field also adds support for drag and drop, dragging an object to another square object field, swaps the values. + If you hold down control while letting go it will replace the value, And you can control + click the object field to quickly delete the value it holds. + + + + + Draws a square ObjectField which renders a preview for UnityEngine.Object types. + This object field also adds support for drag and drop, dragging an object to another square object field, swaps the values. + If you hold down control while letting go it will replace the value, And you can control + click the object field to quickly delete the value it holds. + + + + + Draws a square ObjectField which renders a preview for UnityEngine.Object types. + This object field also adds support for drag and drop, dragging an object to another square object field, swaps the values. + If you hold down control while letting go it will replace the value, And you can control + click the object field to quickly delete the value it holds. + + + + + Draws a square ObjectField which renders a preview for UnityEngine.Object types. + This object field also adds support for drag and drop, dragging an object to another square object field, swaps the values. + If you hold down control while letting go it will replace the value, And you can control + click the object field to quickly delete the value it holds. + + + + + Draws a square ObjectField which renders a preview for UnityEngine.Object types. + This object field also adds support for drag and drop, dragging an object to another square object field, swaps the values. + If you hold down control while letting go it will replace the value, And you can control + click the object field to quickly delete the value it holds. + + Position and size of the field. + The label to use, or null if no label should be used. + The Unity object. + The Unity object type. This supports inheritance. + Wheather or not to allow scene objects. + How the square object field should be aligned. + + + + Draws a square ObjectField which renders a preview for UnityEngine.Object types. + This object field also adds support for drag and drop, dragging an object to another square object field, swaps the values. + If you hold down control while letting go it will replace the value, And you can control + click the object field to quickly delete the value it holds. + + Position and size of the field. + The label to use, or null if no label should be used. + The Unity object. + The Unity object type. This supports inheritance. + Wheather or not to allow scene objects. + How the square object field should be aligned. + + + + Draws a square ObjectField which renders a preview for UnityEngine.Object types. + This object field also adds support for drag and drop, dragging an object to another square object field, swaps the values. + If you hold down control while letting go it will replace the value, And you can control + click the object field to quickly delete the value it holds. + + Position and size of the field. + The Unity object. + The Unity object type. This supports inheritance. + Wheather or not to allow scene objects. + How the square object field should be aligned. + + + + Draws a square ObjectField which renders a preview for UnityEngine.Object types. + This object field also adds support for drag and drop, dragging an object to another square object field, swaps the values. + If you hold down control while letting go it will replace the value, And you can control + click the object field to quickly delete the value it holds. + + The label to use, or null if no label should be used. + The Unity object. + The Unity object type. This supports inheritance. + Wheather or not to allow scene objects. + The height or size of the square object field. + How the square object field should be aligned. + + + + Draws a square ObjectField which renders a preview for UnityEngine.Object types. + This object field also adds support for drag and drop, dragging an object to another square object field, swaps the values. + If you hold down control while letting go it will replace the value, And you can control + click the object field to quickly delete the value it holds. + + The label to use, or null if no label should be used. + The Unity object. + The Unity object type. This supports inheritance. + Wheather or not to allow scene objects. + The height or size of the square object field. + How the square object field should be aligned. + + + + Draws a square ObjectField which renders a preview for UnityEngine.Object types. + This object field also adds support for drag and drop, dragging an object to another square object field, swaps the values. + If you hold down control while letting go it will replace the value, And you can control + click the object field to quickly delete the value it holds. + + The Unity object. + The Unity object type. This supports inheritance. + Wheather or not to allow scene objects. + The height or size of the square object field. + How the square object field should be aligned. + + + + Draws a polymorphic ObjectField. + + The label to use, or null if no label should be used. + The value. + The object type. This supports inheritance. + Wheather or not to allow scene objects. + Layout options. + + + + Draws a polymorphic ObjectField. + + + + + Draws a polymorphic ObjectField. + + + + + Draws a polymorphic ObjectField. + + The label to use, or null if no label should be used. + The value. + The object type. This supports inheritance. + Wheather or not to allow scene objects. + Layout options. + + + + Draws a polymorphic ObjectField. + + The value. + The object type. This supports inheritance. + Wheather or not to allow scene objects. + Layout options. + + + + Draws a field for a layer mask. + + Position and size of the field. + The label to use, or null if no label should be used. + The layer mask to draw. + + + + Draws a field for a layer mask. + + Position and size of the field. + The label to use, or null if no label should be used. + The layer mask to draw. + + + + Draws a field for a layer mask. + + Position and size of the field. + The layer mask to draw. + + + + Draws a field for a layer mask. + + The label to use, or null if no label should be used. + The layer mask to draw. + Layout options. + + + + Draws a field for a layer mask. + + The label to use, or null if no label should be used. + The layer mask to draw. + Layout options. + + + + Draws a field for a layer mask. + + The layer mask to draw. + Layout options. + + + + Draws a Guid field. + + Position and size of the field. + Label of field. Set to null for no label. + Current value. + Value assigned to the field. + + + + Draws a Guid field. + + Position and size of the field. + Current value. + Value assigned to the field. + + + + Draws a Guid field. + + Label of field. Set to null for no label. + Current value. + Value assigned to the field. + + + + Draws a Guid field. + + Label of field. Set to null for no label. + Current value. + Layout options. + Value assigned to the field. + + + + Draws a Guid field. + + Label of field. Set to null for no label. + Current value. + GUIStyle for drawing the field. Set to null for default. + Layout options. + Value assigned to the field. + + + + Draws a Guid field. + + Position and size of the field. + Label of field. Set to null for no label. + Current value. + GUIStyle for drawing the field. Set to null for default. + Value assigned to the field. + + + + Draws an int field. + + Position and size of the field. + Label of field. Set to null for no label. + Current value. + GUIStyle for drawing the field. Set to null for default. + Value assigned to the field. + + + + Draws an int field. + + Position and size of the field. + Label of field. Set to null for no label. + Current value. + Value assigned to the field. + + + + Draws an int field. + + Position and size of the field. + Label of field. Set to null for no label. + Current value. + Value assigned to the field. + + + + Draws an int field. + + Position and size of the field. + Current value. + Value assigned to the field. + + + + Draws an int field. + + Label of field. Set to null for no label. + Current value. + GUIStyle for drawing the field. Set to null for default. + Layout options. + Value assigned to the field. + + + + Draws an int field. + + Label of field. Set to null for no label. + Current value. + Layout options. + Value assigned to the field. + + + + Draws an int field. + + Label of field. Set to null for no label. + Current value. + Layout options. + Value assigned to the field. + + + + Draws an int field. + + Current value. + Layout options. + Value assigned to the field. + + + + Draws a delayed int field. + + Position and size of the field. + Label of field. Set to null for no label. + Current value. + GUIStyle for drawing the field. Set to null for default. + Value assigned to the field. + + + + Draws a delayed int field. + + Position and size of the field. + Label of field. Set to null for no label. + Current value. + Value assigned to the field. + + + + Draws a delayed int field. + + Position and size of the field. + Label of field. Set to null for no label. + Current value. + Value assigned to the field. + + + + Draws a delayed int field. + + Position and size of the field. + Current value. + Value assigned to the field. + + + + Draws a delayed int field. + + Label of field. Set to null for no label. + Current value. + GUIStyle for drawing the field. Set to null for default. + Layout options. + Value assigned to the field. + + + + Draws a delayed int field. + + Label of field. Set to null for no label. + Current value. + Layout options. + Value assigned to the field. + + + + Draws a delayed int field. + + Label of field. Set to null for no label. + Current value. + Layout options. + Value assigned to the field. + + + + Draws a delayed int field. + + Current value. + Layout options. + Value assigned to the field. + + + + Draws a range field for ints. + + Position and size of the field. + Label of field. Set to null for no label. + Current value. + Minimum value. + Maximum value. + GUIStyle for drawing the field. Set to null for default. + Value assigned to the field. + + + + Draws a range field for ints. + + Position and size of the field. + Label of field. Set to null for no label. + Current value. + Minimum value. + Maximum value. + Value assigned to the field. + + + + Draws a range field for ints. + + Position and size of the field. + Label of field. Set to null for no label. + Current value. + Minimum value. + Maximum value. + Value assigned to the field. + + + + Draws a range field for ints. + + Position and size of the field. + Current value. + Minimum value. + Maximum value. + Value assigned to the field. + + + + Drwas a range field for ints. + + Label of field. Set to null for no label. + Current value. + Minimum value. + Maximum value. + GUIStyle for drawing the field. Set to null for default. + Layout options. + Value assigned to the field. + + + + Draws a range field for ints. + + Label of field. Set to null for no label. + Current value. + Minimum value. + Maximum value. + Layout options. + Value assigned to the field. + + + + Draws a range field for ints. + + Label of field. Set to null for no label. + Current value. + Minimum value. + Maximum value. + Layout options. + Value assigned to the field. + + + + Draws a range field for ints. + + Current value. + Minimum value. + Maximum value. + Layout options. + Value assigned to the field. + + + + Draws a colored progress bar field. + + Position and size of the field. + The label to use, or null if no label should be used. + The current value of the progress bar. + The left hand side value of the progress bar. + The right hand side value of the progress bar. + The configuration for the progress bar field. + Optional text for label to be drawn ontop of the progress bar. This value is only used if the DrawValueLabel option is enabled in the ProgressBarConfig. + + + + Draws a colored progress bar field. + + Position and size of the field. + The label to use, or null if no label should be used. + The current value of the progress bar. + The left hand side value of the progress bar. + The right hand side value of the progress bar. + The configuration for the progress bar field. + + + + Draws a colored progress bar field. + + Position and size of the field. + The label to use, or null if no label should be used. + The current value of the progress bar. + The left hand side value of the progress bar. + The right hand side value of the progress bar. + The configuration for the progress bar field. + + + + Draws a colored progress bar field. + + Position and size of the field. + The current value of the progress bar. + The left hand side value of the progress bar. + The right hand side value of the progress bar. + The configuration for the progress bar field. + + + + Draws a colored progress bar field. + + Position and size of the field. + The label to use, or null if no label should be used. + The current value of the progress bar. + The left hand side value of the progress bar. + The right hand side value of the progress bar. + + + + Draws a colored progress bar field. + + Position and size of the field. + The label to use, or null if no label should be used. + The current value of the progress bar. + The left hand side value of the progress bar. + The right hand side value of the progress bar. + + + + Draws a colored progress bar field. + + Position and size of the field. + The current value of the progress bar. + The left hand side value of the progress bar. + The right hand side value of the progress bar. + + + + Draws a colored progress bar field. + + The label to use, or null if no label should be used. + The current value of the progress bar. + The left hand side value of the progress bar. + The right hand side value of the progress bar. + The configuration for the progress bar field. + Layout options. + + + + Draws a colored progress bar field. + + The label to use, or null if no label should be used. + The current value of the progress bar. + The left hand side value of the progress bar. + The right hand side value of the progress bar. + The configuration for the progress bar field. + Layout options. + + + + Draws a colored progress bar field. + + The current value of the progress bar. + The left hand side value of the progress bar. + The right hand side value of the progress bar. + The configuration for the progress bar field. + Layout options. + + + + Draws a colored progress bar field. + + The label to use, or null if no label should be used. + The current value of the progress bar. + The left hand side value of the progress bar. + The right hand side value of the progress bar. + Layout options. + + + + Draws a colored progress bar field. + + The label to use, or null if no label should be used. + The current value of the progress bar. + The left hand side value of the progress bar. + The right hand side value of the progress bar. + Layout options. + + + + Draws a colored progress bar field. + + The current value of the progress bar. + The left hand side value of the progress bar. + The right hand side value of the progress bar. + Layout options. + + + + Draws a colored segmented progress bar field. + + Position and size of the field. + The label to use, or null if no label should be used. + The current value of the progress bar. + The left hand side value of the progress bar. + The right hand side value of the progress bar. + The configuration for the progress bar field. + Optional text for label to be drawn ontop of the progress bar. This value is only used if the DrawValueLabel option is enabled in the ProgressBarConfig. + + + + Draws a colored segmented progress bar field. + + Position and size of the field. + The label to use, or null if no label should be used. + The current value of the progress bar. + The left hand side value of the progress bar. + The right hand side value of the progress bar. + The configuration for the progress bar field. + + + + Draws a colored segmented progress bar field. + + Position and size of the field. + The label to use, or null if no label should be used. + The current value of the progress bar. + The left hand side value of the progress bar. + The right hand side value of the progress bar. + The configuration for the progress bar field. + + + + Draws a colored segmented progress bar field. + + Position and size of the field. + The current value of the progress bar. + The left hand side value of the progress bar. + The right hand side value of the progress bar. + The configuration for the progress bar field. + + + + Draws a colored segmented progress bar field. + + Position and size of the field. + The label to use, or null if no label should be used. + The current value of the progress bar. + The left hand side value of the progress bar. + The right hand side value of the progress bar. + + + + Draws a colored segmented progress bar field. + + Position and size of the field. + The label to use, or null if no label should be used. + The current value of the progress bar. + The left hand side value of the progress bar. + The right hand side value of the progress bar. + + + + Draws a colored segmented progress bar field. + + Position and size of the field. + The current value of the progress bar. + The left hand side value of the progress bar. + The right hand side value of the progress bar. + + + + Draws a colored segmented progress bar field. + + The label to use, or null if no label should be used. + The current value of the progress bar. + The left hand side value of the progress bar. + The right hand side value of the progress bar. + The configuration for the progress bar field. + Layout options. + + + + Draws a colored segmented progress bar field. + + The label to use, or null if no label should be used. + The current value of the progress bar. + The left hand side value of the progress bar. + The right hand side value of the progress bar. + The configuration for the progress bar field. + Layout options. + + + + Draws a colored segmented progress bar field. + + The current value of the progress bar. + The left hand side value of the progress bar. + The right hand side value of the progress bar. + The configuration for the progress bar field. + Layout options. + + + + Draws a colored segmented progress bar field. + + The label to use, or null if no label should be used. + The current value of the progress bar. + The left hand side value of the progress bar. + The right hand side value of the progress bar. + Layout options. + + + + Draws a colored segmented progress bar field. + + The label to use, or null if no label should be used. + The current value of the progress bar. + The left hand side value of the progress bar. + The right hand side value of the progress bar. + Layout options. + + + + Draws a colored segmented progress bar field. + + The current value of the progress bar. + The left hand side value of the progress bar. + The right hand side value of the progress bar. + Layout options. + + + + Draws an overlay on top of a progress bar field. + + The rect used to draw the progress bar field with. (Minus the Rect for the prefix label, if any.) + The label to draw ontop of the progress bar field. + The relative value of the progress bar, from 0 to 1. + The configuration used to draw the progress bar field. + + + + Draws an overlay on top of a progress bar field. + + The rect used to draw the progress bar field with. (Minus the Rect for the prefix label, if any.) + The label to draw ontop of the progress bar field. + The relative value of the progress bar, from 0 to 1. + The configuration used to draw the progress bar field. + + + + Draws an long field. + + Position and size of the field. + Label of field. Set to null for no label. + Current value. + GUIStyle for drawing the field. Set to null for default. + Value assigned to the field. + + + + Draws an long field. + + Position and size of the field. + Label of field. Set to null for no label. + Current value. + Value assigned to the field. + + + + Draws an long field. + + Position and size of the field. + Label of field. Set to null for no label. + Current value. + Value assigned to the field. + + + + Draws an long field. + + Position and size of the field. + Current value. + Value assigned to the field. + + + + Draws an long field. + + Label of field. Set to null for no label. + Current value. + GUIStyle for drawing the field. Set to null for default. + Layout options. + Value assigned to the field. + + + + Draws an long field. + + Label of field. Set to null for no label. + Current value. + Layout options. + Value assigned to the field. + + + + Draws an long field. + + Label of field. Set to null for no label. + Current value. + Layout options. + Value assigned to the field. + + + + Draws an long field. + + Current value. + Layout options. + Value assigned to the field. + + + + Draws a delayed long field. + + Position and size of the field. + Label of field. Set to null for no label. + Current value. + GUIStyle for drawing the field. Set to null for default. + Value assigned to the field. + + + + Draws a delayed long field. + + Position and size of the field. + Label of field. Set to null for no label. + Current value. + Value assigned to the field. + + + + Draws a delayed long field. + + Position and size of the field. + Label of field. Set to null for no label. + Current value. + Value assigned to the field. + + + + Draws a delayed long field. + + Position and size of the field. + Current value. + Value assigned to the field. + + + + Draws a delayed long field. + + Label of field. Set to null for no label. + Current value. + GUIStyle for drawing the field. Set to null for default. + Layout options. + Value assigned to the field. + + + + Draws a delayed long field. + + Label of field. Set to null for no label. + Current value. + Layout options. + Value assigned to the field. + + + + Draws a delayed long field. + + Label of field. Set to null for no label. + Current value. + Layout options. + Value assigned to the field. + + + + Draws a delayed long field. + + Current value. + Layout options. + Value assigned to the field. + + + + Draws a float field. + + Position and size of the field. + Label of field. Set to null for no label. + Current value. + GUIStyle for drawing the field. Set to null for default. + Value assigned to the field. + + + + Draws a float field. + + Position and size of the field. + Label of field. Set to null for no label. + Current value. + Value assigned to the field. + + + + Draws a float field. + + Position and size of the field. + Label of field. Set to null for no label. + Current value. + Value assigned to the field. + + + + Draws a float field. + + Position and size of the field. + Current value. + Value assigned to the field. + + + + Draws a float field. + + Label of field. Set to null for no label. + Current value. + GUIStyle for drawing the field. Set to null for default. + Layout options. + Value assigned to the field. + + + + Draws a float field. + + Label of field. Set to null for no label. + Current value. + Layout options. + Value assigned to the field. + + + + Draws a float field. + + Label of field. Set to null for no label. + Current value. + Layout options. + Value assigned to the field. + + + + Draws a float field. + + Current value. + Layout options. + Value assigned to the field. + + + + Draws a delayed float field. + + Position and size of the field. + Label of field. Set to null for no label. + Current value. + GUIStyle for drawing the field. Set to null for default. + Value assigned to the field. + + + + Draws a delayed float field. + + Position and size of the field. + Label of field. Set to null for no label. + Current value. + Value assigned to the field. + + + + Draws a delayed float field. + + Position and size of the field. + Label of field. Set to null for no label. + Current value. + Value assigned to the field. + + + + Draws a delayed float field. + + Position and size of the field. + Current value. + Value assigned to the field. + + + + Draws a delayed float field. + + Label of field. Set to null for no label. + Current value. + GUIStyle for drawing the field. Set to null for default. + Layout options. + Value assigned to the field. + + + + Draws a delayed float field. + + Label of field. Set to null for no label. + Current value. + Layout options. + Value assigned to the field. + + + + Draws a delayed float field. + + Label of field. Set to null for no label. + Current value. + Layout options. + Value assigned to the field. + + + + Draws a delayed float field. + + Current value. + Layout options. + Value assigned to the field. + + + + Draws a range field for floats. + + Position and size of the field. + Label of field. Set to null for no label. + Current value. + Minimum value. + Maximum value. + GUIStyle for drawing the field. Set to null for default. + Value assigned to the field. + + + + Draws a range field for floats. + + Position and size of the field. + Label of field. Set to null for no label. + Current value. + Minimum value. + Maximum value. + Value assigned to the field. + + + + Draws a range field for floats. + + Position and size of the field. + Label of field. Set to null for no label. + Current value. + Minimum value. + Maximum value. + Value assigned to the field. + + + + Draws a range field for floats. + + Position and size of the field. + Current value. + Minimum value. + Maximum value. + Value assigned to the field. + + + + Draws a range field for floats. + + Label of field. Set to null for no label. + Current value. + Minimum value. + Maximum value. + GUIStyle for drawing the field. Set to null for default. + Layout options. + Value assigned to the field. + + + + Draws a range field for floats. + + Label of field. Set to null for no label. + Current value. + Minimum value. + Maximum value. + Layout options. + Value assigned to the field. + + + + Draws a range field for floats. + + Label of field. Set to null for no label. + Current value. + Minimum value. + Maximum value. + Layout options. + Value assigned to the field. + + + + Draws a range field for floats. + + Current value. + Minimum value. + Maximum value. + Layout options. + Value assigned to the field. + + + + Draws a double field. + + Position and size of the field. + Label of field. Set to null for no label. + Current value. + GUIStyle for drawing the field. Set to null for default. + Value assigned to the field. + + + + Draws a double field. + + Position and size of the field. + Label of field. Set to null for no label. + Current value. + Value assigned to the field. + + + + Draws a double field. + + Position and size of the field. + Label of field. Set to null for no label. + Current value. + Value assigned to the field. + + + + Draws a double field. + + Position and size of the field. + Current value. + Value assigned to the field. + + + + Draws a double field. + + Label of field. Set to null for no label. + Current value. + GUIStyle for drawing the field. Set to null for default. + Layout options. + Value assigned to the field. + + + + Draws a double field. + + Label of field. Set to null for no label. + Current value. + Layout options. + Value assigned to the field. + + + + Draws a double field. + + Label of field. Set to null for no label. + Current value. + Layout options. + Value assigned to the field. + + + + Draws a double field. + + Current value. + Layout options. + Value assigned to the field. + + + + Draws a delayed double field. + + Position and size of the field. + Label of field. Set to null for no label. + Current value. + GUIStyle for drawing the field. Set to null for default. + Value assigned to the field. + + + + Draws a delayed double field. + + Position and size of the field. + Label of field. Set to null for no label. + Current value. + Value assigned to the field. + + + + Draws a delayed double field. + + Position and size of the field. + Label of field. Set to null for no label. + Current value. + Value assigned to the field. + + + + Draws a delayed double field. + + Position and size of the field. + Current value. + Value assigned to the field. + + + + Draws a delayed double field. + + Label of field. Set to null for no label. + Current value. + GUIStyle for drawing the field. Set to null for default. + Layout options. + Value assigned to the field. + + + + Draws a delayed double field. + + Label of field. Set to null for no label. + Current value. + Layout options. + Value assigned to the field. + + + + Draws a delayed double field. + + Label of field. Set to null for no label. + Current value. + Layout options. + Value assigned to the field. + + + + Draws a delayed double field. + + Current value. + Layout options. + Value assigned to the field. + + + + Draws a decimal field. + + Position and size of the field. + Label of field. Set to null for no label. + Current value. + GUIStyle for drawing the field. Set to null for default. + Value assigned to the field. + + + + Draws a decimal field. + + Position and size of the field. + Label of field. Set to null for no label. + Current value. + Value assigned to the field. + + + + Draws a decimal field. + + Position and size of the field. + Label of field. Set to null for no label. + Current value. + Value assigned to the field. + + + + Draws a decimal field. + + Position and size of the field. + Current value. + Value assigned to the field. + + + + Draws a decimal field. + + Label of field. Set to null for no label. + Current value. + GUIStyle for drawing the field. Set to null for default. + Layout options. + Value assigned to the field. + + + + Draws a decimal field. + + Label of field. Set to null for no label. + Current value. + Layout options. + Value assigned to the field. + + + + Draws a decimal field. + + Label of field. Set to null for no label. + Current value. + Layout options. + Value assigned to the field. + + + + Draws a decimal field. + + Current value. + Layout options. + Value assigned to the field. + + + + Draws a text field for strings. + + Position and size of the field. + Label of field. Set to null for no label. + Current value. + GUIStyle for drawing the field. Set to null for default. + Value assigned to the field. + + + + Draws a text field for strings. + + Position and size of the field. + Label of field. Set to null for no label. + Current value. + Value assigned to the field. + + + + Draws a text field for strings. + + Position and size of the field. + Label of field. Set to null for no label. + Current value. + Value assigned to the field. + + + + Draws a text field for strings. + + Position and size of the field. + Current value. + Value assigned to the field. + + + + Draws a text field for strings. + + Label of field. Set to null for no label. + Current value. + GUIStyle for drawing the field. Set to null for default. + Layout options. + Value assigned to the field. + + + + Draws a text field for strings. + + Label of field. Set to null for no label. + Current value. + Layout options. + Value assigned to the field. + + + + Draws a text field for strings. + + Label of field. Set to null for no label. + Current value. + Layout options. + Value assigned to the field. + + + + Draws a text field for strings. + + Current value. + Layout options. + Value assigned to the field. + + + + Draws a delayed text field. + + Position and size of the field. + Label of field. Set to null for no label. + Current value. + GUIStyle for drawing the field. Set to null for default. + Value assigned to the field. + + + + Draws a delayed text field. + + Position and size of the field. + Label of field. Set to null for no label. + Current value. + Value assigned to the field. + + + + Draws a delayed text field. + + Position and size of the field. + Label of field. Set to null for no label. + Current value. + Value assigned to the field. + + + + Draws a delayed text field. + + Position and size of the field. + Current value. + Value assigned to the field. + + + + Draws a delayed text field. + + Label of field. Set to null for no label. + Current value. + GUIStyle for drawing the field. Set to null for default. + Layout options. + Value assigned to the field. + + + + Draws a delayed text field. + + Label of field. Set to null for no label. + Current value. + Layout options. + Value assigned to the field. + + + + Draws a delayed text field. + + Label of field. Set to null for no label. + Current value. + Layout options. + Value assigned to the field. + + + + Draws a delayed text field. + + Current value. + Layout options. + Value assigned to the field. + + + + Draws a field that lets the user select a path to a file. + + Position and size of the field. + Label of field. Set to null for no label. + The current value. + A parent path the path needs to be relative to. Use null for Unity project directory. + Comma separated list of allowed file extensions. Use null to allow any file extension. + If true the path will be absolute. Otherwise the path will be relative to parentPath or to the Unity project directory. + If true the path will be enforced to use backslashes. Otherwise the path will be enforced to use forward slashes. + A path to a file. + + + + Draws a field that lets the user select a path to a file. + + Position and size of the field. + The current value. + A parent path the path needs to be relative to. Use null for Unity project directory. + Comma separated list of allowed file extensions. Use null to allow any file extension. + If true the path will be absolute. Otherwise the path will be relative to parentPath or to the Unity project directory. + If true the path will be enforced to use backslashes. Otherwise the path will be enforced to use forward slashes. + A path to a file. + + + + Draws a field that lets the user select a path to a file. + + Label of field. Set to null for no label. + The current value. + A parent path the path needs to be relative to. Use null for Unity project directory. + Comma separated list of allowed file extensions. Use null to allow any file extension. + If true the path will be absolute. Otherwise the path will be relative to parentPath or to the Unity project directory. + If true the path will be enforced to use backslashes. Otherwise the path will be enforced to use forward slashes. + Layout options. + A path to a file. + + + + Draws a field that lets the user select a path to a file. + + The current value. + A parent path the path needs to be relative to. Use null for Unity project directory. + Comma separated list of allowed file extensions. Use null to allow any file extension. + If true the path will be absolute. Otherwise the path will be relative to parentPath or to the Unity project directory. + If true the path will be enforced to use backslashes. Otherwise the path will be enforced to use forward slashes. + Layout options. + A path to a file. + + + + Draws a field that lets the user select a path to a folder. + + Position and size of the field. + Label of field. Set to null for no label. + The current value. + A parent path the path needs to be relative to. Use null for Unity project directory. + If true the path will be absolute. Otherwise the path will be relative to parentPath or to the Unity project directory. + If true the path will be enforced to use backslashes. Otherwise the path will be enforced to use forward slashes. + A path to a folder. + + + + Draws a field that lets the user select a path to a folder. + + Position and size of the field. + The current value. + A parent path the path needs to be relative to. Use null for Unity project directory. + If true the path will be absolute. Otherwise the path will be relative to parentPath or to the Unity project directory. + If true the path will be enforced to use backslashes. Otherwise the path will be enforced to use forward slashes. + A path to a folder. + + + + Draws a field that lets the user select a path to a folder. + + Label of field. Set to null for no label. + The current value. + A parent path the path needs to be relative to. Use null for Unity project directory. + If true the path will be absolute. Otherwise the path will be relative to parentPath or to the Unity project directory. + If true the path will be enforced to use backslashes. Otherwise the path will be enforced to use forward slashes. + Layout options. + A path to a folder. + + + + Draws a field that lets the user select a path to a folder. + + The current value. + A parent path the path needs to be relative to. Use null for Unity project directory. + If true the path will be absolute. Otherwise the path will be relative to parentPath or to the Unity project directory. + If true the path will be enforced to use backslashes. Otherwise the path will be enforced to use forward slashes. + Layout options. + A path to a folder. + + + + Draws a prefix label for a vector field, that implements label dragging. + + + + + Draws a prefix label for a vector field, that implements label dragging. + + The position and total size of the field. + The label content. If null this function does nothing. + The value for the vector field. + The vector scaled by label dragging. + + + + Draws a prefix label for a vector field, that implements label dragging. + + The position and total size of the field. + The label content. If null this function does nothing. + The value for the vector field. + The vector scaled by label dragging. + + + + Draws a prefix label for a vector field, that implements label dragging. + + The label content. If null this function does nothing. + The value for the vector field. + The vector scaled by label dragging. + + + + Draws a prefix label for a vector field, that implements label dragging. + + The label content. If null this function does nothing. + The value for the vector field. + The vector scaled by label dragging. + + + + Draws a Vector2 field. + + Position and size of the field. + Label of field. Set to null for no label. + Current value. + Value assigned to the field. + + + + Draws a Vector2 field. + + Position and size of the field. + Label of field. Set to null for no label. + Current value. + Value assigned to the field. + + + + Draws a Vector2 field. + + Position and size of the field. + Current value. + Value assigned to the field. + + + + Draws a Vector2 field. + + Label of field. Set to null for no label. + Current value. + Layout options. + Value assigned to the field. + + + + Draws a Vector2 field. + + Label of field. Set to null for no label. + Current value. + Layout options. + Value assigned to the field. + + + + Draws a Vector2 field. + + Current value. + Layout options. + Value assigned to the field. + + + + Draws a Vector3 field. + + Position and size of the field. + Label of field. Set to null for no label. + Current value. + Value assigned to the field. + + + + Draws a Vector3 field. + + Position and size of the field. + Label of field. Set to null for no label. + Current value. + Value assigned to the field. + + + + Draws a Vector3 field. + + Position and size of the field. + Current value. + Value assigned to the field. + + + + Draws a Vector3 field. + + Label of field. Set to null for no label. + Current value. + Layout options. + Value assigned to the field. + + + + Draws a Vector3 field. + + Label of field. Set to null for no label. + Current value. + Layout options. + Value assigned to the field. + + + + Draws a Vector3 field. + + Current value. + Layout options. + Value assigned to the field. + + + + Draws a Vector4 field. + + Position and size of the field. + Label of field. Set to null for no label. + Current value. + Value assigned to the field. + + + + Draws a Vector4 field. + + Position and size of the field. + Label of field. Set to null for no label. + Current value. + Value assigned to the field. + + + + Draws a Vector4 field. + + Position and size of the field. + Current value. + Value assigned to the field. + + + + Draws a Vector4 field. + + Label of field. Set to null for no label. + Current value. + Layout options. + Value assigned to the field. + + + + Draws a Vector4 field. + + Label of field. Set to null for no label. + Current value. + Layout options. + Value assigned to the field. + + + + Draws a Vector4 field. + + Current value. + Layout options. + Value assigned to the field. + + + + Draws a Color field. + + Position and size of the field. + Label of field. Set to null for no label. + + Value assigned to the field. + + + + Draws a Color field. + + Position and size of the field. + Label of field. Set to null for no label. + + Value assigned to the field. + + + + Draws a Color field. + + Position and size of the field. + + Value assigned to the field. + + + + Draws a Color field. + + Label of field. Set to null for no label. + + Layout options. + Value assigned to the field. + + + + Draws a Color field. + + Label of field. Set to null for no label. + + Layout options. + Value assigned to the field. + + + + Draws a Color field. + + + Layout options. + Value assigned to the field. + + + + Draws a slider for setting two values between a min and a max limit. + + Position and size of the field. + Label of field. Set to null for no label. + Current value. + The min and max limit for the value. + Show fields for min and max value. + A Vector2 with X set as min value, and Y to set as max value. + + + + Draws a slider for setting two values between a min and a max limit. + + Position and size of the field. + Label of field. Set to null for no label. + Current value. + The min and max limit for the value. + Show fields for min and max value. + A Vector2 with X set as min value, and Y to set as max value. + + + + Draws a slider for setting two values between a min and a max limit. + + Position and size of the field. + Current value. + The min and max limit for the value. + Show fields for min and max value. + A Vector2 with X set as min value, and Y to set as max value. + + + + Draws a slider for setting two values between a min and a max limit. + + Label of field. Set to null for no label. + Current value. + The min and max limit for the value. + Show fields for min and max value. + Layout options. + A Vector2 with X set as min value, and Y to set as max value. + + + + Draws a slider for setting two values between a min and a max limit. + + Label of field. Set to null for no label. + Current value. + The min and max limit for the value. + Show fields for min and max value. + Layout options. + A Vector2 with X set as min value, and Y to set as max value. + + + + Draws a slider for setting two values between a min and a max limit. + + Current value. + The min and max limit for the value. + Show fields for min and max value. + Layout options. + A Vector2 with X set as min value, and Y to set as max value. + + + + Draws a slider for setting two values between a min and a max limit. + + Position and size of the field. + Label of field. Set to null for no label. + Current min value. + Current max value. + The min limit for the value. + The max limit for the value. + Show fields for min and max value. + + + + Draws a slider for setting two values between a min and a max limit. + + Position and size of the field. + Label of field. Set to null for no label. + Current min value. + Current max value. + The min limit for the value. + The max limit for the value. + Show fields for min and max value. + + + + Draws a slider for setting two values between a min and a max limit. + + Position and size of the field. + Current min value. + Current max value. + The min limit for the value. + The max limit for the value. + Show fields for min and max value. + + + + Draws a slider for setting two values between a min and a max limit. + + Label of field. Set to null for no label. + Current min value. + Current max value. + The min limit for the value. + The max limit for the value. + Show fields for min and max value. + Layout options. + + + + Draws a slider for setting two values between a min and a max limit. + + Label of field. Set to null for no label. + Current min value. + Current max value. + The min limit for the value. + The max limit for the value. + Show fields for min and max value. + Layout options. + + + + Draws a slider for setting two values between a min and a max limit. + + Current min value. + Current max value. + The min limit for the value. + The max limit for the value. + Show fields for min and max value. + Layout options. + + + + Draws a rotation field for a quaternion. + + Position and size of the field. + Label of field. Set to null for no label. + Current value. + Draw mode for rotation field. + Value assigned to the field. + + + + Draws a rotation field for a quaternion. + + Position and size of the field. + Label of field. Set to null for no label. + Current value. + Draw mode for rotation field. + Value assigned to the field. + + + + Draws a rotation field for a quaternion. + + Position and size of the field. + Current value. + Draw mode for rotation field. + Value assigned to the field. + + + + Draws a rotation field for a quaternion. + + Label of field. Set to null for no label. + Current value. + Draw mode for rotation field. + Layout options. + Value assigned to the field. + + + + Draws a rotation field for a quaternion. + + Label of field. Set to null for no label. + Current value. + Draw mode for rotation field. + Layout options. + Value assigned to the field. + + + + Draws a rotation field for a quaternion. + + Current value. + Draw mode for rotation field. + Layout options. + Value assigned to the field. + + + + Draws an euler field for a quaternion. + + Position and size of the field. + Label of field. Set to null for no label. + Current value. + Value assigned to the field. + + + + Draws an euler field for a quaternion. + + Position and size of the field. + Label of field. Set to null for no label. + Current value. + Value assigned to the field. + + + + Draws an euler field for a quaternion. + + Position and size of the field. + Current value. + Value assigned to the field. + + + + Draws an euler field for a quaternion. + + Label of field. Set to null for no label. + Current value. + Layout options. + Value assigned to the field. + + + + Draws an euler field for a quaternion. + + Label of field. Set to null for no label. + Current value. + Layout options. + Value assigned to the field. + + + + Draws an euler field for a quaternion. + + Current value. + Layout options. + Value assigned to the field. + + + + Draws an angle axis field for a quaternion. + + Position and size of the field. + Label of field. Set to null for no label. + Current value. + Value assigned to the field. + + + + Draws an angle axis field for a quaternion. + + Position and size of the field. + Label of field. Set to null for no label. + Current value. + Value assigned to the field. + + + + Draws an angle axis field for a quaternion. + + Position and size of the field. + Current value. + Value assigned to the field. + + + + Draws an angle axis field for a quaternion. + + Label of field. Set to null for no label. + Current value. + Layout options. + Value assigned to the field. + + + + Draws an angle axis field for a quaternion. + + Label of field. Set to null for no label. + Current value. + Layout options. + Value assigned to the field. + + + + Draws an angle axis field for a quaternion. + + Current value. + Layout options. + Value assigned to the field. + + + + Draws a quaternion field. + + Position and size of the field. + Label of field. Set to null for no label. + Current value. + Value assigned to the field. + + + + Draws a quaternion field. + + Position and size of the field. + Label of field. Set to null for no label. + Current value. + Value assigned to the field. + + + + Draws a quaternion field. + + Position and size of the field. + Current value. + Value assigned to the field. + + + + Draws a quaternion field. + + Label of field. Set to null for no label. + Current value. + Layout options. + Value assigned to the field. + + + + Draws a quaternion field. + + Label of field. Set to null for no label. + Current value. + Layout options. + Value assigned to the field. + + + + Draws a quaternion field. + + Current value. + Layout options. + Value assigned to the field. + + + + Draws a dropdown. + + Position and size of the field. + Label of field. Set to null for no label. + Current value. + Names of selectable items. + GUIStyle for drawing the field. Set to null for default. + Value assigned to the field. + + + + Draws a dropdown. + + Position and size of the field. + Label of field. Set to null for no label. + Current value. + Names of selectable items. + Value assigned to the field. + + + + Draws a dropdown. + + Position and size of the field. + Label of field. Set to null for no label. + Current value. + Names of selectable items. + Value assigned to the field. + + + + Draws a dropdown. + + Position and size of the field. + Current value. + Names of selectable items. + Value assigned to the field. + + + + Draws a dropdown. + + Label of field. Set to null for no label. + Current value. + Names of selectable items. + GUIStyle for drawing the field. Set to null for default. + Layout options. + Value assigned to the field. + + + + Draws a dropdown. + + Label of field. Set to null for no label. + Current value. + Names of selectable items. + Layout options. + Value assigned to the field. + + + + Draws a dropdown. + + Label of field. Set to null for no label. + Current value. + Names of selectable items. + Layout options. + Value assigned to the field. + + + + Draws a dropdown. + + Current value. + Names of selectable items. + Layout options. + Value assigned to the field. + + + + Draws a generic dropdown. + + + Position and size of the field. + Label of field. Set to null for no label. + Current value. + Selectable items. + Value assigned to the field. + + + + Draws a generic dropdown. + + + Label of field. Set to null for no label. + Current value. + Selectable items. + Value assigned to the field. + + + + Draws a generic dropdown. + + + Position and size of the field. + Label of field. Set to null for no label. + Current value. + Selectable items. + Names of selectable items. If null ToString() will be used instead. + GUIStyle for drawing the field. Set to null for default. + Value assigned to the field. + + + + Draws a generic dropdown. + + + Position and size of the field. + Label of field. Set to null for no label. + Current value. + + Names of selectable items. If null ToString() will be used instead. + Value assigned to the field. + + + + Draws a generic dropdown. + + + Position and size of the field. + Label of field. Set to null for no label. + Current value. + + Names of selectable items. If null ToString() will be used instead. + Value assigned to the field. + + + + Draws a generic dropdown. + + + Position and size of the field. + Current value. + + Names of selectable items. If null ToString() will be used instead. + Value assigned to the field. + + + + Draws a generic dropdown. + + + Label of field. Set to null for no label. + Current value. + + Names of selectable items. If null ToString() will be used instead. + GUIStyle for drawing the field. Set to null for default. + Layout options. + Value assigned to the field. + + + + Draws a generic dropdown. + + + Label of field. Set to null for no label. + Current value. + + Names of selectable items. If null ToString() will be used instead. + Layout options. + Value assigned to the field. + + + + Draws a generic dropdown. + + + Label of field. Set to null for no label. + Current value. + + Names of selectable items. If null ToString() will be used instead. + Layout options. + Value assigned to the field. + + + + Draws a generic dropdown. + + + Current value. + + Names of selectable items. If null ToString() will be used instead. + Layout options. + Value assigned to the field. + + + + Draws a dropdown for an enum or an enum mask. + + Position and size of the field. + Label of field. Set to null for no label. + Current value. + GUIStyle for drawing the field. Set to null for default. + Value assigned to the field. + + + + Draws a dropdown for an enum or an enum mask. + + Position and size of the field. + Label of field. Set to null for no label. + Current value. + Value assigned to the field. + + + + Draws a dropdown for an enum or an enum mask. + + Position and size of the field. + Label of field. Set to null for no label. + Current value. + Value assigned to the field. + + + + Draws a dropdown for an enum or an enum mask. + + Position and size of the field. + Current value. + Value assigned to the field. + + + + Draws a dropdown for an enum or an enum mask. + + Label of field. Set to null for no label. + Current value. + GUIStyle for drawing the field. Set to null for default. + Layout options. + Value assigned to the field. + + + + Draws a dropdown for an enum or an enum mask. + + Label of field. Set to null for no label. + Current value. + Layout options. + Value assigned to the field. + + + + Draws a dropdown for an enum or an enum mask. + + Label of field. Set to null for no label. + Current value. + Layout options. + Value assigned to the field. + + + + Draws a dropdown for an enum or an enum mask. + + Current value. + Layout options. + Value assigned to the field. + + + + Draws a dropdown. + + + Position and size of the field. + Label of field. Set to null for no label. + Current selection. + Avaible items in the dropdown. + If true then the user can select multiple items. Otherwise the user can only select one item. + true when the user has changed the selection. Otherwise false. + + + + Draws a dropdown. + + + Position and size of the field. + Label of field. Set to null for no label. + Current selection. + Avaible items in the dropdown. + If true then the user can select multiple items. Otherwise the user can only select one item. + true when the user has changed the selection. Otherwise false. + + + + Draws a dropdown. + + + Position and size of the field. + Current selection. + Avaible items in the dropdown. + If true then the user can select multiple items. Otherwise the user can only select one item. + true when the user has changed the selection. Otherwise false. + + + + Draws a dropdown. + + + Label of field. Set to null for no label. + Current selection. + Avaible items in the dropdown. + If true then the user can select multiple items. Otherwise the user can only select one item. + Layout options. + true when the user has changed the selection. Otherwise false. + + + + Draws a dropdown. + + + Label of field. Set to null for no label. + Current selection. + Avaible items in the dropdown. + If true then the user can select multiple items. Otherwise the user can only select one item. + Layout options. + true when the user has changed the selection. Otherwise false. + + + + Draws a dropdown. + + + Current selection. + Avaible items in the dropdown. + If true then the user can select multiple items. Otherwise the user can only select one item. + Layout options. + true when the user has changed the selection. Otherwise false. + + + + Draws a dropdown field for enum masks. + + Position and size of the field. + Label of field. Set to null for no label. + Current selection. + GUIStyle for drawing the field. Set to null for default. + Value assigned to the field. + + + + Draws a dropdown field for enum masks. + + Position and size of the field. + Label of field. Set to null for no label. + Current selection. + Value assigned to the field. + + + + Draws a dropdown field for enum masks. + + Position and size of the field. + Label of field. Set to null for no label. + Current selection. + Value assigned to the field. + + + + Draws a dropdown field for enum masks. + + Position and size of the field. + Current selection. + Value assigned to the field. + + + + Draws a dropdown field for enum masks. + + Label of field. Set to null for no label. + Current selection. + GUIStyle for drawing the field. Set to null for default. + Layout options. + Value assigned to the field. + + + + Draws a dropdown field for enum masks. + + Label of field. Set to null for no label. + Current selection. + Layout options. + Value assigned to the field. + + + + Draws a dropdown field for enum masks. + + Label of field. Set to null for no label. + Current selection. + Layout options. + Value assigned to the field. + + + + Draws a dropdown field for enum masks. + + Current selection. + Layout options. + Value assigned to the field. + + + + Collection of various editor GUI functions. + + + + + The mixed value dash character, to show when something has mixed values; + + + + + Default fade group animation duration. + + + + + Tab page slide animation duration. + + + + + Shaking animation duration. + + + + + Expand foldouts by default. + + + + + Show buttons results by default. + + + + + Draws a GUI field for objects. + + The rect to draw the field in. + The label of the field. + The value of the field. + The object type for the field. + If set to true then allow scene objects to be assigned to the field. + If set to true the field is readonly. + The object assigned to the field. + + + + Draws an GUI field for objects. + + The label for the field. + The value of the field. + The object type for the field. + If set to true then allow scene objects to be assigned to the field. + If set to true the field is readonly. + The object assigned to the field. + + + + Draws a GUI field for objects. + + The key for the field. + The type. + The label for the field. + The current value for the field. + If set to true then allow scene objects to be assigned to the field. + + The object assigned to the field. + + + + + Draws a nicely formatted title with an optinal sub-title and horizontal ruler. + + + + + Draws a GUI color field. + + The rect to draw the field in. + The color of the field. + If set to true then use alpha in the preview. + If set to true then show alpha bar in the preview. + The color assigned to the field. + + + + Draws a warning message box. + + + Also triggers a warning during validation checks done by + + The message. + If set to true the message box will be wide. + + + + Draws a thick horizontal seperator. + + + + + Draws a thick horizontal seperator. + + + + + Draws a thick horizontal seperator. + + + + + Draws a thick horizontal seperator. + + + + + Draws a horizontal line seperator. + + + + + Draws a vertical line seperator. + + + + + Draws an error message box. + + + Also triggers an error during validation checks done by + + The message. + If set to true the message box will be wide. + + + + Draws a info message box. + + The message. + If set to true the message box will be wide. + + + + Draws a message box. + + The message. + If set to true the message box will be wide. + + + + Draws a message box. + + The message. + Type of the message. + If set to true the message box will be wide. + + + + Draws a message box. + + The message. + Type of the message. + The style of the message box. + If set to true the message box will be wide. + + + + Draws a message box that can be expanded to show more details. + + The message of the message box. + The detailed message of the message box. + Type of the message box. + If set to true the detailed message is hidden. + If set to true the message box will be wide. + State of isFolded. + + + + Draws a horizontal line separator. + + Width of the line. + + + + Draws a horizontal line separator. + + The color of the line. + The size of the line. + + + + Draws a vertical line separator. + + Width of the line. + + + + Draws a vertical line separator. + + The color of the line. + Width of the line. + + + + Draws a GUI button with an icon. + + The editor icon for the button. + The width of the button. + The height of the button. + The tooltip of the button. + true if the button was pressed. Otherwise false. + + + + Draws a GUI button with an icon. + + The editor icon for the button. + The GUI style for the button. + The width of the button. + The height of the button. + The tooltip of the button. + true if the button was pressed. Otherwise false. + + + + Draws a GUI button with an icon. + + The rect to draw the button in. + The editor icon for the button. + true if the button was pressed. Otherwise false. + + + + Draws a GUI button with an icon. + + The rect to draw the button in. + The editor icon for the button. + The tooltip of the button. + true if the button was pressed. Otherwise false. + + + + Draws a GUI button with an icon. + + The rect to draw the button in. + The editor icon for the button. + The GUI style for the button. + The tooltip of the button. + true if the button was pressed. Otherwise false. + + + + Draws a GUI button with an icon. + + The rect to draw the button in. + The icon texture. + The tooltip for the button. + true when the button is pressed. + + + + Draws a GUI button with an icon. + + The rect to draw the button in. + The icon texture. + Style for the button. + The tooltip for the button. + true when the button is pressed. + + + + Draws a GUI button with an icon. + + The icon texture. + Width of the button in pixels. + Height of the button in pixels. + The tooltip for the button. + true when the button is pressed. + + + + Draws a GUI button with an icon. + + The icon texture. + Style for the button. + Width of the button in pixels. + Height of the button in pixels. + The tooltip for the button. + true when the button is pressed. + + + + Draws a repeating icon button. + + The icon for the button. + true while the button is active. Otherwise false. + + + + Draws a repeating icon button. + + The icon for the button. + The size. + true while the button is active. Otherwise false. + + + + Draws a repeating icon button. + + The icon for the button. + The width of the button. + The height of the button. + true while the button is active. Otherwise false. + + + + Draws a toolbar icon button. + + The icon for the button. + If true, the button clickable while GUI.enabled == false. + + true if the button was pressed. Otherwise false. + + + + + Draws a toolbar icon button. + + The GUI content for the button. + Whether the button state is selected or not + true if the button was pressed. Otherwise false. + + + + Draws a toolbar icon button. + + The label for the button. + Whether the button state is selected or not + true if the button was pressed. Otherwise false. + + + + Draws a toolbar toggle. + + Current state of the toggle. + The icon for the toggle. + The state of the toggle. + + + + Draws a toolbar toggle. + + Current state of the toggle. + The icon for the toggle. + The state of the toggle. + + + + Draws a toolbar toggle. + + Current state of the toggle. + The GUI content for the button. + The state of the toggle. + + + + Draws a toolbar toggle. + + Current state of the toggle. + The text for the toggle. + The state of the toggle. + + + + Draws a toolbar tab. + + If true the tab will be the active tab. + Name for the tab. + State of isActive. + + + + Draws a toolbar tab. + + If true the tab will be the active tab. + Label for the tab. + State of isActive. + + + + Draws a solid color rectangle. + + The rect. + The color. + If true applies the user's playmdoe tint to the rect in playmode. + + + + Draws a solid color rectangle. + + The width. + The height. + The color. + If true applies the user's playmdoe tint to the rect in playmode. + The rect created. + + + + Draws borders around a rect. + + The rect. + The width of the border on all sides. + If true applies the user's playmdoe tint to the rect in playmode. + + + + Draws borders around a rect. + + The rect. + The width of the border on all sides. + The color of the border. + If true applies the user's playmdoe tint to the rect in playmode. + + + + Draws borders around a rect. + + The rect. + The left size. + The right size. + The top size. + The bottom size. + If true applies the user's playmdoe tint to the rect in playmode. + + + + Draws borders around a rect. + + The rect. + The left size. + The right size. + The top size. + The bottom size. + The color of the borders. + If true applies the user's playmdoe tint to the rect in playmode. + + + + Draws a toolbar search field. + + The current search text. + If set to true the force focus on the field. + The left and right margin. + The current search text. + + + + Draws a search field. + + + + + Begins a horizontal toolbar. Remember to end with . + + The height of the toolbar. + Padding for the top of the toolbar. + The rect of the horizontal toolbar. + + + + Begins a horizontal toolbar. Remember to end with . + + The style for the toolbar. + The height of the toolbar. + The top padding. + + The rect of the horizontal toolbar. + + + + + Ends a horizontal toolbar started by . + + + + + Begins a horizontal indentation. Remember to end with . + + The GUI layout options. + + + + Begins a horizontal indentation. Remember to end with . + + The style of the indentation. + The GUI layout options. + + + + Ends a identation horizontal layout group started by . + + + + + Begins a vertical indentation. Remember to end with . + + The GUI layout options. + + + + Begins a vertical indentation. Remember to end with . + + The style of the indentation. + The GUI layout options. + + + + Ends a identation vertical layout group started by . + + + + + Indents by the current indent value, . + + + + + Draws a menu button. + + The indent of the button. + The text of the button. + The current state of the button. + The texture icon for the button. + The current state of the button. + + + + Begins a fade group. Remember to end with . + + The key for the fade group. + Current state of the fade group. + + + + Begins a fade group. Remember to end with . + + The key for the fade group. + Current state of the fade group. + A value between 0 and 1 indicating how expanded the fade group is. + + + + Begins a fade group. Remember to end with . + + The primary key for the fade group. + The secondly key for the fade group. + Current state of the fade group. + + + + Begins a fade group. Remember to end with . + + The key for the fade group. + The name of the fade group. + Current state of the fade group. + + + + Begins a fade group. Remember to end with . + + The key for the fade group. + Current state of the fade group. + The duration of fade in and out. + + + + Begins a fade group. Remember to end with . + + The key for the fade group. + Current state of the fade group. + A value between 0 and 1 indicating how expanded the fade group is. + The duration of fade in and out. + + + + Begins a fade group. Remember to end with . + + The primary key for the fade group. + The secondly key for the fade group. + Current state of the fade group. + The duration of fade in and out. + + + + Begins a fade group. Remember to end with . + + The key for the fade group. + The name of the fade group. + Current state of the fade group. + The duration of fade in and out. + + + + Begins a fade group. Remember to end with . + + The current fading value between 0 and 1. + + + + Ends a fade group started by any BeginFadeGroup. + + + + + Draws a foldout field where clicking on the label toggles to the foldout too. + + The current state of the foldout. + The label of the foldout. + The GUI style. + + The current state of the foldout. + + + + + Draws a foldout field where clicking on the label toggles to the foldout too. + + The current state of the foldout. + The label of the foldout. + The GUI style. + + + + Draws a foldout field where clicking on the label toggles to the foldout too. + + The current state of the foldout. + The label of the foldout. + The value rect. + The GUI style. + + + + Draws a foldout field where clicking on the label toggles to the foldout too. + + The rect to draw the foldout field in. + The current state of the foldout. + The label of the foldout. + The style. + + + + Begins drawing a box. Remember to end with . + + The label of the box. + If set to true then center label. + The GUI layout options. + + + + Begins drawing a box. Remember to end with . + + The label of the box. + If set to true then center label. + The GUI layout options. + The rect of the box. + + + + Begins drawing a box. Remember to end with . + + The GUI layout options. + + + + Ends drawing a box started by any BeginBox. + + + + + Begins drawing a box header. Remember to end with . + + + + + Ends drawing a box header started by , + + + + + Begins drawing a box with toolbar style header. Remember to end with . + + Label for box header. + If true the label will be drawn in the center of the box header. + GUILayout options. + The rect of the box. + + + + Begins drawing a box with toolbar style header. Remember to end with . + + Label for box header. + If true the label will be drawn in the center of the box header. + GUILayout options. + The rect of the box. + + + + Begins drawing a box with toolbar style header. Remember to end with . + + GUILayout options. + The rect of the box. + + + + Ends the drawing a box with a toolbar style header started by . + + + + + Begins drawing a toolbar style box header. Remember to end with . + + The rect of the box. + + + + Ends the drawing of a toolbar style box header started by . + + + + + Begins drawing a legend style box. Remember to end with . + + The label for the legend style box. + If true the label will be drawn in the center of the box. + GUILayout options. + The rect of the box. + + + + Begins drawing a legend style box. Remember to end with . + + The label for the legend style box. + If true the label will be drawn in the center of the box. + GUILayout options. + The rect of the box. + + + + Begins drawing a legend style box. Remember to end with . + + GUILayout options. + The rect of the box. + + + + Ends the drawing of a legend style box started by + + + + + Begins drawing an inline box. Remember to end with . + + The GUI layout options. + The rect of the box. + + + + Ends drawing an inline box started by any BeginInlineBox. + + + + + Starts the shaking animation of a shaking group. + + + + + Starts the shaking animation of a shaking group. + + + + + Begins a shakeable group. + + + + + Ends the shakeable group. + + + + + Begins drawing a vertical menu list. + + The key for the menu list. + The rect created. + + + + Begins drawing a menu list item. Remember to end with + + Value indicating whether the item is selected. + Value indicating if the mouse is pressed on the item. + If set to true the item is set as selected.. + The rect used for the item. + + + + Ends drawing a menu list item started by + + + + + Ends drawing a vertical menu list started by + + + + + Begins drawing a vertical list. + + If set to true borders will be drawn around the vertical list. + If set to true a dark background will be drawn. + The GUI layout options. + The rect used for the list. + + + + Ends drawing a vertical list started by . + + + + + Begins drawing a list item. + + If set to true the item can be hovered with the mouse. + The style for the vertical list item. + The GUI layout options. + The rect used for the item. + + + + Begins drawing a list item. + + If set to true the item can be hovered with the mouse. + The style for the vertical list item. + The GUI layout options. + The color for even elements. + The color for odd elements. + The color for even elements when hovered. + The color for odd elements when hovered. + The rect used for the item. + + + + Ends drawing a list item started by . + + + + + Creates a animated tab group. + + The key for the tab group.. + An animated tab group. + + + + Begins drawing a toggle group. Remember to end with . + + The key of the group. + Value indicating if the group is enabled. + Value indicating if the group is visible. + The title of the group. + Value indicating if the group is toggled. + + + + Begins drawing a toggle group. Remember to end with . + + The key of the group. + Value indicating if the group is enabled. + Value indicating if the group is visible. + The title of the group. + Duration of the animation. + Value indicating if the group is toggled. + + + + Ends drawing a toggle group started by . + + + + + Begins drawing a horizontal auto scroll box. Remember to end with . + + The for the field. + The GUILayout options. + The rect used for the field. + + + + Ends drawing a horizontal auto scroll box started by . + + + + + Creates a rect that can be grabbed and pulled to change a value up or down. + + The grabbable rect. + The control ID for the sliding. + The current value. + + The current value. + + + + + Creates a rect that can be grabbed and pulled to change a value up or down. + + The grabbable rect. + The control ID for the sliding. + The current value. + + The current value. + + + + + Creates a rect that can be grabbed and pulled to change a value up or down. + + The grabbable rect. + The control ID for the sliding. + The current value. + + The current value. + + + + + Creates a rect that can be grabbed and pulled to change a value up or down. + + The grabbable rect. + The control ID for the sliding. + The current value. + + The current value. + + + + + Creates a rect that can be grabbed and pulled + + The grabbable rect. + The cursor. + + The the mouse delta position. + + + + + Creates a rect that can be grabbed and pulled + + The position. + The grabbable rect. + + The the mouse delta position. + + + + + Draws a field for a value of type T - dynamically choosing an appropriate drawer for the type. + Currently supported are: char, string, sbyte, byte, short, ushort, int, uint, long, ulong, float, double, decimal, Guid and all enums. + + The type of the value to draw. + The label of the fields. + The value to draw. + The layout options. + The possibly changed value. + + + + Checks whether a given type can be drawn as a dynamic field by + + The type to check. + True if the type can be drawn, otherwise false. + + + + Gets the feature rich control rect. + + + + + Gets the feature rich control rect. + + + + + Creates a control ID that handles keyboard control, focused editor window, indentation and prefix label correctly. + + The rect to make a feature rich control for. + The label for the control. Leave null for no label. + The created control ID. + A value indicating whether or not the control has keyboard focus. + + + + Creates a control ID that handles keyboard control, focused editor window, indentation and prefix label correctly. + + The rect to make a feature rich control for. + The created control ID. + A value indicating whether or not the control has keyboard focus. + + + + Collection of GUIStyles used by Sirenix. + + + + + Border color. + + + + + Box background color. + + + + + Dark editor background color. + + + + + Editor window background color. + + + + + Menu background color. + + + + + Header box background color. + + + + + Highlighted Button Color. + + + + + Highlight text color. + + + + + Highlight property color. + + + + + List item hover color for every other item. + + + + + List item hover color for every other item. + + + + + List item drag background color. + + + + + List item drag background color. + + + + + Column title background colors. + + + + + List item background color for every other item. OBSOLETE: Use ListItemColorEven instead. + + + + + List item background color for every other item. OBSOLETE: Use ListItemColorOdd instead. + + + + + List item color for every other item. + + + + + List item color for every other item. + + + + + Menu button active background color. + + + + + Menu button border color. + + + + + Menu button color. + + + + + Menu button hover color. + + + + + A light border color. + + + + + Bold label style. + + + + + Tag Button style. + + + + + Bold label style. + + + + + Centered bold label style. + + + + + Box container style. + + + + + Popup style. + + + + + Box header style. + + + + + Left button style. + + + + + Left button selected style. + + + + + Left button style. + + + + + Left button selected style. + + + + + Mid button style. + + + + + Mid button selected style. + + + + + Right button style. + + + + + Right button selected style. + + + + + Pane Options Button + + + + + Left button style. + + + + + Left button selected style. + + + + + Left button style. + + + + + Left button selected style. + + + + + Mid button style. + + + + + Mid button selected style. + + + + + Right button style. + + + + + Right button selected style. + + + + + Color field background style. + + + + + Foldout style. + + + + + Icon button style. + + + + + Label style. + + + + + White label style. + + + + + Black label style. + + + + + Centered label style. + + + + + Left Aligned Centered Label + + + + + Left aligned grey mini label style. + + + + + Left aligned grey label style. + + + + + Centered grey mini label + + + + + Left right aligned white mini label style. + + + + + Centered white mini label style. + + + + + Centered black mini label style. + + + + + List item style. + + + + + Menu button background style. + + + + + No style. + + + + + Odin Editor Wrapper. + + + + + Padding less box style. + + + + + Content Padding + + + + + Property padding. + + + + + Property margin. + + + + + Rich text label style. + + + + + Right aligned grey mini label style. + + + + + Right aligned white mini label style. + + + + + Section header style. + + + + + Section header style. + + + + + Toggle group background style. + + + + + Toggle group checkbox style. + + + + + Toggle group padding style. + + + + + Toggle group title background style. + + + + + Toolbar background style. + + + + + Toolbar button style. + + + + + Toolbar button selected style. + + + + + Toolbar search cancel button style. + + + + + Toolbar search field style. + + + + + Toolbar tab style. + + + + + Title style. + + + + + Bold title style. + + + + + Centered bold title style. + + + + + Right aligned bold title style. + + + + + Centered title style. + + + + + Right aligned title style. + + + + + Subtitle style. + + + + + Centered sub-title style. + + + + + Right aligned sub-title style. + + + + + Message box style. + + + + + Detailed Message box style. + + + + + Multiline Label + + + + + Centered Multiline Label + + + + + Centered Text Field + + + + + Gets the bottom box padding. + + + + + Unitys PaneOptions GUIStyle. + + + + + Unitys ProjectBrowserTextureIconDropShadow GUIStyle. + + + + + Unitys TL SelectionButton PreDropGlow GUIStyle. + + + + + Unitys ShurikenModuleTitle GUIStyle. + + + + + Draw this one manually with: new Color(1, 1, 1, EditorGUIUtility.isProSkin ? 0.25f : 0.45f) + + + + + A tab page created by . + + + + + + Gets the title of the tab. + + + + + Gets the title of the tab. + + + + + Gets the rect of the page. + + + + + Begins the page. + + + + + Ends the page. + + + + + Whether to draw a draw scroll view. + + + + + The number of pixels before a scroll view appears. + + + + + The maximum scroll view height. + + + + + The scroll position + + + + + The cell style + + + + + Gets the rect containing all rows. + + + + + Gets the first visible row index. + + + + + Gets the last visible row index. + + + + + Gets the outer rect. The height of this <= .height. + + + + + Gets the row rect. + + + + + Begins the table. + + + + + Begins the column. + + + + + Begins the cell. + + + + + Ends the cell. + + + + + Ends the column. + + + + + Ends the table. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Utility functions for Unity assets. + + + + + Gets all assets of the specified type. + + + + + Gets all assets of the specified type. + + The type of assets to find. + The asset folder path. + + + + Gets all assets of the specified type. + + The type of assets to find. + The asset folder path. + + + + Asset search helper. + + + + + The asset object. + + + + + Current index. + + + + + Search result count. + + + + + Tests if an asset can be created from a type. + + The type to test. + true if an asset can be created. Otherwise false. + + + + Tests if an asset can be created from a type. + + The type to test. + The base asset type. + true if an asset can be created. Otherwise false. + + + + Gets project path to the specified asset. + + The asset object. + The path to the asset. + + + + Creates a new asset of the specified type. + + The type of the asset. + Project path to the new asset. + The name of the asset. + + + + Functions for accessing the clipboard. + + + + + Gets the current copy mode. + + + + + Copies the specified object. + + + The object. + The copy mode. + + + + Copies the specified object. + + + + + Clears this instance. + + + + + Determines whether this instance can paste the specified type. + + + + + Determines whether this instance can paste the specified type. + + + + + Determines whether or not the Clipboard contains any instance. + + + + + Tries the paste. + + + + + Copies or gets the current object in the clipboard. + + + + + Copies or gets the current object in the clipboard. + + + + + The various modes of copying an object to the clipboard. + + + + + Deep copy. + + + + + Shallow Copy. + + + + + Reference Copy. + + + + + A utility class for getting delta time for the GUI editor. + + + + + Gets an EditorTimeHelper instance for the current drawing window. + + + + + Initializes a new instance of the class. + + + + + Gets the delta time. + + + + + Updates the delta time. + + + + + Compare strings and produce a distance score between them. + + + + + Determines whether if the source is within the search. + + The source string. + The target string. + Should the algorithm ignore letter case?. + Should the algorithm attempt to search on an abbreviation of the source?. + Threshold for what is considered to be within the search. 0 will return everything and 1 will only return exact matches. + True if the source is within the search. Otherwise false. + + + + Compares the target to the source and returns a distance score. + + The source string. + The target string. + + + Distance score. 0 is no match, and 1 is exact match. + + + + A utility class for properly counting frames and helps determine when a frame has started in an editor window. + + + + + Gets the frame count. + + + + + Gets a value indicating whether this instance is new frame. + + + + + Updates the frame counter and returns itself. + + + + + Hides the ObjectMembers in Visual Studio IntelliSense + + + + + Determines whether the specified , is equal to this instance. + + + + + Returns a hash code for this instance. + + + + + Gets the type. + + + + + Returns a that represents this instance. + + + + + Collection of texture functions. + + + + + Loads an image from bytes with the specified width and height. Use this instead of someTexture.LoadImage() if you're compiling to an assembly. Unity has moved the method in 2017, + and Unity's assembly updater is not able to fix it for you. This searches for a proper LoadImage method in multiple locations, and also handles type name conflicts. + + + + + Crops a Texture2D into a new Texture2D. + + + + + Converts a Sprite to a Texture2D. + + + + + + + AssemblyTypeFlags is a bitmask used to filter types and assemblies related to Unity. + + + + + + Excludes all types. + + + + + UserTypes includes all custom user scripts that are not located in an editor or plugin folder. + + + + + PluginTypes includes all types located in the plugins folder and are not located in an editor folder. + + + + + UnityTypes includes all types depended on UnityEngine and from UnityEngine, except editor, plugin and user types. + + + + + UserEditorTypes includes all custom user scripts that are located in an editor folder but not in a plugins folder. + + + + + PluginEditorTypes includes all editor types located in the plugins folder. + + + + + UnityEditorTypes includes all editor types that are not user editor types nor plugin editor types. + + + + + OtherTypes includes all other types that are not depended on UnityEngine or UnityEditor. + + + + + CustomTypes includes includes all types manually added to the Unity project. + This includes UserTypes, UserEditorTypes, PluginTypes and PluginEditorTypes. + + + + + GameTypes includes all assemblies that are likely to be included in builds. + This includes UserTypes, PluginTypes, UnityTypes and OtherTypes. + + + + + EditorTypes includes UserEditorTypes, PluginEditorTypes and UnityEditorTypes. + + + + + All includes UserTypes, PluginTypes, UnityTypes, UserEditorTypes, PluginEditorTypes, UnityEditorTypes and OtherTypes. + + + + + A utility class for finding types in various asssembly. + + + + + Initializes the class. + + + + + Re-scans the entire AppDomain. + + + + + Gets an of all assemblies in the current . + + An of all assemblies in the current . + + + + Gets the for a given assembly. + + The assembly. + The for a given assembly. + is null. + + + + Gets the type. + + The full name of the type without any assembly information. + + + + Gets the type. + + + + + Determines whether an assembly is depended on another assembly. + + The assembly. + The other assembly. + + true if has a reference in or is the same as . + + is null. + is null. + + + + Determines whether the assembly module is a of type . + + The assembly. + + true if the specified assembly of type ; otherwise, false. + + assembly + + + + Gets the full file path to a given assembly. + + The assembly. + The full file path to a given assembly, or Null if no file path was found. + is Null. + + + + Gets the full directory path to a given assembly. + + The assembly. + The full directory path in which a given assembly is located, or Null if no file path was found. + + + + Get types from the current AppDomain with a specified filter. + + The filters. + Types from the current AppDomain with the specified filters. + + + + Find members of the given type, while providing good error messages based on the following search filters provided. + See for more information. + + + + + MemberFinder is obsolete, and has been replacted by and . + Use cases that do not fit those utlities should use manual reflection that is hand-optimized for the best performance in the given case. + + MemberFinder was a utility class often used by Odin drawers to find fields, methods, and + properties while providing good user-friendly error messages based on the search criteria. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + + + + Find members of the given type, while providing good error messages based on the following search filters provided. + + + + + Find members of the given type, while providing good error messages based on the following search filters provided. + + + + + Can be true for both fields, properties and methods. + + + + + + Exclude members found in base-types. + + + + + Only include methods with the following parameter. + Calling this will also exclude fields and properties. + Parameter type inheritance is supported. + + + + + Only include methods with the following parameters. + Calling this will also exclude fields and properties. + Parameter type inheritance is supported. + + + + + Only include methods with the following parameters. + Calling this will also exclude fields and properties. + Parameter type inheritance is supported. + + + + + Only include methods with the following parameters. + Calling this will also exclude fields and properties. + Parameter type inheritance is supported. + + + + + Only include methods with the following parameters. + Calling this will also exclude fields and properties. + Parameter type inheritance is supported. + + + + + Only include methods with the following parameters. + Calling this will also exclude fields and properties. + Parameter type inheritance is supported. + + + + + Only include methods with the following parameters. + Calling this will also exclude fields and properties. + Parameter type inheritance is supported. + + + + + Only include methods with the following parameters. + Calling this will also exclude fields and properties. + Parameter type inheritance is supported. + + + + + Determines whether [has return type] [the specified return type]. + + + + + Can be true for both fields, properties and methods. + + + + + Calls IsField() and IsProperty(). + + + + + Only include static members. By default, both static and non-static members are included. + + + + + Only include non-static members. By default, both static and non-static members are included. + + + + + Specify the name of the member. + + + + + Excludes fields and methods if nether IsField() or IsMethod() is called. Otherwise includes properties. + By default, all member types are included. + + + + + Excludes fields and properties if nether IsField() or IsProperty() is called. Otherwise includes methods. + By default, all member types are included. + + + + + Excludes properties and methods if nether IsProperty() or IsMethod() is called. Otherwise includes fields. + By default, all member types are included. + + + + + Excludes non-public members if IsNonPublic() has not yet been called. Otherwise includes public members. + By default, both public and non-public members are included. + + + + + Excludes public members if IsPublic() has not yet been called. Otherwise includes non-public members. + By default, both public and non-public members are included. + + + + + Excludes fields and properties, and only includes methods with a return type of void. + + + + + Gets the member based on the search filters provided + Returns null if no member was found. + + + + + Gets the member based on the search filters provided, and provides a proper error message if no members was found. + + + + + Gets the member based on the search filters provided, and provides a proper error message if no members was found. + + + + + Try gets the member based on the search filters provided, and provides a proper error message if no members was found. + + + + + Try gets the member based on the search filters provided, and provides a proper error message if no members was found. + + + + + Try gets all members based on the search filters provided, and provides a proper error message if no members was found. + + + + + Gets or sets the width of the col. + + + + + Gets or sets the minimum width. + + + + + Gets a value indicating whether the width should be preserved when the table itself gets resiszed. + + + + + Gets a value indicating whether this is resizable. + + + + + This class contains utility methods for subscribing to various UnityEditor events reliably and safely across all Odin-supported versions of Unity. + + + + + Sometimes, someone accidentally overrides a delay action subscription to + by setting the value instead of using the += operator as should be done, + which can be done because in many versions of Unity it is a field, and not an event. + (In some versions of Unity it is an event, though, and in this case, this method acts as a wrapper + to subscribe reliably, no matter the nature of the backing event.) + This method subscribes to a lot of different callbacks, in the hopes of catching at least one. + + As opposed to , this method is safe to call from any thread, and will + delay the actual subscription to a safe time. + + + + + Sometimes, an idiot overrides a delay action subscription to , + which can be done because the people at Unity didn't know what events were once upon a time. + This method subscribes to a lot of different callbacks, in the hopes of catching at least one. + + + + + In 2020.1, Unity changed EditorApplication.delayCall from a field to an event, meaning + we now have to use reflection to access it consistently across all versions of Unity. + + + + diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.Utilities.Editor.xml.meta b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.Utilities.Editor.xml.meta new file mode 100644 index 00000000..54a4f1e9 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.Utilities.Editor.xml.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5c65184932ff4fd48a343e236025096f +timeCreated: 1488828285 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.Utilities.dll b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.Utilities.dll new file mode 100644 index 00000000..10cef561 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.Utilities.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5ea41695834fed2c090fbb6f90e27d259cfc557c21a159619f7056320a4204a2 +size 154112 diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.Utilities.dll.meta b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.Utilities.dll.meta new file mode 100644 index 00000000..6fcdb301 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.Utilities.dll.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 4873f2a8bdae42baa0406e8a61366ca1 +timeCreated: 1488828285 +licenseType: Store +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + isOverridable: 0 + platformData: + Any: + enabled: 0 + settings: + Exclude Android: 1 + Exclude Editor: 0 + Exclude Linux: 1 + Exclude Linux64: 1 + Exclude LinuxUniversal: 1 + Exclude N3DS: 1 + Exclude OSXIntel: 1 + Exclude OSXIntel64: 1 + Exclude OSXUniversal: 1 + Exclude PS4: 1 + Exclude PSM: 1 + Exclude PSP2: 1 + Exclude SamsungTV: 1 + Exclude Tizen: 1 + Exclude WebGL: 1 + Exclude WiiU: 1 + Exclude Win: 1 + Exclude Win64: 1 + Exclude WindowsStoreApps: 1 + Exclude XboxOne: 1 + Exclude iOS: 1 + Exclude tvOS: 1 + Editor: + enabled: 1 + settings: + DefaultValueInitialized: true + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.Utilities.xml b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.Utilities.xml new file mode 100644 index 00000000..b665facb --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.Utilities.xml @@ -0,0 +1,3658 @@ + + + + Sirenix.Utilities + + + + + Extension methods for the UnityEngine.Color type. + + + + + Lerps between multiple colors. + + The colors. + The t. + + + + + Moves the towards implementation for Color. + + From color. + To color. + The maximum delta. + + + + Tries to parse a string to a Color. The following formats are supported: + "new Color(0.4, 0, 0, 1)", "#FFEEBBFF", "#FFEECC", "FFEEBBFF", "FFEECC" + + The color string. + The color. + Returns true if the parse was a success. + + + + Converts a color to a string formatted to c# + + The color. + new Color(r, g, b, a) + + + + Pows the color with the specified factor. + + The color. + The factor. + + + + Normalizes the RGB values of the color ignoring the alpha value. + + The color. + + + + Delegate method extensions. + + + + + Memoizes the specified func - returns the memoized version + + + + + Memoizes the specified func - returns the memoized version + + + + + FieldInfo method extensions. + + + + + Determines whether the specified field is an alias. + + The field to check. + + true if the specified field is an alias; otherwise, false. + + + + + Returns the original, backing field of an alias field if the field is an alias. + + The field to check. + /// if set to true an exception will be thrown if the field is not aliased. + + The field was not aliased; this only occurs if throwOnNotAliased is true. + + + + Garbage free enumerator methods. + + + + + Garbage free enumerator for lists. + + + + + Garbage free enumerator for dictionaries. + + + + + Garbage free enumator for dictionary values. + + + + + Garbage free enumerator for hashsets. + + + + + List iterator. + + + + + Creates a list iterator. + + + + + Gets the enumerator. + + + + + Gets the current value. + + + + + Moves to the next value. + + + + + Disposes the iterator. + + + + + Hashset iterator. + + + + + Creates a hashset iterator. + + + + + Gets the enumerator. + + + + + Gets the current value. + + + + + Moves to the next value. + + + + + Disposes the iterator. + + + + + Dictionary iterator. + + + + + Creates a dictionary iterator. + + + + + Gets the enumerator. + + + + + Gets the current value. + + + + + Moves to the next value. + + + + + Disposes the iterator. + + + + + Dictionary value iterator. + + + + + Creates a dictionary value iterator. + + + + + Gets the enumerator. + + + + + Gets the current value. + + + + + Moves to the next value. + + + + + Disposes the iterator. + + + + + Various LinQ extensions. + + + + + Calls an action on each item before yielding them. + + The collection. + The action to call for each item. + + + + Perform an action on each item. + + The source. + The action to perform. + + + + Perform an action on each item. + + The source. + The action to perform. + + + + Convert each item in the collection. + + The collection. + Func to convert the items. + + + + Convert a colletion to a HashSet. + + + + + Convert a colletion to a HashSet. + + + + + Convert a collection to an immutable list. + + The collection. + + + + Add an item to the beginning of a collection. + + The collection. + Func to create the item to prepend. + + + + Add an item to the beginning of a collection. + + The collection. + The item to prepend. + + + + Add a collection to the beginning of another collection. + + The collection. + The collection to prepend. + + + + Add an item to the beginning of another collection, if a condition is met. + + The collection. + The condition. + Func to create the item to prepend. + + + + Add an item to the beginning of another collection, if a condition is met. + + The collection. + The condition. + The item to prepend. + + + + Add a collection to the beginning of another collection, if a condition is met. + + The collection. + The condition. + The collection to prepend. + + + + Add an item to the beginning of another collection, if a condition is met. + + The collection. + The condition. + Func to create the item to prepend. + + + + Add an item to the beginning of another collection, if a condition is met. + + The collection. + The condition. + The item to prepend. + + + + Add a collection to the beginning of another collection, if a condition is met. + + The collection. + The condition. + The collection to prepend. + + + + Add an item to the beginning of another collection, if a condition is met. + + The collection. + The condition. + Func to create the item to prepend. + + + + Add an item to the beginning of another collection, if a condition is met. + + The collection. + The condition. + The item to prepend. + + + + Add a collection to the beginning of another collection, if a condition is met. + + The collection. + The condition. + The collection to prepend. + + + + Add an item to the end of a collection. + + The collection. + Func to create the item to append. + + + + Add an item to the end of a collection. + + The collection. + The item to append. + + + + Add a collection to the end of another collection. + + The collection. + The collection to append. + + + + Add an item to the end of a collection if a condition is met. + + The collection. + The condition. + Func to create the item to append. + + + + Add an item to the end of a collection if a condition is met. + + The collection. + The condition. + The item to append. + + + + Add a collection to the end of another collection if a condition is met. + + The collection. + The condition. + The collection to append. + + + + Add an item to the end of a collection if a condition is met. + + The collection. + The condition. + Func to create the item to append. + + + + Add an item to the end of a collection if a condition is met. + + The collection. + The condition. + The item to append. + + + + Add a collection to the end of another collection if a condition is met. + + The collection. + The condition. + The collection to append. + + + + Returns and casts only the items of type . + + The collection. + + + + Adds a collection to a hashset. + + The hashset. + The collection. + + + + Returns true if the list is either null or empty. Otherwise false. + + The list. + + + + Sets all items in the list to the given value. + + The list. + The value. + + + + Adds the elements of the specified collection to the end of the IList<T>. + + + + + Sorts an IList + + + + + Sorts an IList + + + + + MemberInfo method extensions. + + + + + Returns true if the attribute whose type is specified by the generic argument is defined on this member + + + + + Returns true if the attribute whose type is specified by the generic argument is defined on this member + + + + + Returns the first found custom attribute of type T on this member + Returns null if none was found + + + + + Returns the first found non-inherited custom attribute of type T on this member + Returns null if none was found + + + + + Gets all attributes of the specified generic type. + + The member. + + + + Gets all attributes of the specified generic type. + + The member. + If true, specifies to also search the ancestors of element for custom attributes. + + + + Gets all attribute instances defined on a MemeberInfo. + + The member. + + + + Gets all attribute instances on a MemberInfo. + + The member. + If true, specifies to also search the ancestors of element for custom attributes. + + + + If this member is a method, returns the full method name (name + params) otherwise the member name paskal splitted + + + + + Determines whether a FieldInfo, PropertyInfo or MethodInfo is static. + + The member. + + true if the specified member is static; otherwise, false. + + + + + + Determines whether the specified member is an alias. + + The member to check. + + true if the specified member is an alias; otherwise, false. + + + + + Returns the original, backing member of an alias member if the member is an alias. + + The member to check. + /// if set to true an exception will be thrown if the member is not aliased. + + The member was not aliased; this only occurs if throwOnNotAliased is true. + + + + Various extensions for MethodInfo. + + + + + Returns the specified method's full name "methodName(argType1 arg1, argType2 arg2, etc)" + Uses the specified gauntlet to replaces type names, ex: "int" instead of "Int32" + + + + + Returns a string representing the passed method parameters names. Ex "int num, float damage, Transform target" + + + + + Returns the specified method's full name. + + + + + Tests if a method is an extension method. + + + + + Determines whether the specified method is an alias. + + The method to check. + + true if the specified method is an alias; otherwise, false. + + + + + Returns the original, backing method of an alias method if the method is an alias. + + The method to check. + /// if set to true an exception will be thrown if the method is not aliased. + + The method was not aliased; this only occurs if throwOnNotAliased is true. + + + + Determines the type of operator. + + + + + + The == operator. + + + + + The != operator. + + + + + The + operator. + + + + + The - operator. + + + + + The * operator. + + + + + The / operator. + + + + + The < operator. + + + + + The > operator. + + + + + The <= operator. + + + + + The >= operator. + + + + + The % operator. + + + + + The >> operator. + + + + + The << operator. + + + + + The & operator. + + + + + The | operator. + + + + + The ^ operator. + + + + + The ~ operator. + + + + + The && operator. + + + + + The || operator. + + + + + The ! operator. + + + + + DirectoryInfo method extensions. + + + + + Gets the name of the directory. Always returns forward slash seperators as opposed to Path.GetDirectoryName(). + + + + + Determines whether the directory has a given directory in its hierarchy of children. + + The parent directory. + The sub directory. + + + + Finds a parent directory with a given name, or null if no such parent directory exists. + + + + + Returns a value indicating whether or not a path can be made relative to another. + + The parent path. + The path to make relative to the parent path. + A value indicating if the path can be made relative to the parent path. + + + + Returns a path string to path that is relative to the parent path. + + The parent path. + The path to make relative to the parent path. + A relative path from parent path to path. + + + + Tries to make a path that is relative from parent path to path. + + The parent path. + The path to make relative to the parent path. + A relative path from parent path to path. null if no relative path could be made. + A value indicating if the method succeeded in making a relative path. + + + + Combines two paths, and replaces all backslases with forward slash. + + + + + PropertyInfo method extensions. + + + + + Determines whether a property is an auto property. + + + + + Determines whether the specified property is an alias. + + The property to check. + + true if the specified property is an alias; otherwise, false. + + + + + Returns the original, backing property of an alias property if the property is an alias. + + The property to check. + /// if set to true an exception will be thrown if the property is not aliased. + + The property was not aliased; this only occurs if throwOnNotAliased is true. + + + + Defines a collection of handy Rect transformation methods, that can chained together for complex behaviour. + Note that no method defined here changes the original Rect, but instead returns a new transformed Rect. + + + + + Returns a Rect with the specified width. + + The original Rect. + The desired width of the new Rect. + + + + Returns a Rect with the specified height. + + The original Rect. + The desired height of the new Rect. + + + + Returns a Rect with the specified size. + + The original Rect. + The desired width of the new Rect. + The desired height of the new Rect. + + + + Returns a Rect with the specified size. + + The original Rect. + The desired size of the new Rect. + + + + Returns a Rect that has been inserted by the specified amount on the X-axis. + + The original Rect. + The desired padding. + + + + Returns a Rect that has been inserted by the specified amount on the X-axis. + + The original Rect. + Desired padding on the left side. + Desired padding on the right side. + + + + Returns a Rect that has been inserted by the specified amount on the Y-axis. + + The original Rect. + The desired padding. + + + + Returns a Rect that has been inserted by the specified amount on the Y-axis. + + The original Rect. + The desired padding on the top. + The desired padding on the bottom. + + + + Returns a Rect that has been inserted by the specified amount. + + The original Rect. + The desired padding. + + + + Returns a Rect that has been inserted by the specified amount. + + The original Rect. + The desired horizontal padding. + The desired vertical padding. + + + + Returns a Rect that has been inserted by the specified amount. + + The original Rect. + The desired padding on the left. + The desired padding on the right. + The desired padding on the top. + The desired padding on the bottom. + + + + Returns a Rect, with the specified width, that has been aligned to the left of the original Rect. + + The original Rect. + The desired width of the new Rect. + + + + Returns a Rect, with the specified width, that has been aligned to horizontal center of the original Rect. + + The original Rect. + The desired width of the new Rect. + + + + Returns a Rect, with the specified width and height in the center of the provided rect. + + The original Rect. + The desired width of the new Rect. + The desired height of the new Rect. + + + + Returns a Rect, with the specified width, that has been aligned to the right of the original Rect. + + The original Rect. + The desired width of the new Rect. + + + + Returns a Rect, with the specified width, that has been aligned to the right of the original Rect. + + + + + Returns a Rect, with the specified height, that has been aligned to the top of the original Rect. + + The original Rect. + The desired height of the new Rect. + + + + Returns a Rect, with the specified height, that has been aligned to the vertical middle of the original Rect. + + The original Rect. + The desired height of the new Rect. + + + + Returns a Rect, with the specified height, that has been aligned to the bottom of the original Rect. + + The original Rect. + The desired height of the new Rect. + + + + Returns a Rect, with the specified width, that has been aligned horizontally to the center of the original rect. + + The original Rect. + The desired width of the new Rect. + + + + Returns a Rect, with the specified height, that has been aligned vertically to the center of the original rect. + + The original Rect. + The desired height of the new Rect. + + + + Returns a Rect, with the specified width and height, that has been aligned horizontally and vertically to the center of the original rect. + + The original Rect. + The desired width and height of the new Rect. + + + + Returns a Rect, with the specified width and height, that has been aligned horizontally and vertically to the center of the original rect. + + The original Rect. + The desired width of the new Rect. + The desired height of the new Rect. + + + + Returns a Rect that has been expanded by the specified amount. + + The original Rect. + The desired expansion. + + + + Returns a Rect that has been expanded by the specified amount. + + The original Rect. + The desired expansion on the X-axis. + The desired expansion on the Y-axis. + + + + Returns a Rect that has been expanded by the specified amount. + + The original Rect. + The desired expansion on the left. + The desired expansion on the right. + The desired expansion on the top. + The desired expansion on the bottom. + + + + Splits a Rect horizontally into the specified number of sub-rects, and returns a sub-rect for the specified index. + + The original Rect. + The index for the subrect. Includes 0, and excludes count. + The amount of subrects the Rect should be split into. + + + + Splits a Rect vertically into the specified number of sub-rects, and returns a sub-rect for the specified index. + + The original Rect. + The index for the subrect. Includes 0, and excludes count. + The amount of subrects the Rect should be split into. + + + + Splits a Rect into a grid from left to right and then down. + + The original rect. + The width of a grid cell. + The height of a grid cell. + The index of the grid cell. + + + + + Splits a Rect into a grid from left to right and then down. + + + + + Moves a Rect to the specified center X position. + + The original Rect. + The desired center x position. + + + + Moves a Rect to the specified center Y position. + + The desired original Rect. + The desired desired center y position. + + + + Moves a Rect to the specified center position. + + The original Rect. + The desired center X position. + The desired center Y position. + + + + Moves a Rect to the specified center position. + + The original Rect. + The desired center position. + + + + Moves a Rect to the specified position. + + The orignal Rect. + The desired position. + + + + Resets a Rect's position to zero. + + The original Rect. + + + + Moves a Rect's position by the specified amount. + + The original Rect. + The change in position. + + + + Moves a Rect's position by the specified amount. + + The original Rect. + The x. + The y. + + + + Sets a Rect's X position. + + The original Rect. + The desired X position. + + + + Adds to a Rect's X position. + + The original Rect. + The value to add. + + + + Subtracts from a Rect's X position. + + The original Rect. + The value to subtract. + + + + Sets a Rect's Y position. + + The original Rect. + The desired Y position. + + + + Adds to a Rect's Y position. + + The original Rect. + The value to add. + + + + Subtracts a Rect's Y position. + + The original Rect. + The value to subtract. + + + + Sets the min position of a Rect. + + The original Rect. + The desired min position. + + + + Adds to a Rect's min position. + + The original rect. + The value to add. + + + + Subtracts a Rect's min position. + + The original Rect. + The vlaue to subtract. + + + + Sets a Rect's max position. + + The original Rect. + The desired max position. + + + + Adds to a Rect's max position. + + The original Rect. + The value to add. + + + + Subtracts a Rect's max position. + + The original Rect. + The value to add. + + + + Sets a Rect's X min position. + + The original Rect. + The desired min X position. + + + + Adds to a Rect's X min position. + + The original Rect. + The value to add. + + + + Subtracts from a Rect's X min position. + + The original Rect. + The value to subtract. + + + + Sets a Rect's X max position. + + The original Rect. + The desired X max position. + + + + Adds to a Rect's X max position. + + The original Rect. + The value to add. + + + + Subtracts a Rect's X max position. + + The original Rect. + The value to subtract. + + + + Sets a Rect's Y min position. + + The original Rect. + The desired Y min. + + + + Adds to a Rect's Y min position. + + The original Rect. + The value to add. + + + + Subtracts a Rect's Y min position. + + The original Rect. + The value to subtract. + + + + + Sets a Rect's Y max position. + + The original Rect. + The desired Y max position. + + + + Adds to a Rect's Y max position. + + The original Rect. + The value to add. + + + + Subtracts from a Rect's Y max position. + + The original Rect. + The value to subtract. + + + + Sets a Rect's width, if it is less than the specified value. + + The original Rect. + The desired min width. + + + + Sets a Rect's width, if it is greater than the specified value. + + The original Rect. + The desired max width. + + + + Sets a Rect's height, if it is less than the specified value. + + The original Rect. + The desired min height. + + + + Sets a Rect's height, if it is greater than the specified value. + + The original Rect. + The desired max height. + + + + Expands a rect to contain a given position. + + The original Rect. + The position to expand the rect towards. + + + + String method extensions. + + + + + Eg MY_INT_VALUE => MyIntValue + + + + + Returns whether or not the specified string is contained with this string + + + + + Ex: "thisIsCamelCase" -> "This Is Camel Case" + + + + + Returns true if this string is null, empty, or contains only whitespace. + + The string to check. + true if this string is null, empty, or contains only whitespace; otherwise, false. + + + + Type method extensions. + + + + + Type name alias lookup. + TypeNameAlternatives["Single"] will give you "float", "UInt16" will give you "ushort", "Boolean[]" will give you "bool[]" etc.. + + + + + Checks whether a given string is a valid CSharp identifier name. This also checks full type names including namespaces. + + The identifier to check. + + + + Determines whether a type can be casted to another type. + + From. + To. + if set to true an implicit or explicit operator must be defined on the given type. + + + + If a type can be casted to another type, this provides a function to manually convert the type. + + From. + To. + if set to true an implicit or explicit operator must be defined on the given type. + + + + If a type can be casted to another type, this provides a function to manually convert the type. + + if set to true an implicit or explicit operator must be defined on the given type. + + + + If a type can be casted to another type, this provides the method info of the method in charge of converting the type. + + From. + To. + if set to true an implicit or explicit operator must be defined on the given type. + + + + Gets an equality comparer delegate used to compare the equality of values of a given type. In order, this will be: + + 1. The == operator, if one is defined on the type. + 2. A delegate that uses , if the type implements that interface. + 3. .NET's own + + + Note that in the special case of the type , a special equality comparer is returned that only checks whether all the Quaternion components are equal. + This is because, by default, Quaternion's equality operator is broken when operating on invalid quaternions; "default(Quaternion) == default(Quaternion)" evaluates to false, and this causes a multitude of problems. + Special delegates are also returned for float and double, that consider float.NaN to be equal to float.NaN, and double.NaN to be equal to double.NaN. + + + + + Gets the first attribute of type T. Returns null in the no attribute of type T was found. + + The type. + If true, specifies to also search the ancestors of element for custom attributes. + + + + Determines whether a type implements or inherits from another type. + + The type. + To. + + + + Determines whether a type implements an open generic interface or class such as IList<> or List<>. + + Type of the candidate. + Type of the open generic type. + + + + + Determines whether a type implements an open generic interface such as IList<>. + + Type of the candidate. + Type of the open generic interface. + + Type " + openGenericInterfaceType.Name + " is not a generic type definition and an interface. + + + + Determines whether a type implements an open generic class such as List<>. + + Type of the candidate. + Type of the open generic interface. + + + + Gets the generic arguments of an inherited open generic class or interface. + + Type of the candidate. + The open generic type to get the arguments of. + + + + Gets the generic arguments of an inherited open generic class. + + Type of the candidate. + Type of the open generic class. + + + + Gets the generic arguments of an inherited open generic interface. + + Type of the candidate. + Type of the open generic interface. + + + + Gets the MethodInfo of a specific operator kind, with the given left and right operands. This overload is *far* faster than any of the other GetOperatorMethod implementations, and should be used whenever possible. + + + + + Gets the MethodInfo of a specific operator type. + + + + + Gets the MethodInfo of a specific operator type. + + + + + Gets all members from a given type, including members from all base types if the flag isn't set. + + + + + Gets all members from a given type, including members from all base types. + + + + + Gets all members of a specific type from a type, including members from all base types, if the flag isn't set. + + + + + Gets the generic type definition of an open generic base type. + + + + + Gets the generic type definition of an open generic base type. + + + + + Returns a lazy enumerable of all the base types of this type including interfaces and classes + + + + + Returns a lazy enumerable of all the base classes of this type + + + + + Used to filter out unwanted type names. Ex "int" instead of "Int32" + + + + + Returns a nicely formatted name of a type. + + + + + Returns a nicely formatted full name of a type. + + + + + Gets the name of the compilable nice. + + The type. + + + + Gets the full name of the compilable nice. + + The type. + + + + Returns the first found custom attribute of type T on this type + Returns null if none was found + + + + + Returns the first found non-inherited custom attribute of type T on this type + Returns null if none was found + + + + + Gets all attributes of type T. + + The type. + + + + Gets all attributes of type T. + + The type + If true, specifies to also search the ancestors of element for custom attributes. + + + + Returns true if the attribute whose type is specified by the generic argument is defined on this type + + + + + Returns true if the attribute whose type is specified by the generic argument is defined on this type + + + + + Determines whether a type inherits or implements another type. Also include support for open generic base types such as List<>. + + + + + + Determines whether a type inherits or implements another type. Also include support for open generic base types such as List<>. + + + + + + + Gets the number of base types between given type and baseType. + + + + + Determines whether a method has the specified parameter types. + + + + + FieldInfo will return the fieldType, propertyInfo the PropertyType, MethodInfo the return type and EventInfo will return the EventHandlerType. + + The MemberInfo. + + + + Gets the value contained in a given . Currently only and is supported. + + The to get the value of. + The instance to get the value from. + The value contained in the given . + Can't get the value of the given type. + + + + Sets the value of a given MemberInfo. Currently only and is supported. + + The to set the value of. + The object to set the value on. + The value to set. + + Property has no setter + or + Can't set the value of the given type. + + + + // + Tries to infer a set of valid generic parameters for a generic type definition, given a subset of known parameters. + + The generic type definition to attempt to infer parameters for. + The inferred parameters, if inferral was successful. + The known parameters to infer from. + True if the parameters could be inferred, otherwise, false. + + genericTypeDefinition is null + or + knownParameters is null + + The genericTypeDefinition parameter must be a generic type definition. + + + + Checks whether an array of types satisfy the constraints of a given generic type definition. + If this method returns true, the given parameters can be safely used with with the given generic type definition. + + The generic type definition to check. + The parameters to check validity for. + + genericType is null + or + types is null + + The genericType parameter must be a generic type definition. + + + + Checks whether an array of types satisfy the constraints of a given generic method definition. + If this method returns true, the given parameters can be safely used with with the given generic method definition. + + The generic method definition to check. + The parameters to check validity for. + + genericType is null + or + types is null + + The genericMethod parameter must be a generic method definition. + + + + Before calling this method we must ALWAYS hold a lock on the GenericConstraintsSatisfaction_LOCK object, as that is an implicit assumption it works with. + + + + + Not yet documented. + + + + + Formats a string with the specified generic parameter constraints on any given type. Example output: where T : class + + + + + Determines whether a generic type contains the specified generic argument constraints. + + The type. + The generic argument types. + + + + Determines whether a type is a fully constructed generic type. + + + + + Determines whether a type is nullable by ensuring the type is neither a PrimitiveType, ValueType or an Enum. + + + + + Gets the enum bitmask in a ulong. + + enumType + + + + Gets a value indicating if the string is a reserved C# keyword. + + The identifier to check. + true if the string is a C# keyword. Otherwise false. + + + + Extends various Unity classes. + + + + + Determines whether a Unity object is null or "fake null", + without ever calling Unity's own equality operators. + This method is useful for checking if a Unity object is + null, destroyed or missing at times when it is not allowed + to call Unity's own equality operators, for example when + not running on the main thread. + + The Unity object to check. + True if the object is null, missing or destroyed; otherwise false. + + + + Contains utilities for operating on arrays. + + + + + Creates a new array with an added element. + + The element type of the array. + The array. + The value to add. + The new array. + The given array was null. + + + + Creates a new array with an element inserted at a given index. + + The element type of the array. + The array. + The index to insert at. + The value to insert. + The given array was null. + The index to insert at was out of range. + + + + Creates a new array with an element removed. + + The element type of the array. + The array. + The index to remove an element at. + + The given array was null. + The given index to remove an element at was out of range. + + + + Utility class for asset Guid script + + + + + Tries to update the Guid of a specified asset with the Guid from a specified script type. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Provides utilities for using the namespace. + + This class is due for refactoring. Use at your own peril. + + + + + Gets a value indicating whether emitting is supported on the current platform. + + + true if the current platform can emit; otherwise, false. + + + + + Creates a delegate which gets the value of a field. If emitting is not supported on the current platform, the delegate will use reflection to get the value. + + The type of the field to get a value from. + The instance describing the field to create a getter for. + A delegate which gets the value of the given field. + The fieldInfo parameter is null. + + + + Creates a delegate which gets the value of a field. If emitting is not supported on the current platform, the delegate will use reflection to get the value. + + The instance describing the field to create a getter for. + A delegate which gets the value of the given field. + The fieldInfo parameter is null. + + + + Creates a delegate which sets the value of a field. If emitting is not supported on the current platform, the delegate will use reflection to set the value. + + The type of the field to set a value to. + The instance describing the field to create a setter for. + A delegate which sets the value of the given field. + The fieldInfo parameter is null. + + + + Creates a delegate which sets the value of a field. If emitting is not supported on the current platform, the delegate will use reflection to set the value. + + The instance describing the field to create a setter for. + A delegate which sets the value of the given field. + The fieldInfo parameter is null. + + + + Creates a delegate which gets the value of a field. If emitting is not supported on the current platform, the delegate will use reflection to get the value. + + The type of the instance to get a value from. + The type of the field to get a value from. + The instance describing the field to create a getter for. + A delegate which gets the value of the given field. + The fieldInfo parameter is null. + + + + Creates a delegate which gets the value of a field from a weakly typed instance of a given type. If emitting is not supported on the current platform, the delegate will use reflection to get the value. + + The type of the field to get a value from. + The of the instance to get a value from. + The instance describing the field to create a getter for. + A delegate which gets the value of the given field. + The fieldInfo parameter is null. + + + + Creates a delegate which gets the weakly typed value of a field from a weakly typed instance of a given type. If emitting is not supported on the current platform, the delegate will use reflection to get the value. + + The of the instance to get a value from. + The instance describing the field to create a getter for. + A delegate which gets the value of the given field. + The fieldInfo parameter is null. + + + + Creates a delegate which sets the value of a field. If emitting is not supported on the current platform, the delegate will use reflection to set the value. + + The type of the instance to set a value on. + The type of the field to set a value to. + The instance describing the field to create a setter for. + A delegate which sets the value of the given field. + The fieldInfo parameter is null. + + + + Creates a delegate which sets the value of a field on a weakly typed instance of a given type. If emitting is not supported on the current platform, the delegate will use reflection to set the value. + + The type of the field to set a value to. + Type of the instance. + The instance describing the field to create a setter for. + + A delegate which sets the value of the given field. + + The fieldInfo parameter is null. + Field cannot be static. + + + + Creates a delegate which sets the weakly typed value of a field on a weakly typed instance of a given type. If emitting is not supported on the current platform, the delegate will use reflection to set the value. + + Type of the instance. + The instance describing the field to create a setter for. + + A delegate which sets the value of the given field. + + The fieldInfo parameter is null. + Field cannot be static. + + + + Creates a delegate which gets the weakly typed value of a field from a weakly typed instance of a given type. If emitting is not supported on the current platform, the delegate will use reflection to get the value. + + The of the instance to get a value from. + The instance describing the field to create a getter for. + A delegate which gets the value of the given field. + The fieldInfo parameter is null. + + + + Creates a delegate which sets the weakly typed value of a property on a weakly typed instance of a given type. If emitting is not supported on the current platform, the delegate will use reflection to set the value. + + Type of the instance. + The instance describing the property to create a setter for. + + A delegate which sets the value of the given field. + + The fieldInfo parameter is null. + Property cannot be static. + + + + Creates a delegate which sets the value of a property. If emitting is not supported on the current platform, the delegate will use reflection to set the value. + + The type of the property to set a value to. + The instance describing the property to create a setter for. + A delegate which sets the value of the given property. + The propertyInfo parameter is null. + + + + Creates a delegate which gets the value of a property. If emitting is not supported on the current platform, the delegate will use reflection to get the value. + + The type of the property to get a value from. + The instance describing the property to create a getter for. + A delegate which gets the value of the given property. + The propertyInfo parameter is null. + + + + Creates a delegate which sets the value of a property. If emitting is not supported on the current platform, the delegate will use reflection to set the value. + + The type of the instance to set a value on. + The type of the property to set a value to. + The instance describing the property to create a setter for. + A delegate which sets the value of the given property. + The propertyInfo parameter is null. + + + + Creates a delegate which gets the value of a property. If emitting is not supported on the current platform, the delegate will use reflection to get the value. + + The type of the instance to get a value from. + The type of the property to get a value from. + The instance describing the property to create a getter for. + A delegate which gets the value of the given property. + The propertyInfo parameter is null. + + + + Creates a fast delegate method which calls a given parameterless instance method and returns the result. + + The type of the class which the method is on. + The type which is returned by the given method info. + The method info instance which is used. + A delegate which calls the method and returns the result, except it's hundreds of times faster than MethodInfo.Invoke. + + + + Creates a fast delegate method which calls a given parameterless static method. + + The method info instance which is used. + A delegate which calls the method and returns the result, except it's hundreds of times faster than MethodInfo.Invoke. + + + + Creates a fast delegate method which calls a given parameterless weakly typed instance method. + + The method info instance which is used. + A delegate which calls the method and returns the result, except it's hundreds of times faster than MethodInfo.Invoke. + + + + Not yet documented. + + + + + Creates a fast delegate method which calls a given weakly typed instance method with one argument and returns a value. + + The type of the result. + The type of the first argument. + The method info instance which is used. + + A delegate which calls the method and returns the result, except it's hundreds of times faster than MethodInfo.Invoke. + + methodInfo + + Given method ' + methodInfo.Name + ' is static when it has to be an instance method. + or + Given method ' + methodInfo.Name + ' must return type + typeof(TResult) + . + or + Given method ' + methodInfo.Name + ' must have exactly one parameter. + or + The first parameter of the method ' + methodInfo.Name + ' must be of type + typeof(TArg1) + . + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Creates a fast delegate method which calls a given parameterless instance method. + + The type of the class which the method is on. + The method info instance which is used. + A delegate which calls the method and returns the result, except it's hundreds of times faster than MethodInfo.Invoke. + + + + Creates a fast delegate method which calls a given instance method with a given argument. + + The type of the class which the method is on. + The type of the argument with which to call the method. + The method info instance which is used. + A delegate which calls the method and returns the result, except it's hundreds of times faster than MethodInfo.Invoke. + + + + This class encapsulates common combinations. + + + + + Search criteria encompassing all public and non-public members, including base members. + Note that you also need to specify either the Instance or Static flag. + + + + + Search criteria encompassing all public instance members, including base members. + + + + + Search criteria encompassing all non-public instance members, including base members. + + + + + Search criteria encompassing all public and non-public instance members, including base members. + + + + + Search criteria encompassing all public static members, including base members. + + + + + Search criteria encompassing all non-public static members, including base members. + + + + + Search criteria encompassing all public and non-public static members, including base members. + + + + + Search criteria encompassing all public instance members, excluding base members. + + + + + Search criteria encompassing all non-public instance members, excluding base members. + + + + + Search criteria encompassing all public and non-public instance members, excluding base members. + + + + + Search criteria encompassing all public static members, excluding base members. + + + + + Search criteria encompassing all non-public static members, excluding base members. + + + + + Search criteria encompassing all public and non-public static members, excluding base members. + + + + + Search criteria encompassing all members, including base and static members. + + + + + Search criteria encompassing all members (public and non-public, instance and static), including base members. + + + + + + A GlobalConfig singleton, automatically created and saved as a ScriptableObject in the project at the specified path. + This only happens if the UnityEditor is present. If it's not, a non-persistent ScriptableObject is created at run-time. + + + Remember to locate the path within a resources folder if you want the config file to be loaded at runtime without the Unity editor being present. + + + The asset path is specified by defining a . If no attribute is defined it will be saved in the root assets folder. + + + + + [GlobalConfig("Assets/Resources/MyConfigFiles/")] + public class MyGlobalConfig : GlobalConfig<MyGlobalConfig> + { + public int MyGlobalVariable; + } + + void SomeMethod() + { + int value = MyGlobalConfig.Instance.MyGlobalVariable; + } + + + + + + Gets a value indicating whether this instance has instance loaded. + + + + + Gets the singleton instance. + + + + + Tries to load the singleton instance. + + + + + Opens the config in a editor window. This is currently only used internally by the Sirenix.OdinInspector.Editor assembly. + + + + + This attribute is used by classes deriving from GlobalConfig and specifies the asset path for the generated config file. + + + + + + + Gets the full asset path including Application.dataPath. Only relevant if IsInResourcesFolder is false. + + + + + Gets the relative asset path. Only relevant if IsInResourcesFolder is false. + + + + + Gets the resources path. Only relevant if IsInResourcesFolder is true. + + + + + Whether the config should be associated with an asset in the project. If false, no config asset will be generated or loaded, and a new "temporary" config instance will be created for every reload. This is true by default. + + + + + Gets a value indicating whether this asset is located within a resource folder. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The relative asset. Remember to locate the path within a resources folder if you want the config file to be loaded at runtime without the Unity Editor. + + + + + GUILayoutOptions is a handy utility that provides cached GUILayoutOpion arrays based on the wanted parameters. + + + + + Most GUILayout and EditorGUILayout methods takes an optional "params GUILayoutOption[]" parameter. + Each time you call this, an array is allocated generating garbage. + + + // Generates garbage: + GUILayout.Label(label, GUILayout.Label(label, GUILayout.Width(20), GUILayout.ExpandHeight(), GUILayout.MaxWidth(300))); + + // Does not generate garbage: + GUILayout.Label(label, GUILayout.Label(label, GUILayoutOptions.Width(20).ExpandHeight().MaxWidth(300))); + + + + + + An EmptyGUIOption[] array with a length of 0. + + + + + A GUILayoutOptions instance with an implicit operator to be converted to a GUILayoutOption[] array. + + + + + + Gets or creates the cached GUILayoutOption array based on the layout options specified. + + + + + Option passed to a control to give it an absolute width. + + + + + Option passed to a control to give it an absolute height. + + + + + Option passed to a control to specify a maximum height. + + + + + Option passed to a control to specify a maximum width. + + + + + Option passed to a control to specify a minimum height. + + + + + Option passed to a control to specify a minimum width. + + + + + Option passed to a control to allow or disallow vertical expansion. + + + + + Option passed to a control to allow or disallow horizontal expansion. + + + + + Determines whether the instance is equals another instance. + + + + + Returns a hash code for this instance. + + + + + Option passed to a control to give it an absolute width. + + + + + Option passed to a control to give it an absolute height. + + + + + Option passed to a control to specify a maximum height. + + + + + Option passed to a control to specify a maximum width. + + + + + Option passed to a control to specify a minimum width. + + + + + Option passed to a control to specify a minimum height. + + + + + Option passed to a control to allow or disallow vertical expansion. + + + + + Option passed to a control to allow or disallow horizontal expansion. + + + + + Immutable hashset wraps another hashset, and allows for reading the inner hashset, without the ability to change it. + + + + + Creates an immutable hashset around another hashset. + + + + + Returns true if the item is contained in the list. + + The item's value. + + + + Gets the enumerator. + + + + + Gets the enumerator. + + + + + Interface for immutable list. + + + + + Interface for generic immutable list. + + + + + Index accessor. + + + + + Immutable list wraps another list, and allows for reading the inner list, without the ability to change it. + + + + + Creates an immutable list around another list. + + + + + Number of items in the list. + + + + + Immutable list cannot be changed directly, so it's size is always fixed. + + + + + Immutable list are always readonly. + + + + + Returns true if the inner list is synchronized. + + + + + Gets the sync root object. + + + + + Index accessor. + + Index. + + + + Returns true if the item is contained in the list. + + The item's value. + + + + Copy the list to an array, + + Target array. + Index. + + + + Copy the list to an array, + + Target array. + Index. + + + + Gets an enumerator. + + + + + Get the index of a value. + + The item's value. + + + + Immutable list cannot be edited. + + Index. + + + + Immutable list cannot be edited. + + Index. + Item. + + + + Immutable list cannot be edited. + + Item. + + + + Immutable list cannot be edited. + + + + + Immutable list cannot be edited. + + Item. + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Immutable list wraps another list, and allows for reading the inner list, without the ability to change it. + + + + + Creates an immutable list around another list. + + + + + Number of items in the list. + + + + + Immutable list are always readonly. + + + + + Index accessor. + + Index. + + + + Returns true if the item is contained in the list. + + + + + Copies the list to an array. + + + + + Gets an enumerator. + + + + + Gets the index of an item. + + + + + Various list extension methods. + + + + + Increases or decrease the number of items in the list to the specified count. + + The list. + The new length. + + + + Increases or decrease the number of items in the list to the specified count. + + The list. + The new length. + Value of new elements. + + + + Increases or decrease the number of items in the list to the specified count. + + The list. + The new length. + + + + Increases or decrease the number of items in the list to the specified count. + + The list. + The new length. + Value of new elements. + + + + Collection of math function. + + + + + Distance from a point to a line. + + + + + Returns a smooth value between start and end based on t. + + First point. + Second point. + Position between 0 and 1. + + + + Returns a smooth value between start and end based on t. + + First point. + Second point. + Position between 0 and 1. + Number of interpolations to make. + + + + Returns the fractional of the value. + + The value to get the fractional of. + + + + Returns the fractional of the value. + + The value to get the fractional of. + + + + Returns the fractional of the value. + + The value to get the fractional of. + + + + Returns a value based on t, that bounces faster and faster. + + The value to bounce. + + + + Returns a smooth value between 0 and 1 based on t. + + Position between 0 and 1. + + + + Returns a smooth value between 0 and 1 based on t. + + Position between 0 and 1. + Number of interpolations to make. + + + + Returns an unclamped linear interpolation of two vectors. + + The first vector. + The second vector. + The interpolation factor. + + + + Returns an unclamped linear interpolation of two vectors. + + The first vector. + The second vector. + The interpolation factor. + + + + Returns a value that bounces between 0 and 1 based on value. + + The value to bounce. + + + + Returns a value that eases in elasticly. + + The value to ease in elasticly. + The amplitude. + The length. + + + + Pows each element of the vector. + + The vector. + The power. + + + + Returns a Vector2 with each element set to their respective sign. + + The vector to sign. + + + + Returns a Vector3 with each element set to their respective sign. + + The vector to sign. + + + + Returns a value that eases out elasticly. + + The value to ease out elasticly. + The amplitude. + The length. + + + + Returns a smooth value betweeen that peaks at t=0.5 and then comes back down again. + + A value between 0 and 1. + + + + Clamps the value of a Vector3. + + The vector to clamp. + The min value. + The max value. + + + + Clamps the value of a Vector2. + + The vector to clamp. + The min value. + The max value. + + + + Computes a hash for a byte array. + + The byte array. + + + + Gives a smooth path between a collection of points. + + The collection of point. + The current position in the path. 0 is at the start of the path, 1 is at the end of the path. + + + + Checks if two given lines intersect with one another and returns the intersection point (if + any) in an out parameter. + Source: http://stackoverflow.com/questions/3746274/line-intersection-with-aabb-rectangle. + Edited to implement Cohen-Sutherland type pruning for efficiency. + + Starting point of line a. + Ending point of line a. + Starting point of line b. + Ending point of line b. + + The out parameter which contains the intersection point if there was any. + + True if the two lines intersect, otherwise false. + + + + Returns the collision point between two infinite lines. + + + + + Distance from line to plane. + + Position of the plane. + Surface normal of the plane. + Origin of the line. + Line direction normal. + + + + Distance from ray to plane. + + The ray. + The plane. + + + + Rotates a Vector2 by an angle. + + The point to rotate. + The angle to rotate. + + + + Rotates a Vector2 around a point by an angle.. + + The point to rotate. + The point to rotate around. + The angle to rotate. + + + + Interpolates t between a and b to a value between 0 and 1 using a Hermite polynomial. + + The first value. + The second value. + The position value. + A smoothed value between 0 and 1. + + + + Interpolates t between a and b to a value between 0 and 1. + + The first value. + The second value. + The position value. + Linear value between 0 and 1. + + + + Wraps a value between min and max. + + The value to wrap. + The minimum value. + The maximum value. + + + + Wraps a value between min and max. + + The value to wrap. + The minimum value. + The maximum value. + + + + Wraps a value between min and max. + + The value to wrap. + The minimum value. + The maximum value. + + + + Rounds a number based on a mininum difference. + + The value to round. + The min difference. + The rounded value. + + + + Discards the least significant demicals. + + The value of insignificant decimals. + Value with significant decimals. + + + + Clamps and wraps an angle between two values. + + + + + Contains utilities for operating on arrays multi-dimentional arrays. + + + + + Inserts one column left of the specified column index. + + The type of the element. + Index of the column. + The array. + + + + Inserts one column right of the specified column index. + + The type of the element. + Index of the column. + The arr. + + + + Inserts one row above the specified row index. + + The type of the element. + The array. + The row index. + + + + Inserts one row below the specified row index. + + The type of the element. + The array. + Index of the row. + + + + Duplicates the column. + + The type of the element. + Index of the column. + The array. + + + + Duplicates the row. + + The type of the element. + The array. + Index of the row. + + + + Moves a column. + + The type of the element. + The array. + From column. + To column. + + + + Moves a row. + + The type of the element. + The array. + From row. + To row. + + + + Deletes a column. + + The type of the element. + The array. + Index of the column. + + + + Deletes the row. + + The type of the element. + The array. + Index of the row. + + + + Indicates a persistent assembly. + + + + + Provides a methods of representing imaginary fields which are unique to serialization. + + We aggregate the FieldInfo associated with this member and return a mangled form of the name. + + + + + + The default fake name separator string. + + + + + Initializes a new instance of the class. + + The field to alias. + The name prefix to use. + + + + Initializes a new instance of the class. + + The field to alias. + The name prefix to use. + The separator string to use. + + + + Gets the aliased field. + + + The aliased field. + + + + + Gets the module in which the type that declares the member represented by the current is defined. + + + + + Gets a value that identifies a metadata element. + + + + + Gets the name of the current member. + + + + + Gets the class that declares this member. + + + + + Gets the class object that was used to obtain this instance of MemberInfo. + + + + + Gets the type of the field. + + + The type of the field. + + + + + Gets a RuntimeFieldHandle, which is a handle to the internal metadata representation of a field. + + + + + Gets the attributes. + + + The attributes. + + + + + When overridden in a derived class, returns an array of all custom attributes applied to this member. + + True to search this member's inheritance chain to find the attributes; otherwise, false. This parameter is ignored for properties and events; see Remarks. + + An array that contains all the custom attributes applied to this member, or an array with zero elements if no attributes are defined. + + + + + When overridden in a derived class, returns an array of custom attributes applied to this member and identified by . + + The type of attribute to search for. Only attributes that are assignable to this type are returned. + True to search this member's inheritance chain to find the attributes; otherwise, false. This parameter is ignored for properties and events; see Remarks. + + An array of custom attributes applied to this member, or an array with zero elements if no attributes assignable to have been applied. + + + + + When overridden in a derived class, indicates whether one or more attributes of the specified type or of its derived types is applied to this member. + + The type of custom attribute to search for. The search includes derived types. + True to search this member's inheritance chain to find the attributes; otherwise, false. This parameter is ignored for properties and events; see Remarks. + + True if one or more instances of or any of its derived types is applied to this member; otherwise, false. + + + + + Gets the value of the field. + + The object instance to get the value from. + The value of the field. + + + + When overridden in a derived class, sets the value of the field supported by the given object. + + The object whose field value will be set. + The value to assign to the field. + A field of Binder that specifies the type of binding that is desired (for example, Binder.CreateInstance or Binder.ExactBinding). + A set of properties that enables the binding, coercion of argument types, and invocation of members through reflection. If is null, then Binder.DefaultBinding is used. + The software preferences of a particular culture. + + + + Provides a methods of representing aliased methods. + + In this case, what we're representing is a method on a parent class with the same name. + + We aggregate the MethodInfo associated with this member and return a mangled form of the name. + The name that we return is "parentname+methodName". + + + + + + The default fake name separator string. + + + + + Initializes a new instance of the class. + + The method to alias. + The name prefix to use. + + + + Initializes a new instance of the class. + + The method to alias. + The name prefix to use. + The separator string to use. + + + + Gets the aliased method. + + + The aliased method. + + + + + Gets the custom attributes for the return type. + + + + + Gets a handle to the internal metadata representation of a method. + + + + + Gets the attributes associated with this method. + + + + + Gets the class that declares this member. + + + + + Gets the name of the current member. + + + + + Gets the class object that was used to obtain this instance of MemberInfo. + + + + + When overridden in a derived class, returns the MethodInfo object for the method on the direct or indirect base class in which the method represented by this instance was first declared. + + + A MethodInfo object for the first implementation of this method. + + + + + When overridden in a derived class, returns an array of all custom attributes applied to this member. + + true to search this member's inheritance chain to find the attributes; otherwise, false. This parameter is ignored for properties and events; see Remarks. + + An array that contains all the custom attributes applied to this member, or an array with zero elements if no attributes are defined. + + + + + When overridden in a derived class, returns an array of custom attributes applied to this member and identified by . + + The type of attribute to search for. Only attributes that are assignable to this type are returned. + true to search this member's inheritance chain to find the attributes; otherwise, false. This parameter is ignored for properties and events; see Remarks. + + An array of custom attributes applied to this member, or an array with zero elements if no attributes assignable to have been applied. + + + + + When overridden in a derived class, returns the flags. + + + The MethodImplAttributes flags. + + + + + When overridden in a derived class, gets the parameters of the specified method or constructor. + + + An array of type ParameterInfo containing information that matches the signature of the method (or constructor) reflected by this MethodBase instance. + + + + + When overridden in a derived class, invokes the reflected method or constructor with the given parameters. + + The object on which to invoke the method or constructor. If a method is static, this argument is ignored. If a constructor is static, this argument must be null or an instance of the class that defines the constructor. + A bitmask that is a combination of 0 or more bit flags from . If is null, this parameter is assigned the value ; thus, whatever you pass in is ignored. + An object that enables the binding, coercion of argument types, invocation of members, and retrieval of MemberInfo objects via reflection. If is null, the default binder is used. + An argument list for the invoked method or constructor. This is an array of objects with the same number, order, and type as the parameters of the method or constructor to be invoked. If there are no parameters, this should be null.If the method or constructor represented by this instance takes a ByRef parameter, there is no special attribute required for that parameter in order to invoke the method or constructor using this function. Any object in this array that is not explicitly initialized with a value will contain the default value for that object type. For reference-type elements, this value is null. For value-type elements, this value is 0, 0.0, or false, depending on the specific element type. + An instance of CultureInfo used to govern the coercion of types. If this is null, the CultureInfo for the current thread is used. (This is necessary to convert a String that represents 1000 to a Double value, for example, since 1000 is represented differently by different cultures.) + + An Object containing the return value of the invoked method, or null in the case of a constructor, or null if the method's return type is void. Before calling the method or constructor, Invoke checks to see if the user has access permission and verifies that the parameters are valid.CautionElements of the array that represent parameters declared with the ref or out keyword may also be modified. + + + + + When overridden in a derived class, indicates whether one or more attributes of the specified type or of its derived types is applied to this member. + + The type of custom attribute to search for. The search includes derived types. + true to search this member's inheritance chain to find the attributes; otherwise, false. This parameter is ignored for properties and events; see Remarks. + + true if one or more instances of or any of its derived types is applied to this member; otherwise, false. + + + + + Provides a methods of representing imaginary properties which are unique to serialization. + + We aggregate the PropertyInfo associated with this member and return a mangled form of the name. + + + + + + The default fake name separator string. + + + + + Initializes a new instance of the class. + + The property to alias. + The name prefix to use. + + + + Initializes a new instance of the class. + + The property to alias. + The name prefix to use. + The separator string to use. + + + + Not yet documented. + + + + + Gets the module in which the type that declares the member represented by the current is defined. + + + + + Gets a value that identifies a metadata element. + + + + + Gets the name of the current member. + + + + + Gets the class that declares this member. + + + + + Gets the class object that was used to obtain this instance of MemberInfo. + + + + + Gets the type of the property. + + + The type of the property. + + + + + Gets the attributes. + + + The attributes. + + + + + Gets a value indicating whether this instance can read. + + + true if this instance can read; otherwise, false. + + + + + Gets a value indicating whether this instance can write. + + + true if this instance can write; otherwise, false. + + + + + When overridden in a derived class, returns an array of all custom attributes applied to this member. + + True to search this member's inheritance chain to find the attributes; otherwise, false. This parameter is ignored for properties and events; see Remarks. + + An array that contains all the custom attributes applied to this member, or an array with zero elements if no attributes are defined. + + + + + When overridden in a derived class, returns an array of custom attributes applied to this member and identified by . + + The type of attribute to search for. Only attributes that are assignable to this type are returned. + True to search this member's inheritance chain to find the attributes; otherwise, false. This parameter is ignored for properties and events; see Remarks. + + An array of custom attributes applied to this member, or an array with zero elements if no attributes assignable to have been applied. + + + + + When overridden in a derived class, indicates whether one or more attributes of the specified type or of its derived types is applied to this member. + + The type of custom attribute to search for. The search includes derived types. + True to search this member's inheritance chain to find the attributes; otherwise, false. This parameter is ignored for properties and events; see Remarks. + + True if one or more instances of or any of its derived types is applied to this member; otherwise, false. + + + + + Returns an array whose elements reflect the public and, if specified, non-public get, set, and other accessors of the property reflected by the current instance. + + Indicates whether non-public methods should be returned in the MethodInfo array. true if non-public methods are to be included; otherwise, false. + + An array of objects whose elements reflect the get, set, and other accessors of the property reflected by the current instance. If is true, this array contains public and non-public get, set, and other accessors. If is false, this array contains only public get, set, and other accessors. If no accessors with the specified visibility are found, this method returns an array with zero (0) elements. + + + + + When overridden in a derived class, returns the public or non-public get accessor for this property. + + Indicates whether a non-public get accessor should be returned. true if a non-public accessor is to be returned; otherwise, false. + + A MethodInfo object representing the get accessor for this property, if is true. Returns null if is false and the get accessor is non-public, or if is true but no get accessors exist. + + + + + Gets the index parameters of the property. + + The index parameters of the property. + + + + When overridden in a derived class, returns the set accessor for this property. + + Indicates whether the accessor should be returned if it is non-public. true if a non-public accessor is to be returned; otherwise, false. + + Value Condition A object representing the Set method for this property. The set accessor is public.-or- is true and the set accessor is non-public. null is true, but the property is read-only.-or- is false and the set accessor is non-public.-or- There is no set accessor. + + + + + Gets the value of the property on the given instance. + + The object to invoke the getter on. + The to invoke with. + The binder to use. + The indices to use. + The culture to use. + The value of the property on the given instance. + + + + Sets the value of the property on the given instance. + + The object to set the value on. + The value to set. + The to invoke with. + The binder to use. + The indices to use. + The culture to use. + + + + Paths to Sirenix assets. + + + + + Path to Odin Inspector folder. + + + + + Path to Sirenix assets folder. + + + + + Path to Sirenix folder. + + + + + Path to Sirenix assemblies. + + + + + Path to Odin Inspector resources folder. + + + + + Path to Odin Inspector configuration folder. + + + + + Path to Odin Inspector resources configuration folder. + + + + + Path to Odin Inspector temporary folder. + + + + + This attribute is used by classes deriving from GlobalConfig and specifies the menu item path for the preference window and the asset path for the generated config file. + The scriptable object created will be located at the OdinEditorConfigs path unless other is specified. + Classes implementing this attribute will be part of the Odin Preferences window. + + + + + + Initializes a new instance of the class. + + + + + This attribute is used by classes deriving from GlobalConfig and specifies the menu item path for the preference window and the asset path for the generated config file. + The scriptable object created will be located at the OdinResourcesConigs path unless other is specified. + Classes implementing this attribute will be part of the Odin Preferences window. + + + + + + Initializes a new instance of the class. + + + + + Not yet documented. + + + + + Not yet documented. + + Not yet documented. + Not yet documented. + Not yet documented. + + + + Compares two strings in a number-aware manner, IE, "[2] Foo" is considered to come before "[10] Bar". + + + + + Utility class indicating current Unity version. + + + + + Tests current Unity version is equal or greater. + + Minimum major version. + Minimum minor version. + true if the current Unity version is greater. Otherwise false. + + + + The current Unity version major. + + + + + The current Unity version minor. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Not yet documented. + + + + + Compares objects by reference only, ignoring equality operators completely. This is used by the property tree reference dictionaries to keep track of references. + + + + + A default, cached instance of this generic variant of the reference equality comparer. + + + + + Returns true if the object references are equal. + + + + + Returns the result of the object's own GetHashCode method. + + + + diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.Utilities.xml.meta b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.Utilities.xml.meta new file mode 100644 index 00000000..8b21895d --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/Sirenix.Utilities.xml.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4873f2a8bdae42baa0406e8a6136096f +timeCreated: 1488828285 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/link.xml b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/link.xml new file mode 100644 index 00000000..1df8f847 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/link.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/link.xml.meta b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/link.xml.meta new file mode 100644 index 00000000..4dfefc64 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Assemblies/link.xml.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 2373d9909155cae468605be57f69461c +timeCreated: 1613046886 +TextScriptImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Demos.meta b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Demos.meta new file mode 100644 index 00000000..6ea179b6 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Demos.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ea9123c061588dc47b848832fb85817b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Demos/Custom Attribute Processors.unitypackage.meta b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Demos/Custom Attribute Processors.unitypackage.meta new file mode 100644 index 00000000..7c434554 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Demos/Custom Attribute Processors.unitypackage.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f597f19f656ba56eae4f6a3a7cc528f4 +timeCreated: 1488828285 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Demos/Custom Drawers.unitypackage.meta b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Demos/Custom Drawers.unitypackage.meta new file mode 100644 index 00000000..0843d08e --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Demos/Custom Drawers.unitypackage.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 48e08dc33330d11e9d4a1b246c52e4f6 +timeCreated: 1488828285 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Demos/Editor Windows.unitypackage.meta b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Demos/Editor Windows.unitypackage.meta new file mode 100644 index 00000000..aac87916 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Demos/Editor Windows.unitypackage.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ed09910c0094cb27be8f3ca264680da3 +timeCreated: 1488828285 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Demos/Sample - RPG Editor.unitypackage.meta b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Demos/Sample - RPG Editor.unitypackage.meta new file mode 100644 index 00000000..b84d66f9 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Demos/Sample - RPG Editor.unitypackage.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cc355dd4cf1e6173beaeb22c2858cbe1 +timeCreated: 1488828285 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector.meta b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector.meta new file mode 100644 index 00000000..0213108e --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: abce34fc4c84f7e40a26a9d11d1c578a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Assets.meta b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Assets.meta new file mode 100644 index 00000000..f022e796 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Assets.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3d38ee25ee419b24f8af63a1c81d4b5e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Assets/Editor.meta b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Assets/Editor.meta new file mode 100644 index 00000000..676eecc9 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Assets/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 00f94164baa814b40a7ec8a589114511 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Assets/Editor/ConfigData.bytes b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Assets/Editor/ConfigData.bytes new file mode 100644 index 0000000000000000000000000000000000000000..1a63707e7ca56f06d78c7833892fa8f566cc1767 GIT binary patch literal 1616 zcmd^^*A+Nv^!if*S%+8Fp!UhR0z+pHDN8|gt0j(S% zIYDAaQ(awMTV3_nUvqXA`FB!0L3tO4*vA~7;wy5F7Z(NAiewO6 z=#X>tSeuwQDbbe{MZbpAZ4A+3Yq8esR{#040}pZ7fX+6(Th!`>x)2k=^wj|hwE zz*^!}#py}$lr~(&m$-@7am&#m?&3N=$H&yX8vTo)gZ6Yw`QttYI~pd}YJ=!Vxe zrzCpx8H?72D^06>aMOC?54@7ZxRRkxw8tj>lgo1%DktP-b7DXEv~rUjb>aX0hY z*U41R36rsY&+#3H$CEK}x-PyWO>9ajNs5YKCTQ64R}ovR8?5@t%OQE?q{atN#=r7G i?5Mc|c0Wc|EN^nv(s|~c@UX2FSU5Z)C!3T^==o0pUZ?f| literal 0 HcmV?d00001 diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Assets/Editor/ConfigData.bytes.meta b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Assets/Editor/ConfigData.bytes.meta new file mode 100644 index 00000000..18f2e826 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Assets/Editor/ConfigData.bytes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 90eaa0dc28c1934408dc1c02e13a507f +timeCreated: 1628274352 +licenseType: Store +TextScriptImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Assets/Editor/Odin Inspector Logo.png b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Assets/Editor/Odin Inspector Logo.png new file mode 100644 index 00000000..989c93ab --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Assets/Editor/Odin Inspector Logo.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:922151e2477ced835f70aee25257590cbf2269840bc422f8e4ae2dd64769e723 +size 23267 diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Assets/Editor/Odin Inspector Logo.png.meta b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Assets/Editor/Odin Inspector Logo.png.meta new file mode 100644 index 00000000..be9083b7 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Assets/Editor/Odin Inspector Logo.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: a78bffbeb81b48ae9ec71ad7969613e5 +timeCreated: 1493397482 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 1 + correctGamma: 1 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 1 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: 1 + aniso: 16 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 5 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Assets/Editor/OdinPathLookup.asset b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Assets/Editor/OdinPathLookup.asset new file mode 100644 index 00000000..a8de665b --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Assets/Editor/OdinPathLookup.asset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2b0d18de7b6cb370b329fac072637a4b149e3959746131178b25dd88fbaf7527 +size 382 diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Assets/Editor/OdinPathLookup.asset.meta b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Assets/Editor/OdinPathLookup.asset.meta new file mode 100644 index 00000000..8630ea77 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Assets/Editor/OdinPathLookup.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 08379ccefc05200459f90a1c0711a340 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Config.meta b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Config.meta new file mode 100644 index 00000000..6ddedc94 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Config.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d7e82093d3725a84aadfd550f5cd3a5b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Config/Editor.meta b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Config/Editor.meta new file mode 100644 index 00000000..e7f4fa09 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Config/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a8039267ae28c4044a151c0d43f87ed9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Config/Editor/GeneralDrawerConfig.asset b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Config/Editor/GeneralDrawerConfig.asset new file mode 100644 index 00000000..4f9d2db0 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Config/Editor/GeneralDrawerConfig.asset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2c25e67bf91a246681e451c8bfbb186727b919e446caa8d312d432b278f5681f +size 410 diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Config/Editor/GeneralDrawerConfig.asset.meta b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Config/Editor/GeneralDrawerConfig.asset.meta new file mode 100644 index 00000000..b2ed37b2 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Config/Editor/GeneralDrawerConfig.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 67219c17eb0bef84381c9549796340a2 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Config/Editor/InspectorConfig.asset b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Config/Editor/InspectorConfig.asset new file mode 100644 index 00000000..2e390497 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Config/Editor/InspectorConfig.asset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b5a4d244c88a943ded01678a6bcd9526ac86eb74c015c8e5e0276e3dbc44c4c1 +size 528 diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Config/Editor/InspectorConfig.asset.meta b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Config/Editor/InspectorConfig.asset.meta new file mode 100644 index 00000000..5eb89b1f --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Config/Editor/InspectorConfig.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b2832e56974503744a802a515ab3a20a +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Config/Editor/OdinModuleConfig.asset b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Config/Editor/OdinModuleConfig.asset new file mode 100644 index 00000000..637daf13 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Config/Editor/OdinModuleConfig.asset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:574124d20ef67de2bbc0eee3bcbefde2c3da213ee669a582b546fdd1543ad444 +size 482 diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Config/Editor/OdinModuleConfig.asset.meta b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Config/Editor/OdinModuleConfig.asset.meta new file mode 100644 index 00000000..46f1290a --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Config/Editor/OdinModuleConfig.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7c8f8d88df7cd8d449a6f24ea9bba65b +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Config/Resources.meta b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Config/Resources.meta new file mode 100644 index 00000000..ff0f993a --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Config/Resources.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 22373ad1039295b47bed2e71dadf2153 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Config/Resources/Sirenix.meta b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Config/Resources/Sirenix.meta new file mode 100644 index 00000000..17c7a237 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Config/Resources/Sirenix.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5b01b3700eeaa7a40b704579cc5726ab +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Config/Resources/Sirenix/GlobalSerializationConfig.asset b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Config/Resources/Sirenix/GlobalSerializationConfig.asset new file mode 100644 index 00000000..117c0c58 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Config/Resources/Sirenix/GlobalSerializationConfig.asset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e20058755b758dbf40564d34f1b680a84ab6fb47b389ac68af95670e91bb04ed +size 694 diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Config/Resources/Sirenix/GlobalSerializationConfig.asset.meta b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Config/Resources/Sirenix/GlobalSerializationConfig.asset.meta new file mode 100644 index 00000000..f4b7f3f9 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Config/Resources/Sirenix/GlobalSerializationConfig.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c47813193d8303e4aaf4446239d8f44a +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Modules.meta b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Modules.meta new file mode 100644 index 00000000..debdfc7c --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Modules.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 15c43f6258d5e2744a11580fe86101e6 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Modules/Unity.Entities.data b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Modules/Unity.Entities.data new file mode 100644 index 0000000000000000000000000000000000000000..abe322d83cb594eedb0f19c624816260ebaa4ab7 GIT binary patch literal 41801 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 literal 0 HcmV?d00001 diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Modules/Unity.Entities.data.meta b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Modules/Unity.Entities.data.meta new file mode 100644 index 00000000..a5f9701c --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Modules/Unity.Entities.data.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 728df0e3465c1a148b83053a3f31d489 +timeCreated: 1573836981 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Modules/Unity.Localization.data b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Modules/Unity.Localization.data new file mode 100644 index 0000000000000000000000000000000000000000..4f68446090033044f2f9fde0523a78683a05ead6 GIT binary patch literal 8567 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 r-aWa!<-mt+j&9v@Mt4?McHt_YU-93s#o literal 0 HcmV?d00001 diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Modules/Unity.Mathematics.data.meta b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Modules/Unity.Mathematics.data.meta new file mode 100644 index 00000000..cc09326c --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Modules/Unity.Mathematics.data.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4866e740a22eb1e49b1603b051e4d92c +timeCreated: 1573836980 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts.meta b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts.meta new file mode 100644 index 00000000..09e96bb8 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8517088b338a89e48a32261e3ebbb7a0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor.meta b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor.meta new file mode 100644 index 00000000..7f92ac27 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9438ede469a708a41975622dac3d5cd5 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/AssemblyImportSettingsAutomation.cs b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/AssemblyImportSettingsAutomation.cs new file mode 100644 index 00000000..0a409894 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/AssemblyImportSettingsAutomation.cs @@ -0,0 +1,134 @@ +//----------------------------------------------------------------------- +// +// Copyright (c) Sirenix IVS. All rights reserved. +// +//----------------------------------------------------------------------- + +#if UNITY_EDITOR && UNITY_5_6_OR_NEWER + +namespace Sirenix.OdinInspector.Editor +{ + using System.IO; + using System.Collections.Generic; + using Sirenix.Serialization.Utilities.Editor; + using Sirenix.Utilities; + using UnityEditor; + using UnityEditor.Build; + +#if UNITY_2018_1_OR_NEWER + using UnityEditor.Build.Reporting; +#endif + + public class AssemblyImportSettingsAutomation : +#if UNITY_2018_1_OR_NEWER + IPreprocessBuildWithReport +#else + IPreprocessBuild +#endif + { + + public int callbackOrder { get { return -1500; } } + + private static void ConfigureImportSettings() + { + if (EditorOnlyModeConfig.Instance.IsEditorOnlyModeEnabled() || ImportSettingsConfig.Instance.AutomateBeforeBuild == false) + { + return; + } + + var assemblyDir = new DirectoryInfo(SirenixAssetPaths.SirenixAssembliesPath).FullName; + var projectAssetsPath = Directory.GetCurrentDirectory().TrimEnd('\\', '/'); + + var isPackage = PathUtilities.HasSubDirectory(new DirectoryInfo(projectAssetsPath), new DirectoryInfo(assemblyDir)) == false; + + var aotDirPath = assemblyDir + "NoEmitAndNoEditor/"; + var jitDirPath = assemblyDir + "NoEditor/"; + + var aotDir = new DirectoryInfo(aotDirPath); + var jitDir = new DirectoryInfo(jitDirPath); + + var aotAssemblies = new List(); + var jitAssemblies = new List(); + + foreach (var file in aotDir.GetFiles("*.dll")) + { + string path = file.FullName; + if (isPackage) + { + path = SirenixAssetPaths.SirenixAssembliesPath.TrimEnd('\\', '/') + "/" + path.Substring(assemblyDir.Length); + } + else + { + path = path.Substring(projectAssetsPath.Length + 1); + } + + aotAssemblies.Add(path); + } + + foreach (var file in jitDir.GetFiles("*.dll")) + { + string path = file.FullName; + if (isPackage) + { + path = SirenixAssetPaths.SirenixAssembliesPath.TrimEnd('\\', '/') + "/" + path.Substring(assemblyDir.Length); + } + else + { + path = path.Substring(projectAssetsPath.Length + 1); + } + + jitAssemblies.Add(path); + } + + AssetDatabase.StartAssetEditing(); + try + { + var platform = EditorUserBuildSettings.activeBuildTarget; + + if (AssemblyImportSettingsUtilities.IsJITSupported( + platform, + AssemblyImportSettingsUtilities.GetCurrentScriptingBackend(), + AssemblyImportSettingsUtilities.GetCurrentApiCompatibilityLevel())) + { + ApplyImportSettings(platform, aotAssemblies.ToArray(), OdinAssemblyImportSettings.ExcludeFromAll); + ApplyImportSettings(platform, jitAssemblies.ToArray(), OdinAssemblyImportSettings.IncludeInBuildOnly); + } + else + { + ApplyImportSettings(platform, aotAssemblies.ToArray(), OdinAssemblyImportSettings.IncludeInBuildOnly); + ApplyImportSettings(platform, jitAssemblies.ToArray(), OdinAssemblyImportSettings.ExcludeFromAll); + } + } + finally + { + AssetDatabase.StopAssetEditing(); + } + } + + private static void ApplyImportSettings(BuildTarget platform, string[] assemblyPaths, OdinAssemblyImportSettings importSettings) + { + for (int i = 0; i < assemblyPaths.Length; i++) + { + AssemblyImportSettingsUtilities.SetAssemblyImportSettings(platform, assemblyPaths[i], importSettings); + } + } + +#if UNITY_2018_1_OR_NEWER + + void IPreprocessBuildWithReport.OnPreprocessBuild(BuildReport report) + { + ConfigureImportSettings(); + } + +#else + + void IPreprocessBuild.OnPreprocessBuild(BuildTarget target, string path) + { + ConfigureImportSettings(); + } + +#endif + } +} + +#endif // UNITY_EDITOR && UNITY_5_6_OR_NEWER \ No newline at end of file diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/AssemblyImportSettingsAutomation.cs.meta b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/AssemblyImportSettingsAutomation.cs.meta new file mode 100644 index 00000000..55dc9d8e --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/AssemblyImportSettingsAutomation.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: d4d815a2bfd253342bfd6542c08315fb +timeCreated: 1533296750 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/BuildAOTAutomation.cs b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/BuildAOTAutomation.cs new file mode 100644 index 00000000..88b438b6 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/BuildAOTAutomation.cs @@ -0,0 +1,79 @@ +//----------------------------------------------------------------------- +// +// Copyright (c) Sirenix IVS. All rights reserved. +// +//----------------------------------------------------------------------- + +#if UNITY_EDITOR && UNITY_5_6_OR_NEWER + +namespace Sirenix.Serialization.Internal +{ + using Sirenix.Serialization; + using UnityEditor; + using UnityEditor.Build; + using System.IO; + using System; + +#if UNITY_2018_1_OR_NEWER + + using UnityEditor.Build.Reporting; + +#endif + +#if UNITY_2018_1_OR_NEWER + public class PreBuildAOTAutomation : IPreprocessBuildWithReport +#else + public class PreBuildAOTAutomation : IPreprocessBuild +#endif + { + public int callbackOrder { get { return -1000; } } + + public void OnPreprocessBuild(BuildTarget target, string path) + { + if (AOTGenerationConfig.Instance.ShouldAutomationGeneration(target)) + { + AOTGenerationConfig.Instance.ScanProject(); + AOTGenerationConfig.Instance.GenerateDLL(); + } + } + +#if UNITY_2018_1_OR_NEWER + + public void OnPreprocessBuild(BuildReport report) + { + this.OnPreprocessBuild(report.summary.platform, report.summary.outputPath); + } + +#endif + } + +#if UNITY_2018_1_OR_NEWER + public class PostBuildAOTAutomation : IPostprocessBuildWithReport +#else + public class PostBuildAOTAutomation : IPostprocessBuild +#endif + { + public int callbackOrder { get { return -1000; } } + + public void OnPostprocessBuild(BuildTarget target, string path) + { + if (AOTGenerationConfig.Instance.DeleteDllAfterBuilds && AOTGenerationConfig.Instance.ShouldAutomationGeneration(target)) + { + Directory.Delete(AOTGenerationConfig.Instance.AOTFolderPath, true); + File.Delete(AOTGenerationConfig.Instance.AOTFolderPath.TrimEnd('/', '\\') + ".meta"); + AssetDatabase.Refresh(); + } + } + +#if UNITY_2018_1_OR_NEWER + + public void OnPostprocessBuild(BuildReport report) + { + this.OnPostprocessBuild(report.summary.platform, report.summary.outputPath); + } + +#endif + } +} + +#endif // UNITY_EDITOR && UNITY_5_6_OR_NEWER \ No newline at end of file diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/BuildAOTAutomation.cs.meta b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/BuildAOTAutomation.cs.meta new file mode 100644 index 00000000..b7bf4433 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/BuildAOTAutomation.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: dd3672808cdf76541aa3d383c87a5616 +timeCreated: 1514538277 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/EnsureOdinInspectorDefine.cs b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/EnsureOdinInspectorDefine.cs new file mode 100644 index 00000000..bb77c1cb --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/EnsureOdinInspectorDefine.cs @@ -0,0 +1,121 @@ +//----------------------------------------------------------------------- +// +// Copyright (c) Sirenix IVS. All rights reserved. +// +//----------------------------------------------------------------------- + +#if UNITY_EDITOR + +namespace Sirenix.Utilities +{ + using System; + using System.Linq; + using UnityEditor; + + /// + /// Defines the ODIN_INSPECTOR symbol. + /// + internal static class EnsureOdinInspectorDefine + { + private static readonly string[] DEFINES = new string[] { "ODIN_INSPECTOR", "ODIN_INSPECTOR_3" }; + + [InitializeOnLoadMethod] + private static void EnsureScriptingDefineSymbol() + { + var currentTarget = EditorUserBuildSettings.selectedBuildTargetGroup; + + if (currentTarget == BuildTargetGroup.Unknown) + { + return; + } + + var definesString = PlayerSettings.GetScriptingDefineSymbolsForGroup(currentTarget).Trim(); + var defines = definesString.Split(';'); + + bool changed = false; + + foreach (var define in DEFINES) + { + if (defines.Contains(define) == false) + { + if (definesString.EndsWith(";", StringComparison.InvariantCulture) == false) + { + definesString += ";"; + } + + definesString += define; + changed = true; + } + } + + if (changed) + { + PlayerSettings.SetScriptingDefineSymbolsForGroup(currentTarget, definesString); + } + } + } + + // + // If you have a project where only some users have Odin, and you want to utilize the ODIN_INSPECTOR + // define symbol. Then, in order to only define the symbol for those with Odin, you can delete this script, + // which prevent ODIN_INSPECTOR from being added to the Unity's player settings. + // + // And instead automatically add the ODIN_INSPECTOR define to an mcs.rsp file if Odin exists using the script below. + // You can then ignore the mcs.rsp file in source control. + // + // Remember to manually remove the ODIN_INSPECTOR define symbol in player settings after removing this script. + // + // static class AddOdinInspectorDefineIfOdinExist + // { + // private const string ODIN_MCS_DEFINE = "-define:ODIN_INSPECTOR"; + // + // [InitializeOnLoadMethod] + // private static void AddOrRemoveOdinDefine() + // { + // var addDefine = AppDomain.CurrentDomain.GetAssemblies().Any(x => x.FullName.StartsWith("Sirenix.OdinInspector.Editor")); + // + // #if ODIN_INSPECTOR + // var hasDefine = true; + // #else + // var hasDefine = false; + // #endif + // + // if (addDefine == hasDefine) + // { + // return; + // } + // + // var mcsPath = Path.Combine(Application.dataPath, "mcs.rsp"); + // var hasMcsFile = File.Exists(mcsPath); + // + // if (addDefine) + // { + // var lines = hasMcsFile ? File.ReadAllLines(mcsPath).ToList() : new List(); + // if (!lines.Any(x => x.Trim() == ODIN_MCS_DEFINE)) + // { + // lines.Add(ODIN_MCS_DEFINE); + // File.WriteAllLines(mcsPath, lines.ToArray()); + // AssetDatabase.Refresh(); + // } + // } + // else if (hasMcsFile) + // { + // var linesWithoutOdinDefine = File.ReadAllLines(mcsPath).Where(x => x.Trim() != ODIN_MCS_DEFINE).ToArray(); + // + // if (linesWithoutOdinDefine.Length == 0) + // { + // // Optional - Remove the mcs file instead if it doesn't contain any lines. + // File.Delete(mcsPath); + // } + // else + // { + // File.WriteAllLines(mcsPath, linesWithoutOdinDefine); + // } + // + // AssetDatabase.Refresh(); + // } + // } + // } +} + +#endif // UNITY_EDITOR \ No newline at end of file diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/EnsureOdinInspectorDefine.cs.meta b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/EnsureOdinInspectorDefine.cs.meta new file mode 100644 index 00000000..1ab8a33d --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/EnsureOdinInspectorDefine.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: d9763cb398cf6e146b74d6b7bac2fe50 +timeCreated: 1519909294 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/FixBrokenUnityObjectWrapperDrawer.cs b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/FixBrokenUnityObjectWrapperDrawer.cs new file mode 100644 index 00000000..cf30f7d2 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/FixBrokenUnityObjectWrapperDrawer.cs @@ -0,0 +1,208 @@ +//----------------------------------------------------------------------- +// +// Copyright (c) Sirenix IVS. All rights reserved. +// +//----------------------------------------------------------------------- + +#if UNITY_EDITOR && UNITY_2018_3_OR_NEWER +#pragma warning disable + +namespace Sirenix.OdinInspector.Editor.Drawers +{ + using Sirenix.OdinInspector; + using Sirenix.OdinInspector.Editor; + using Sirenix.Utilities; + using Sirenix.Utilities.Editor; + using System.Linq; + using UnityEditor; + using UnityEngine; + + [DrawerPriority(0.001, 0, 0)] + public class FixBrokenUnityObjectWrapperDrawer : OdinValueDrawer, IDefinesGenericMenuItems + where T : UnityEngine.Component + { + private const string AUTO_FIX_PREFS_KEY = "TemporarilyBrokenUnityObjectWrapperDrawer.autoFix"; + + private bool isBroken = false; + private T realWrapperInstance; + private bool allowSceneViewObjects; + private static bool autoFix; + + protected override void Initialize() + { + this.allowSceneViewObjects = this.ValueEntry.Property.GetAttribute() == null; + autoFix = EditorPrefs.HasKey(AUTO_FIX_PREFS_KEY); + } + + protected override void DrawPropertyLayout(GUIContent label) + { + if (!(this.ValueEntry.ValueState == PropertyValueState.NullReference || this.ValueEntry.ValueState == PropertyValueState.ReferenceValueConflict)) + { + this.CallNextDrawer(label); + return; + } + + if (Event.current.type == EventType.Layout) + { + this.isBroken = false; + var count = this.ValueEntry.ValueCount; + for (int i = 0; i < count; i++) + { + var component = this.ValueEntry.Values[i]; + + if (ComponentIsBroken(component, ref this.realWrapperInstance)) + { + this.isBroken = true; + break; + } + } + + if (this.isBroken && autoFix) + { + this.isBroken = false; + + for (int i = 0; i < this.ValueEntry.ValueCount; i++) + { + T fixedComponent = null; + if (ComponentIsBroken(this.ValueEntry.Values[i], ref fixedComponent) && fixedComponent) + { + (this.ValueEntry as IValueEntryActualValueSetter).SetActualValue(i, fixedComponent); + } + } + + this.ValueEntry.Update(); + } + } + + if (!this.isBroken) + { + this.CallNextDrawer(label); + return; + } + + var rect = EditorGUILayout.GetControlRect(label != null); + var btnRect = rect.AlignRight(20); + var controlRect = rect.SetXMax(btnRect.xMin - 5); + + object newInstance = null; + + EditorGUI.BeginChangeCheck(); + { + if (this.ValueEntry.BaseValueType.IsInterface) + { + newInstance = SirenixEditorFields.PolymorphicObjectField(controlRect, + label, + this.realWrapperInstance, + this.ValueEntry.BaseValueType, + this.allowSceneViewObjects); + } + else + { + newInstance = SirenixEditorFields.UnityObjectField( + controlRect, + label, + this.realWrapperInstance, + this.ValueEntry.BaseValueType, + this.allowSceneViewObjects) as Component; + } + } + if (EditorGUI.EndChangeCheck()) + { + this.ValueEntry.WeakSmartValue = newInstance; + } + + if (GUI.Button(btnRect, " ", EditorStyles.miniButton)) + { + var popup = new FixBrokenUnityObjectWrapperPopup(this.ValueEntry); + OdinEditorWindow.InspectObjectInDropDown(popup, 300); + } + + if (Event.current.type == EventType.Repaint) + { + GUI.DrawTexture(btnRect, EditorIcons.ConsoleWarnicon, ScaleMode.ScaleToFit); + } + } + + private static bool ComponentIsBroken(T component, ref T realInstance) + { + var uObj = component; + var oObj = (object)uObj; + + if (oObj != null && uObj == null) + { + var instanceId = uObj.GetInstanceID(); + if (AssetDatabase.Contains(instanceId)) + { + var path = AssetDatabase.GetAssetPath(instanceId); + var realWrapper = AssetDatabase.LoadAllAssetsAtPath(path).FirstOrDefault(n => n.GetInstanceID() == instanceId) as T; + if (realWrapper) + { + realInstance = realWrapper; + return true; + } + } + } + + return false; + } + + public void PopulateGenericMenu(InspectorProperty property, GenericMenu genericMenu) + { + if (EditorPrefs.HasKey(AUTO_FIX_PREFS_KEY)) + { + genericMenu.AddItem(new GUIContent("Disable auto-fix of broken prefab instance references"), false, (x) => + { + EditorPrefs.DeleteKey(AUTO_FIX_PREFS_KEY); + autoFix = false; + }, null); + } + } + + [TypeInfoBox("This asset reference is temporarily broken until the next reload, because of an error in Unity where the C# wrapper object of a prefab asset is destroyed when changes are made to that prefab asset. This error has been reported to Unity.\n\nMeanwhile, Odin can fix this for you by getting a new, valid wrapper object from the asset database and replacing the broken wrapper instance with the new one.")] + private class FixBrokenUnityObjectWrapperPopup + { + private IPropertyValueEntry valueEntry; + + public FixBrokenUnityObjectWrapperPopup(IPropertyValueEntry valueEntry) + { + this.valueEntry = valueEntry; + } + + [HorizontalGroup, Button(ButtonSizes.Large)] + public void FixItThisTime() + { + for (int i = 0; i < this.valueEntry.ValueCount; i++) + { + var localI = i; + T fixedComponent = null; + if (ComponentIsBroken(this.valueEntry.Values[i], ref fixedComponent) && fixedComponent) + { + this.valueEntry.Property.Tree.DelayActionUntilRepaint(() => + { + (this.valueEntry as IValueEntryActualValueSetter).SetActualValue(localI, fixedComponent); + }); + } + } + + if (GUIHelper.CurrentWindow) + { + EditorApplication.delayCall += GUIHelper.CurrentWindow.Close; + } + } + + [HorizontalGroup, Button(ButtonSizes.Large)] + public void FixItAlways() + { + EditorPrefs.SetBool(AUTO_FIX_PREFS_KEY, true); + autoFix = true; + + if (GUIHelper.CurrentWindow) + { + EditorApplication.delayCall += GUIHelper.CurrentWindow.Close; + } + } + } + } +} + +#endif \ No newline at end of file diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/FixBrokenUnityObjectWrapperDrawer.cs.meta b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/FixBrokenUnityObjectWrapperDrawer.cs.meta new file mode 100644 index 00000000..f5f98bf8 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/FixBrokenUnityObjectWrapperDrawer.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 903c11a9cf3ba6f4e8c653443c6893a0 +timeCreated: 1546967292 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/Sirenix.OdinInspector.CompatibilityLayer.Editor.asmdef b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/Sirenix.OdinInspector.CompatibilityLayer.Editor.asmdef new file mode 100644 index 00000000..0de0c978 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/Sirenix.OdinInspector.CompatibilityLayer.Editor.asmdef @@ -0,0 +1,15 @@ +{ + "name": "Sirenix.OdinInspector.CompatibilityLayer.Editor", + "references": [ + "Sirenix.OdinInspector.CompatibilityLayer" + ], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": true, + "autoReferenced": true, + "overrideReferences": false, + "precompiledReferences": [], + "defineConstraints": [] +} \ No newline at end of file diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/Sirenix.OdinInspector.CompatibilityLayer.Editor.asmdef.meta b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/Sirenix.OdinInspector.CompatibilityLayer.Editor.asmdef.meta new file mode 100644 index 00000000..cdd52a6e --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/Sirenix.OdinInspector.CompatibilityLayer.Editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 4db1229c02f3f629bdd928353859c2b3 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/SyncListDrawer.cs b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/SyncListDrawer.cs new file mode 100644 index 00000000..f6294403 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/SyncListDrawer.cs @@ -0,0 +1,88 @@ +//----------------------------------------------------------------------- +// +// Copyright (c) Sirenix IVS. All rights reserved. +// +//----------------------------------------------------------------------- + +#if UNITY_EDITOR && !UNITY_2019_1_OR_NEWER +#pragma warning disable 0618 + +namespace Sirenix.OdinInspector.Editor.Drawers +{ + using Sirenix.Utilities.Editor; + using UnityEditor; + using UnityEngine; + using UnityEngine.Networking; + + /// + /// SyncList property drawer. + /// + [DrawerPriority(0, 0, 2)] + public class SyncListDrawer : OdinValueDrawer where TList : SyncList + { + private LocalPersistentContext visible; + + protected override void Initialize() + { + this.visible = this.Property.Context.GetPersistent(this, "expanded", GeneralDrawerConfig.Instance.OpenListsByDefault); + } + + /// + /// Draws the property. + /// + protected override void DrawPropertyLayout(GUIContent label) + { + var entry = this.ValueEntry; + var property = entry.Property; + int minCount = int.MaxValue; + int maxCount = 0; + + for (int i = 0; i < entry.ValueCount; i++) + { + if (entry.Values[i].Count > maxCount) + { + maxCount = entry.Values[i].Count; + } + + if (entry.Values[i].Count < minCount) + { + minCount = entry.Values[i].Count; + } + } + + SirenixEditorGUI.BeginHorizontalToolbar(); + this.visible.Value = SirenixEditorGUI.Foldout(this.visible.Value, GUIHelper.TempContent("SyncList " + label.text + " [" + typeof(TList).Name + "]")); + EditorGUILayout.LabelField(GUIHelper.TempContent(minCount == maxCount ? (minCount == 0 ? "Empty" : minCount + " items") : minCount + " (" + maxCount + ") items"), SirenixGUIStyles.RightAlignedGreyMiniLabel); + SirenixEditorGUI.EndHorizontalToolbar(); + + if (SirenixEditorGUI.BeginFadeGroup(this.visible, this.visible.Value)) + { + GUIHelper.PushGUIEnabled(false); + SirenixEditorGUI.BeginVerticalList(); + { + var elementLabel = new GUIContent(); + for (int i = 0; i < maxCount; i++) + { + SirenixEditorGUI.BeginListItem(); + elementLabel.text = "Item " + i; + + if (i < minCount) + { + property.Children[i].Draw(elementLabel); + } + else + { + EditorGUILayout.LabelField(elementLabel, SirenixEditorGUI.MixedValueDashChar); + } + SirenixEditorGUI.EndListItem(); + } + } + SirenixEditorGUI.EndVerticalList(); + GUIHelper.PopGUIEnabled(); + } + SirenixEditorGUI.EndFadeGroup(); + } + } +} + +#endif // UNITY_EDITOR && !UNITY_2019_1_OR_NEWER \ No newline at end of file diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/SyncListDrawer.cs.meta b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/SyncListDrawer.cs.meta new file mode 100644 index 00000000..7db195d1 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/SyncListDrawer.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 047c7e4af9c032a428c12b7c564a6593 +timeCreated: 1545410615 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/SyncVarAttributeDrawer.cs b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/SyncVarAttributeDrawer.cs new file mode 100644 index 00000000..34be37fd --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/SyncVarAttributeDrawer.cs @@ -0,0 +1,42 @@ +//----------------------------------------------------------------------- +// +// Copyright (c) Sirenix IVS. All rights reserved. +// +//----------------------------------------------------------------------- + +#if UNITY_EDITOR && !UNITY_2019_1_OR_NEWER +#pragma warning disable 0618 + +namespace Sirenix.OdinInspector.Editor.Drawers +{ + using Sirenix.Utilities; + using UnityEditor; + using UnityEngine; + using UnityEngine.Networking; + + /// + /// SyncVar attribute drawer. + /// + public class SyncVarAttributeDrawer : OdinAttributeDrawer + { + /// + /// Draws the property. + /// + protected override void DrawPropertyLayout(GUIContent label) + { + GUILayout.BeginHorizontal(); + { + GUILayout.BeginVertical(); + { + this.CallNextDrawer(label); + } + GUILayout.EndVertical(); + + GUILayout.Label("SyncVar", EditorStyles.miniLabel, GUILayoutOptions.Width(52f)); + } + GUILayout.EndHorizontal(); + } + } +} + +#endif // UNITY_EDITOR && !UNITY_2019_1_OR_NEWER \ No newline at end of file diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/SyncVarAttributeDrawer.cs.meta b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/SyncVarAttributeDrawer.cs.meta new file mode 100644 index 00000000..14f30448 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/SyncVarAttributeDrawer.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: bda5b631304c8cb4485d60ef8bda618b +timeCreated: 1545410615 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/Vector2IntMinMaxAttributeDrawer.cs b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/Vector2IntMinMaxAttributeDrawer.cs new file mode 100644 index 00000000..089f90d7 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/Vector2IntMinMaxAttributeDrawer.cs @@ -0,0 +1,73 @@ +//----------------------------------------------------------------------- +// +// Copyright (c) Sirenix IVS. All rights reserved. +// +//----------------------------------------------------------------------- + +#if UNITY_EDITOR && UNITY_2017_2_OR_NEWER + +namespace Sirenix.OdinInspector.Editor.Drawers +{ + using Sirenix.OdinInspector; + using Sirenix.OdinInspector.Editor; + using Sirenix.OdinInspector.Editor.ValueResolvers; + using Sirenix.Utilities; + using Sirenix.Utilities.Editor; + using System.Reflection; + using UnityEditor; + using UnityEngine; + + /// + /// Draws Vector2Int properties marked with . + /// + public class Vector2IntMinMaxAttributeDrawer : OdinAttributeDrawer + { + private ValueResolver minGetter; + private ValueResolver maxGetter; + private ValueResolver vector2IntMinMaxGetter; + + /// + /// Initializes the drawer by resolving any optional references to members for min/max value. + /// + protected override void Initialize() + { + // Min member reference. + this.minGetter = ValueResolver.Get(this.Property, this.Attribute.MinValueGetter, this.Attribute.MinValue); + this.maxGetter = ValueResolver.Get(this.Property, this.Attribute.MaxValueGetter, this.Attribute.MaxValue); + + // Min max member reference. + if (this.Attribute.MinMaxValueGetter != null) + { + this.vector2IntMinMaxGetter = ValueResolver.Get(this.Property, this.Attribute.MinMaxValueGetter); + } + } + + /// + /// Draws the property. + /// + protected override void DrawPropertyLayout(GUIContent label) + { + ValueResolver.DrawErrors(this.minGetter, this.maxGetter, this.vector2IntMinMaxGetter); + + // Get the range of the slider from the attribute or from member references. + Vector2 range; + if (this.vector2IntMinMaxGetter != null && !this.vector2IntMinMaxGetter.HasError) + { + range = (Vector2)this.vector2IntMinMaxGetter.GetValue(); + } + else + { + range.x = this.minGetter.GetValue(); + range.y = this.maxGetter.GetValue(); + } + + EditorGUI.BeginChangeCheck(); + Vector2 value = SirenixEditorFields.MinMaxSlider(label, (Vector2)this.ValueEntry.SmartValue, range, this.Attribute.ShowFields); + if (EditorGUI.EndChangeCheck()) + { + this.ValueEntry.SmartValue = new Vector2Int((int)value.x, (int)value.y); + } + } + } +} +#endif // UNITY_EDITOR && UNITY_2017_2_OR_NEWER \ No newline at end of file diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/Vector2IntMinMaxAttributeDrawer.cs.meta b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/Vector2IntMinMaxAttributeDrawer.cs.meta new file mode 100644 index 00000000..84869a73 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/Vector2IntMinMaxAttributeDrawer.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 30393ed590c8fb64da0612e8a2fad8a4 +timeCreated: 1532688697 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/VectorIntDrawers.cs b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/VectorIntDrawers.cs new file mode 100644 index 00000000..795bf89c --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/VectorIntDrawers.cs @@ -0,0 +1,141 @@ +//----------------------------------------------------------------------- +// +// Copyright (c) Sirenix IVS. All rights reserved. +// +//----------------------------------------------------------------------- + +#if UNITY_EDITOR && UNITY_2017_2_OR_NEWER + +namespace Sirenix.OdinInspector.Editor.Drawers +{ + using Utilities.Editor; + using UnityEditor; + using UnityEngine; + + /// + /// Vector2Int proprety drawer. + /// + public sealed class Vector2IntDrawer : OdinValueDrawer, IDefinesGenericMenuItems + { + /// + /// Draws the property. + /// + protected override void DrawPropertyLayout(GUIContent label) + { + Rect labelRect; + var contentRect = SirenixEditorGUI.BeginHorizontalPropertyLayout(label, out labelRect); + { + EditorGUI.BeginChangeCheck(); + var val = SirenixEditorFields.VectorPrefixSlideRect(labelRect, (Vector2)this.ValueEntry.SmartValue); + if (EditorGUI.EndChangeCheck()) + { + this.ValueEntry.SmartValue = new Vector2Int((int)val.x, (int)val.y); + } + + var showLabels = SirenixEditorFields.ResponsiveVectorComponentFields && contentRect.width >= 185; + GUIHelper.PushLabelWidth(SirenixEditorFields.SingleLetterStructLabelWidth); + this.ValueEntry.Property.Children[0].Draw(showLabels ? GUIHelper.TempContent("X") : null); + this.ValueEntry.Property.Children[1].Draw(showLabels ? GUIHelper.TempContent("Y") : null); + GUIHelper.PopLabelWidth(); + + } + SirenixEditorGUI.EndHorizontalPropertyLayout(); + } + + /// + /// Populates the generic menu for the property. + /// + public void PopulateGenericMenu(InspectorProperty property, GenericMenu genericMenu) + { + Vector2Int value = (Vector2Int)property.ValueEntry.WeakSmartValue; + + if (genericMenu.GetItemCount() > 0) + { + genericMenu.AddSeparator(""); + } + genericMenu.AddItem(new GUIContent("Zero", "Set the vector to (0, 0)"), value == Vector2Int.zero, () => SetVector(property, Vector2Int.zero)); + genericMenu.AddItem(new GUIContent("One", "Set the vector to (1, 1)"), value == Vector2Int.one, () => SetVector(property, Vector2Int.one)); + genericMenu.AddSeparator(""); + genericMenu.AddItem(new GUIContent("Right", "Set the vector to (1, 0)"), value == Vector2Int.right, () => SetVector(property, Vector2Int.right)); + genericMenu.AddItem(new GUIContent("Left", "Set the vector to (-1, 0)"), value == Vector2Int.left, () => SetVector(property, Vector2Int.left)); + genericMenu.AddItem(new GUIContent("Up", "Set the vector to (0, 1)"), value == Vector2Int.up, () => SetVector(property, Vector2Int.up)); + genericMenu.AddItem(new GUIContent("Down", "Set the vector to (0, -1)"), value == Vector2Int.down, () => SetVector(property, Vector2Int.down)); + } + + private void SetVector(InspectorProperty property, Vector2Int value) + { + property.Tree.DelayActionUntilRepaint(() => + { + for (int i = 0; i < property.ValueEntry.ValueCount; i++) + { + property.ValueEntry.WeakValues[i] = value; + } + }); + } + } + + /// + /// Vector3Int property drawer. + /// + public sealed class Vector3IntDrawer : OdinValueDrawer, IDefinesGenericMenuItems + { + /// + /// Draws the property. + /// + protected override void DrawPropertyLayout(GUIContent label) + { + Rect labelRect; + var contentRect = SirenixEditorGUI.BeginHorizontalPropertyLayout(label, out labelRect); + { + EditorGUI.BeginChangeCheck(); + var val = SirenixEditorFields.VectorPrefixSlideRect(labelRect, (Vector3)this.ValueEntry.SmartValue); + if (EditorGUI.EndChangeCheck()) + { + this.ValueEntry.SmartValue = new Vector3Int((int)val.x, (int)val.y, (int)val.z); + } + + var showLabels = SirenixEditorFields.ResponsiveVectorComponentFields && contentRect.width >= 185; + GUIHelper.PushLabelWidth(SirenixEditorFields.SingleLetterStructLabelWidth); + this.ValueEntry.Property.Children[0].Draw(showLabels ? GUIHelper.TempContent("X") : null); + this.ValueEntry.Property.Children[1].Draw(showLabels ? GUIHelper.TempContent("Y") : null); + this.ValueEntry.Property.Children[2].Draw(showLabels ? GUIHelper.TempContent("Z") : null); + GUIHelper.PopLabelWidth(); + + } + SirenixEditorGUI.EndHorizontalPropertyLayout(); + } + + /// + /// Populates the generic menu for the property. + /// + public void PopulateGenericMenu(InspectorProperty property, GenericMenu genericMenu) + { + Vector3Int value = (Vector3Int)property.ValueEntry.WeakSmartValue; + + if (genericMenu.GetItemCount() > 0) + { + genericMenu.AddSeparator(""); + } + + genericMenu.AddItem(new GUIContent("Zero", "Set the vector to (0, 0, 0)"), value == Vector3Int.zero, () => SetVector(property, Vector3Int.zero)); + genericMenu.AddItem(new GUIContent("One", "Set the vector to (1, 1, 1)"), value == Vector3Int.one, () => SetVector(property, Vector3Int.one)); + genericMenu.AddSeparator(""); + genericMenu.AddItem(new GUIContent("Right", "Set the vector to (1, 0, 0)"), value == Vector3Int.right, () => SetVector(property, Vector3Int.right)); + genericMenu.AddItem(new GUIContent("Left", "Set the vector to (-1, 0, 0)"), value == Vector3Int.left, () => SetVector(property, Vector3Int.left)); + genericMenu.AddItem(new GUIContent("Up", "Set the vector to (0, 1, 0)"), value == Vector3Int.up, () => SetVector(property, Vector3Int.up)); + genericMenu.AddItem(new GUIContent("Down", "Set the vector to (0, -1, 0)"), value == Vector3Int.down, () => SetVector(property, Vector3Int.down)); + genericMenu.AddItem(new GUIContent("Forward", "Set the vector property to (0, 0, 1)"), value == new Vector3Int(0, 0, 1), () => SetVector(property, new Vector3Int(0, 0, 1))); + genericMenu.AddItem(new GUIContent("Back", "Set the vector property to (0, 0, -1)"), value == new Vector3Int(0, 0, -1), () => SetVector(property, new Vector3Int(0, 0, -1))); + } + + private void SetVector(InspectorProperty property, Vector3Int value) + { + property.Tree.DelayActionUntilRepaint(() => + { + property.ValueEntry.WeakSmartValue = value; + }); + } + } +} + +#endif // UNITY_EDITOR && UNITY_2017_2_OR_NEWER \ No newline at end of file diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/VectorIntDrawers.cs.meta b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/VectorIntDrawers.cs.meta new file mode 100644 index 00000000..5e47f131 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/VectorIntDrawers.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 2fc48d59edff00f49b8ae717c776ff45 +timeCreated: 1520596090 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/VectorIntPropertyResolvers.cs b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/VectorIntPropertyResolvers.cs new file mode 100644 index 00000000..c62f2e5a --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/VectorIntPropertyResolvers.cs @@ -0,0 +1,54 @@ +//----------------------------------------------------------------------- +// +// Copyright (c) Sirenix IVS. All rights reserved. +// +//----------------------------------------------------------------------- + +#if UNITY_EDITOR && UNITY_2017_2_OR_NEWER + +namespace Sirenix.OdinInspector.Editor.Drawers +{ + using UnityEngine; + + public sealed class Vector2IntResolver : BaseMemberPropertyResolver + { + protected override InspectorPropertyInfo[] GetPropertyInfos() + { + return new InspectorPropertyInfo[] + { + InspectorPropertyInfo.CreateValue("x", 0, this.Property.ValueEntry.SerializationBackend, + new GetterSetter( + getter: (ref Vector2Int vec) => vec.x, + setter: (ref Vector2Int vec, int value) => vec.x = value)), + InspectorPropertyInfo.CreateValue("y", 0, this.Property.ValueEntry.SerializationBackend, + new GetterSetter( + getter: (ref Vector2Int vec) => vec.y, + setter: (ref Vector2Int vec, int value) => vec.y = value)), + }; + } + } + + public sealed class Vector3IntResolver : BaseMemberPropertyResolver + { + protected override InspectorPropertyInfo[] GetPropertyInfos() + { + return new InspectorPropertyInfo[] + { + InspectorPropertyInfo.CreateValue("x", 0, this.Property.ValueEntry.SerializationBackend, + new GetterSetter( + getter: (ref Vector3Int vec) => vec.x, + setter: (ref Vector3Int vec, int value) => vec.x = value)), + InspectorPropertyInfo.CreateValue("y", 0, this.Property.ValueEntry.SerializationBackend, + new GetterSetter( + getter: (ref Vector3Int vec) => vec.y, + setter: (ref Vector3Int vec, int value) => vec.y = value)), + InspectorPropertyInfo.CreateValue("z", 0, this.Property.ValueEntry.SerializationBackend, + new GetterSetter( + getter: (ref Vector3Int vec) => vec.z, + setter: (ref Vector3Int vec, int value) => vec.z = value)), + }; + } + } +} + +#endif // UNITY_EDITOR && UNITY_2017_2_OR_NEWER \ No newline at end of file diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/VectorIntPropertyResolvers.cs.meta b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/VectorIntPropertyResolvers.cs.meta new file mode 100644 index 00000000..07a849b8 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Editor/VectorIntPropertyResolvers.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 435323e396d85494daeb5278528fe138 +timeCreated: 1539340561 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/SerializedNetworkBehaviour.cs b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/SerializedNetworkBehaviour.cs new file mode 100644 index 00000000..84ae8e61 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/SerializedNetworkBehaviour.cs @@ -0,0 +1,67 @@ +//----------------------------------------------------------------------- +// +// Copyright (c) Sirenix IVS. All rights reserved. +// +//----------------------------------------------------------------------- + +#if !UNITY_2019_1_OR_NEWER +#pragma warning disable 0618 + +namespace Sirenix.OdinInspector +{ + using Sirenix.Serialization; + using UnityEngine; + using UnityEngine.Networking; + + /// + /// A Unity NetworkBehaviour which is serialized by the Sirenix serialization system. + /// Please note that Odin's custom serialization only works for non-synced variables - [SyncVar] and SyncLists still have the same limitations. + /// + [ShowOdinSerializedPropertiesInInspector] + public abstract class SerializedNetworkBehaviour : NetworkBehaviour, ISerializationCallbackReceiver, ISupportsPrefabSerialization + { + [SerializeField, HideInInspector] + private SerializationData serializationData; + + SerializationData ISupportsPrefabSerialization.SerializationData { get { return this.serializationData; } set { this.serializationData = value; } } + + void ISerializationCallbackReceiver.OnAfterDeserialize() + { + UnitySerializationUtility.DeserializeUnityObject(this, ref this.serializationData); + this.OnAfterDeserialize(); + } + + void ISerializationCallbackReceiver.OnBeforeSerialize() + { + UnitySerializationUtility.SerializeUnityObject(this, ref this.serializationData); + this.OnBeforeSerialize(); + } + + /// + /// Invoked after deserialization has taken place. + /// + protected virtual void OnAfterDeserialize() + { + } + + /// + /// Invoked before serialization has taken place. + /// + protected virtual void OnBeforeSerialize() + { + } + +#if UNITY_EDITOR + + [HideInTables] + [OnInspectorGUI, PropertyOrder(int.MinValue)] + private void InternalOnInspectorGUI() + { + EditorOnlyModeConfigUtility.InternalOnInspectorGUI(this); + } + +#endif + } +} + +#endif // UNITY_2019_1_OR_NEWER \ No newline at end of file diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/SerializedNetworkBehaviour.cs.meta b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/SerializedNetworkBehaviour.cs.meta new file mode 100644 index 00000000..b935e798 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/SerializedNetworkBehaviour.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 5d496f720527c984b8acc75a238bbd79 +timeCreated: 1545412221 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Sirenix.OdinInspector.CompatibilityLayer.asmdef b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Sirenix.OdinInspector.CompatibilityLayer.asmdef new file mode 100644 index 00000000..0d791682 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Sirenix.OdinInspector.CompatibilityLayer.asmdef @@ -0,0 +1,11 @@ +{ + "name": "Sirenix.OdinInspector.CompatibilityLayer", + "references": [], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": true, + "autoReferenced": true, + "overrideReferences": false, + "precompiledReferences": [], + "defineConstraints": [] +} \ No newline at end of file diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Sirenix.OdinInspector.CompatibilityLayer.asmdef.meta b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Sirenix.OdinInspector.CompatibilityLayer.asmdef.meta new file mode 100644 index 00000000..647ed724 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/Sirenix.OdinInspector.CompatibilityLayer.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: e048eeec9bdb9d30448017b829deb3f6 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/VectorIntFormatters.cs b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/VectorIntFormatters.cs new file mode 100644 index 00000000..65c10368 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/VectorIntFormatters.cs @@ -0,0 +1,80 @@ +#if UNITY_2017_2_OR_NEWER + +//----------------------------------------------------------------------- +// +// Copyright (c) Sirenix IVS. All rights reserved. +// +//----------------------------------------------------------------------- + +[assembly: Sirenix.Serialization.RegisterFormatter(typeof(Sirenix.Serialization.Vector2IntFormatter))] +[assembly: Sirenix.Serialization.RegisterFormatter(typeof(Sirenix.Serialization.Vector3IntFormatter))] +namespace Sirenix.Serialization +{ + using UnityEngine; + + /// + /// Custom formatter for the type. + /// + /// + public class Vector2IntFormatter : MinimalBaseFormatter + { + private static readonly Serializer Serializer = Serialization.Serializer.Get(); + + /// + /// Reads into the specified value using the specified reader. + /// + /// The value to read into. + /// The reader to use. + protected override void Read(ref Vector2Int value, IDataReader reader) + { + value.x = Vector2IntFormatter.Serializer.ReadValue(reader); + value.y = Vector2IntFormatter.Serializer.ReadValue(reader); + } + + /// + /// Writes from the specified value using the specified writer. + /// + /// The value to write from. + /// The writer to use. + protected override void Write(ref Vector2Int value, IDataWriter writer) + { + Vector2IntFormatter.Serializer.WriteValue(value.x, writer); + Vector2IntFormatter.Serializer.WriteValue(value.y, writer); + } + } + + /// + /// Custom formatter for the type. + /// + /// + public class Vector3IntFormatter : MinimalBaseFormatter + { + private static readonly Serializer Serializer = Serialization.Serializer.Get(); + + /// + /// Reads into the specified value using the specified reader. + /// + /// The value to read into. + /// The reader to use. + protected override void Read(ref Vector3Int value, IDataReader reader) + { + value.x = Vector3IntFormatter.Serializer.ReadValue(reader); + value.y = Vector3IntFormatter.Serializer.ReadValue(reader); + value.z = Vector3IntFormatter.Serializer.ReadValue(reader); + } + + /// + /// Writes from the specified value using the specified writer. + /// + /// The value to write from. + /// The writer to use. + protected override void Write(ref Vector3Int value, IDataWriter writer) + { + Vector3IntFormatter.Serializer.WriteValue(value.x, writer); + Vector3IntFormatter.Serializer.WriteValue(value.y, writer); + Vector3IntFormatter.Serializer.WriteValue(value.z, writer); + } + } +} + +#endif \ No newline at end of file diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/VectorIntFormatters.cs.meta b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/VectorIntFormatters.cs.meta new file mode 100644 index 00000000..a30d06af --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Odin Inspector/Scripts/VectorIntFormatters.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: a2f1c424a60dfbd4fa331449baeac351 +timeCreated: 1520596090 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Readme.txt b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Readme.txt new file mode 100644 index 00000000..c39dd1cd --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Readme.txt @@ -0,0 +1,35 @@ +------------------------------------ Getting Started ------------------------------------ + +Open up the Getting Started guide from "Tools > Odin Inspector > Getting Started." + + +------------------------------------- Helpful Links ------------------------------------- + +Tutorials: https://odininspector.com/tutorials +API Documentaion: https://odininspector.com/documentation +Roadmap: https://odininspector.com/roadmap +Release Notes: https://odininspector.com/patch-notes +Issue Tracker: https://bitbucket.org/sirenix/odin-inspector + + +--------------------------------- Community and Support --------------------------------- + +If you have any issues, suggestions or want advice, then you're more than welcome +to join us on Discord, or reach out to us by any other means. + +Support: https://odininspector.com/support +Community Addons: https://odininspector.com/community-tools +Discord: https://discord.gg/AgDmStu + + +-------------------------------------- Thank you! --------------------------------------- + +We really hope you like using Odin. Be sure to leave a review on the Asset Store, +that helps us out a lot! + +Leave a review: https://assetstore.unity.com/packages/tools/utilities/odin-inspector-and-serializer-89041 + + +Odin Inspector is published and developed by Sirenix. + +Sirenix: Https://sirenix.net \ No newline at end of file diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Readme.txt.meta b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Readme.txt.meta new file mode 100644 index 00000000..e69643e1 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Sirenix/Readme.txt.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e957a9e8b4f4bce4b8a34e504a8c39d7 +timeCreated: 1533815770 +licenseType: Store +TextScriptImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Trinary Software.meta b/UnityClient/Assets/CraftingSystem/Plugins/Trinary Software.meta new file mode 100644 index 00000000..616b6fb0 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Trinary Software.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 78018ab10cd0fdf48ba17bb3bc57ed62 +folderAsset: yes +timeCreated: 1456470394 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Trinary Software/Editor.meta b/UnityClient/Assets/CraftingSystem/Plugins/Trinary Software/Editor.meta new file mode 100644 index 00000000..2e833c95 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Trinary Software/Editor.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 0d53480b6fb0cb246b44b84ec5156cc6 +folderAsset: yes +timeCreated: 1475431041 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Trinary Software/Editor/MecIcon.png b/UnityClient/Assets/CraftingSystem/Plugins/Trinary Software/Editor/MecIcon.png new file mode 100644 index 00000000..c79d8588 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Trinary Software/Editor/MecIcon.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b72d6428bfbd8653854edb929cbde47ad65a2673a595a87084191d5c057b94bb +size 36388 diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Trinary Software/Editor/MecIcon.png.meta b/UnityClient/Assets/CraftingSystem/Plugins/Trinary Software/Editor/MecIcon.png.meta new file mode 100644 index 00000000..733447a4 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Trinary Software/Editor/MecIcon.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: a0f854455b10ba44d819f36586b0909b +timeCreated: 1510247977 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 64 + textureSettings: + filterMode: 2 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Trinary Software/Pro-only Features.pdf b/UnityClient/Assets/CraftingSystem/Plugins/Trinary Software/Pro-only Features.pdf new file mode 100644 index 0000000000000000000000000000000000000000..bc7f995a0f07a5a6029bfa360bce50d4782cd5ed GIT binary patch literal 574863 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

%5n$o(z?CSOx?sFPmJ1%ASKaE&U*JURCYFTzV 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

wevFhk|C5>C12Q;4jhT+ID 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

)?b;% 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

qa50@)eJ+nY%z_}NBtfSk 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%0Do9!?P+KZk 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ྸ&Mbv%+vd36&-M!mCb~Q(8g+&Puc+< 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 z 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℞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�dv5ne6uj^kPX)P_wHZPdfVXJNa)-Ya+ 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�)crKj|ku%bDY@hlc;gag``?0K%X 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%0D^^&FU&L0(9E&wkq8^&5 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 literal 0 HcmV?d00001 diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Trinary Software/Quick Start Guide.pdf.meta b/UnityClient/Assets/CraftingSystem/Plugins/Trinary Software/Quick Start Guide.pdf.meta new file mode 100644 index 00000000..4a34c896 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Trinary Software/Quick Start Guide.pdf.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a2df0cfe12cb0d64c9d151d10f8ec206 +timeCreated: 1456009584 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Trinary Software/Timing.cs b/UnityClient/Assets/CraftingSystem/Plugins/Trinary Software/Timing.cs new file mode 100644 index 00000000..c40c435d --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Trinary Software/Timing.cs @@ -0,0 +1,7714 @@ +using UnityEngine; +using System.Collections.Generic; +using UnityEngine.Assertions; +#if UNITY_EDITOR +using UnityEditor; +#endif +#if UNITY_5_5_OR_NEWER +using UnityEngine.Profiling; +#endif + +// ///////////////////////////////////////////////////////////////////////////////////////// +// More Effective Coroutines Pro +// v3.11.0 +// +// This is an improved implementation of coroutines that boasts zero per-frame memory allocations, +// runs about twice as fast as Unity's built in coroutines, and has a range of extra features. +// +// For manual, support, or upgrade guide visit http://trinary.tech/ +// +// Created by Teal Rogers +// Trinary Software +// All rights preserved +// trinaryllc@gmail.com +// ///////////////////////////////////////////////////////////////////////////////////////// + +namespace MEC +{ + public class Timing : MonoBehaviour + { + ///

+ /// The time between calls to SlowUpdate. + /// + [Tooltip("How quickly the SlowUpdate segment ticks.")] + public float TimeBetweenSlowUpdateCalls = 1f / 7f; + /// + /// The amount that each coroutine should be seperated inside the Unity profiler. NOTE: When the profiler window + /// is not open this value is ignored and all coroutines behave as if "None" is selected. + /// + [Tooltip("How much data should be sent to the profiler window when it's open.")] + public DebugInfoType ProfilerDebugAmount; + /// + /// Whether the manual timeframe should automatically trigger during the update segment. + /// + [Tooltip("When using manual timeframe, should it run automatically after the update loop or only when TriggerManualTimframeUpdate is called.")] + public bool AutoTriggerManualTimeframe = true; + /// + /// The number of coroutines that are being run in the Update segment. + /// + [Tooltip("A count of the number of Update coroutines that are currently running."), Space(12)] + public int UpdateCoroutines; + /// + /// The number of coroutines that are being run in the FixedUpdate segment. + /// + [Tooltip("A count of the number of FixedUpdate coroutines that are currently running.")] + public int FixedUpdateCoroutines; + /// + /// The number of coroutines that are being run in the LateUpdate segment. + /// + [Tooltip("A count of the number of LateUpdate coroutines that are currently running.")] + public int LateUpdateCoroutines; + /// + /// The number of coroutines that are being run in the SlowUpdate segment. + /// + [Tooltip("A count of the number of SlowUpdate coroutines that are currently running.")] + public int SlowUpdateCoroutines; + /// + /// The number of coroutines that are being run in the RealtimeUpdate segment. + /// + [Tooltip("A count of the number of RealtimeUpdate coroutines that are currently running.")] + public int RealtimeUpdateCoroutines; + /// + /// The number of coroutines that are being run in the EditorUpdate segment. + /// + [Tooltip("A count of the number of EditorUpdate coroutines that are currently running.")] + public int EditorUpdateCoroutines; + /// + /// The number of coroutines that are being run in the EditorSlowUpdate segment. + /// + [Tooltip("A count of the number of EditorSlowUpdate coroutines that are currently running.")] + public int EditorSlowUpdateCoroutines; + /// + /// The number of coroutines that are being run in the EndOfFrame segment. + /// + [Tooltip("A count of the number of EndOfFrame coroutines that are currently running.")] + public int EndOfFrameCoroutines; + /// + /// The number of coroutines that are being run in the ManualTimeframe segment. + /// + [Tooltip("A count of the number of ManualTimeframe coroutines that are currently running.")] + public int ManualTimeframeCoroutines; + + /// + /// The time in seconds that the current segment has been running. + /// + [System.NonSerialized] + public float localTime; + /// + /// The time in seconds that the current segment has been running. + /// + public static float LocalTime { get { return Instance.localTime; } } + /// + /// The amount of time in fractional seconds that elapsed between this frame and the last frame. + /// + [System.NonSerialized] + public float deltaTime; + /// + /// The amount of time in fractional seconds that elapsed between this frame and the last frame. + /// + public static float DeltaTime { get { return Instance.deltaTime; } } + /// + /// When defined, this function will be called every time manual timeframe needs to be set. The last manual timeframe time is passed in, and + /// the new manual timeframe time needs to be returned. If this function is left as null, manual timeframe will be set to the current Time.time. + /// + public System.Func SetManualTimeframeTime; + /// + /// Used for advanced coroutine control. + /// + public static System.Func, CoroutineHandle, IEnumerator> ReplacementFunction; + /// + /// This event fires just before each segment is run. + /// + public static event System.Action OnPreExecute; + /// + /// You can use "yield return Timing.WaitForOneFrame;" inside a coroutine function to go to the next frame. + /// + public const float WaitForOneFrame = float.NegativeInfinity; + /// + /// The main thread that (almost) everything in unity runs in. + /// + public static System.Threading.Thread MainThread { get; private set; } + /// + /// The handle of the current coroutine that is running. + /// + public static CoroutineHandle CurrentCoroutine + { + get + { + for (int i = 0; i < ActiveInstances.Length; i++) + if (ActiveInstances[i] != null && ActiveInstances[i].currentCoroutine.IsValid) + return ActiveInstances[i].currentCoroutine; + return default(CoroutineHandle); + } + } + /// + /// The handle of the current coroutine that is running. + /// + public CoroutineHandle currentCoroutine { get; private set; } + + + private static object _tmpRef; + private static int _tmpInt; + private static bool _tmpBool; + private static Segment _tmpSegment; + private static CoroutineHandle _tmpHandle; + + private int _currentUpdateFrame; + private int _currentLateUpdateFrame; + private int _currentSlowUpdateFrame; + private int _currentRealtimeUpdateFrame; + private int _currentEndOfFrameFrame; + private int _nextUpdateProcessSlot; + private int _nextLateUpdateProcessSlot; + private int _nextFixedUpdateProcessSlot; + private int _nextSlowUpdateProcessSlot; + private int _nextRealtimeUpdateProcessSlot; + private int _nextEditorUpdateProcessSlot; + private int _nextEditorSlowUpdateProcessSlot; + private int _nextEndOfFrameProcessSlot; + private int _nextManualTimeframeProcessSlot; + private int _lastUpdateProcessSlot; + private int _lastLateUpdateProcessSlot; + private int _lastFixedUpdateProcessSlot; + private int _lastSlowUpdateProcessSlot; + private int _lastRealtimeUpdateProcessSlot; +#if UNITY_EDITOR + private int _lastEditorUpdateProcessSlot; + private int _lastEditorSlowUpdateProcessSlot; +#endif + private int _lastEndOfFrameProcessSlot; + private int _lastManualTimeframeProcessSlot; + private float _lastUpdateTime; + private float _lastLateUpdateTime; + private float _lastFixedUpdateTime; + private float _lastSlowUpdateTime; + private float _lastRealtimeUpdateTime; +#if UNITY_EDITOR + private float _lastEditorUpdateTime; + private float _lastEditorSlowUpdateTime; +#endif + private float _lastEndOfFrameTime; + private float _lastManualTimeframeTime; + private float _lastSlowUpdateDeltaTime; + private float _lastEditorUpdateDeltaTime; + private float _lastEditorSlowUpdateDeltaTime; + private float _lastManualTimeframeDeltaTime; + private ushort _framesSinceUpdate; + private ushort _expansions = 1; + [SerializeField, HideInInspector] + private byte _instanceID; + private bool _EOFPumpRan; + + private static readonly Dictionary> Links = new Dictionary>(); + private static readonly WaitForEndOfFrame EofWaitObject = new WaitForEndOfFrame(); + private readonly Dictionary> _waitingTriggers = new Dictionary>(); + private readonly HashSet _allWaiting = new HashSet(); + private readonly Dictionary _handleToIndex = new Dictionary(); + private readonly Dictionary _indexToHandle = new Dictionary(); + private readonly Dictionary _processTags = new Dictionary(); + private readonly Dictionary> _taggedProcesses = new Dictionary>(); + private readonly Dictionary _processLayers = new Dictionary(); + private readonly Dictionary> _layeredProcesses = new Dictionary>(); + + private IEnumerator[] UpdateProcesses = new IEnumerator[InitialBufferSizeLarge]; + private IEnumerator[] LateUpdateProcesses = new IEnumerator[InitialBufferSizeSmall]; + private IEnumerator[] FixedUpdateProcesses = new IEnumerator[InitialBufferSizeMedium]; + private IEnumerator[] SlowUpdateProcesses = new IEnumerator[InitialBufferSizeMedium]; + private IEnumerator[] RealtimeUpdateProcesses = new IEnumerator[InitialBufferSizeSmall]; + private IEnumerator[] EditorUpdateProcesses = new IEnumerator[InitialBufferSizeSmall]; + private IEnumerator[] EditorSlowUpdateProcesses = new IEnumerator[InitialBufferSizeSmall]; + private IEnumerator[] EndOfFrameProcesses = new IEnumerator[InitialBufferSizeSmall]; + private IEnumerator[] ManualTimeframeProcesses = new IEnumerator[InitialBufferSizeSmall]; + + private bool[] UpdatePaused = new bool[InitialBufferSizeLarge]; + private bool[] LateUpdatePaused = new bool[InitialBufferSizeSmall]; + private bool[] FixedUpdatePaused = new bool[InitialBufferSizeMedium]; + private bool[] SlowUpdatePaused = new bool[InitialBufferSizeMedium]; + private bool[] RealtimeUpdatePaused = new bool[InitialBufferSizeSmall]; + private bool[] EditorUpdatePaused = new bool[InitialBufferSizeSmall]; + private bool[] EditorSlowUpdatePaused = new bool[InitialBufferSizeSmall]; + private bool[] EndOfFramePaused = new bool[InitialBufferSizeSmall]; + private bool[] ManualTimeframePaused = new bool[InitialBufferSizeSmall]; + + private bool[] UpdateHeld = new bool[InitialBufferSizeLarge]; + private bool[] LateUpdateHeld = new bool[InitialBufferSizeSmall]; + private bool[] FixedUpdateHeld = new bool[InitialBufferSizeMedium]; + private bool[] SlowUpdateHeld = new bool[InitialBufferSizeMedium]; + private bool[] RealtimeUpdateHeld = new bool[InitialBufferSizeSmall]; + private bool[] EditorUpdateHeld = new bool[InitialBufferSizeSmall]; + private bool[] EditorSlowUpdateHeld = new bool[InitialBufferSizeSmall]; + private bool[] EndOfFrameHeld = new bool[InitialBufferSizeSmall]; + private bool[] ManualTimeframeHeld = new bool[InitialBufferSizeSmall]; + + private CoroutineHandle _eofWatcherHandle; + private const ushort FramesUntilMaintenance = 64; + private const int ProcessArrayChunkSize = 64; + private const int InitialBufferSizeLarge = 256; + private const int InitialBufferSizeMedium = 64; + private const int InitialBufferSizeSmall = 8; + + + private static Timing[] ActiveInstances = new Timing[16]; + private static Timing _instance; + public static Timing Instance + { + get + { + if (_instance == null || !_instance.gameObject) + { + GameObject instanceHome = GameObject.Find("Timing Controller"); + + if (instanceHome == null) + { + instanceHome = new GameObject { name = "Timing Controller" }; + +#if UNITY_EDITOR + if (Application.isPlaying) + DontDestroyOnLoad(instanceHome); +#else + DontDestroyOnLoad(instanceHome); +#endif + } + + _instance = instanceHome.GetComponent() ?? instanceHome.AddComponent(); + + _instance.InitializeInstanceID(); + } + + return _instance; + } + + set { _instance = value; } + } + + void OnDestroy() + { + if (_instance == this) + _instance = null; + } + + void OnEnable() + { + if (MainThread == null) + MainThread = System.Threading.Thread.CurrentThread; + + if (_nextEditorUpdateProcessSlot > 0 || _nextEditorSlowUpdateProcessSlot > 0) + OnEditorStart(); + + InitializeInstanceID(); + + if (_nextEndOfFrameProcessSlot > 0) + RunCoroutineSingletonOnInstance(_EOFPumpWatcher(), "MEC_EOFPumpWatcher", SingletonBehavior.Abort); + } + + void OnDisable() + { + if (_instanceID < ActiveInstances.Length) + ActiveInstances[_instanceID] = null; + } + + private void InitializeInstanceID() + { + if (ActiveInstances[_instanceID] == null) + { + if (_instanceID == 0x00) + _instanceID++; + + for (; _instanceID <= 0x10; _instanceID++) + { + if (_instanceID == 0x10) + { + GameObject.Destroy(gameObject); + throw new System.OverflowException("You are only allowed 15 different contexts for MEC to run inside at one time."); + } + + if (ActiveInstances[_instanceID] == null) + { + ActiveInstances[_instanceID] = this; + break; + } + } + } + } + + void Update() + { + if (OnPreExecute != null) + OnPreExecute(); + + if (_lastSlowUpdateTime + TimeBetweenSlowUpdateCalls < Time.realtimeSinceStartup && _nextSlowUpdateProcessSlot > 0) + { + ProcessIndex coindex = new ProcessIndex { seg = Segment.SlowUpdate }; + if (UpdateTimeValues(coindex.seg)) + _lastSlowUpdateProcessSlot = _nextSlowUpdateProcessSlot; + + for (coindex.i = 0; coindex.i < _lastSlowUpdateProcessSlot; coindex.i++) + { + try + { + if (!SlowUpdatePaused[coindex.i] && !SlowUpdateHeld[coindex.i] && SlowUpdateProcesses[coindex.i] != null && !(localTime < SlowUpdateProcesses[coindex.i].Current)) + { + currentCoroutine = _indexToHandle[coindex]; + + if (ProfilerDebugAmount != DebugInfoType.None && _indexToHandle.ContainsKey(coindex)) + { + Profiler.BeginSample(ProfilerDebugAmount == DebugInfoType.SeperateTags ? ("Processing Coroutine (Slow Update), " + + (_processLayers.ContainsKey(_indexToHandle[coindex]) ? "layer " + _processLayers[_indexToHandle[coindex]] : "no layer") + + (_processTags.ContainsKey(_indexToHandle[coindex]) ? ", tag " + _processTags[_indexToHandle[coindex]] : ", no tag")) + : "Processing Coroutine (Slow Update)"); + } + + if (!SlowUpdateProcesses[coindex.i].MoveNext()) + { + if (_indexToHandle.ContainsKey(coindex)) + KillCoroutinesOnInstance(_indexToHandle[coindex]); + } + else if (SlowUpdateProcesses[coindex.i] != null && float.IsNaN(SlowUpdateProcesses[coindex.i].Current)) + { + if (ReplacementFunction != null) + { + SlowUpdateProcesses[coindex.i] = ReplacementFunction(SlowUpdateProcesses[coindex.i], _indexToHandle[coindex]); + ReplacementFunction = null; + } + coindex.i--; + } + + if (ProfilerDebugAmount != DebugInfoType.None) + Profiler.EndSample(); + } + } + catch (System.Exception ex) + { + Debug.LogException(ex); + + if (ex is MissingReferenceException) + Debug.LogError("This exception can probably be fixed by adding \"CancelWith(gameObject)\" when you run the coroutine.\n" + + "Example: Timing.RunCoroutine(_foo().CancelWith(gameObject), Segment.SlowUpdate);"); + } + } + } + + if (_nextRealtimeUpdateProcessSlot > 0) + { + ProcessIndex coindex = new ProcessIndex { seg = Segment.RealtimeUpdate }; + if (UpdateTimeValues(coindex.seg)) + _lastRealtimeUpdateProcessSlot = _nextRealtimeUpdateProcessSlot; + + for (coindex.i = 0; coindex.i < _lastRealtimeUpdateProcessSlot; coindex.i++) + { + try + { + if (!RealtimeUpdatePaused[coindex.i] && !RealtimeUpdateHeld[coindex.i] && RealtimeUpdateProcesses[coindex.i] != null && !(localTime < RealtimeUpdateProcesses[coindex.i].Current)) + { + currentCoroutine = _indexToHandle[coindex]; + + if (ProfilerDebugAmount != DebugInfoType.None && _indexToHandle.ContainsKey(coindex)) + { + Profiler.BeginSample(ProfilerDebugAmount == DebugInfoType.SeperateTags ? ("Processing Coroutine (Realtime Update), " + + (_processLayers.ContainsKey(_indexToHandle[coindex]) ? "layer " + _processLayers[_indexToHandle[coindex]] : "no layer") + + (_processTags.ContainsKey(_indexToHandle[coindex]) ? ", tag " + _processTags[_indexToHandle[coindex]] : ", no tag")) + : "Processing Coroutine (Realtime Update)"); + } + + if (!RealtimeUpdateProcesses[coindex.i].MoveNext()) + { + if (_indexToHandle.ContainsKey(coindex)) + KillCoroutinesOnInstance(_indexToHandle[coindex]); + } + else if (RealtimeUpdateProcesses[coindex.i] != null && float.IsNaN(RealtimeUpdateProcesses[coindex.i].Current)) + { + if (ReplacementFunction != null) + { + RealtimeUpdateProcesses[coindex.i] = ReplacementFunction(RealtimeUpdateProcesses[coindex.i], _indexToHandle[coindex]); + ReplacementFunction = null; + } + coindex.i--; + } + + if (ProfilerDebugAmount != DebugInfoType.None) + Profiler.EndSample(); + } + } + catch (System.Exception ex) + { + Debug.LogException(ex); + + if (ex is MissingReferenceException) + Debug.LogError("This exception can probably be fixed by adding \"CancelWith(gameObject)\" when you run the coroutine.\n" + + "Example: Timing.RunCoroutine(_foo().CancelWith(gameObject), Segment.RealtimeUpdate);"); + } + } + } + + if (_nextUpdateProcessSlot > 0) + { + ProcessIndex coindex = new ProcessIndex { seg = Segment.Update }; + if (UpdateTimeValues(coindex.seg)) + _lastUpdateProcessSlot = _nextUpdateProcessSlot; + + for (coindex.i = 0; coindex.i < _lastUpdateProcessSlot; coindex.i++) + { + try + { + if (!UpdatePaused[coindex.i] && !UpdateHeld[coindex.i] && UpdateProcesses[coindex.i] != null && !(localTime < UpdateProcesses[coindex.i].Current)) + { + currentCoroutine = _indexToHandle[coindex]; + + if (ProfilerDebugAmount != DebugInfoType.None && _indexToHandle.ContainsKey(coindex)) + { + Profiler.BeginSample(ProfilerDebugAmount == DebugInfoType.SeperateTags ? ("Processing Coroutine, " + + (_processLayers.ContainsKey(_indexToHandle[coindex]) ? "layer " + _processLayers[_indexToHandle[coindex]] : "no layer") + + (_processTags.ContainsKey(_indexToHandle[coindex]) ? ", tag " + _processTags[_indexToHandle[coindex]] : ", no tag")) + : "Processing Coroutine"); + } + + if (!UpdateProcesses[coindex.i].MoveNext()) + { + if (_indexToHandle.ContainsKey(coindex)) + KillCoroutinesOnInstance(_indexToHandle[coindex]); + } + else if (UpdateProcesses[coindex.i] != null && float.IsNaN(UpdateProcesses[coindex.i].Current)) + { + if (ReplacementFunction != null) + { + UpdateProcesses[coindex.i] = ReplacementFunction(UpdateProcesses[coindex.i], _indexToHandle[coindex]); + ReplacementFunction = null; + } + coindex.i--; + } + + if (ProfilerDebugAmount != DebugInfoType.None) + Profiler.EndSample(); + } + } + catch (System.Exception ex) + { + Debug.LogException(ex); + + if (ex is MissingReferenceException) + Debug.LogError("This exception can probably be fixed by adding \"CancelWith(gameObject)\" when you run the coroutine.\n" + + "Example: Timing.RunCoroutine(_foo().CancelWith(gameObject), Segment.Update);"); + } + } + } + + if (AutoTriggerManualTimeframe) + { + TriggerManualTimeframeUpdate(); + } + else + { + if (++_framesSinceUpdate > FramesUntilMaintenance) + { + _framesSinceUpdate = 0; + + if (ProfilerDebugAmount != DebugInfoType.None) + Profiler.BeginSample("Maintenance Task"); + + RemoveUnused(); + + if (ProfilerDebugAmount != DebugInfoType.None) + Profiler.EndSample(); + } + } + + currentCoroutine = default(CoroutineHandle); + + } + + void FixedUpdate() + { + if (OnPreExecute != null) + OnPreExecute(); + + if (_nextFixedUpdateProcessSlot > 0) + { + ProcessIndex coindex = new ProcessIndex { seg = Segment.FixedUpdate }; + if (UpdateTimeValues(coindex.seg)) + _lastFixedUpdateProcessSlot = _nextFixedUpdateProcessSlot; + + for (coindex.i = 0; coindex.i < _lastFixedUpdateProcessSlot; coindex.i++) + { + try + { + if (!FixedUpdatePaused[coindex.i] && !FixedUpdateHeld[coindex.i] && FixedUpdateProcesses[coindex.i] != null && !(localTime < FixedUpdateProcesses[coindex.i].Current)) + { + currentCoroutine = _indexToHandle[coindex]; + + if (ProfilerDebugAmount != DebugInfoType.None && _indexToHandle.ContainsKey(coindex)) + { + Profiler.BeginSample(ProfilerDebugAmount == DebugInfoType.SeperateTags ? ("Processing Coroutine, " + + (_processLayers.ContainsKey(_indexToHandle[coindex]) ? "layer " + _processLayers[_indexToHandle[coindex]] : "no layer") + + (_processTags.ContainsKey(_indexToHandle[coindex]) ? ", tag " + _processTags[_indexToHandle[coindex]] : ", no tag")) + : "Processing Coroutine"); + } + + if (!FixedUpdateProcesses[coindex.i].MoveNext()) + { + if (_indexToHandle.ContainsKey(coindex)) + KillCoroutinesOnInstance(_indexToHandle[coindex]); + } + else if (FixedUpdateProcesses[coindex.i] != null && float.IsNaN(FixedUpdateProcesses[coindex.i].Current)) + { + if (ReplacementFunction != null) + { + FixedUpdateProcesses[coindex.i] = ReplacementFunction(FixedUpdateProcesses[coindex.i], _indexToHandle[coindex]); + ReplacementFunction = null; + } + coindex.i--; + } + + if (ProfilerDebugAmount != DebugInfoType.None) + Profiler.EndSample(); + } + } + catch (System.Exception ex) + { + Debug.LogException(ex); + + if (ex is MissingReferenceException) + Debug.LogError("This exception can probably be fixed by adding \"CancelWith(gameObject)\" when you run the coroutine.\n" + + "Example: Timing.RunCoroutine(_foo().CancelWith(gameObject), Segment.FixedUpdate);"); + } + } + + currentCoroutine = default(CoroutineHandle); + } + } + + void LateUpdate() + { + if (OnPreExecute != null) + OnPreExecute(); + + if (_nextLateUpdateProcessSlot > 0) + { + ProcessIndex coindex = new ProcessIndex { seg = Segment.LateUpdate }; + if (UpdateTimeValues(coindex.seg)) + _lastLateUpdateProcessSlot = _nextLateUpdateProcessSlot; + + for (coindex.i = 0; coindex.i < _lastLateUpdateProcessSlot; coindex.i++) + { + try + { + if (!LateUpdatePaused[coindex.i] && !LateUpdateHeld[coindex.i] && LateUpdateProcesses[coindex.i] != null && !(localTime < LateUpdateProcesses[coindex.i].Current)) + { + currentCoroutine = _indexToHandle[coindex]; + + if (ProfilerDebugAmount != DebugInfoType.None && _indexToHandle.ContainsKey(coindex)) + { + Profiler.BeginSample(ProfilerDebugAmount == DebugInfoType.SeperateTags ? ("Processing Coroutine, " + + (_processLayers.ContainsKey(_indexToHandle[coindex]) ? "layer " + _processLayers[_indexToHandle[coindex]] : "no layer") + + (_processTags.ContainsKey(_indexToHandle[coindex]) ? ", tag " + _processTags[_indexToHandle[coindex]] : ", no tag")) + : "Processing Coroutine"); + } + + if (!LateUpdateProcesses[coindex.i].MoveNext()) + { + if (_indexToHandle.ContainsKey(coindex)) + KillCoroutinesOnInstance(_indexToHandle[coindex]); + } + else if (LateUpdateProcesses[coindex.i] != null && float.IsNaN(LateUpdateProcesses[coindex.i].Current)) + { + if (ReplacementFunction != null) + { + LateUpdateProcesses[coindex.i] = ReplacementFunction(LateUpdateProcesses[coindex.i], _indexToHandle[coindex]); + ReplacementFunction = null; + } + coindex.i--; + } + + if (ProfilerDebugAmount != DebugInfoType.None) + Profiler.EndSample(); + } + } + catch (System.Exception ex) + { + Debug.LogException(ex); + + if (ex is MissingReferenceException) + Debug.LogError("This exception can probably be fixed by adding \"CancelWith(gameObject)\" when you run the coroutine.\n" + + "Example: Timing.RunCoroutine(_foo().CancelWith(gameObject), Segment.LateUpdate);"); + } + } + + currentCoroutine = default(CoroutineHandle); + } + } + + /// + /// This will trigger an update in the manual timeframe segment. If the AutoTriggerManualTimeframeDuringUpdate variable is set to true + /// then this function will be automitically called every Update, so you would normally want to set that variable to false before + /// calling this function yourself. + /// + public void TriggerManualTimeframeUpdate() + { + if (OnPreExecute != null) + OnPreExecute(); + + if (_nextManualTimeframeProcessSlot > 0) + { + ProcessIndex coindex = new ProcessIndex { seg = Segment.ManualTimeframe }; + if (UpdateTimeValues(coindex.seg)) + _lastManualTimeframeProcessSlot = _nextManualTimeframeProcessSlot; + + for (coindex.i = 0; coindex.i < _lastManualTimeframeProcessSlot; coindex.i++) + { + try + { + if (!ManualTimeframePaused[coindex.i] && !ManualTimeframeHeld[coindex.i] && ManualTimeframeProcesses[coindex.i] != null && + !(localTime < ManualTimeframeProcesses[coindex.i].Current)) + { + currentCoroutine = _indexToHandle[coindex]; + + if (ProfilerDebugAmount != DebugInfoType.None && _indexToHandle.ContainsKey(coindex)) + { + Profiler.BeginSample(ProfilerDebugAmount == DebugInfoType.SeperateTags ? ("Processing Coroutine (Manual Timeframe), " + + (_processLayers.ContainsKey(_indexToHandle[coindex]) ? "layer " + _processLayers[_indexToHandle[coindex]] : "no layer") + + (_processTags.ContainsKey(_indexToHandle[coindex]) ? ", tag " + _processTags[_indexToHandle[coindex]] : ", no tag")) + : "Processing Coroutine (Manual Timeframe)"); + } + + if (!ManualTimeframeProcesses[coindex.i].MoveNext()) + { + if (_indexToHandle.ContainsKey(coindex)) + KillCoroutinesOnInstance(_indexToHandle[coindex]); + } + else if (ManualTimeframeProcesses[coindex.i] != null && float.IsNaN(ManualTimeframeProcesses[coindex.i].Current)) + { + if (ReplacementFunction != null) + { + ManualTimeframeProcesses[coindex.i] = ReplacementFunction(ManualTimeframeProcesses[coindex.i], _indexToHandle[coindex]); + ReplacementFunction = null; + } + coindex.i--; + } + + if (ProfilerDebugAmount != DebugInfoType.None) + Profiler.EndSample(); + } + } + catch (System.Exception ex) + { + Debug.LogException(ex); + + if (ex is MissingReferenceException) + Debug.LogError("This exception can probably be fixed by adding \"CancelWith(gameObject)\" when you run the coroutine.\n" + + "Example: Timing.RunCoroutine(_foo().CancelWith(gameObject), Segment.ManualTimeframe);"); + } + } + } + + if (++_framesSinceUpdate > FramesUntilMaintenance) + { + _framesSinceUpdate = 0; + + if (ProfilerDebugAmount != DebugInfoType.None) + Profiler.BeginSample("Maintenance Task"); + + RemoveUnused(); + + if (ProfilerDebugAmount != DebugInfoType.None) + Profiler.EndSample(); + } + + currentCoroutine = default(CoroutineHandle); + } + + private bool OnEditorStart() + { +#if UNITY_EDITOR + if (EditorApplication.isPlayingOrWillChangePlaymode) + return false; + + if (_lastEditorUpdateTime < 0.001) + _lastEditorUpdateTime = (float)EditorApplication.timeSinceStartup; + + if (ActiveInstances[_instanceID] == null) + OnEnable(); + + EditorApplication.update -= OnEditorUpdate; + + EditorApplication.update += OnEditorUpdate; + + return true; +#else + return false; +#endif + } + +#if UNITY_EDITOR + private void OnEditorUpdate() + { + if (OnPreExecute != null) + OnPreExecute(); + + if (EditorApplication.isPlayingOrWillChangePlaymode) + { + for (int i = 0; i < _nextEditorUpdateProcessSlot; i++) + EditorUpdateProcesses[i] = null; + _nextEditorUpdateProcessSlot = 0; + for (int i = 0; i < _nextEditorSlowUpdateProcessSlot; i++) + EditorSlowUpdateProcesses[i] = null; + _nextEditorSlowUpdateProcessSlot = 0; + + EditorApplication.update -= OnEditorUpdate; + _instance = null; + } + + if (_lastEditorSlowUpdateTime + TimeBetweenSlowUpdateCalls < EditorApplication.timeSinceStartup && _nextEditorSlowUpdateProcessSlot > 0) + { + ProcessIndex coindex = new ProcessIndex { seg = Segment.EditorSlowUpdate }; + if (UpdateTimeValues(coindex.seg)) + _lastEditorSlowUpdateProcessSlot = _nextEditorSlowUpdateProcessSlot; + + for (coindex.i = 0; coindex.i < _lastEditorSlowUpdateProcessSlot; coindex.i++) + { + currentCoroutine = _indexToHandle[coindex]; + + try + { + if (!EditorSlowUpdatePaused[coindex.i] && !EditorSlowUpdateHeld[coindex.i] && EditorSlowUpdateProcesses[coindex.i] != null && + !(EditorApplication.timeSinceStartup < EditorSlowUpdateProcesses[coindex.i].Current)) + { + if (!EditorSlowUpdateProcesses[coindex.i].MoveNext()) + { + if (_indexToHandle.ContainsKey(coindex)) + KillCoroutinesOnInstance(_indexToHandle[coindex]); + } + else if (EditorSlowUpdateProcesses[coindex.i] != null && float.IsNaN(EditorSlowUpdateProcesses[coindex.i].Current)) + { + if (ReplacementFunction != null) + { + EditorSlowUpdateProcesses[coindex.i] = ReplacementFunction(EditorSlowUpdateProcesses[coindex.i], _indexToHandle[coindex]); + ReplacementFunction = null; + } + coindex.i--; + } + } + } + catch (System.Exception ex) + { + Debug.LogException(ex); + + if (ex is MissingReferenceException) + Debug.LogError("This exception can probably be fixed by adding \"CancelWith(gameObject)\" when you run the coroutine.\n" + + "Example: Timing.RunCoroutine(_foo().CancelWith(gameObject), Segment.EditorUpdate);"); + } + } + } + + if (_nextEditorUpdateProcessSlot > 0) + { + ProcessIndex coindex = new ProcessIndex { seg = Segment.EditorUpdate }; + if (UpdateTimeValues(coindex.seg)) + _lastEditorUpdateProcessSlot = _nextEditorUpdateProcessSlot; + + for (coindex.i = 0; coindex.i < _lastEditorUpdateProcessSlot; coindex.i++) + { + currentCoroutine = _indexToHandle[coindex]; + + try + { + if (!EditorUpdatePaused[coindex.i] && !EditorUpdateHeld[coindex.i] && EditorUpdateProcesses[coindex.i] != null && + !(EditorApplication.timeSinceStartup < EditorUpdateProcesses[coindex.i].Current)) + { + if (!EditorUpdateProcesses[coindex.i].MoveNext()) + { + if (_indexToHandle.ContainsKey(coindex)) + KillCoroutinesOnInstance(_indexToHandle[coindex]); + } + else if (EditorUpdateProcesses[coindex.i] != null && float.IsNaN(EditorUpdateProcesses[coindex.i].Current)) + { + if (ReplacementFunction != null) + { + EditorUpdateProcesses[coindex.i] = ReplacementFunction(EditorUpdateProcesses[coindex.i], _indexToHandle[coindex]); + ReplacementFunction = null; + } + coindex.i--; + } + } + } + catch (System.Exception ex) + { + Debug.LogException(ex); + + if (ex is MissingReferenceException) + Debug.LogError("This exception can probably be fixed by adding \"CancelWith(gameObject)\" when you run the coroutine.\n" + + "Example: Timing.RunCoroutine(_foo().CancelWith(gameObject), Segment.EditorUpdate);"); + } + } + } + + if (++_framesSinceUpdate > FramesUntilMaintenance) + { + _framesSinceUpdate = 0; + + EditorRemoveUnused(); + } + + currentCoroutine = default(CoroutineHandle); + } +#endif + + private IEnumerator _EOFPumpWatcher() + { + while (_nextEndOfFrameProcessSlot > 0) + { + if (!_EOFPumpRan) + base.StartCoroutine(_EOFPump()); + + _EOFPumpRan = false; + + yield return WaitForOneFrame; + } + + _EOFPumpRan = false; + } + + private System.Collections.IEnumerator _EOFPump() + { + while (_nextEndOfFrameProcessSlot > 0) + { + yield return EofWaitObject; + + if (OnPreExecute != null) + OnPreExecute(); + + ProcessIndex coindex = new ProcessIndex { seg = Segment.EndOfFrame }; + _EOFPumpRan = true; + if (UpdateTimeValues(coindex.seg)) + _lastEndOfFrameProcessSlot = _nextEndOfFrameProcessSlot; + + for (coindex.i = 0; coindex.i < _lastEndOfFrameProcessSlot; coindex.i++) + { + try + { + if (!EndOfFramePaused[coindex.i] && !EndOfFrameHeld[coindex.i] && EndOfFrameProcesses[coindex.i] != null && !(localTime < EndOfFrameProcesses[coindex.i].Current)) + { + currentCoroutine = _indexToHandle[coindex]; + + if (ProfilerDebugAmount != DebugInfoType.None && _indexToHandle.ContainsKey(coindex)) + { + Profiler.BeginSample(ProfilerDebugAmount == DebugInfoType.SeperateTags ? ("Processing Coroutine, " + + (_processLayers.ContainsKey(_indexToHandle[coindex]) ? "layer " + _processLayers[_indexToHandle[coindex]] : "no layer") + + (_processTags.ContainsKey(_indexToHandle[coindex]) ? ", tag " + _processTags[_indexToHandle[coindex]] : ", no tag")) + : "Processing Coroutine"); + } + + if (!EndOfFrameProcesses[coindex.i].MoveNext()) + { + if (_indexToHandle.ContainsKey(coindex)) + KillCoroutinesOnInstance(_indexToHandle[coindex]); + } + else if (EndOfFrameProcesses[coindex.i] != null && float.IsNaN(EndOfFrameProcesses[coindex.i].Current)) + { + if (ReplacementFunction != null) + { + EndOfFrameProcesses[coindex.i] = ReplacementFunction(EndOfFrameProcesses[coindex.i], _indexToHandle[coindex]); + ReplacementFunction = null; + } + coindex.i--; + } + + if (ProfilerDebugAmount != DebugInfoType.None) + Profiler.EndSample(); + } + } + catch (System.Exception ex) + { + Debug.LogException(ex); + + if (ex is MissingReferenceException) + Debug.LogError("This exception can probably be fixed by adding \"CancelWith(gameObject)\" when you run the coroutine.\n" + + "Example: Timing.RunCoroutine(_foo().CancelWith(gameObject), Segment.EndOfFrame);"); + } + } + } + + currentCoroutine = default(CoroutineHandle); + } + + private void RemoveUnused() + { + var waitTrigsEnum = _waitingTriggers.GetEnumerator(); + while (waitTrigsEnum.MoveNext()) + { + if (waitTrigsEnum.Current.Value.Count == 0) + { + _waitingTriggers.Remove(waitTrigsEnum.Current.Key); + waitTrigsEnum = _waitingTriggers.GetEnumerator(); + continue; + } + + if (_handleToIndex.ContainsKey(waitTrigsEnum.Current.Key) && CoindexIsNull(_handleToIndex[waitTrigsEnum.Current.Key])) + { + CloseWaitingProcess(waitTrigsEnum.Current.Key); + waitTrigsEnum = _waitingTriggers.GetEnumerator(); + } + } + + ProcessIndex outer, inner; + outer.seg = inner.seg = Segment.Update; + for (outer.i = inner.i = 0; outer.i < _nextUpdateProcessSlot; outer.i++) + { + if (UpdateProcesses[outer.i] != null) + { + if (outer.i != inner.i) + { + UpdateProcesses[inner.i] = UpdateProcesses[outer.i]; + UpdatePaused[inner.i] = UpdatePaused[outer.i]; + UpdateHeld[inner.i] = UpdateHeld[outer.i]; + + if (_indexToHandle.ContainsKey(inner)) + { + RemoveGraffiti(_indexToHandle[inner]); + _handleToIndex.Remove(_indexToHandle[inner]); + _indexToHandle.Remove(inner); + } + + _handleToIndex[_indexToHandle[outer]] = inner; + _indexToHandle.Add(inner, _indexToHandle[outer]); + _indexToHandle.Remove(outer); + } + inner.i++; + } + } + for (outer.i = inner.i; outer.i < _nextUpdateProcessSlot; outer.i++) + { + UpdateProcesses[outer.i] = null; + UpdatePaused[outer.i] = false; + UpdateHeld[outer.i] = false; + if (_indexToHandle.ContainsKey(outer)) + { + RemoveGraffiti(_indexToHandle[outer]); + _handleToIndex.Remove(_indexToHandle[outer]); + _indexToHandle.Remove(outer); + } + } + + UpdateCoroutines = _nextUpdateProcessSlot = inner.i; + + outer.seg = inner.seg = Segment.FixedUpdate; + for (outer.i = inner.i = 0; outer.i < _nextFixedUpdateProcessSlot; outer.i++) + { + if (FixedUpdateProcesses[outer.i] != null) + { + if (outer.i != inner.i) + { + FixedUpdateProcesses[inner.i] = FixedUpdateProcesses[outer.i]; + FixedUpdatePaused[inner.i] = FixedUpdatePaused[outer.i]; + FixedUpdateHeld[inner.i] = FixedUpdateHeld[outer.i]; + + if (_indexToHandle.ContainsKey(inner)) + { + RemoveGraffiti(_indexToHandle[inner]); + _handleToIndex.Remove(_indexToHandle[inner]); + _indexToHandle.Remove(inner); + } + + _handleToIndex[_indexToHandle[outer]] = inner; + _indexToHandle.Add(inner, _indexToHandle[outer]); + _indexToHandle.Remove(outer); + } + inner.i++; + } + } + for (outer.i = inner.i; outer.i < _nextFixedUpdateProcessSlot; outer.i++) + { + FixedUpdateProcesses[outer.i] = null; + FixedUpdatePaused[outer.i] = false; + FixedUpdateHeld[outer.i] = false; + if (_indexToHandle.ContainsKey(outer)) + { + RemoveGraffiti(_indexToHandle[outer]); + + _handleToIndex.Remove(_indexToHandle[outer]); + _indexToHandle.Remove(outer); + } + } + + FixedUpdateCoroutines = _nextFixedUpdateProcessSlot = inner.i; + + outer.seg = inner.seg = Segment.LateUpdate; + for (outer.i = inner.i = 0; outer.i < _nextLateUpdateProcessSlot; outer.i++) + { + if (LateUpdateProcesses[outer.i] != null) + { + if (outer.i != inner.i) + { + LateUpdateProcesses[inner.i] = LateUpdateProcesses[outer.i]; + LateUpdatePaused[inner.i] = LateUpdatePaused[outer.i]; + LateUpdateHeld[inner.i] = LateUpdateHeld[outer.i]; + + if (_indexToHandle.ContainsKey(inner)) + { + RemoveGraffiti(_indexToHandle[inner]); + _handleToIndex.Remove(_indexToHandle[inner]); + _indexToHandle.Remove(inner); + } + + _handleToIndex[_indexToHandle[outer]] = inner; + _indexToHandle.Add(inner, _indexToHandle[outer]); + _indexToHandle.Remove(outer); + } + inner.i++; + } + } + for (outer.i = inner.i; outer.i < _nextLateUpdateProcessSlot; outer.i++) + { + LateUpdateProcesses[outer.i] = null; + LateUpdatePaused[outer.i] = false; + LateUpdateHeld[outer.i] = false; + if (_indexToHandle.ContainsKey(outer)) + { + RemoveGraffiti(_indexToHandle[outer]); + + _handleToIndex.Remove(_indexToHandle[outer]); + _indexToHandle.Remove(outer); + } + } + + LateUpdateCoroutines = _nextLateUpdateProcessSlot = inner.i; + + outer.seg = inner.seg = Segment.SlowUpdate; + for (outer.i = inner.i = 0; outer.i < _nextSlowUpdateProcessSlot; outer.i++) + { + if (SlowUpdateProcesses[outer.i] != null) + { + if (outer.i != inner.i) + { + SlowUpdateProcesses[inner.i] = SlowUpdateProcesses[outer.i]; + SlowUpdatePaused[inner.i] = SlowUpdatePaused[outer.i]; + SlowUpdateHeld[inner.i] = SlowUpdateHeld[outer.i]; + + if (_indexToHandle.ContainsKey(inner)) + { + RemoveGraffiti(_indexToHandle[inner]); + _handleToIndex.Remove(_indexToHandle[inner]); + _indexToHandle.Remove(inner); + } + + _handleToIndex[_indexToHandle[outer]] = inner; + _indexToHandle.Add(inner, _indexToHandle[outer]); + _indexToHandle.Remove(outer); + } + inner.i++; + } + } + for (outer.i = inner.i; outer.i < _nextSlowUpdateProcessSlot; outer.i++) + { + SlowUpdateProcesses[outer.i] = null; + SlowUpdatePaused[outer.i] = false; + SlowUpdateHeld[outer.i] = false; + if (_indexToHandle.ContainsKey(outer)) + { + RemoveGraffiti(_indexToHandle[outer]); + + _handleToIndex.Remove(_indexToHandle[outer]); + _indexToHandle.Remove(outer); + } + } + + SlowUpdateCoroutines = _nextSlowUpdateProcessSlot = inner.i; + + outer.seg = inner.seg = Segment.RealtimeUpdate; + for (outer.i = inner.i = 0; outer.i < _nextRealtimeUpdateProcessSlot; outer.i++) + { + if (RealtimeUpdateProcesses[outer.i] != null) + { + if (outer.i != inner.i) + { + RealtimeUpdateProcesses[inner.i] = RealtimeUpdateProcesses[outer.i]; + RealtimeUpdatePaused[inner.i] = RealtimeUpdatePaused[outer.i]; + RealtimeUpdateHeld[inner.i] = RealtimeUpdateHeld[outer.i]; + + if (_indexToHandle.ContainsKey(inner)) + { + RemoveGraffiti(_indexToHandle[inner]); + _handleToIndex.Remove(_indexToHandle[inner]); + _indexToHandle.Remove(inner); + } + + _handleToIndex[_indexToHandle[outer]] = inner; + _indexToHandle.Add(inner, _indexToHandle[outer]); + _indexToHandle.Remove(outer); + } + inner.i++; + } + } + for (outer.i = inner.i; outer.i < _nextRealtimeUpdateProcessSlot; outer.i++) + { + RealtimeUpdateProcesses[outer.i] = null; + RealtimeUpdatePaused[outer.i] = false; + RealtimeUpdateHeld[outer.i] = false; + if (_indexToHandle.ContainsKey(outer)) + { + RemoveGraffiti(_indexToHandle[outer]); + + _handleToIndex.Remove(_indexToHandle[outer]); + _indexToHandle.Remove(outer); + } + } + + RealtimeUpdateCoroutines = _nextRealtimeUpdateProcessSlot = inner.i; + + outer.seg = inner.seg = Segment.EndOfFrame; + for (outer.i = inner.i = 0; outer.i < _nextEndOfFrameProcessSlot; outer.i++) + { + if (EndOfFrameProcesses[outer.i] != null) + { + if (outer.i != inner.i) + { + EndOfFrameProcesses[inner.i] = EndOfFrameProcesses[outer.i]; + EndOfFramePaused[inner.i] = EndOfFramePaused[outer.i]; + EndOfFrameHeld[inner.i] = EndOfFrameHeld[outer.i]; + + if (_indexToHandle.ContainsKey(inner)) + { + RemoveGraffiti(_indexToHandle[inner]); + _handleToIndex.Remove(_indexToHandle[inner]); + _indexToHandle.Remove(inner); + } + + _handleToIndex[_indexToHandle[outer]] = inner; + _indexToHandle.Add(inner, _indexToHandle[outer]); + _indexToHandle.Remove(outer); + } + inner.i++; + } + } + for (outer.i = inner.i; outer.i < _nextEndOfFrameProcessSlot; outer.i++) + { + EndOfFrameProcesses[outer.i] = null; + EndOfFramePaused[outer.i] = false; + EndOfFrameHeld[outer.i] = false; + if (_indexToHandle.ContainsKey(outer)) + { + RemoveGraffiti(_indexToHandle[outer]); + + _handleToIndex.Remove(_indexToHandle[outer]); + _indexToHandle.Remove(outer); + } + } + + EndOfFrameCoroutines = _nextEndOfFrameProcessSlot = inner.i; + + outer.seg = inner.seg = Segment.ManualTimeframe; + for (outer.i = inner.i = 0; outer.i < _nextManualTimeframeProcessSlot; outer.i++) + { + if (ManualTimeframeProcesses[outer.i] != null) + { + if (outer.i != inner.i) + { + ManualTimeframeProcesses[inner.i] = ManualTimeframeProcesses[outer.i]; + ManualTimeframePaused[inner.i] = ManualTimeframePaused[outer.i]; + ManualTimeframeHeld[inner.i] = ManualTimeframeHeld[outer.i]; + + if (_indexToHandle.ContainsKey(inner)) + { + RemoveGraffiti(_indexToHandle[inner]); + _handleToIndex.Remove(_indexToHandle[inner]); + _indexToHandle.Remove(inner); + } + + _handleToIndex[_indexToHandle[outer]] = inner; + _indexToHandle.Add(inner, _indexToHandle[outer]); + _indexToHandle.Remove(outer); + } + inner.i++; + } + } + for (outer.i = inner.i; outer.i < _nextManualTimeframeProcessSlot; outer.i++) + { + ManualTimeframeProcesses[outer.i] = null; + ManualTimeframePaused[outer.i] = false; + ManualTimeframeHeld[outer.i] = false; + if (_indexToHandle.ContainsKey(outer)) + { + RemoveGraffiti(_indexToHandle[outer]); + + _handleToIndex.Remove(_indexToHandle[outer]); + _indexToHandle.Remove(outer); + } + } + + ManualTimeframeCoroutines = _nextManualTimeframeProcessSlot = inner.i; + } + + private void EditorRemoveUnused() + { + var waitTrigsEnum = _waitingTriggers.GetEnumerator(); + while (waitTrigsEnum.MoveNext()) + { + if (_handleToIndex.ContainsKey(waitTrigsEnum.Current.Key) && CoindexIsNull(_handleToIndex[waitTrigsEnum.Current.Key])) + { + CloseWaitingProcess(waitTrigsEnum.Current.Key); + waitTrigsEnum = _waitingTriggers.GetEnumerator(); + } + } + + ProcessIndex outer, inner; + outer.seg = inner.seg = Segment.EditorUpdate; + for (outer.i = inner.i = 0; outer.i < _nextEditorUpdateProcessSlot; outer.i++) + { + if (EditorUpdateProcesses[outer.i] != null) + { + if (outer.i != inner.i) + { + EditorUpdateProcesses[inner.i] = EditorUpdateProcesses[outer.i]; + EditorUpdatePaused[inner.i] = EditorUpdatePaused[outer.i]; + EditorUpdateHeld[inner.i] = EditorUpdateHeld[outer.i]; + + if (_indexToHandle.ContainsKey(inner)) + { + RemoveGraffiti(_indexToHandle[inner]); + _handleToIndex.Remove(_indexToHandle[inner]); + _indexToHandle.Remove(inner); + } + + _handleToIndex[_indexToHandle[outer]] = inner; + _indexToHandle.Add(inner, _indexToHandle[outer]); + _indexToHandle.Remove(outer); + } + inner.i++; + } + } + for (outer.i = inner.i; outer.i < _nextEditorUpdateProcessSlot; outer.i++) + { + EditorUpdateProcesses[outer.i] = null; + EditorUpdatePaused[outer.i] = false; + EditorUpdateHeld[outer.i] = false; + if (_indexToHandle.ContainsKey(outer)) + { + RemoveGraffiti(_indexToHandle[outer]); + + _handleToIndex.Remove(_indexToHandle[outer]); + _indexToHandle.Remove(outer); + } + } + + EditorUpdateCoroutines = _nextEditorUpdateProcessSlot = inner.i; + + outer.seg = inner.seg = Segment.EditorSlowUpdate; + for (outer.i = inner.i = 0; outer.i < _nextEditorSlowUpdateProcessSlot; outer.i++) + { + if (EditorSlowUpdateProcesses[outer.i] != null) + { + if (outer.i != inner.i) + { + EditorSlowUpdateProcesses[inner.i] = EditorSlowUpdateProcesses[outer.i]; + EditorUpdatePaused[inner.i] = EditorUpdatePaused[outer.i]; + EditorUpdateHeld[inner.i] = EditorUpdateHeld[outer.i]; + + if (_indexToHandle.ContainsKey(inner)) + { + RemoveGraffiti(_indexToHandle[inner]); + _handleToIndex.Remove(_indexToHandle[inner]); + _indexToHandle.Remove(inner); + } + + _handleToIndex[_indexToHandle[outer]] = inner; + _indexToHandle.Add(inner, _indexToHandle[outer]); + _indexToHandle.Remove(outer); + } + inner.i++; + } + } + for (outer.i = inner.i; outer.i < _nextEditorSlowUpdateProcessSlot; outer.i++) + { + EditorSlowUpdateProcesses[outer.i] = null; + EditorSlowUpdatePaused[outer.i] = false; + EditorSlowUpdateHeld[outer.i] = false; + if (_indexToHandle.ContainsKey(outer)) + { + RemoveGraffiti(_indexToHandle[outer]); + + _handleToIndex.Remove(_indexToHandle[outer]); + _indexToHandle.Remove(outer); + } + } + + EditorSlowUpdateCoroutines = _nextEditorSlowUpdateProcessSlot = inner.i; + } + + /// + /// Run a new coroutine in the Update segment. + /// + /// The new coroutine's handle. + /// The coroutine's handle, which can be used for Wait and Kill operations. + public static CoroutineHandle RunCoroutine(IEnumerator coroutine) + { + return coroutine == null ? new CoroutineHandle() + : Instance.RunCoroutineInternal(coroutine, Segment.Update, 0, false, null, new CoroutineHandle(Instance._instanceID), true); + } + + /// + /// Run a new coroutine in the Update segment. + /// + /// The new coroutine's handle. + /// The new coroutine will be put on a layer corresponding to this gameObject. + /// The coroutine's handle, which can be used for Wait and Kill operations. + public static CoroutineHandle RunCoroutine(IEnumerator coroutine, GameObject gameObj) + { + return coroutine == null ? new CoroutineHandle() : Instance.RunCoroutineInternal(coroutine, Segment.Update, + gameObj == null ? 0 : gameObj.GetInstanceID(), gameObj != null, null, new CoroutineHandle(Instance._instanceID), true); + } + + /// + /// Run a new coroutine in the Update segment. + /// + /// The new coroutine's handle. + /// An optional layer to attach to the coroutine which can later be used to identify this coroutine. + /// The coroutine's handle, which can be used for Wait and Kill operations. + public static CoroutineHandle RunCoroutine(IEnumerator coroutine, int layer) + { + return coroutine == null ? new CoroutineHandle() + : Instance.RunCoroutineInternal(coroutine, Segment.Update, layer, true, null, new CoroutineHandle(Instance._instanceID), true); + } + + /// + /// Run a new coroutine in the Update segment. + /// + /// The new coroutine's handle. + /// An optional tag to attach to the coroutine which can later be used to identify this coroutine. + /// The coroutine's handle, which can be used for Wait and Kill operations. + public static CoroutineHandle RunCoroutine(IEnumerator coroutine, string tag) + { + return coroutine == null ? new CoroutineHandle() + : Instance.RunCoroutineInternal(coroutine, Segment.Update, 0, false, tag, new CoroutineHandle(Instance._instanceID), true); + } + + /// + /// Run a new coroutine in the Update segment. + /// + /// The new coroutine's handle. + /// The new coroutine will be put on a layer corresponding to this gameObject. + /// An optional tag to attach to the coroutine which can later be used to identify this coroutine. + /// The coroutine's handle, which can be used for Wait and Kill operations. + public static CoroutineHandle RunCoroutine(IEnumerator coroutine, GameObject gameObj, string tag) + { + return coroutine == null ? new CoroutineHandle() : Instance.RunCoroutineInternal(coroutine, Segment.Update, + gameObj == null ? 0 : gameObj.GetInstanceID(), gameObj != null, tag, new CoroutineHandle(Instance._instanceID), true); + } + + /// + /// Run a new coroutine in the Update segment. + /// + /// The new coroutine's handle. + /// An optional layer to attach to the coroutine which can later be used to identify this coroutine. + /// An optional tag to attach to the coroutine which can later be used to identify this coroutine. + /// The coroutine's handle, which can be used for Wait and Kill operations. + public static CoroutineHandle RunCoroutine(IEnumerator coroutine, int layer, string tag) + { + return coroutine == null ? new CoroutineHandle() + : Instance.RunCoroutineInternal(coroutine, Segment.Update, layer, true, tag, new CoroutineHandle(Instance._instanceID), true); + } + + /// + /// Run a new coroutine. + /// + /// The new coroutine's handle. + /// The segment that the coroutine should run in. + /// The coroutine's handle, which can be used for Wait and Kill operations. + public static CoroutineHandle RunCoroutine(IEnumerator coroutine, Segment segment) + { + return coroutine == null ? new CoroutineHandle() + : Instance.RunCoroutineInternal(coroutine, segment, 0, false, null, new CoroutineHandle(Instance._instanceID), true); + } + + /// + /// Run a new coroutine. + /// + /// The new coroutine's handle. + /// The segment that the coroutine should run in. + /// The new coroutine will be put on a layer corresponding to this gameObject. + /// The coroutine's handle, which can be used for Wait and Kill operations. + public static CoroutineHandle RunCoroutine(IEnumerator coroutine, Segment segment, GameObject gameObj) + { + return coroutine == null ? new CoroutineHandle() : Instance.RunCoroutineInternal(coroutine, segment, + gameObj == null ? 0 : gameObj.GetInstanceID(), gameObj != null, null, new CoroutineHandle(Instance._instanceID), true); + } + + /// + /// Run a new coroutine. + /// + /// The new coroutine's handle. + /// The segment that the coroutine should run in. + /// An optional layer to attach to the coroutine which can later be used to identify this coroutine. + /// The coroutine's handle, which can be used for Wait and Kill operations. + public static CoroutineHandle RunCoroutine(IEnumerator coroutine, Segment segment, int layer) + { + return coroutine == null ? new CoroutineHandle() + : Instance.RunCoroutineInternal(coroutine, segment, layer, true, null, new CoroutineHandle(Instance._instanceID), true); + } + + /// + /// Run a new coroutine. + /// + /// The new coroutine's handle. + /// The segment that the coroutine should run in. + /// An optional tag to attach to the coroutine which can later be used to identify this coroutine. + /// The coroutine's handle, which can be used for Wait and Kill operations. + public static CoroutineHandle RunCoroutine(IEnumerator coroutine, Segment segment, string tag) + { + return coroutine == null ? new CoroutineHandle() + : Instance.RunCoroutineInternal(coroutine, segment, 0, false, tag, new CoroutineHandle(Instance._instanceID), true); + } + + /// + /// Run a new coroutine. + /// + /// The new coroutine's handle. + /// The segment that the coroutine should run in. + /// The new coroutine will be put on a layer corresponding to this gameObject. + /// An optional tag to attach to the coroutine which can later be used to identify this coroutine. + /// The coroutine's handle, which can be used for Wait and Kill operations. + public static CoroutineHandle RunCoroutine(IEnumerator coroutine, Segment segment, GameObject gameObj, string tag) + { + return coroutine == null ? new CoroutineHandle() : Instance.RunCoroutineInternal(coroutine, segment, + gameObj == null ? 0 : gameObj.GetInstanceID(), gameObj != null, tag, new CoroutineHandle(Instance._instanceID), true); + } + + /// + /// Run a new coroutine. + /// + /// The new coroutine's handle. + /// The segment that the coroutine should run in. + /// An optional layer to attach to the coroutine which can later be used to identify this coroutine. + /// An optional tag to attach to the coroutine which can later be used to identify this coroutine. + /// The coroutine's handle, which can be used for Wait and Kill operations. + public static CoroutineHandle RunCoroutine(IEnumerator coroutine, Segment segment, int layer, string tag) + { + return coroutine == null ? new CoroutineHandle() + : Instance.RunCoroutineInternal(coroutine, segment, layer, true, tag, new CoroutineHandle(Instance._instanceID), true); + } + + /// + /// Run a new coroutine on this Timing instance in the Update segment. + /// + /// The new coroutine's handle. + /// The coroutine's handle, which can be used for Wait and Kill operations. + public CoroutineHandle RunCoroutineOnInstance(IEnumerator coroutine) + { + return coroutine == null ? new CoroutineHandle() + : RunCoroutineInternal(coroutine, Segment.Update, 0, false, null, new CoroutineHandle(_instanceID), true); + } + + /// + /// Run a new coroutine on this Timing instance in the Update segment. + /// + /// The new coroutine's handle. + /// The new coroutine will be put on a layer corresponding to this gameObject. + /// The coroutine's handle, which can be used for Wait and Kill operations. + public CoroutineHandle RunCoroutineOnInstance(IEnumerator coroutine, GameObject gameObj) + { + return coroutine == null ? new CoroutineHandle() : RunCoroutineInternal(coroutine, Segment.Update, + gameObj == null ? 0 : gameObj.GetInstanceID(), gameObj != null, null, new CoroutineHandle(_instanceID), true); + } + + /// + /// Run a new coroutine on this Timing instance in the Update segment. + /// + /// The new coroutine's handle. + /// An optional layer to attach to the coroutine which can later be used to identify this coroutine. + /// The coroutine's handle, which can be used for Wait and Kill operations. + public CoroutineHandle RunCoroutineOnInstance(IEnumerator coroutine, int layer) + { + return coroutine == null ? new CoroutineHandle() + : RunCoroutineInternal(coroutine, Segment.Update, layer, true, null, new CoroutineHandle(_instanceID), true); + } + + /// + /// Run a new coroutine on this Timing instance in the Update segment. + /// + /// The new coroutine's handle. + /// An optional tag to attach to the coroutine which can later be used to identify this coroutine. + /// The coroutine's handle, which can be used for Wait and Kill operations. + public CoroutineHandle RunCoroutineOnInstance(IEnumerator coroutine, string tag) + { + return coroutine == null ? new CoroutineHandle() + : RunCoroutineInternal(coroutine, Segment.Update, 0, false, tag, new CoroutineHandle(_instanceID), true); + } + + /// + /// Run a new coroutine on this Timing instance in the Update segment. + /// + /// The new coroutine's handle. + /// The new coroutine will be put on a layer corresponding to this gameObject. + /// An optional tag to attach to the coroutine which can later be used to identify this coroutine. + /// The coroutine's handle, which can be used for Wait and Kill operations. + public CoroutineHandle RunCoroutineOnInstance(IEnumerator coroutine, GameObject gameObj, string tag) + { + return coroutine == null ? new CoroutineHandle() : RunCoroutineInternal(coroutine, Segment.Update, + gameObj == null ? 0 : gameObj.GetInstanceID(), gameObj != null, tag, new CoroutineHandle(_instanceID), true); + } + + /// + /// Run a new coroutine on this Timing instance in the Update segment. + /// + /// The new coroutine's handle. + /// An optional layer to attach to the coroutine which can later be used to identify this coroutine. + /// An optional tag to attach to the coroutine which can later be used to identify this coroutine. + /// The coroutine's handle, which can be used for Wait and Kill operations. + public CoroutineHandle RunCoroutineOnInstance(IEnumerator coroutine, int layer, string tag) + { + return coroutine == null ? new CoroutineHandle() + : RunCoroutineInternal(coroutine, Segment.Update, layer, true, tag, new CoroutineHandle(_instanceID), true); + } + + /// + /// Run a new coroutine on this Timing instance. + /// + /// The new coroutine's handle. + /// The segment that the coroutine should run in. + /// The coroutine's handle, which can be used for Wait and Kill operations. + public CoroutineHandle RunCoroutineOnInstance(IEnumerator coroutine, Segment segment) + { + return coroutine == null ? new CoroutineHandle() + : RunCoroutineInternal(coroutine, segment, 0, false, null, new CoroutineHandle(_instanceID), true); + } + + /// + /// Run a new coroutine on this Timing instance. + /// + /// The new coroutine's handle. + /// The segment that the coroutine should run in. + /// The new coroutine will be put on a layer corresponding to this gameObject. + /// The coroutine's handle, which can be used for Wait and Kill operations. + public CoroutineHandle RunCoroutineOnInstance(IEnumerator coroutine, Segment segment, GameObject gameObj) + { + return coroutine == null ? new CoroutineHandle() : RunCoroutineInternal(coroutine, segment, + gameObj == null ? 0 : gameObj.GetInstanceID(), gameObj != null, null, new CoroutineHandle(_instanceID), true); + } + + /// + /// Run a new coroutine on this Timing instance. + /// + /// The new coroutine's handle. + /// The segment that the coroutine should run in. + /// An optional layer to attach to the coroutine which can later be used to identify this coroutine. + /// The coroutine's handle, which can be used for Wait and Kill operations. + public CoroutineHandle RunCoroutineOnInstance(IEnumerator coroutine, Segment segment, int layer) + { + return coroutine == null ? new CoroutineHandle() + : RunCoroutineInternal(coroutine, segment, layer, true, null, new CoroutineHandle(_instanceID), true); + } + + /// + /// Run a new coroutine on this Timing instance. + /// + /// The new coroutine's handle. + /// The segment that the coroutine should run in. + /// An optional tag to attach to the coroutine which can later be used to identify this coroutine. + /// The coroutine's handle, which can be used for Wait and Kill operations. + public CoroutineHandle RunCoroutineOnInstance(IEnumerator coroutine, Segment segment, string tag) + { + return coroutine == null ? new CoroutineHandle() + : RunCoroutineInternal(coroutine, segment, 0, false, tag, new CoroutineHandle(_instanceID), true); + } + + /// + /// Run a new coroutine on this Timing instance. + /// + /// The new coroutine's handle. + /// The segment that the coroutine should run in. + /// The new coroutine will be put on a layer corresponding to this gameObject. + /// An optional tag to attach to the coroutine which can later be used to identify this coroutine. + /// The coroutine's handle, which can be used for Wait and Kill operations. + public CoroutineHandle RunCoroutineOnInstance(IEnumerator coroutine, Segment segment, GameObject gameObj, string tag) + { + return coroutine == null ? new CoroutineHandle() : RunCoroutineInternal(coroutine, segment, + gameObj == null ? 0 : gameObj.GetInstanceID(), gameObj != null, tag, new CoroutineHandle(_instanceID), true); + } + + /// + /// Run a new coroutine on this Timing instance. + /// + /// The new coroutine's handle. + /// The segment that the coroutine should run in. + /// An optional layer to attach to the coroutine which can later be used to identify this coroutine. + /// An optional tag to attach to the coroutine which can later be used to identify this coroutine. + /// The coroutine's handle, which can be used for Wait and Kill operations. + public CoroutineHandle RunCoroutineOnInstance(IEnumerator coroutine, Segment segment, int layer, string tag) + { + return coroutine == null ? new CoroutineHandle() + : RunCoroutineInternal(coroutine, segment, layer, true, tag, new CoroutineHandle(_instanceID), true); + } + + /// + /// Run a new coroutine in the Update segment, but not while the coroutine with the supplied handle is running. + /// + /// The new coroutine's handle. + /// A tag to attach to the coroutine, and to check for existing instances. + /// Should this coroutine fail to start, overwrite, or wait for any coroutines to finish if any matches are + /// currently running. + /// The newly created or existing handle. + public static CoroutineHandle RunCoroutineSingleton(IEnumerator coroutine, CoroutineHandle handle, SingletonBehavior behaviorOnCollision) + { + if (coroutine == null) return new CoroutineHandle(); + + if (behaviorOnCollision == SingletonBehavior.Overwrite) + { + KillCoroutines(handle); + } + else if (IsRunning(handle)) + { + switch (behaviorOnCollision) + { + case SingletonBehavior.Abort: + return handle; + case SingletonBehavior.AbortAndUnpause: + ResumeCoroutines(handle); + return handle; + case SingletonBehavior.Wait: + CoroutineHandle newCoroutineHandle = Instance.RunCoroutineInternal(coroutine, Segment.Update, 0, false, null, + new CoroutineHandle(Instance._instanceID), false); + WaitForOtherHandles(newCoroutineHandle, handle, false); + return newCoroutineHandle; + + } + } + + return Instance.RunCoroutineInternal(coroutine, Segment.Update, 0, false, null, new CoroutineHandle(Instance._instanceID), true); + } + + /// + /// Run a new coroutine in the Update segment with the supplied layer unless there is already one or more coroutines running with that layer. + /// + /// The new coroutine's handle. + /// The new coroutine will be put on a layer corresponding to this gameObject. + /// Should this coroutine fail to start, overwrite, or wait for any coroutines to finish if any matches are + /// currently running. + /// The newly created or existing handle. + public static CoroutineHandle RunCoroutineSingleton(IEnumerator coroutine, GameObject gameObj, SingletonBehavior behaviorOnCollision) + { + return gameObj == null ? RunCoroutine(coroutine) : RunCoroutineSingleton(coroutine, gameObj.GetInstanceID(), behaviorOnCollision); + } + + /// + /// Run a new coroutine in the Update segment with the supplied layer unless there is already one or more coroutines running with that layer. + /// + /// The new coroutine's handle. + /// A layer to attach to the coroutine, and to check for existing instances. + /// Should this coroutine fail to start, overwrite, or wait for any coroutines to finish if any matches are + /// currently running. + /// The newly created or existing handle. + public static CoroutineHandle RunCoroutineSingleton(IEnumerator coroutine, int layer, SingletonBehavior behaviorOnCollision) + { + if (coroutine == null) return new CoroutineHandle(); + + if (behaviorOnCollision == SingletonBehavior.Overwrite) + { + KillCoroutines(layer); + } + else if (Instance._layeredProcesses.ContainsKey(layer)) + { + if (behaviorOnCollision == SingletonBehavior.AbortAndUnpause) + _instance.ResumeCoroutinesOnInstance(_instance._layeredProcesses[layer]); + + switch (behaviorOnCollision) + { + case SingletonBehavior.Abort: + case SingletonBehavior.AbortAndUnpause: + var indexEnum = Instance._layeredProcesses[layer].GetEnumerator(); + + while (indexEnum.MoveNext()) + if (IsRunning(indexEnum.Current)) + return indexEnum.Current; + + break; + case SingletonBehavior.Wait: + CoroutineHandle newCoroutineHandle = Instance.RunCoroutineInternal(coroutine, Segment.Update, layer, true, null, + new CoroutineHandle(Instance._instanceID), false); + WaitForOtherHandles(newCoroutineHandle, _instance._layeredProcesses[layer], false); + return newCoroutineHandle; + } + } + + return Instance.RunCoroutineInternal(coroutine, Segment.Update, layer, true, null, new CoroutineHandle(Instance._instanceID), true); + } + + /// + /// Run a new coroutine in the Update segment with the supplied tag unless there is already one or more coroutines running with that tag. + /// + /// The new coroutine's handle. + /// A tag to attach to the coroutine, and to check for existing instances. + /// Should this coroutine fail to start, overwrite, or wait for any coroutines to finish if any matches are + /// currently running. + /// The newly created or existing handle. + public static CoroutineHandle RunCoroutineSingleton(IEnumerator coroutine, string tag, SingletonBehavior behaviorOnCollision) + { + if (coroutine == null) return new CoroutineHandle(); + + if (behaviorOnCollision == SingletonBehavior.Overwrite) + { + KillCoroutines(tag); + } + else if (Instance._taggedProcesses.ContainsKey(tag)) + { + if (behaviorOnCollision == SingletonBehavior.AbortAndUnpause) + _instance.ResumeCoroutinesOnInstance(_instance._taggedProcesses[tag]); + + switch (behaviorOnCollision) + { + case SingletonBehavior.Abort: + case SingletonBehavior.AbortAndUnpause: + var indexEnum = Instance._taggedProcesses[tag].GetEnumerator(); + + while (indexEnum.MoveNext()) + if (IsRunning(indexEnum.Current)) + return indexEnum.Current; + + break; + case SingletonBehavior.Wait: + CoroutineHandle newCoroutineHandle = Instance.RunCoroutineInternal(coroutine, Segment.Update, 0, false, tag, + new CoroutineHandle(Instance._instanceID), false); + WaitForOtherHandles(newCoroutineHandle, _instance._taggedProcesses[tag], false); + return newCoroutineHandle; + } + } + + return Instance.RunCoroutineInternal(coroutine, Segment.Update, 0, false, tag, new CoroutineHandle(Instance._instanceID), true); + } + + /// + /// Run a new coroutine in the Update segment with the supplied graffitti unless there is already one or more coroutines running with both that + /// tag and layer. + /// + /// The new coroutine's handle. + /// The new coroutine will be put on a layer corresponding to this gameObject. + /// A tag to attach to the coroutine, and to check for existing instances. + /// Should this coroutine fail to start, overwrite, or wait for any coroutines to finish if any matches are + /// currently running. + /// The newly created or existing handle. + public static CoroutineHandle RunCoroutineSingleton(IEnumerator coroutine, GameObject gameObj, string tag, SingletonBehavior behaviorOnCollision) + { + return gameObj == null ? RunCoroutineSingleton(coroutine, tag, behaviorOnCollision) + : RunCoroutineSingleton(coroutine, gameObj.GetInstanceID(), tag, behaviorOnCollision); + } + + /// + /// Run a new coroutine in the Update segment with the supplied graffitti unless there is already one or more coroutines running with both that + /// tag and layer. + /// + /// The new coroutine's handle. + /// A layer to attach to the coroutine, and to check for existing instances. + /// A tag to attach to the coroutine, and to check for existing instances. + /// Should this coroutine fail to start, overwrite, or wait for any coroutines to finish if any matches are + /// currently running. + /// The newly created or existing handle. + public static CoroutineHandle RunCoroutineSingleton(IEnumerator coroutine, int layer, string tag, SingletonBehavior behaviorOnCollision) + { + if (coroutine == null) return new CoroutineHandle(); + + if (behaviorOnCollision == SingletonBehavior.Overwrite) + { + KillCoroutines(layer, tag); + return Instance.RunCoroutineInternal(coroutine, Segment.Update, layer, true, tag, new CoroutineHandle(Instance._instanceID), true); + } + + if (!Instance._taggedProcesses.ContainsKey(tag) || !Instance._layeredProcesses.ContainsKey(layer)) + return Instance.RunCoroutineInternal(coroutine, Segment.Update, layer, true, tag, new CoroutineHandle(Instance._instanceID), true); + + if (behaviorOnCollision == SingletonBehavior.AbortAndUnpause) + ResumeCoroutines(layer, tag); + + if (behaviorOnCollision == SingletonBehavior.Abort || behaviorOnCollision == SingletonBehavior.AbortAndUnpause) + { + var matchesEnum = Instance._taggedProcesses[tag].GetEnumerator(); + while (matchesEnum.MoveNext()) + if (_instance._processLayers.ContainsKey(matchesEnum.Current) && _instance._processLayers[matchesEnum.Current] == layer) + return matchesEnum.Current; + } + + if (behaviorOnCollision == SingletonBehavior.Wait) + { + List matches = new List(); + var matchesEnum = Instance._taggedProcesses[tag].GetEnumerator(); + while (matchesEnum.MoveNext()) + if (Instance._processLayers.ContainsKey(matchesEnum.Current) && Instance._processLayers[matchesEnum.Current] == layer) + matches.Add(matchesEnum.Current); + + if (matches.Count > 0) + { + CoroutineHandle newCoroutineHandle = _instance.RunCoroutineInternal(coroutine, Segment.Update, layer, true, tag, + new CoroutineHandle(_instance._instanceID), false); + WaitForOtherHandles(newCoroutineHandle, matches, false); + return newCoroutineHandle; + } + } + + return Instance.RunCoroutineInternal(coroutine, Segment.Update, layer, true, tag, new CoroutineHandle(Instance._instanceID), true); + } + + /// + /// Run a new coroutine, but not while the coroutine with the supplied handle is running. + /// + /// The new coroutine's handle. + /// The segment that the coroutine should run in. + /// A tag to attach to the coroutine, and to check for existing instances. + /// Should this coroutine fail to start, overwrite, or wait for any coroutines to finish if any matches are + /// currently running. + /// The newly created or existing handle. + public static CoroutineHandle RunCoroutineSingleton(IEnumerator coroutine, CoroutineHandle handle, Segment segment, + SingletonBehavior behaviorOnCollision) + { + if (coroutine == null) return new CoroutineHandle(); + + if (behaviorOnCollision == SingletonBehavior.Overwrite) + { + KillCoroutines(handle); + } + else if (IsRunning(handle)) + { + switch (behaviorOnCollision) + { + case SingletonBehavior.Abort: + return handle; + case SingletonBehavior.AbortAndUnpause: + ResumeCoroutines(handle); + return handle; + case SingletonBehavior.Wait: + CoroutineHandle newCoroutineHandle = Instance.RunCoroutineInternal(coroutine, segment, 0, false, null, + new CoroutineHandle(Instance._instanceID), false); + WaitForOtherHandles(newCoroutineHandle, handle, false); + return newCoroutineHandle; + + } + } + + return Instance.RunCoroutineInternal(coroutine, segment, 0, false, null, new CoroutineHandle(Instance._instanceID), true); + } + + /// + /// Run a new coroutine with the supplied layer unless there is already one or more coroutines running with that layer. + /// + /// The new coroutine's handle. + /// The segment that the coroutine should run in. + /// The new coroutine will be put on a layer corresponding to this gameObject. + /// Should this coroutine fail to start, overwrite, or wait for any coroutines to finish if any matches are + /// currently running. + /// The newly created or existing handle. + public static CoroutineHandle RunCoroutineSingleton(IEnumerator coroutine, Segment segment, GameObject gameObj, + SingletonBehavior behaviorOnCollision) + { + return gameObj == null ? RunCoroutine(coroutine, segment) : RunCoroutineSingleton(coroutine, segment, gameObj.GetInstanceID(), behaviorOnCollision); + } + + /// + /// Run a new coroutine with the supplied layer unless there is already one or more coroutines running with that layer. + /// + /// The new coroutine's handle. + /// The segment that the coroutine should run in. + /// A layer to attach to the coroutine, and to check for existing instances. + /// Should this coroutine fail to start, overwrite, or wait for any coroutines to finish if any matches are + /// currently running. + /// The newly created or existing handle. + public static CoroutineHandle RunCoroutineSingleton(IEnumerator coroutine, Segment segment, int layer, SingletonBehavior behaviorOnCollision) + { + if (coroutine == null) return new CoroutineHandle(); + + if (behaviorOnCollision == SingletonBehavior.Overwrite) + { + KillCoroutines(layer); + } + else if (Instance._layeredProcesses.ContainsKey(layer)) + { + if (behaviorOnCollision == SingletonBehavior.AbortAndUnpause) + _instance.ResumeCoroutinesOnInstance(_instance._layeredProcesses[layer]); + + switch (behaviorOnCollision) + { + case SingletonBehavior.Abort: + case SingletonBehavior.AbortAndUnpause: + var indexEnum = Instance._layeredProcesses[layer].GetEnumerator(); + + while (indexEnum.MoveNext()) + if (IsRunning(indexEnum.Current)) + return indexEnum.Current; + + break; + case SingletonBehavior.Wait: + CoroutineHandle newCoroutineHandle = Instance.RunCoroutineInternal(coroutine, segment, layer, true, null, + new CoroutineHandle(Instance._instanceID), false); + WaitForOtherHandles(newCoroutineHandle, _instance._layeredProcesses[layer], false); + return newCoroutineHandle; + } + } + + return Instance.RunCoroutineInternal(coroutine, segment, layer, true, null, new CoroutineHandle(Instance._instanceID), true); + } + + /// + /// Run a new coroutine with the supplied tag unless there is already one or more coroutines running with that tag. + /// + /// The new coroutine's handle. + /// The segment that the coroutine should run in. + /// A tag to attach to the coroutine, and to check for existing instances. + /// Should this coroutine fail to start, overwrite, or wait for any coroutines to finish if any matches are + /// currently running. + /// The newly created or existing handle. + public static CoroutineHandle RunCoroutineSingleton(IEnumerator coroutine, Segment segment, string tag, SingletonBehavior behaviorOnCollision) + { + if (coroutine == null) + return new CoroutineHandle(); + + if (behaviorOnCollision == SingletonBehavior.Overwrite) + { + KillCoroutines(tag); + } + else if (Instance._taggedProcesses.ContainsKey(tag)) + { + if (behaviorOnCollision == SingletonBehavior.AbortAndUnpause) + _instance.ResumeCoroutinesOnInstance(_instance._taggedProcesses[tag]); + + switch (behaviorOnCollision) + { + case SingletonBehavior.Abort: + case SingletonBehavior.AbortAndUnpause: + var indexEnum = Instance._taggedProcesses[tag].GetEnumerator(); + + while (indexEnum.MoveNext()) + if (IsRunning(indexEnum.Current)) + return indexEnum.Current; + + break; + case SingletonBehavior.Wait: + CoroutineHandle newCoroutineHandle = Instance.RunCoroutineInternal(coroutine, segment, 0, false, tag, + new CoroutineHandle(Instance._instanceID), false); + WaitForOtherHandles(newCoroutineHandle, _instance._taggedProcesses[tag], false); + return newCoroutineHandle; + } + } + + return Instance.RunCoroutineInternal(coroutine, segment, 0, false, tag, new CoroutineHandle(Instance._instanceID), true); + } + + /// + /// Run a new coroutine with the supplied graffitti unless there is already one or more coroutines running with both that tag and layer. + /// + /// The new coroutine's handle. + /// The segment that the coroutine should run in. + /// The new coroutine will be put on a layer corresponding to this gameObject. + /// A tag to attach to the coroutine, and to check for existing instances. + /// Should this coroutine fail to start, overwrite, or wait for any coroutines to finish if any matches are + /// currently running. + /// The newly created or existing handle. + public static CoroutineHandle RunCoroutineSingleton(IEnumerator coroutine, Segment segment, GameObject gameObj, string tag, + SingletonBehavior behaviorOnCollision) + { + return gameObj == null ? RunCoroutineSingleton(coroutine, segment, tag, behaviorOnCollision) + : RunCoroutineSingleton(coroutine, segment, gameObj.GetInstanceID(), tag, behaviorOnCollision); + } + + /// + /// Run a new coroutine with the supplied graffitti unless there is already one or more coroutines running with both that tag and layer. + /// + /// The new coroutine's handle. + /// The segment that the coroutine should run in. + /// A layer to attach to the coroutine, and to check for existing instances. + /// A tag to attach to the coroutine, and to check for existing instances. + /// Should this coroutine fail to start, overwrite, or wait for any coroutines to finish if any matches are + /// currently running. + /// The newly created or existing handle. + public static CoroutineHandle RunCoroutineSingleton(IEnumerator coroutine, Segment segment, int layer, string tag, + SingletonBehavior behaviorOnCollision) + { + if (coroutine == null) return new CoroutineHandle(); + + if (behaviorOnCollision == SingletonBehavior.Overwrite) + { + KillCoroutines(layer, tag); + return Instance.RunCoroutineInternal(coroutine, segment, layer, true, tag, new CoroutineHandle(Instance._instanceID), true); + } + + if (!Instance._taggedProcesses.ContainsKey(tag) || !Instance._layeredProcesses.ContainsKey(layer)) + return Instance.RunCoroutineInternal(coroutine, segment, layer, true, tag, new CoroutineHandle(Instance._instanceID), true); + + if (behaviorOnCollision == SingletonBehavior.AbortAndUnpause) + ResumeCoroutines(layer, tag); + + if (behaviorOnCollision == SingletonBehavior.Abort || behaviorOnCollision == SingletonBehavior.AbortAndUnpause) + { + var matchesEnum = Instance._taggedProcesses[tag].GetEnumerator(); + while (matchesEnum.MoveNext()) + if (_instance._processLayers.ContainsKey(matchesEnum.Current) && _instance._processLayers[matchesEnum.Current] == layer) + return matchesEnum.Current; + } + else if (behaviorOnCollision == SingletonBehavior.Wait) + { + List matches = new List(); + var matchesEnum = Instance._taggedProcesses[tag].GetEnumerator(); + while (matchesEnum.MoveNext()) + if (_instance._processLayers.ContainsKey(matchesEnum.Current) && _instance._processLayers[matchesEnum.Current] == layer) + matches.Add(matchesEnum.Current); + + if (matches.Count > 0) + { + CoroutineHandle newCoroutineHandle = _instance.RunCoroutineInternal(coroutine, segment, layer, true, tag, + new CoroutineHandle(_instance._instanceID), false); + WaitForOtherHandles(newCoroutineHandle, matches, false); + return newCoroutineHandle; + } + } + + return Instance.RunCoroutineInternal(coroutine, segment, layer, true, tag, new CoroutineHandle(Instance._instanceID), true); + } + + /// + /// Run a new coroutine in the Update segment, but not while the coroutine with the supplied handle is running. + /// + /// The new coroutine's handle. + /// A tag to attach to the coroutine, and to check for existing instances. + /// Should this coroutine fail to start, overwrite, or wait for any coroutines to finish if any matches are + /// currently running. + /// The newly created or existing handle. + public CoroutineHandle RunCoroutineSingletonOnInstance(IEnumerator coroutine, CoroutineHandle handle, SingletonBehavior behaviorOnCollision) + { + if (coroutine == null) return new CoroutineHandle(); + + if (behaviorOnCollision == SingletonBehavior.Overwrite) + { + KillCoroutinesOnInstance(handle); + } + else if (_handleToIndex.ContainsKey(handle) && !CoindexIsNull(_handleToIndex[handle])) + { + switch (behaviorOnCollision) + { + case SingletonBehavior.Abort: + return handle; + case SingletonBehavior.AbortAndUnpause: + ResumeCoroutinesOnInstance(handle); + return handle; + case SingletonBehavior.Wait: + CoroutineHandle newCoroutineHandle = RunCoroutineInternal(coroutine, Segment.Update, 0, false, null, + new CoroutineHandle(_instanceID), false); + WaitForOtherHandles(newCoroutineHandle, handle, false); + return newCoroutineHandle; + + } + } + + return RunCoroutineInternal(coroutine, Segment.Update, 0, false, null, new CoroutineHandle(_instanceID), true); + } + + /// + /// Run a new coroutine in the Update segment with the supplied layer unless there is already one or more coroutines running with that layer. + /// + /// The new coroutine's handle. + /// The new coroutine will be put on a layer corresponding to this gameObject. + /// Should this coroutine fail to start, overwrite, or wait for any coroutines to finish if any matches are + /// currently running. + /// The newly created or existing handle. + public CoroutineHandle RunCoroutineSingletonOnInstance(IEnumerator coroutine, GameObject gameObj, SingletonBehavior behaviorOnCollision) + { + return gameObj == null ? RunCoroutineOnInstance(coroutine) + : RunCoroutineSingletonOnInstance(coroutine, gameObj.GetInstanceID(), behaviorOnCollision); + } + + /// + /// Run a new coroutine in the Update segment with the supplied layer unless there is already one or more coroutines running with that layer. + /// + /// The new coroutine's handle. + /// A layer to attach to the coroutine, and to check for existing instances. + /// Should this coroutine fail to start, overwrite, or wait for any coroutines to finish if any matches are + /// currently running. + /// The newly created or existing handle. + public CoroutineHandle RunCoroutineSingletonOnInstance(IEnumerator coroutine, int layer, SingletonBehavior behaviorOnCollision) + { + if (coroutine == null) return new CoroutineHandle(); + + if (behaviorOnCollision == SingletonBehavior.Overwrite) + { + KillCoroutinesOnInstance(layer); + } + else if (_layeredProcesses.ContainsKey(layer)) + { + if (behaviorOnCollision == SingletonBehavior.AbortAndUnpause) + ResumeCoroutinesOnInstance(_layeredProcesses[layer]); + + switch (behaviorOnCollision) + { + case SingletonBehavior.Abort: + case SingletonBehavior.AbortAndUnpause: + var indexEnum = _layeredProcesses[layer].GetEnumerator(); + + while (indexEnum.MoveNext()) + if (IsRunning(indexEnum.Current)) + return indexEnum.Current; + + break; + case SingletonBehavior.Wait: + CoroutineHandle newCoroutineHandle = RunCoroutineInternal(coroutine, Segment.Update, layer, true, null, + new CoroutineHandle(_instanceID), false); + WaitForOtherHandles(newCoroutineHandle, _layeredProcesses[layer], false); + return newCoroutineHandle; + } + } + + return RunCoroutineInternal(coroutine, Segment.Update, layer, true, null, new CoroutineHandle(_instanceID), true); + } + + /// + /// Run a new coroutine in the Update segment with the supplied tag unless there is already one or more coroutines running with that tag. + /// + /// The new coroutine's handle. + /// A tag to attach to the coroutine, and to check for existing instances. + /// Should this coroutine fail to start, overwrite, or wait for any coroutines to finish if any matches are + /// currently running. + /// The newly created or existing handle. + public CoroutineHandle RunCoroutineSingletonOnInstance(IEnumerator coroutine, string tag, SingletonBehavior behaviorOnCollision) + { + if (coroutine == null) return new CoroutineHandle(); + + if (behaviorOnCollision == SingletonBehavior.Overwrite) + { + KillCoroutinesOnInstance(tag); + } + else if (_taggedProcesses.ContainsKey(tag)) + { + if (behaviorOnCollision == SingletonBehavior.AbortAndUnpause) + ResumeCoroutinesOnInstance(_taggedProcesses[tag]); + + switch (behaviorOnCollision) + { + case SingletonBehavior.Abort: + case SingletonBehavior.AbortAndUnpause: + var indexEnum = _taggedProcesses[tag].GetEnumerator(); + + while (indexEnum.MoveNext()) + if (IsRunning(indexEnum.Current)) + return indexEnum.Current; + + break; + case SingletonBehavior.Wait: + CoroutineHandle newCoroutineHandle = RunCoroutineInternal(coroutine, Segment.Update, 0, false, tag, + new CoroutineHandle(_instanceID), false); + WaitForOtherHandles(newCoroutineHandle, _taggedProcesses[tag], false); + return newCoroutineHandle; + } + } + + return RunCoroutineInternal(coroutine, Segment.Update, 0, false, tag, new CoroutineHandle(_instanceID), true); + } + + /// + /// Run a new coroutine in the Update segment with the supplied graffitti unless there is already one or more coroutines running with both that + /// tag and layer. + /// + /// The new coroutine's handle. + /// The new coroutine will be put on a layer corresponding to this gameObject. + /// A tag to attach to the coroutine, and to check for existing instances. + /// Should this coroutine fail to start, overwrite, or wait for any coroutines to finish if any matches are + /// currently running. + /// The newly created or existing handle. + public CoroutineHandle RunCoroutineSingletonOnInstance(IEnumerator coroutine, GameObject gameObj, string tag, + SingletonBehavior behaviorOnCollision) + { + return gameObj == null ? RunCoroutineSingletonOnInstance(coroutine, tag, behaviorOnCollision) + : RunCoroutineSingletonOnInstance(coroutine, gameObj.GetInstanceID(), tag, behaviorOnCollision); + } + + /// + /// Run a new coroutine in the Update segment with the supplied graffitti unless there is already one or more coroutines running with both that + /// tag and layer. + /// + /// The new coroutine's handle. + /// A layer to attach to the coroutine, and to check for existing instances. + /// A tag to attach to the coroutine, and to check for existing instances. + /// Should this coroutine fail to start, overwrite, or wait for any coroutines to finish if any matches are + /// currently running. + /// The newly created or existing handle. + public CoroutineHandle RunCoroutineSingletonOnInstance(IEnumerator coroutine, int layer, string tag, SingletonBehavior behaviorOnCollision) + { + if (coroutine == null) return new CoroutineHandle(); + + if (behaviorOnCollision == SingletonBehavior.Overwrite) + { + KillCoroutinesOnInstance(layer, tag); + return RunCoroutineInternal(coroutine, Segment.Update, layer, true, tag, new CoroutineHandle(_instanceID), true); + } + + if (!_taggedProcesses.ContainsKey(tag) || !_layeredProcesses.ContainsKey(layer)) + return RunCoroutineInternal(coroutine, Segment.Update, layer, true, tag, new CoroutineHandle(_instanceID), true); + + if (behaviorOnCollision == SingletonBehavior.AbortAndUnpause) + ResumeCoroutinesOnInstance(layer, tag); + + if (behaviorOnCollision == SingletonBehavior.Abort || behaviorOnCollision == SingletonBehavior.AbortAndUnpause) + { + var matchesEnum = _taggedProcesses[tag].GetEnumerator(); + while (matchesEnum.MoveNext()) + if (_processLayers.ContainsKey(matchesEnum.Current) && _processLayers[matchesEnum.Current] == layer) + return matchesEnum.Current; + } + + if (behaviorOnCollision == SingletonBehavior.Wait) + { + List matches = new List(); + var matchesEnum = _taggedProcesses[tag].GetEnumerator(); + while (matchesEnum.MoveNext()) + if (_processLayers.ContainsKey(matchesEnum.Current) && _processLayers[matchesEnum.Current] == layer) + matches.Add(matchesEnum.Current); + + if (matches.Count > 0) + { + CoroutineHandle newCoroutineHandle = RunCoroutineInternal(coroutine, Segment.Update, layer, true, tag, new CoroutineHandle(_instanceID), false); + WaitForOtherHandles(newCoroutineHandle, matches, false); + return newCoroutineHandle; + } + } + + return RunCoroutineInternal(coroutine, Segment.Update, layer, true, tag, new CoroutineHandle(_instanceID), true); + } + + /// + /// Run a new coroutine with the supplied layer unless there is already one or more coroutines running with that layer. + /// + /// The new coroutine's handle. + /// The segment that the coroutine should run in. + /// The new coroutine will be put on a layer corresponding to this gameObject. + /// Should this coroutine fail to start, overwrite, or wait for any coroutines to finish if any matches are + /// currently running. + /// The newly created or existing handle. + public CoroutineHandle RunCoroutineSingletonOnInstance(IEnumerator coroutine, Segment segment, GameObject gameObj, + SingletonBehavior behaviorOnCollision) + { + return gameObj == null ? RunCoroutineOnInstance(coroutine, segment) + : RunCoroutineSingletonOnInstance(coroutine, segment, gameObj.GetInstanceID(), behaviorOnCollision); + } + + /// + /// Run a new coroutine with the supplied layer unless there is already one or more coroutines running with that layer. + /// + /// The new coroutine's handle. + /// The segment that the coroutine should run in. + /// A layer to attach to the coroutine, and to check for existing instances. + /// Should this coroutine fail to start, overwrite, or wait for any coroutines to finish if any matches are + /// currently running. + /// The newly created or existing handle. + public CoroutineHandle RunCoroutineSingletonOnInstance(IEnumerator coroutine, Segment segment, int layer, SingletonBehavior behaviorOnCollision) + { + if (coroutine == null) return new CoroutineHandle(); + + if (behaviorOnCollision == SingletonBehavior.Overwrite) + { + KillCoroutinesOnInstance(layer); + } + else if (_layeredProcesses.ContainsKey(layer)) + { + if (behaviorOnCollision == SingletonBehavior.AbortAndUnpause) + ResumeCoroutinesOnInstance(_layeredProcesses[layer]); + + switch (behaviorOnCollision) + { + case SingletonBehavior.Abort: + case SingletonBehavior.AbortAndUnpause: + var indexEnum = _layeredProcesses[layer].GetEnumerator(); + + while (indexEnum.MoveNext()) + if (IsRunning(indexEnum.Current)) + return indexEnum.Current; + + break; + case SingletonBehavior.Wait: + CoroutineHandle newCoroutineHandle = RunCoroutineInternal(coroutine, segment, layer, true, null, + new CoroutineHandle(_instanceID), false); + WaitForOtherHandles(newCoroutineHandle, _layeredProcesses[layer], false); + return newCoroutineHandle; + } + } + + return RunCoroutineInternal(coroutine, segment, layer, true, null, new CoroutineHandle(_instanceID), true); + } + + /// + /// Run a new coroutine with the supplied tag unless there is already one or more coroutines running with that tag. + /// + /// The new coroutine's handle. + /// The segment that the coroutine should run in. + /// A tag to attach to the coroutine, and to check for existing instances. + /// Should this coroutine fail to start, overwrite, or wait for any coroutines to finish if any matches are + /// currently running. + /// The newly created or existing handle. + public CoroutineHandle RunCoroutineSingletonOnInstance(IEnumerator coroutine, Segment segment, string tag, SingletonBehavior behaviorOnCollision) + { + if (coroutine == null) + return new CoroutineHandle(); + + if (behaviorOnCollision == SingletonBehavior.Overwrite) + { + KillCoroutinesOnInstance(tag); + } + else if (_taggedProcesses.ContainsKey(tag)) + { + if (behaviorOnCollision == SingletonBehavior.AbortAndUnpause) + ResumeCoroutinesOnInstance(_taggedProcesses[tag]); + + switch (behaviorOnCollision) + { + case SingletonBehavior.Abort: + case SingletonBehavior.AbortAndUnpause: + var indexEnum = _taggedProcesses[tag].GetEnumerator(); + + while (indexEnum.MoveNext()) + if (IsRunning(indexEnum.Current)) + return indexEnum.Current; + + break; + case SingletonBehavior.Wait: + CoroutineHandle newCoroutineHandle = RunCoroutineInternal(coroutine, segment, 0, false, tag, + new CoroutineHandle(_instanceID), false); + WaitForOtherHandles(newCoroutineHandle, _taggedProcesses[tag], false); + return newCoroutineHandle; + } + } + + return RunCoroutineInternal(coroutine, segment, 0, false, tag, new CoroutineHandle(_instanceID), true); + } + + /// + /// Run a new coroutine with the supplied tag unless there is already one or more coroutines running with that tag. + /// + /// The new coroutine's handle. + /// The segment that the coroutine should run in. + /// The new coroutine will be put on a layer corresponding to this gameObject. + /// A tag to attach to the coroutine, and to check for existing instances. + /// Should this coroutine fail to start, overwrite, or wait for any coroutines to finish if any matches are + /// currently running. + /// The newly created or existing handle. + public CoroutineHandle RunCoroutineSingletonOnInstance(IEnumerator coroutine, Segment segment, GameObject gameObj, string tag, + SingletonBehavior behaviorOnCollision) + { + return gameObj == null ? RunCoroutineSingletonOnInstance(coroutine, segment, tag, behaviorOnCollision) + : RunCoroutineSingletonOnInstance(coroutine, segment, gameObj.GetInstanceID(), tag, behaviorOnCollision); + } + + /// + /// Run a new coroutine with the supplied tag unless there is already one or more coroutines running with that tag. + /// + /// The new coroutine's handle. + /// The segment that the coroutine should run in. + /// A layer to attach to the coroutine, and to check for existing instances. + /// A tag to attach to the coroutine, and to check for existing instances. + /// Should this coroutine fail to start, overwrite, or wait for any coroutines to finish if any matches are + /// currently running. + /// The newly created or existing handle. + public CoroutineHandle RunCoroutineSingletonOnInstance(IEnumerator coroutine, Segment segment, int layer, string tag, + SingletonBehavior behaviorOnCollision) + { + if (coroutine == null) return new CoroutineHandle(); + + if (behaviorOnCollision == SingletonBehavior.Overwrite) + { + KillCoroutinesOnInstance(layer, tag); + return RunCoroutineInternal(coroutine, segment, layer, true, tag, new CoroutineHandle(_instanceID), true); + } + + if (!_taggedProcesses.ContainsKey(tag) || !_layeredProcesses.ContainsKey(layer)) + return RunCoroutineInternal(coroutine, segment, layer, true, tag, new CoroutineHandle(_instanceID), true); + + if (behaviorOnCollision == SingletonBehavior.AbortAndUnpause) + ResumeCoroutinesOnInstance(layer, tag); + + if (behaviorOnCollision == SingletonBehavior.Abort || behaviorOnCollision == SingletonBehavior.AbortAndUnpause) + { + var matchesEnum = _taggedProcesses[tag].GetEnumerator(); + while (matchesEnum.MoveNext()) + if (_processLayers.ContainsKey(matchesEnum.Current) && _processLayers[matchesEnum.Current] == layer) + return matchesEnum.Current; + } + else if (behaviorOnCollision == SingletonBehavior.Wait) + { + List matches = new List(); + var matchesEnum = _taggedProcesses[tag].GetEnumerator(); + while (matchesEnum.MoveNext()) + if (_processLayers.ContainsKey(matchesEnum.Current) && _processLayers[matchesEnum.Current] == layer) + matches.Add(matchesEnum.Current); + + if (matches.Count > 0) + { + CoroutineHandle newCoroutineHandle = RunCoroutineInternal(coroutine, segment, layer, true, tag, new CoroutineHandle(_instanceID), false); + WaitForOtherHandles(newCoroutineHandle, matches, false); + return newCoroutineHandle; + } + } + + return RunCoroutineInternal(coroutine, segment, layer, true, tag, new CoroutineHandle(_instanceID), true); + } + + + private CoroutineHandle RunCoroutineInternal(IEnumerator coroutine, Segment segment, int layer, bool layerHasValue, string tag, CoroutineHandle handle, bool prewarm) + { + ProcessIndex slot = new ProcessIndex { seg = segment }; + + if (_handleToIndex.ContainsKey(handle)) + { + _indexToHandle.Remove(_handleToIndex[handle]); + _handleToIndex.Remove(handle); + } + + float currentLocalTime = localTime; + float currentDeltaTime = deltaTime; + CoroutineHandle cashedHandle = currentCoroutine; + currentCoroutine = handle; + + try + { + switch (segment) + { + case Segment.Update: + + if (_nextUpdateProcessSlot >= UpdateProcesses.Length) + { + IEnumerator[] oldProcArray = UpdateProcesses; + bool[] oldPausedArray = UpdatePaused; + bool[] oldHeldArray = UpdateHeld; + + UpdateProcesses = new IEnumerator[UpdateProcesses.Length + (ProcessArrayChunkSize * _expansions++)]; + UpdatePaused = new bool[UpdateProcesses.Length]; + UpdateHeld = new bool[UpdateProcesses.Length]; + + for (int i = 0; i < oldProcArray.Length; i++) + { + UpdateProcesses[i] = oldProcArray[i]; + UpdatePaused[i] = oldPausedArray[i]; + UpdateHeld[i] = oldHeldArray[i]; + } + } + + if (UpdateTimeValues(slot.seg)) + _lastUpdateProcessSlot = _nextUpdateProcessSlot; + + slot.i = _nextUpdateProcessSlot++; + UpdateProcesses[slot.i] = coroutine; + + if (null != tag) + AddTagOnInstance(tag, handle); + + if (layerHasValue) + AddLayerOnInstance(layer, handle); + + _indexToHandle.Add(slot, handle); + _handleToIndex.Add(handle, slot); + + while (prewarm) + { + if (!UpdateProcesses[slot.i].MoveNext()) + { + if (_indexToHandle.ContainsKey(slot)) + KillCoroutinesOnInstance(_indexToHandle[slot]); + + prewarm = false; + } + else if (UpdateProcesses[slot.i] != null && float.IsNaN(UpdateProcesses[slot.i].Current)) + { + if (ReplacementFunction != null) + { + UpdateProcesses[slot.i] = ReplacementFunction(UpdateProcesses[slot.i], _indexToHandle[slot]); + ReplacementFunction = null; + } + prewarm = !UpdatePaused[slot.i] && !UpdateHeld[slot.i]; + } + else + { + prewarm = false; + } + } + + break; + + case Segment.FixedUpdate: + + if (_nextFixedUpdateProcessSlot >= FixedUpdateProcesses.Length) + { + IEnumerator[] oldProcArray = FixedUpdateProcesses; + bool[] oldPausedArray = FixedUpdatePaused; + bool[] oldHeldArray = FixedUpdateHeld; + + FixedUpdateProcesses = new IEnumerator[FixedUpdateProcesses.Length + (ProcessArrayChunkSize * _expansions++)]; + FixedUpdatePaused = new bool[FixedUpdateProcesses.Length]; + FixedUpdateHeld = new bool[FixedUpdateProcesses.Length]; + + for (int i = 0; i < oldProcArray.Length; i++) + { + FixedUpdateProcesses[i] = oldProcArray[i]; + FixedUpdatePaused[i] = oldPausedArray[i]; + FixedUpdateHeld[i] = oldHeldArray[i]; + } + } + + if (UpdateTimeValues(slot.seg)) + _lastFixedUpdateProcessSlot = _nextFixedUpdateProcessSlot; + + slot.i = _nextFixedUpdateProcessSlot++; + FixedUpdateProcesses[slot.i] = coroutine; + + if (null != tag) + AddTagOnInstance(tag, handle); + + if (layerHasValue) + AddLayerOnInstance(layer, handle); + + _indexToHandle.Add(slot, handle); + _handleToIndex.Add(handle, slot); + + while (prewarm) + { + if (!FixedUpdateProcesses[slot.i].MoveNext()) + { + if (_indexToHandle.ContainsKey(slot)) + KillCoroutinesOnInstance(_indexToHandle[slot]); + + prewarm = false; + } + else if (FixedUpdateProcesses[slot.i] != null && float.IsNaN(FixedUpdateProcesses[slot.i].Current)) + { + if (ReplacementFunction != null) + { + FixedUpdateProcesses[slot.i] = ReplacementFunction(FixedUpdateProcesses[slot.i], _indexToHandle[slot]); + ReplacementFunction = null; + } + prewarm = !FixedUpdatePaused[slot.i] && !FixedUpdateHeld[slot.i]; + } + else + { + prewarm = false; + } + } + + break; + + case Segment.LateUpdate: + + if (_nextLateUpdateProcessSlot >= LateUpdateProcesses.Length) + { + IEnumerator[] oldProcArray = LateUpdateProcesses; + bool[] oldPausedArray = LateUpdatePaused; + bool[] oldHeldArray = LateUpdateHeld; + + LateUpdateProcesses = new IEnumerator[LateUpdateProcesses.Length + (ProcessArrayChunkSize * _expansions++)]; + LateUpdatePaused = new bool[LateUpdateProcesses.Length]; + LateUpdateHeld = new bool[LateUpdateProcesses.Length]; + + for (int i = 0; i < oldProcArray.Length; i++) + { + LateUpdateProcesses[i] = oldProcArray[i]; + LateUpdatePaused[i] = oldPausedArray[i]; + LateUpdateHeld[i] = oldHeldArray[i]; + } + } + + if (UpdateTimeValues(slot.seg)) + _lastLateUpdateProcessSlot = _nextLateUpdateProcessSlot; + + slot.i = _nextLateUpdateProcessSlot++; + LateUpdateProcesses[slot.i] = coroutine; + + if (null != tag) + AddTagOnInstance(tag, handle); + + if (layerHasValue) + AddLayerOnInstance(layer, handle); + + _indexToHandle.Add(slot, handle); + _handleToIndex.Add(handle, slot); + + while (prewarm) + { + if (!LateUpdateProcesses[slot.i].MoveNext()) + { + if (_indexToHandle.ContainsKey(slot)) + KillCoroutinesOnInstance(_indexToHandle[slot]); + + prewarm = false; + } + else if (LateUpdateProcesses[slot.i] != null && float.IsNaN(LateUpdateProcesses[slot.i].Current)) + { + if (ReplacementFunction != null) + { + LateUpdateProcesses[slot.i] = ReplacementFunction(LateUpdateProcesses[slot.i], _indexToHandle[slot]); + ReplacementFunction = null; + } + prewarm = !LateUpdatePaused[slot.i] && !LateUpdateHeld[slot.i]; + } + else + { + prewarm = false; + } + } + + break; + + case Segment.SlowUpdate: + + if (_nextSlowUpdateProcessSlot >= SlowUpdateProcesses.Length) + { + IEnumerator[] oldProcArray = SlowUpdateProcesses; + bool[] oldPausedArray = SlowUpdatePaused; + bool[] oldHeldArray = SlowUpdateHeld; + + SlowUpdateProcesses = new IEnumerator[SlowUpdateProcesses.Length + (ProcessArrayChunkSize * _expansions++)]; + SlowUpdatePaused = new bool[SlowUpdateProcesses.Length]; + SlowUpdateHeld = new bool[SlowUpdateProcesses.Length]; + + for (int i = 0; i < oldProcArray.Length; i++) + { + SlowUpdateProcesses[i] = oldProcArray[i]; + SlowUpdatePaused[i] = oldPausedArray[i]; + SlowUpdateHeld[i] = oldHeldArray[i]; + } + } + + if (UpdateTimeValues(slot.seg)) + _lastSlowUpdateProcessSlot = _nextSlowUpdateProcessSlot; + + slot.i = _nextSlowUpdateProcessSlot++; + SlowUpdateProcesses[slot.i] = coroutine; + + if (null != tag) + AddTagOnInstance(tag, handle); + + if (layerHasValue) + AddLayerOnInstance(layer, handle); + + _indexToHandle.Add(slot, handle); + _handleToIndex.Add(handle, slot); + + while (prewarm) + { + if (!SlowUpdateProcesses[slot.i].MoveNext()) + { + if (_indexToHandle.ContainsKey(slot)) + KillCoroutinesOnInstance(_indexToHandle[slot]); + + prewarm = false; + } + else if (SlowUpdateProcesses[slot.i] != null && float.IsNaN(SlowUpdateProcesses[slot.i].Current)) + { + if (ReplacementFunction != null) + { + SlowUpdateProcesses[slot.i] = ReplacementFunction(SlowUpdateProcesses[slot.i], _indexToHandle[slot]); + ReplacementFunction = null; + } + prewarm = !SlowUpdatePaused[slot.i] && !SlowUpdateHeld[slot.i]; + } + else + { + prewarm = false; + } + } + + break; + + case Segment.RealtimeUpdate: + + if (_nextRealtimeUpdateProcessSlot >= RealtimeUpdateProcesses.Length) + { + IEnumerator[] oldProcArray = RealtimeUpdateProcesses; + bool[] oldPausedArray = RealtimeUpdatePaused; + bool[] oldHeldArray = RealtimeUpdateHeld; + + RealtimeUpdateProcesses = new IEnumerator[RealtimeUpdateProcesses.Length + (ProcessArrayChunkSize * _expansions++)]; + RealtimeUpdatePaused = new bool[RealtimeUpdateProcesses.Length]; + RealtimeUpdateHeld = new bool[RealtimeUpdateProcesses.Length]; + + for (int i = 0; i < oldProcArray.Length; i++) + { + RealtimeUpdateProcesses[i] = oldProcArray[i]; + RealtimeUpdatePaused[i] = oldPausedArray[i]; + RealtimeUpdateHeld[i] = oldHeldArray[i]; + } + } + + if (UpdateTimeValues(slot.seg)) + _lastRealtimeUpdateProcessSlot = _nextRealtimeUpdateProcessSlot; + + slot.i = _nextRealtimeUpdateProcessSlot++; + RealtimeUpdateProcesses[slot.i] = coroutine; + + if (null != tag) + AddTagOnInstance(tag, handle); + + if (layerHasValue) + AddLayerOnInstance(layer, handle); + + _indexToHandle.Add(slot, handle); + _handleToIndex.Add(handle, slot); + + while (prewarm) + { + if (!RealtimeUpdateProcesses[slot.i].MoveNext()) + { + if (_indexToHandle.ContainsKey(slot)) + KillCoroutinesOnInstance(_indexToHandle[slot]); + + prewarm = false; + } + else if (RealtimeUpdateProcesses[slot.i] != null && float.IsNaN(RealtimeUpdateProcesses[slot.i].Current)) + { + if (ReplacementFunction != null) + { + RealtimeUpdateProcesses[slot.i] = ReplacementFunction(RealtimeUpdateProcesses[slot.i], _indexToHandle[slot]); + ReplacementFunction = null; + } + prewarm = !RealtimeUpdatePaused[slot.i] && !RealtimeUpdateHeld[slot.i]; + } + else + { + prewarm = false; + } + } + + break; +#if UNITY_EDITOR + case Segment.EditorUpdate: + + if (!OnEditorStart()) + return new CoroutineHandle(); + + if (handle.Key == 0) + handle = new CoroutineHandle(_instanceID); + + if (_nextEditorUpdateProcessSlot >= EditorUpdateProcesses.Length) + { + IEnumerator[] oldProcArray = EditorUpdateProcesses; + bool[] oldPausedArray = EditorUpdatePaused; + bool[] oldHeldArray = EditorUpdateHeld; + + EditorUpdateProcesses = new IEnumerator[EditorUpdateProcesses.Length + (ProcessArrayChunkSize * _expansions++)]; + EditorUpdatePaused = new bool[EditorUpdateProcesses.Length]; + EditorUpdateHeld = new bool[EditorUpdateProcesses.Length]; + + for (int i = 0; i < oldProcArray.Length; i++) + { + EditorUpdateProcesses[i] = oldProcArray[i]; + EditorUpdatePaused[i] = oldPausedArray[i]; + EditorUpdateHeld[i] = oldHeldArray[i]; + } + } + + if (UpdateTimeValues(slot.seg)) + _lastEditorUpdateProcessSlot = _nextEditorUpdateProcessSlot; + + slot.i = _nextEditorUpdateProcessSlot++; + EditorUpdateProcesses[slot.i] = coroutine; + + if (null != tag) + AddTagOnInstance(tag, handle); + + if (layerHasValue) + AddLayerOnInstance(layer, handle); + + _indexToHandle.Add(slot, handle); + _handleToIndex.Add(handle, slot); + + while (prewarm) + { + if (!EditorUpdateProcesses[slot.i].MoveNext()) + { + if (_indexToHandle.ContainsKey(slot)) + KillCoroutinesOnInstance(_indexToHandle[slot]); + + prewarm = false; + } + else if (EditorUpdateProcesses[slot.i] != null && float.IsNaN(EditorUpdateProcesses[slot.i].Current)) + { + if (ReplacementFunction != null) + { + EditorUpdateProcesses[slot.i] = ReplacementFunction(EditorUpdateProcesses[slot.i], _indexToHandle[slot]); + ReplacementFunction = null; + } + prewarm = !EditorUpdatePaused[slot.i] && !EditorUpdateHeld[slot.i]; + } + else + { + prewarm = false; + } + } + + break; + + case Segment.EditorSlowUpdate: + + if (!OnEditorStart()) + return new CoroutineHandle(); + + if (handle.Key == 0) + handle = new CoroutineHandle(_instanceID); + + if (_nextEditorSlowUpdateProcessSlot >= EditorSlowUpdateProcesses.Length) + { + IEnumerator[] oldProcArray = EditorSlowUpdateProcesses; + bool[] oldPausedArray = EditorSlowUpdatePaused; + bool[] oldHeldArray = EditorSlowUpdateHeld; + + EditorSlowUpdateProcesses = new IEnumerator[EditorSlowUpdateProcesses.Length + (ProcessArrayChunkSize * _expansions++)]; + EditorSlowUpdatePaused = new bool[EditorSlowUpdateProcesses.Length]; + EditorSlowUpdateHeld = new bool[EditorSlowUpdateProcesses.Length]; + + for (int i = 0; i < oldProcArray.Length; i++) + { + EditorSlowUpdateProcesses[i] = oldProcArray[i]; + EditorSlowUpdatePaused[i] = oldPausedArray[i]; + EditorSlowUpdateHeld[i] = oldHeldArray[i]; + } + } + + if (UpdateTimeValues(slot.seg)) + _lastEditorSlowUpdateProcessSlot = _nextEditorSlowUpdateProcessSlot; + + slot.i = _nextEditorSlowUpdateProcessSlot++; + EditorSlowUpdateProcesses[slot.i] = coroutine; + + if (null != tag) + AddTagOnInstance(tag, handle); + + if (layerHasValue) + AddLayerOnInstance(layer, handle); + + _indexToHandle.Add(slot, handle); + _handleToIndex.Add(handle, slot); + + while (prewarm) + { + if (!EditorSlowUpdateProcesses[slot.i].MoveNext()) + { + if (_indexToHandle.ContainsKey(slot)) + KillCoroutinesOnInstance(_indexToHandle[slot]); + + prewarm = false; + } + else if (EditorSlowUpdateProcesses[slot.i] != null && float.IsNaN(EditorSlowUpdateProcesses[slot.i].Current)) + { + if (ReplacementFunction != null) + { + EditorSlowUpdateProcesses[slot.i] = ReplacementFunction(EditorSlowUpdateProcesses[slot.i], _indexToHandle[slot]); + ReplacementFunction = null; + } + prewarm = !EditorSlowUpdatePaused[slot.i] && !EditorSlowUpdateHeld[slot.i]; + } + else + { + prewarm = false; + } + } + + break; +#endif + case Segment.EndOfFrame: + + if (_nextEndOfFrameProcessSlot >= EndOfFrameProcesses.Length) + { + IEnumerator[] oldProcArray = EndOfFrameProcesses; + bool[] oldPausedArray = EndOfFramePaused; + bool[] oldHeldArray = EndOfFrameHeld; + + EndOfFrameProcesses = new IEnumerator[EndOfFrameProcesses.Length + (ProcessArrayChunkSize * _expansions++)]; + EndOfFramePaused = new bool[EndOfFrameProcesses.Length]; + EndOfFrameHeld = new bool[EndOfFrameProcesses.Length]; + + for (int i = 0; i < oldProcArray.Length; i++) + { + EndOfFrameProcesses[i] = oldProcArray[i]; + EndOfFramePaused[i] = oldPausedArray[i]; + EndOfFrameHeld[i] = oldHeldArray[i]; + } + } + + if (UpdateTimeValues(slot.seg)) + _lastEndOfFrameProcessSlot = _nextEndOfFrameProcessSlot; + + slot.i = _nextEndOfFrameProcessSlot++; + EndOfFrameProcesses[slot.i] = coroutine; + + if (null != tag) + AddTagOnInstance(tag, handle); + + if (layerHasValue) + AddLayerOnInstance(layer, handle); + + _indexToHandle.Add(slot, handle); + _handleToIndex.Add(handle, slot); + + _eofWatcherHandle = RunCoroutineSingletonOnInstance(_EOFPumpWatcher(), _eofWatcherHandle, SingletonBehavior.Abort); + + break; + + case Segment.ManualTimeframe: + + if (_nextManualTimeframeProcessSlot >= ManualTimeframeProcesses.Length) + { + IEnumerator[] oldProcArray = ManualTimeframeProcesses; + bool[] oldPausedArray = ManualTimeframePaused; + bool[] oldHeldArray = ManualTimeframeHeld; + + ManualTimeframeProcesses = new IEnumerator[ManualTimeframeProcesses.Length + (ProcessArrayChunkSize * _expansions++)]; + ManualTimeframePaused = new bool[ManualTimeframeProcesses.Length]; + ManualTimeframeHeld = new bool[ManualTimeframeProcesses.Length]; + + for (int i = 0; i < oldProcArray.Length; i++) + { + ManualTimeframeProcesses[i] = oldProcArray[i]; + ManualTimeframePaused[i] = oldPausedArray[i]; + ManualTimeframeHeld[i] = oldHeldArray[i]; + } + } + + if (UpdateTimeValues(slot.seg)) + _lastManualTimeframeProcessSlot = _nextManualTimeframeProcessSlot; + + slot.i = _nextManualTimeframeProcessSlot++; + ManualTimeframeProcesses[slot.i] = coroutine; + + if (null != tag) + AddTagOnInstance(tag, handle); + + if (layerHasValue) + AddLayerOnInstance(layer, handle); + + _indexToHandle.Add(slot, handle); + _handleToIndex.Add(handle, slot); + + break; + + default: + handle = new CoroutineHandle(); + break; + } + } + catch (System.Exception ex) + { + Debug.LogException(ex); + } + + localTime = currentLocalTime; + deltaTime = currentDeltaTime; + currentCoroutine = cashedHandle; + + return handle; + } + /// + /// This will kill all coroutines running on the main MEC instance and reset the context. + /// NOTE: If you call this function from within a running coroutine then you MUST end the current + /// coroutine. If the running coroutine has more work to do you may run a new "part 2" coroutine + /// function to complete the task before ending the current one. + /// + /// The number of coroutines that were killed. + public static int KillCoroutines() + { + return _instance == null ? 0 : _instance.KillCoroutinesOnInstance(); + } + + /// + /// This will kill all coroutines running on the current MEC instance and reset the context. + /// NOTE: If you call this function from within a running coroutine then you MUST end the current + /// coroutine. If the running coroutine has more work to do you may run a new "part 2" coroutine + /// function to complete the task before ending the current one. + /// + /// The number of coroutines that were killed. + public int KillCoroutinesOnInstance() + { + int retVal = _nextUpdateProcessSlot + _nextLateUpdateProcessSlot + _nextFixedUpdateProcessSlot + _nextSlowUpdateProcessSlot + + _nextRealtimeUpdateProcessSlot + _nextEditorUpdateProcessSlot + _nextEditorSlowUpdateProcessSlot + + _nextEndOfFrameProcessSlot + _nextManualTimeframeProcessSlot; + + UpdateProcesses = new IEnumerator[InitialBufferSizeLarge]; + UpdatePaused = new bool[InitialBufferSizeLarge]; + UpdateHeld = new bool[InitialBufferSizeLarge]; + UpdateCoroutines = 0; + _nextUpdateProcessSlot = 0; + + LateUpdateProcesses = new IEnumerator[InitialBufferSizeSmall]; + LateUpdatePaused = new bool[InitialBufferSizeSmall]; + LateUpdateHeld = new bool[InitialBufferSizeSmall]; + LateUpdateCoroutines = 0; + _nextLateUpdateProcessSlot = 0; + + FixedUpdateProcesses = new IEnumerator[InitialBufferSizeMedium]; + FixedUpdatePaused = new bool[InitialBufferSizeMedium]; + FixedUpdateHeld = new bool[InitialBufferSizeMedium]; + FixedUpdateCoroutines = 0; + _nextFixedUpdateProcessSlot = 0; + + SlowUpdateProcesses = new IEnumerator[InitialBufferSizeMedium]; + SlowUpdatePaused = new bool[InitialBufferSizeMedium]; + SlowUpdateHeld = new bool[InitialBufferSizeMedium]; + SlowUpdateCoroutines = 0; + _nextSlowUpdateProcessSlot = 0; + + RealtimeUpdateProcesses = new IEnumerator[InitialBufferSizeSmall]; + RealtimeUpdatePaused = new bool[InitialBufferSizeSmall]; + RealtimeUpdateHeld = new bool[InitialBufferSizeSmall]; + RealtimeUpdateCoroutines = 0; + _nextRealtimeUpdateProcessSlot = 0; + + EditorUpdateProcesses = new IEnumerator[InitialBufferSizeSmall]; + EditorUpdatePaused = new bool[InitialBufferSizeSmall]; + EditorUpdateHeld = new bool[InitialBufferSizeSmall]; + EditorUpdateCoroutines = 0; + _nextEditorUpdateProcessSlot = 0; + + EditorSlowUpdateProcesses = new IEnumerator[InitialBufferSizeSmall]; + EditorSlowUpdatePaused = new bool[InitialBufferSizeSmall]; + EditorSlowUpdateHeld = new bool[InitialBufferSizeSmall]; + EditorSlowUpdateCoroutines = 0; + _nextEditorSlowUpdateProcessSlot = 0; + + EndOfFrameProcesses = new IEnumerator[InitialBufferSizeSmall]; + EndOfFramePaused = new bool[InitialBufferSizeSmall]; + EndOfFrameHeld = new bool[InitialBufferSizeSmall]; + EndOfFrameCoroutines = 0; + _nextEndOfFrameProcessSlot = 0; + + ManualTimeframeProcesses = new IEnumerator[InitialBufferSizeSmall]; + ManualTimeframePaused = new bool[InitialBufferSizeSmall]; + ManualTimeframeHeld = new bool[InitialBufferSizeSmall]; + ManualTimeframeCoroutines = 0; + _nextManualTimeframeProcessSlot = 0; + + _processTags.Clear(); + _taggedProcesses.Clear(); + _processLayers.Clear(); + _layeredProcesses.Clear(); + _handleToIndex.Clear(); + _indexToHandle.Clear(); + _waitingTriggers.Clear(); + _expansions = (ushort)((_expansions / 2) + 1); + Links.Clear(); + +#if UNITY_EDITOR + EditorApplication.update -= OnEditorUpdate; +#endif + return retVal; + } + + /// + /// Kills the coroutine that you pass in (ignores it if the handle is invalid or isn't running). + /// + /// A list of handles to be killed. + /// The number of coroutines that were found and killed. + public static int KillCoroutines(CoroutineHandle handle) + { + return ActiveInstances[handle.Key] != null + ? GetInstance(handle.Key).KillCoroutinesOnInstance(handle) : 0; + } + + /// + /// Kills all the coroutines that you pass in (ignores any that aren't running). + /// + /// A list of handles to be killed. + /// The number of coroutines that were found and killed. + public static int KillCoroutines(params CoroutineHandle[] handles) + { + int count = 0; + for (int i = 0;i < handles.Length;i++) + count += ActiveInstances[handles[i].Key] != null + ? GetInstance(handles[i].Key).KillCoroutinesOnInstance(handles[i]) : 0; + + return count; + } + + /// + /// Kills the instance of the coroutine handle on this Timing instance if it exists. + /// + /// The handle of the coroutine to kill. + /// The number of coroutines that were found and killed (Normally 0 or 1). + public int KillCoroutinesOnInstance(CoroutineHandle handle) + { + int count = 0; + + if (_handleToIndex.ContainsKey(handle)) + { + if (_waitingTriggers.ContainsKey(handle)) + CloseWaitingProcess(handle); + + if (Nullify(handle)) + count++; + RemoveGraffiti(handle); + } + + if (Links.ContainsKey(handle)) + { + var linksEnum = Links[handle].GetEnumerator(); + Links.Remove(handle); + while (linksEnum.MoveNext()) + count += KillCoroutines(linksEnum.Current); + } + + return count; + } + + /// + /// Kills all coroutines on the given layer. + /// + /// All coroutines on the layer corresponding with this GameObject will be killed. + /// The number of coroutines that were found and killed. + public static int KillCoroutines(GameObject gameObj) + { + return _instance == null ? 0 : _instance.KillCoroutinesOnInstance(gameObj.GetInstanceID()); + } + + /// + /// Kills all coroutines on the given layer. + /// + /// All coroutines on the layer corresponding with this GameObject will be killed. + /// The number of coroutines that were found and killed. + public int KillCoroutinesOnInstance(GameObject gameObj) + { + return KillCoroutinesOnInstance(gameObj.GetInstanceID()); + } + + /// + /// Kills all coroutines on the given layer. + /// + /// All coroutines on this layer will be killed. + /// The number of coroutines that were found and killed. + public static int KillCoroutines(int layer) + { + return _instance == null ? 0 : _instance.KillCoroutinesOnInstance(layer); + } + + /// + /// Kills all coroutines on the given layer. + /// + /// All coroutines on this layer will be killed. + /// The number of coroutines that were found and killed. + public int KillCoroutinesOnInstance(int layer) + { + int numberFound = 0; + + while (_layeredProcesses.ContainsKey(layer)) + { + var matchEnum = _layeredProcesses[layer].GetEnumerator(); + matchEnum.MoveNext(); + + if (Nullify(matchEnum.Current)) + { + if (_waitingTriggers.ContainsKey(matchEnum.Current)) + CloseWaitingProcess(matchEnum.Current); + + numberFound++; + } + + RemoveGraffiti(matchEnum.Current); + + if (Links.ContainsKey(matchEnum.Current)) + { + var linksEnum = Links[matchEnum.Current].GetEnumerator(); + Links.Remove(matchEnum.Current); + while (linksEnum.MoveNext()) + numberFound += KillCoroutines(linksEnum.Current); + } + } + + return numberFound; + } + + /// + /// Kills all coroutines that have the given tag. + /// + /// All coroutines with this tag will be killed. + /// The number of coroutines that were found and killed. + public static int KillCoroutines(string tag) + { + return _instance == null ? 0 : _instance.KillCoroutinesOnInstance(tag); + } + + /// + /// Kills all coroutines that have the given tag. + /// + /// All coroutines with this tag will be killed. + /// The number of coroutines that were found and killed. + public int KillCoroutinesOnInstance(string tag) + { + if (tag == null) return 0; + int numberFound = 0; + + while (_taggedProcesses.ContainsKey(tag)) + { + var matchEnum = _taggedProcesses[tag].GetEnumerator(); + matchEnum.MoveNext(); + + if (Nullify(_handleToIndex[matchEnum.Current])) + { + if (_waitingTriggers.ContainsKey(matchEnum.Current)) + CloseWaitingProcess(matchEnum.Current); + + numberFound++; + } + + RemoveGraffiti(matchEnum.Current); + + if (Links.ContainsKey(matchEnum.Current)) + { + var linksEnum = Links[matchEnum.Current].GetEnumerator(); + Links.Remove(matchEnum.Current); + while (linksEnum.MoveNext()) + numberFound += KillCoroutines(linksEnum.Current); + } + } + + return numberFound; + } + + /// + /// Kills all coroutines with the given tag on the given layer. + /// + /// All coroutines on the layer corresponding with this GameObject will be killed. + /// All coroutines with this tag on the given layer will be killed. + /// The number of coroutines that were found and killed. + public static int KillCoroutines(GameObject gameObj, string tag) + { + return _instance == null ? 0 : _instance.KillCoroutinesOnInstance(gameObj.GetInstanceID(), tag); + } + + /// + /// Kills all coroutines with the given tag on the given layer. + /// + /// All coroutines on the layer corresponding with this GameObject will be killed. + /// All coroutines with this tag on the given layer will be killed. + /// The number of coroutines that were found and killed. + public int KillCoroutinesOnInstance(GameObject gameObj, string tag) + { + return KillCoroutinesOnInstance(gameObj.GetInstanceID(), tag); + } + + /// + /// Kills all coroutines with the given tag on the given layer. + /// + /// All coroutines on this layer with the given tag will be killed. + /// All coroutines with this tag on the given layer will be killed. + /// The number of coroutines that were found and killed. + public static int KillCoroutines(int layer, string tag) + { + return _instance == null ? 0 : _instance.KillCoroutinesOnInstance(layer, tag); + } + + /// + /// Kills all coroutines with the given tag on the given layer. + /// + /// All coroutines on this layer with the given tag will be killed. + /// All coroutines with this tag on the given layer will be killed. + /// The number of coroutines that were found and killed. + public int KillCoroutinesOnInstance(int layer, string tag) + { + if (tag == null) + return KillCoroutinesOnInstance(layer); + if (!_layeredProcesses.ContainsKey(layer) || !_taggedProcesses.ContainsKey(tag)) + return 0; + int count = 0; + + var indexesEnum = _taggedProcesses[tag].GetEnumerator(); + while (indexesEnum.MoveNext()) + { + if (CoindexIsNull(_handleToIndex[indexesEnum.Current]) || !_layeredProcesses[layer].Contains(indexesEnum.Current) || + !Nullify(indexesEnum.Current)) + continue; + + if (_waitingTriggers.ContainsKey(indexesEnum.Current)) + CloseWaitingProcess(indexesEnum.Current); + + count++; + RemoveGraffiti(indexesEnum.Current); + + if (Links.ContainsKey(indexesEnum.Current)) + { + var linksEnum = Links[indexesEnum.Current].GetEnumerator(); + Links.Remove(indexesEnum.Current); + while (linksEnum.MoveNext()) + KillCoroutines(linksEnum.Current); + } + + if (!_taggedProcesses.ContainsKey(tag) || !_layeredProcesses.ContainsKey(layer)) + break; + + indexesEnum = _taggedProcesses[tag].GetEnumerator(); + } + + return count; + } + + /// + /// Retrieves the MEC manager that corresponds to the supplied instance id. + /// + /// The instance ID. + /// The manager, or null if not found. + public static Timing GetInstance(byte ID) + { + if (ID >= 0x10) + return null; + return ActiveInstances[ID]; + } + + /// + /// Use "yield return Timing.WaitForSeconds(time);" to wait for the specified number of seconds. + /// + /// Number of seconds to wait. + public static float WaitForSeconds(float waitTime) + { + if (float.IsNaN(waitTime)) waitTime = 0f; + return LocalTime + waitTime; + } + + /// + /// Use "yield return timingInstance.WaitForSecondsOnInstance(time);" to wait for the specified number of seconds. + /// + /// Number of seconds to wait. + public float WaitForSecondsOnInstance(float waitTime) + { + if (float.IsNaN(waitTime)) waitTime = 0f; + return localTime + waitTime; + } + + private bool UpdateTimeValues(Segment segment) + { + switch (segment) + { + case Segment.Update: + if (_currentUpdateFrame != Time.frameCount) + { + deltaTime = Time.deltaTime; + _lastUpdateTime += deltaTime; + localTime = _lastUpdateTime; + _currentUpdateFrame = Time.frameCount; + return true; + } + else + { + deltaTime = Time.deltaTime; + localTime = _lastUpdateTime; + return false; + } + case Segment.LateUpdate: + if (_currentLateUpdateFrame != Time.frameCount) + { + deltaTime = Time.deltaTime; + _lastLateUpdateTime += deltaTime; + localTime = _lastLateUpdateTime; + _currentLateUpdateFrame = Time.frameCount; + return true; + } + else + { + deltaTime = Time.deltaTime; + localTime = _lastLateUpdateTime; + return false; + } + case Segment.FixedUpdate: + deltaTime = Time.fixedDeltaTime; + localTime = Time.fixedTime; + + if (_lastFixedUpdateTime + 0.0001f < Time.fixedTime) + { + _lastFixedUpdateTime = Time.fixedTime; + return true; + } + + return false; + case Segment.SlowUpdate: + if (_currentSlowUpdateFrame != Time.frameCount) + { + deltaTime = _lastSlowUpdateDeltaTime = Time.realtimeSinceStartup - _lastSlowUpdateTime; + localTime = _lastSlowUpdateTime = Time.realtimeSinceStartup; + _currentSlowUpdateFrame = Time.frameCount; + return true; + } + else + { + localTime = _lastSlowUpdateTime; + deltaTime = _lastSlowUpdateDeltaTime; + return false; + } + case Segment.RealtimeUpdate: + if (_currentRealtimeUpdateFrame != Time.frameCount) + { + deltaTime = Time.unscaledDeltaTime; + _lastRealtimeUpdateTime += deltaTime; + localTime = _lastRealtimeUpdateTime; + _currentRealtimeUpdateFrame = Time.frameCount; + return true; + } + else + { + deltaTime = Time.unscaledDeltaTime; + localTime = _lastRealtimeUpdateTime; + return false; + } +#if UNITY_EDITOR + case Segment.EditorUpdate: + if (_lastEditorUpdateTime + 0.0001 < EditorApplication.timeSinceStartup) + { + _lastEditorUpdateDeltaTime = (float)EditorApplication.timeSinceStartup - _lastEditorUpdateTime; + if (_lastEditorUpdateDeltaTime > Time.maximumDeltaTime) + _lastEditorUpdateDeltaTime = Time.maximumDeltaTime; + + deltaTime = _lastEditorUpdateDeltaTime; + localTime = _lastEditorUpdateTime = (float)EditorApplication.timeSinceStartup; + return true; + } + else + { + deltaTime = _lastEditorUpdateDeltaTime; + localTime = _lastEditorUpdateTime; + return false; + } + case Segment.EditorSlowUpdate: + if (_lastEditorSlowUpdateTime + 0.0001 < EditorApplication.timeSinceStartup) + { + _lastEditorSlowUpdateDeltaTime = (float)EditorApplication.timeSinceStartup - _lastEditorSlowUpdateTime; + deltaTime = _lastEditorSlowUpdateDeltaTime; + localTime = _lastEditorSlowUpdateTime = (float)EditorApplication.timeSinceStartup; + return true; + } + else + { + deltaTime = _lastEditorSlowUpdateDeltaTime; + localTime = _lastEditorSlowUpdateTime; + return false; + } +#endif + case Segment.EndOfFrame: + if (_currentEndOfFrameFrame != Time.frameCount) + { + deltaTime = Time.deltaTime; + _lastEndOfFrameTime += deltaTime; + localTime = _lastEndOfFrameTime; + _currentEndOfFrameFrame = Time.frameCount; + return true; + } + else + { + deltaTime = Time.deltaTime; + localTime = _lastEndOfFrameTime; + return false; + } + case Segment.ManualTimeframe: + float timeCalculated = SetManualTimeframeTime == null ? Time.time : SetManualTimeframeTime(_lastManualTimeframeTime); + if (_lastManualTimeframeTime + 0.0001 < timeCalculated && _lastManualTimeframeTime - 0.0001 > timeCalculated) + { + localTime = timeCalculated; + deltaTime = localTime - _lastManualTimeframeTime; + + if (deltaTime > Time.maximumDeltaTime) + deltaTime = Time.maximumDeltaTime; + + _lastManualTimeframeDeltaTime = deltaTime; + _lastManualTimeframeTime = timeCalculated; + return true; + } + else + { + deltaTime = _lastManualTimeframeDeltaTime; + localTime = _lastManualTimeframeTime; + return false; + } + } + return true; + } + + private float GetSegmentTime(Segment segment) + { + switch (segment) + { + case Segment.Update: + if (_currentUpdateFrame == Time.frameCount) + return _lastUpdateTime; + else + return _lastUpdateTime + Time.deltaTime; + case Segment.LateUpdate: + if (_currentUpdateFrame == Time.frameCount) + return _lastLateUpdateTime; + else + return _lastLateUpdateTime + Time.deltaTime; + case Segment.FixedUpdate: + return Time.fixedTime; + case Segment.SlowUpdate: + return Time.realtimeSinceStartup; + case Segment.RealtimeUpdate: + if (_currentRealtimeUpdateFrame == Time.frameCount) + return _lastRealtimeUpdateTime; + else + return _lastRealtimeUpdateTime + Time.unscaledDeltaTime; +#if UNITY_EDITOR + case Segment.EditorUpdate: + case Segment.EditorSlowUpdate: + return (float)EditorApplication.timeSinceStartup; +#endif + case Segment.EndOfFrame: + if (_currentUpdateFrame == Time.frameCount) + return _lastEndOfFrameTime; + else + return _lastEndOfFrameTime + Time.deltaTime; + case Segment.ManualTimeframe: + return _lastManualTimeframeTime; + default: + return 0f; + } + } + + /// + /// This will pause all coroutines running on the main MEC instance until ResumeCoroutines is called. + /// + /// The number of coroutines that were paused. + public static int PauseCoroutines() + { + return _instance == null ? 0 : _instance.PauseCoroutinesOnInstance(); + } + + /// + /// This will pause all coroutines running on this MEC instance until ResumeCoroutinesOnInstance is called. + /// + /// The number of coroutines that were paused. + public int PauseCoroutinesOnInstance() + { + int count = 0; + int i; + for (i = 0; i < _nextUpdateProcessSlot; i++) + { + if (!UpdatePaused[i] && UpdateProcesses[i] != null) + { + count++; + UpdatePaused[i] = true; + + if (UpdateProcesses[i].Current > GetSegmentTime(Segment.Update)) + UpdateProcesses[i] = _InjectDelay(UpdateProcesses[i], + UpdateProcesses[i].Current - GetSegmentTime(Segment.Update)); + } + } + + for (i = 0; i < _nextLateUpdateProcessSlot; i++) + { + if (!LateUpdatePaused[i] && LateUpdateProcesses[i] != null) + { + count++; + LateUpdatePaused[i] = true; + + if (LateUpdateProcesses[i].Current > GetSegmentTime(Segment.LateUpdate)) + LateUpdateProcesses[i] = _InjectDelay(LateUpdateProcesses[i], + LateUpdateProcesses[i].Current - GetSegmentTime(Segment.LateUpdate)); + } + } + + for (i = 0; i < _nextFixedUpdateProcessSlot; i++) + { + if (!FixedUpdatePaused[i] && FixedUpdateProcesses[i] != null) + { + count++; + FixedUpdatePaused[i] = true; + + if (FixedUpdateProcesses[i].Current > GetSegmentTime(Segment.FixedUpdate)) + FixedUpdateProcesses[i] = _InjectDelay(FixedUpdateProcesses[i], + FixedUpdateProcesses[i].Current - GetSegmentTime(Segment.FixedUpdate)); + } + } + + for (i = 0; i < _nextSlowUpdateProcessSlot; i++) + { + if (!SlowUpdatePaused[i] && SlowUpdateProcesses[i] != null) + { + count++; + SlowUpdatePaused[i] = true; + + if (SlowUpdateProcesses[i].Current > GetSegmentTime(Segment.SlowUpdate)) + SlowUpdateProcesses[i] = _InjectDelay(SlowUpdateProcesses[i], + SlowUpdateProcesses[i].Current - GetSegmentTime(Segment.SlowUpdate)); + } + } + + for (i = 0; i < _nextRealtimeUpdateProcessSlot; i++) + { + if (!RealtimeUpdatePaused[i] && RealtimeUpdateProcesses[i] != null) + { + count++; + RealtimeUpdatePaused[i] = true; + + if (RealtimeUpdateProcesses[i].Current > GetSegmentTime(Segment.RealtimeUpdate)) + RealtimeUpdateProcesses[i] = _InjectDelay(RealtimeUpdateProcesses[i], + RealtimeUpdateProcesses[i].Current - GetSegmentTime(Segment.RealtimeUpdate)); + } + } + + for (i = 0; i < _nextEditorUpdateProcessSlot; i++) + { + if (!EditorUpdatePaused[i] && EditorUpdateProcesses[i] != null) + { + count++; + EditorUpdatePaused[i] = true; + + if (EditorUpdateProcesses[i].Current > GetSegmentTime(Segment.EditorUpdate)) + EditorUpdateProcesses[i] = _InjectDelay(EditorUpdateProcesses[i], + EditorUpdateProcesses[i].Current - GetSegmentTime(Segment.EditorUpdate)); + } + } + + for (i = 0; i < _nextEditorSlowUpdateProcessSlot; i++) + { + if (!EditorSlowUpdatePaused[i] && EditorSlowUpdateProcesses[i] != null) + { + count++; + EditorSlowUpdatePaused[i] = true; + + if (EditorSlowUpdateProcesses[i].Current > GetSegmentTime(Segment.EditorSlowUpdate)) + EditorSlowUpdateProcesses[i] = _InjectDelay(EditorSlowUpdateProcesses[i], + EditorSlowUpdateProcesses[i].Current - GetSegmentTime(Segment.EditorSlowUpdate)); + } + } + + for (i = 0; i < _nextEndOfFrameProcessSlot; i++) + { + if (!EndOfFramePaused[i] && EndOfFrameProcesses[i] != null) + { + count++; + EndOfFramePaused[i] = true; + + if (EndOfFrameProcesses[i].Current > GetSegmentTime(Segment.EndOfFrame)) + EndOfFrameProcesses[i] = _InjectDelay(EndOfFrameProcesses[i], + EndOfFrameProcesses[i].Current - GetSegmentTime(Segment.EndOfFrame)); + } + } + + for (i = 0; i < _nextManualTimeframeProcessSlot; i++) + { + if (!ManualTimeframePaused[i] && ManualTimeframeProcesses[i] != null) + { + count++; + ManualTimeframePaused[i] = true; + + if (ManualTimeframeProcesses[i].Current > GetSegmentTime(Segment.ManualTimeframe)) + ManualTimeframeProcesses[i] = _InjectDelay(ManualTimeframeProcesses[i], + ManualTimeframeProcesses[i].Current - GetSegmentTime(Segment.ManualTimeframe)); + } + } + + var indexesEnum = Links.GetEnumerator(); + while (indexesEnum.MoveNext()) + { + if (!_handleToIndex.ContainsKey(indexesEnum.Current.Key)) continue; + + var linksEnum = indexesEnum.Current.Value.GetEnumerator(); + while (linksEnum.MoveNext()) + count += PauseCoroutines(linksEnum.Current); + } + + return count; + } + + /// + /// This will pause any matching coroutines running on this MEC instance until ResumeCoroutinesOnInstance is called. + /// + /// The handle of the coroutine to pause. + /// The number of coroutines that were paused (Normally 0 or 1). + public int PauseCoroutinesOnInstance(CoroutineHandle handle) + { + int count = 0; + + if (_handleToIndex.ContainsKey(handle) && !CoindexIsNull(_handleToIndex[handle]) && !SetPause(_handleToIndex[handle], true)) + count++; + + if (Links.ContainsKey(handle)) + { + var links = Links[handle]; + Links.Remove(handle); + var linksEnum = links.GetEnumerator(); + while (linksEnum.MoveNext()) + count += PauseCoroutines(linksEnum.Current); + Links.Add(handle, links); + } + + return count; + } + + /// + /// This will pause any matching coroutines until ResumeCoroutines is called. + /// + /// A list of handles to coroutines you want to pause. + /// The number of coroutines that were paused. + public static int PauseCoroutines(CoroutineHandle handle) + { + return _instance == null ? 0 : _instance.PauseCoroutinesOnInstance(handle); + } + + /// + /// This will pause any matching coroutines until ResumeCoroutines is called. + /// + /// A list of handles to coroutines you want to pause. + /// The number of coroutines that were paused. + public static int PauseCoroutines(params CoroutineHandle[] handles) + { + int total = 0; + for (int i = 0;i < handles.Length;i++) + total += ActiveInstances[handles[i].Key] != null + ? GetInstance(handles[i].Key).PauseCoroutinesOnInstance(handles[i]) : 0; + return total; + } + + /// + /// This will pause any matching coroutines running on the current MEC instance until ResumeCoroutines is called. + /// + /// All coroutines on the layer corresponding with this GameObject will be paused. + /// The number of coroutines that were paused. + public static int PauseCoroutines(GameObject gameObj) + { + return _instance == null ? 0 : _instance.PauseCoroutinesOnInstance(gameObj); + } + + /// + /// This will pause any matching coroutines running on this MEC instance until ResumeCoroutinesOnInstance is called. + /// + /// All coroutines on the layer corresponding with this GameObject will be paused. + /// The number of coroutines that were paused. + public int PauseCoroutinesOnInstance(GameObject gameObj) + { + return gameObj == null ? 0 : PauseCoroutinesOnInstance(gameObj.GetInstanceID()); + } + + /// + /// This will pause any matching coroutines running on the current MEC instance until ResumeCoroutines is called. + /// + /// Any coroutines on the matching layer will be paused. + /// The number of coroutines that were paused. + public static int PauseCoroutines(int layer) + { + return _instance == null ? 0 : _instance.PauseCoroutinesOnInstance(layer); + } + + /// + /// This will pause any matching coroutines running on this MEC instance until ResumeCoroutinesOnInstance is called. + /// + /// Any coroutines on the matching layer will be paused. + /// The number of coroutines that were paused. + public int PauseCoroutinesOnInstance(int layer) + { + if (!_layeredProcesses.ContainsKey(layer)) + return 0; + + int count = 0; + var matchesEnum = _layeredProcesses[layer].GetEnumerator(); + + while (matchesEnum.MoveNext()) + { + if (!CoindexIsNull(_handleToIndex[matchesEnum.Current]) && !SetPause(_handleToIndex[matchesEnum.Current], true)) + count++; + + if (Links.ContainsKey(matchesEnum.Current)) + { + var links = Links[matchesEnum.Current]; + Links.Remove(matchesEnum.Current); + var linksEnum = links.GetEnumerator(); + while (linksEnum.MoveNext()) + count += PauseCoroutines(linksEnum.Current); + Links.Add(matchesEnum.Current, links); + } + } + + return count; + } + + /// + /// This will pause any matching coroutines running on the current MEC instance until ResumeCoroutines is called. + /// + /// Any coroutines with a matching tag will be paused. + /// The number of coroutines that were paused. + public static int PauseCoroutines(string tag) + { + return _instance == null ? 0 : _instance.PauseCoroutinesOnInstance(tag); + } + + /// + /// This will pause any matching coroutines running on this MEC instance until ResumeCoroutinesOnInstance is called. + /// + /// Any coroutines with a matching tag will be paused. + /// The number of coroutines that were paused. + public int PauseCoroutinesOnInstance(string tag) + { + if (tag == null || !_taggedProcesses.ContainsKey(tag)) + return 0; + + int count = 0; + var matchesEnum = _taggedProcesses[tag].GetEnumerator(); + + while (matchesEnum.MoveNext()) + { + if (!CoindexIsNull(_handleToIndex[matchesEnum.Current]) && !SetPause(_handleToIndex[matchesEnum.Current], true)) + count++; + + if (Links.ContainsKey(matchesEnum.Current)) + { + var links = Links[matchesEnum.Current]; + Links.Remove(matchesEnum.Current); + var linksEnum = links.GetEnumerator(); + while (linksEnum.MoveNext()) + count += PauseCoroutines(linksEnum.Current); + Links.Add(matchesEnum.Current, links); + } + } + + return count; + } + + /// + /// This will pause any matching coroutines running on the current MEC instance until ResumeCoroutines is called. + /// + /// All coroutines on the layer corresponding with this GameObject will be paused. + /// Any coroutines with a matching tag will be paused. + /// The number of coroutines that were paused. + public static int PauseCoroutines(GameObject gameObj, string tag) + { + return _instance == null ? 0 : _instance.PauseCoroutinesOnInstance(gameObj.GetInstanceID(), tag); + } + + /// + /// This will pause any matching coroutines running on this MEC instance until ResumeCoroutinesOnInstance is called. + /// + /// All coroutines on the layer corresponding with this GameObject will be paused. + /// Any coroutines with a matching tag will be paused. + /// The number of coroutines that were paused. + public int PauseCoroutinesOnInstance(GameObject gameObj, string tag) + { + return gameObj == null ? 0 : PauseCoroutinesOnInstance(gameObj.GetInstanceID(), tag); + } + + /// + /// This will pause any matching coroutines running on the current MEC instance until ResumeCoroutines is called. + /// + /// Any coroutines on the matching layer will be paused. + /// Any coroutines with a matching tag will be paused. + /// The number of coroutines that were paused. + public static int PauseCoroutines(int layer, string tag) + { + return _instance == null ? 0 : _instance.PauseCoroutinesOnInstance(layer, tag); + } + + /// + /// This will pause any matching coroutines running on this MEC instance until ResumeCoroutinesOnInstance is called. + /// + /// Any coroutines on the matching layer will be paused. + /// Any coroutines with a matching tag will be paused. + /// The number of coroutines that were paused. + public int PauseCoroutinesOnInstance(int layer, string tag) + { + if (tag == null) + return PauseCoroutinesOnInstance(layer); + + if (!_taggedProcesses.ContainsKey(tag) || !_layeredProcesses.ContainsKey(layer)) + return 0; + + int count = 0; + var matchesEnum = _taggedProcesses[tag].GetEnumerator(); + + while (matchesEnum.MoveNext()) + { + if (_processLayers.ContainsKey(matchesEnum.Current) && _processLayers[matchesEnum.Current] == layer + && !CoindexIsNull(_handleToIndex[matchesEnum.Current])) + { + if (!SetPause(_handleToIndex[matchesEnum.Current], true)) + count++; + + if (Links.ContainsKey(matchesEnum.Current)) + { + var links = Links[matchesEnum.Current]; + Links.Remove(matchesEnum.Current); + var linksEnum = links.GetEnumerator(); + while (linksEnum.MoveNext()) + count += PauseCoroutines(linksEnum.Current); + Links.Add(matchesEnum.Current, links); + } + } + } + + return count; + } + + /// + /// This resumes all coroutines on the current MEC instance if they are currently paused, otherwise it has + /// no effect. + /// + /// The number of coroutines that were resumed. + public static int ResumeCoroutines() + { + return _instance == null ? 0 : _instance.ResumeCoroutinesOnInstance(); + } + + /// + /// This resumes all coroutines on this MEC instance if they are currently paused, otherwise it has no effect. + /// + /// The number of coroutines that were resumed. + public int ResumeCoroutinesOnInstance() + { + int count = 0; + ProcessIndex coindex; + for (coindex.i = 0, coindex.seg = Segment.Update; coindex.i < _nextUpdateProcessSlot; coindex.i++) + { + if (UpdatePaused[coindex.i] && UpdateProcesses[coindex.i] != null) + { + UpdatePaused[coindex.i] = false; + count++; + } + } + + for (coindex.i = 0, coindex.seg = Segment.LateUpdate; coindex.i < _nextLateUpdateProcessSlot; coindex.i++) + { + if (LateUpdatePaused[coindex.i] && LateUpdateProcesses[coindex.i] != null) + { + LateUpdatePaused[coindex.i] = false; + count++; + } + } + + for (coindex.i = 0, coindex.seg = Segment.FixedUpdate; coindex.i < _nextFixedUpdateProcessSlot; coindex.i++) + { + if (FixedUpdatePaused[coindex.i] && FixedUpdateProcesses[coindex.i] != null) + { + FixedUpdatePaused[coindex.i] = false; + count++; + } + } + + for (coindex.i = 0, coindex.seg = Segment.SlowUpdate; coindex.i < _nextSlowUpdateProcessSlot; coindex.i++) + { + if (SlowUpdatePaused[coindex.i] && SlowUpdateProcesses[coindex.i] != null) + { + SlowUpdatePaused[coindex.i] = false; + count++; + } + } + + for (coindex.i = 0, coindex.seg = Segment.RealtimeUpdate; coindex.i < _nextRealtimeUpdateProcessSlot; coindex.i++) + { + if (RealtimeUpdatePaused[coindex.i] && RealtimeUpdateProcesses[coindex.i] != null) + { + RealtimeUpdatePaused[coindex.i] = false; + count++; + } + } + + for (coindex.i = 0, coindex.seg = Segment.EditorUpdate; coindex.i < _nextEditorUpdateProcessSlot; coindex.i++) + { + if (EditorUpdatePaused[coindex.i] && EditorUpdateProcesses[coindex.i] != null) + { + EditorUpdatePaused[coindex.i] = false; + count++; + } + } + + for (coindex.i = 0, coindex.seg = Segment.EditorSlowUpdate; coindex.i < _nextEditorSlowUpdateProcessSlot; coindex.i++) + { + if (EditorSlowUpdatePaused[coindex.i] && EditorSlowUpdateProcesses[coindex.i] != null) + { + EditorSlowUpdatePaused[coindex.i] = false; + count++; + } + } + + for (coindex.i = 0, coindex.seg = Segment.EndOfFrame; coindex.i < _nextEndOfFrameProcessSlot; coindex.i++) + { + if (EndOfFramePaused[coindex.i] && EndOfFrameProcesses[coindex.i] != null) + { + EndOfFramePaused[coindex.i] = false; + count++; + } + } + + for (coindex.i = 0, coindex.seg = Segment.ManualTimeframe; coindex.i < _nextManualTimeframeProcessSlot; coindex.i++) + { + if (ManualTimeframePaused[coindex.i] && ManualTimeframeProcesses[coindex.i] != null) + { + ManualTimeframePaused[coindex.i] = false; + count++; + } + } + + var indexesEnum = Links.GetEnumerator(); + while (indexesEnum.MoveNext()) + { + if (!_handleToIndex.ContainsKey(indexesEnum.Current.Key)) continue; + + var linksEnum = indexesEnum.Current.Value.GetEnumerator(); + while (linksEnum.MoveNext()) + count += ResumeCoroutines(linksEnum.Current); + } + + return count; + } + + /// + /// This will resume any matching coroutines that are paused. + /// + /// A list of handles to coroutines you want to resume. + /// The number of coroutines that were resumed. + public static int ResumeCoroutines(CoroutineHandle handle) + { + return _instance == null ? 0 : _instance.ResumeCoroutinesOnInstance(handle); + } + + /// + /// This will resume any matching coroutines that are paused. + /// + /// A list of handles to coroutines you want to resume. + /// The number of coroutines that were resumed. + public static int ResumeCoroutines(params CoroutineHandle[] handles) + { + int count = 0; + for (int i = 0; i < handles.Length; i++) + count += ActiveInstances[handles[i].Key] != null + ? GetInstance(handles[i].Key).ResumeCoroutinesOnInstance(handles[i]) : 0; + return count; + } + + /// + /// This will resume any matching coroutines that are paused and running on this MEC instance. + /// + /// The handle of the coroutine to resume. + /// The number of coroutines that were resumed. (Normally 0 or 1) + public int ResumeCoroutinesOnInstance(CoroutineHandle handle) + { + int count = 0; + + if (_handleToIndex.ContainsKey(handle) && !CoindexIsNull(_handleToIndex[handle]) && SetPause(_handleToIndex[handle], false)) + count++; + + if (Links.ContainsKey(handle)) + { + var links = Links[handle]; + Links.Remove(handle); + var linksEnum = links.GetEnumerator(); + while (linksEnum.MoveNext()) + count += ResumeCoroutines(linksEnum.Current); + Links.Add(handle, links); + } + + return count; + } + + /// + /// This will resume any matching coroutines running on this MEC instance. + /// + /// A list of handles to coroutines you want to resume. + /// The number of coroutines that were resumed. + public int ResumeCoroutinesOnInstance(IEnumerable handles) + { + int count = 0; + var handlesEnum = handles.GetEnumerator(); + while (!handlesEnum.MoveNext()) + ResumeCoroutinesOnInstance(handlesEnum.Current); + return count; + } + + /// + /// This resumes any matching coroutines on the current MEC instance if they are currently paused, otherwise it has + /// no effect. + /// + /// All coroutines on the layer corresponding with this GameObject will be resumed. + /// The number of coroutines that were resumed. + public static int ResumeCoroutines(GameObject gameObj) + { + return _instance == null ? 0 : _instance.ResumeCoroutinesOnInstance(gameObj.GetInstanceID()); + } + + /// + /// This resumes any matching coroutines on this MEC instance if they are currently paused, otherwise it has no effect. + /// + /// All coroutines on the layer corresponding with this GameObject will be resumed. + /// The number of coroutines that were resumed. + public int ResumeCoroutinesOnInstance(GameObject gameObj) + { + return gameObj == null ? 0 : ResumeCoroutinesOnInstance(gameObj.GetInstanceID()); + } + + /// + /// This resumes any matching coroutines on the current MEC instance if they are currently paused, otherwise it has + /// no effect. + /// + /// Any coroutines previously paused on the matching layer will be resumend. + /// The number of coroutines that were resumed. + public static int ResumeCoroutines(int layer) + { + return _instance == null ? 0 : _instance.ResumeCoroutinesOnInstance(layer); + } + + /// + /// This resumes any matching coroutines on this MEC instance if they are currently paused, otherwise it has no effect. + /// + /// Any coroutines previously paused on the matching layer will be resumend. + /// The number of coroutines that were resumed. + public int ResumeCoroutinesOnInstance(int layer) + { + if (!_layeredProcesses.ContainsKey(layer)) + return 0; + int count = 0; + + var indexesEnum = _layeredProcesses[layer].GetEnumerator(); + while (indexesEnum.MoveNext()) + { + if (!CoindexIsNull(_handleToIndex[indexesEnum.Current]) && SetPause(_handleToIndex[indexesEnum.Current], false)) + { + count++; + } + + if (Links.ContainsKey(indexesEnum.Current)) + { + var links = Links[indexesEnum.Current]; + Links.Remove(indexesEnum.Current); + var linksEnum = links.GetEnumerator(); + while (linksEnum.MoveNext()) + count += ResumeCoroutines(linksEnum.Current); + Links.Add(indexesEnum.Current, links); + } + } + + return count; + } + + /// + /// This resumes any matching coroutines on the current MEC instance if they are currently paused, otherwise it has no effect. + /// + /// Any coroutines previously paused with a matching tag will be resumend. + /// The number of coroutines that were resumed. + public static int ResumeCoroutines(string tag) + { + return _instance == null ? 0 : _instance.ResumeCoroutinesOnInstance(tag); + } + + /// + /// This resumes any matching coroutines on this MEC instance if they are currently paused, otherwise it has no effect. + /// + /// Any coroutines previously paused with a matching tag will be resumend. + /// The number of coroutines that were resumed. + public int ResumeCoroutinesOnInstance(string tag) + { + if (tag == null || !_taggedProcesses.ContainsKey(tag)) + return 0; + int count = 0; + + var indexesEnum = _taggedProcesses[tag].GetEnumerator(); + while (indexesEnum.MoveNext()) + { + if (!CoindexIsNull(_handleToIndex[indexesEnum.Current]) && SetPause(_handleToIndex[indexesEnum.Current], false)) + { + count++; + } + + if (Links.ContainsKey(indexesEnum.Current)) + { + var links = Links[indexesEnum.Current]; + Links.Remove(indexesEnum.Current); + var linksEnum = links.GetEnumerator(); + while (linksEnum.MoveNext()) + count += ResumeCoroutines(linksEnum.Current); + Links.Add(indexesEnum.Current, links); + } + } + + return count; + } + + /// + /// This resumes any matching coroutines on the current MEC instance if they are currently paused, otherwise it has + /// no effect. + /// + /// All coroutines on the layer corresponding with this GameObject will be resumed. + /// Any coroutines previously paused with a matching tag will be resumend. + /// The number of coroutines that were resumed. + public static int ResumeCoroutines(GameObject gameObj, string tag) + { + return _instance == null ? 0 : _instance.ResumeCoroutinesOnInstance(gameObj.GetInstanceID(), tag); + } + + /// + /// This resumes any matching coroutines on this MEC instance if they are currently paused, otherwise it has no effect. + /// + /// All coroutines on the layer corresponding with this GameObject will be resumed. + /// Any coroutines previously paused with a matching tag will be resumend. + /// The number of coroutines that were resumed. + public int ResumeCoroutinesOnInstance(GameObject gameObj, string tag) + { + return gameObj == null ? 0 : ResumeCoroutinesOnInstance(gameObj.GetInstanceID(), tag); + } + + /// + /// This resumes any matching coroutines on the current MEC instance if they are currently paused, otherwise it has + /// no effect. + /// + /// Any coroutines previously paused on the matching layer will be resumend. + /// Any coroutines previously paused with a matching tag will be resumend. + /// The number of coroutines that were resumed. + public static int ResumeCoroutines(int layer, string tag) + { + return _instance == null ? 0 : _instance.ResumeCoroutinesOnInstance(layer, tag); + } + + /// + /// This resumes any matching coroutines on this MEC instance if they are currently paused, otherwise it has no effect. + /// + /// Any coroutines previously paused on the matching layer will be resumend. + /// Any coroutines previously paused with a matching tag will be resumend. + /// The number of coroutines that were resumed. + public int ResumeCoroutinesOnInstance(int layer, string tag) + { + if (tag == null) + return ResumeCoroutinesOnInstance(layer); + if (!_layeredProcesses.ContainsKey(layer) || !_taggedProcesses.ContainsKey(tag)) + return 0; + int count = 0; + + var indexesEnum = _taggedProcesses[tag].GetEnumerator(); + while (indexesEnum.MoveNext()) + { + if (!CoindexIsNull(_handleToIndex[indexesEnum.Current]) && _layeredProcesses[layer].Contains(indexesEnum.Current)) + { + if (SetPause(_handleToIndex[indexesEnum.Current], false)) + count++; + + if (Links.ContainsKey(indexesEnum.Current)) + { + var links = Links[indexesEnum.Current]; + Links.Remove(indexesEnum.Current); + var linksEnum = links.GetEnumerator(); + while (linksEnum.MoveNext()) + count += ResumeCoroutines(linksEnum.Current); + Links.Add(indexesEnum.Current, links); + } + } + } + + return count; + } + + /// + /// Returns the tag associated with the coroutine that the given handle points to, if it is running. + /// + /// The handle to the coroutine. + /// The coroutine's tag, or null if there is no matching tag. + public static string GetTag(CoroutineHandle handle) + { + Timing inst = GetInstance(handle.Key); + return inst != null && inst._handleToIndex.ContainsKey(handle) && inst._processTags.ContainsKey(handle) + ? inst._processTags[handle] : null; + } + + /// + /// Returns the layer associated with the coroutine that the given handle points to, if it is running. + /// + /// The handle to the coroutine. + /// The coroutine's layer as a nullable integer, or null if there is no matching layer. + public static int? GetLayer(CoroutineHandle handle) + { + Timing inst = GetInstance(handle.Key); + return inst != null && inst._handleToIndex.ContainsKey(handle) && inst._processLayers.ContainsKey(handle) + ? inst._processLayers[handle] : (int?)null; + } + + /// + /// Returns >NET's name for the coroutine that the handle points to. + /// + /// The handle to the coroutine. + /// The underlying debug name of the coroutine, or info about the state of the coroutine. + public static string GetDebugName(CoroutineHandle handle) + { + if (handle.Key == 0) + return "Uninitialized handle"; + Timing inst = GetInstance(handle.Key); + if (inst == null) + return "Invalid handle"; + if (!inst._handleToIndex.ContainsKey(handle)) + return "Expired coroutine"; + + return inst.CoindexPeek(inst._handleToIndex[handle]).ToString(); + } + + /// + /// Returns the segment that the coroutine with the given handle is running on. + /// + /// The handle to the coroutine. + /// The coroutine's segment, or Segment.Invalid if it's not found. + public static Segment GetSegment(CoroutineHandle handle) + { + Timing inst = GetInstance(handle.Key); + return inst != null && inst._handleToIndex.ContainsKey(handle) ? inst._handleToIndex[handle].seg : Segment.Invalid; + } + + /// + /// Sets the coroutine that the handle points to to have the given tag. + /// + /// The handle to the coroutine. + /// The new tag to assign, or null to clear the tag. + /// If set to false then the tag will not be changed if the coroutine has an existing tag. + /// Whether the tag was set successfully. + public static bool SetTag(CoroutineHandle handle, string newTag, bool overwriteExisting = true) + { + Timing inst = GetInstance(handle.Key); + if (inst == null || !inst._handleToIndex.ContainsKey(handle) || inst.CoindexIsNull(inst._handleToIndex[handle]) + || (!overwriteExisting && inst._processTags.ContainsKey(handle))) + return false; + + inst.RemoveTagOnInstance(handle); + inst.AddTagOnInstance(newTag, handle); + + return true; + } + + /// + /// Sets the coroutine that the handle points to to have the given layer. + /// + /// The handle to the coroutine. + /// The new tag to assign. + /// If set to false then the tag will not be changed if the coroutine has an existing tag. + /// Whether the layer was set successfully. + public static bool SetLayer(CoroutineHandle handle, int newLayer, bool overwriteExisting = true) + { + Timing inst = GetInstance(handle.Key); + if (inst == null || !inst._handleToIndex.ContainsKey(handle) || inst.CoindexIsNull(inst._handleToIndex[handle]) + || (!overwriteExisting && inst._processLayers.ContainsKey(handle))) + return false; + + inst.RemoveLayerOnInstance(handle); + inst.AddLayerOnInstance(newLayer, handle); + + return true; + } + + /// + /// Sets the segment for the coroutine with the given handle. + /// + /// The handle to the coroutine. + /// The new segment to run the coroutine in. + /// Whether the segment was set successfully. + public static bool SetSegment(CoroutineHandle handle, Segment newSegment) + { + Timing inst = GetInstance(handle.Key); + if (inst == null || !inst._handleToIndex.ContainsKey(handle) || inst.CoindexIsNull(inst._handleToIndex[handle])) + return false; + + ProcessIndex coindex = inst._handleToIndex[handle]; + IEnumerator procPtr = inst.CoindexExtract(coindex); + bool coroutineHeld = inst.CoindexIsHeld(coindex); + bool coroutinePaused = inst.CoindexIsPaused(coindex); + + if (procPtr.Current > inst.GetSegmentTime(coindex.seg)) + procPtr = inst._InjectDelay(procPtr, procPtr.Current - inst.GetSegmentTime(coindex.seg)); + + inst.RunCoroutineInternal(procPtr, newSegment, 0, false, null, handle, false); + + coindex = inst._handleToIndex[handle]; + inst.SetHeld(coindex, coroutineHeld); + inst.SetPause(coindex, coroutinePaused); + + return true; + } + + /// + /// Sets the coroutine that the handle points to to have the given tag. + /// + /// The handle to the coroutine. + /// Whether the tag was removed successfully. + public static bool RemoveTag(CoroutineHandle handle) + { + return SetTag(handle, null); + } + + /// + /// Sets the coroutine that the handle points to to have the given layer. + /// + /// The handle to the coroutine. + /// Whether the layer was removed successfully. + public static bool RemoveLayer(CoroutineHandle handle) + { + Timing inst = GetInstance(handle.Key); + if (inst == null || !inst._handleToIndex.ContainsKey(handle) || inst.CoindexIsNull(inst._handleToIndex[handle])) + return false; + + inst.RemoveLayerOnInstance(handle); + + return true; + } + + /// + /// Tests to see if the handle you have points to a valid coroutine that is currently running. Paused or held coroutines count as running. + /// + /// The handle to test. + /// Whether it's a valid coroutine. + public static bool IsRunning(CoroutineHandle handle) + { + Timing inst = GetInstance(handle.Key); + return inst != null && inst._handleToIndex.ContainsKey(handle) && !inst.CoindexIsNull(inst._handleToIndex[handle]); + } + + /// + /// Tests to see if the handle you have points to a coroutine that has not ended but is paused. + /// + /// The handle to test. + /// Whether it's a paused coroutine. + public static bool IsAliveAndPaused(CoroutineHandle handle) + { + Timing inst = GetInstance(handle.Key); + return inst != null && inst._handleToIndex.ContainsKey(handle) && !inst.CoindexIsNull(inst._handleToIndex[handle]) && + inst.CoindexIsPaused(inst._handleToIndex[handle]); + } + + private void AddTagOnInstance(string tag, CoroutineHandle handle) + { + _processTags.Add(handle, tag); + + if (_taggedProcesses.ContainsKey(tag)) + _taggedProcesses[tag].Add(handle); + else + _taggedProcesses.Add(tag, new HashSet { handle }); + } + + private void AddLayerOnInstance(int layer, CoroutineHandle handle) + { + _processLayers.Add(handle, layer); + + if (_layeredProcesses.ContainsKey(layer)) + _layeredProcesses[layer].Add(handle); + else + _layeredProcesses.Add(layer, new HashSet { handle }); + } + + private void RemoveTagOnInstance(CoroutineHandle handle) + { + if (_processTags.ContainsKey(handle)) + { + if (_taggedProcesses[_processTags[handle]].Count > 1) + _taggedProcesses[_processTags[handle]].Remove(handle); + else + _taggedProcesses.Remove(_processTags[handle]); + + _processTags.Remove(handle); + } + } + + private void RemoveLayerOnInstance(CoroutineHandle handle) + { + if (_processLayers.ContainsKey(handle)) + { + if (_layeredProcesses[_processLayers[handle]].Count > 1) + _layeredProcesses[_processLayers[handle]].Remove(handle); + else + _layeredProcesses.Remove(_processLayers[handle]); + + _processLayers.Remove(handle); + } + } + + private void RemoveGraffiti(CoroutineHandle handle) + { + if (_processLayers.ContainsKey(handle)) + { + if (_layeredProcesses[_processLayers[handle]].Count > 1) + _layeredProcesses[_processLayers[handle]].Remove(handle); + else + _layeredProcesses.Remove(_processLayers[handle]); + + _processLayers.Remove(handle); + } + + if (_processTags.ContainsKey(handle)) + { + if (_taggedProcesses[_processTags[handle]].Count > 1) + _taggedProcesses[_processTags[handle]].Remove(handle); + else + _taggedProcesses.Remove(_processTags[handle]); + + _processTags.Remove(handle); + } + } + + private IEnumerator CoindexExtract(ProcessIndex coindex) + { + IEnumerator retVal; + + switch (coindex.seg) + { + case Segment.Update: + retVal = UpdateProcesses[coindex.i]; + UpdateProcesses[coindex.i] = null; + return retVal; + case Segment.FixedUpdate: + retVal = FixedUpdateProcesses[coindex.i]; + FixedUpdateProcesses[coindex.i] = null; + return retVal; + case Segment.LateUpdate: + retVal = LateUpdateProcesses[coindex.i]; + LateUpdateProcesses[coindex.i] = null; + return retVal; + case Segment.SlowUpdate: + retVal = SlowUpdateProcesses[coindex.i]; + SlowUpdateProcesses[coindex.i] = null; + return retVal; + case Segment.RealtimeUpdate: + retVal = RealtimeUpdateProcesses[coindex.i]; + RealtimeUpdateProcesses[coindex.i] = null; + return retVal; + case Segment.EditorUpdate: + retVal = EditorUpdateProcesses[coindex.i]; + EditorUpdateProcesses[coindex.i] = null; + return retVal; + case Segment.EditorSlowUpdate: + retVal = EditorSlowUpdateProcesses[coindex.i]; + EditorSlowUpdateProcesses[coindex.i] = null; + return retVal; + case Segment.EndOfFrame: + retVal = EndOfFrameProcesses[coindex.i]; + EndOfFrameProcesses[coindex.i] = null; + return retVal; + case Segment.ManualTimeframe: + retVal = ManualTimeframeProcesses[coindex.i]; + ManualTimeframeProcesses[coindex.i] = null; + return retVal; + default: + return null; + } + } + + private bool CoindexIsNull(ProcessIndex coindex) + { + switch (coindex.seg) + { + case Segment.Update: + return UpdateProcesses[coindex.i] == null; + case Segment.FixedUpdate: + return FixedUpdateProcesses[coindex.i] == null; + case Segment.LateUpdate: + return LateUpdateProcesses[coindex.i] == null; + case Segment.SlowUpdate: + return SlowUpdateProcesses[coindex.i] == null; + case Segment.RealtimeUpdate: + return RealtimeUpdateProcesses[coindex.i] == null; + case Segment.EditorUpdate: + return EditorUpdateProcesses[coindex.i] == null; + case Segment.EditorSlowUpdate: + return EditorSlowUpdateProcesses[coindex.i] == null; + case Segment.EndOfFrame: + return EndOfFrameProcesses[coindex.i] == null; + case Segment.ManualTimeframe: + return ManualTimeframeProcesses[coindex.i] == null; + default: + return true; + } + } + + private IEnumerator CoindexPeek(ProcessIndex coindex) + { + switch (coindex.seg) + { + case Segment.Update: + return UpdateProcesses[coindex.i]; + case Segment.FixedUpdate: + return FixedUpdateProcesses[coindex.i]; + case Segment.LateUpdate: + return LateUpdateProcesses[coindex.i]; + case Segment.SlowUpdate: + return SlowUpdateProcesses[coindex.i]; + case Segment.RealtimeUpdate: + return RealtimeUpdateProcesses[coindex.i]; + case Segment.EditorUpdate: + return EditorUpdateProcesses[coindex.i]; + case Segment.EditorSlowUpdate: + return EditorSlowUpdateProcesses[coindex.i]; + case Segment.EndOfFrame: + return EndOfFrameProcesses[coindex.i]; + case Segment.ManualTimeframe: + return ManualTimeframeProcesses[coindex.i]; + default: + return null; + } + } + + /// Whether it was already null. + private bool Nullify(CoroutineHandle handle) + { + return Nullify(_handleToIndex[handle]); + } + + /// Whether it was already null. + private bool Nullify(ProcessIndex coindex) + { + bool retVal; + + switch (coindex.seg) + { + case Segment.Update: + retVal = UpdateProcesses[coindex.i] != null; + UpdateProcesses[coindex.i] = null; + return retVal; + case Segment.FixedUpdate: + retVal = FixedUpdateProcesses[coindex.i] != null; + FixedUpdateProcesses[coindex.i] = null; + return retVal; + case Segment.LateUpdate: + retVal = LateUpdateProcesses[coindex.i] != null; + LateUpdateProcesses[coindex.i] = null; + return retVal; + case Segment.SlowUpdate: + retVal = SlowUpdateProcesses[coindex.i] != null; + SlowUpdateProcesses[coindex.i] = null; + return retVal; + case Segment.RealtimeUpdate: + retVal = RealtimeUpdateProcesses[coindex.i] != null; + RealtimeUpdateProcesses[coindex.i] = null; + return retVal; + case Segment.EditorUpdate: + retVal = UpdateProcesses[coindex.i] != null; + EditorUpdateProcesses[coindex.i] = null; + return retVal; + case Segment.EditorSlowUpdate: + retVal = EditorSlowUpdateProcesses[coindex.i] != null; + EditorSlowUpdateProcesses[coindex.i] = null; + return retVal; + case Segment.EndOfFrame: + retVal = EndOfFrameProcesses[coindex.i] != null; + EndOfFrameProcesses[coindex.i] = null; + return retVal; + case Segment.ManualTimeframe: + retVal = ManualTimeframeProcesses[coindex.i] != null; + ManualTimeframeProcesses[coindex.i] = null; + return retVal; + default: + return false; + } + } + + private bool SetPause(ProcessIndex coindex, bool newPausedState) + { + if (CoindexPeek(coindex) == null) + return false; + + bool isPaused; + + switch (coindex.seg) + { + case Segment.Update: + isPaused = UpdatePaused[coindex.i]; + UpdatePaused[coindex.i] = newPausedState; + + if (newPausedState && UpdateProcesses[coindex.i].Current > GetSegmentTime(coindex.seg)) + UpdateProcesses[coindex.i] = _InjectDelay(UpdateProcesses[coindex.i], + UpdateProcesses[coindex.i].Current - GetSegmentTime(coindex.seg)); + + return isPaused; + case Segment.FixedUpdate: + isPaused = FixedUpdatePaused[coindex.i]; + FixedUpdatePaused[coindex.i] = newPausedState; + + if (newPausedState && FixedUpdateProcesses[coindex.i].Current > GetSegmentTime(coindex.seg)) + FixedUpdateProcesses[coindex.i] = _InjectDelay(FixedUpdateProcesses[coindex.i], + FixedUpdateProcesses[coindex.i].Current - GetSegmentTime(coindex.seg)); + + return isPaused; + case Segment.LateUpdate: + isPaused = LateUpdatePaused[coindex.i]; + LateUpdatePaused[coindex.i] = newPausedState; + + if (newPausedState && LateUpdateProcesses[coindex.i].Current > GetSegmentTime(coindex.seg)) + LateUpdateProcesses[coindex.i] = _InjectDelay(LateUpdateProcesses[coindex.i], + LateUpdateProcesses[coindex.i].Current - GetSegmentTime(coindex.seg)); + + return isPaused; + case Segment.SlowUpdate: + isPaused = SlowUpdatePaused[coindex.i]; + SlowUpdatePaused[coindex.i] = newPausedState; + + if (newPausedState && SlowUpdateProcesses[coindex.i].Current > GetSegmentTime(coindex.seg)) + SlowUpdateProcesses[coindex.i] = _InjectDelay(SlowUpdateProcesses[coindex.i], + SlowUpdateProcesses[coindex.i].Current - GetSegmentTime(coindex.seg)); + + return isPaused; + case Segment.RealtimeUpdate: + isPaused = RealtimeUpdatePaused[coindex.i]; + RealtimeUpdatePaused[coindex.i] = newPausedState; + + if (newPausedState && RealtimeUpdateProcesses[coindex.i].Current > GetSegmentTime(coindex.seg)) + RealtimeUpdateProcesses[coindex.i] = _InjectDelay(RealtimeUpdateProcesses[coindex.i], + RealtimeUpdateProcesses[coindex.i].Current - GetSegmentTime(coindex.seg)); + + return isPaused; + case Segment.EditorUpdate: + isPaused = EditorUpdatePaused[coindex.i]; + EditorUpdatePaused[coindex.i] = newPausedState; + + if (newPausedState && EditorUpdateProcesses[coindex.i].Current > GetSegmentTime(coindex.seg)) + EditorUpdateProcesses[coindex.i] = _InjectDelay(EditorUpdateProcesses[coindex.i], + EditorUpdateProcesses[coindex.i].Current - GetSegmentTime(coindex.seg)); + + return isPaused; + case Segment.EditorSlowUpdate: + isPaused = EditorSlowUpdatePaused[coindex.i]; + EditorSlowUpdatePaused[coindex.i] = newPausedState; + + if (newPausedState && EditorSlowUpdateProcesses[coindex.i].Current > GetSegmentTime(coindex.seg)) + EditorSlowUpdateProcesses[coindex.i] = _InjectDelay(EditorSlowUpdateProcesses[coindex.i], + EditorSlowUpdateProcesses[coindex.i].Current - GetSegmentTime(coindex.seg)); + + return isPaused; + case Segment.EndOfFrame: + isPaused = EndOfFramePaused[coindex.i]; + EndOfFramePaused[coindex.i] = newPausedState; + + if (newPausedState && EndOfFrameProcesses[coindex.i].Current > GetSegmentTime(coindex.seg)) + EndOfFrameProcesses[coindex.i] = _InjectDelay(EndOfFrameProcesses[coindex.i], + EndOfFrameProcesses[coindex.i].Current - GetSegmentTime(coindex.seg)); + + return isPaused; + case Segment.ManualTimeframe: + isPaused = ManualTimeframePaused[coindex.i]; + ManualTimeframePaused[coindex.i] = newPausedState; + + if (newPausedState && ManualTimeframeProcesses[coindex.i].Current > GetSegmentTime(coindex.seg)) + ManualTimeframeProcesses[coindex.i] = _InjectDelay(ManualTimeframeProcesses[coindex.i], + ManualTimeframeProcesses[coindex.i].Current - GetSegmentTime(coindex.seg)); + + return isPaused; + default: + return false; + } + } + + private bool SetHeld(ProcessIndex coindex, bool newHeldState) + { + if (CoindexPeek(coindex) == null) + return false; + + bool isHeld; + + switch (coindex.seg) + { + case Segment.Update: + isHeld = UpdateHeld[coindex.i]; + UpdateHeld[coindex.i] = newHeldState; + + if (newHeldState && UpdateProcesses[coindex.i].Current > GetSegmentTime(coindex.seg)) + UpdateProcesses[coindex.i] = _InjectDelay(UpdateProcesses[coindex.i], + UpdateProcesses[coindex.i].Current - GetSegmentTime(coindex.seg)); + + return isHeld; + case Segment.FixedUpdate: + isHeld = FixedUpdateHeld[coindex.i]; + FixedUpdateHeld[coindex.i] = newHeldState; + + if (newHeldState && FixedUpdateProcesses[coindex.i].Current > GetSegmentTime(coindex.seg)) + FixedUpdateProcesses[coindex.i] = _InjectDelay(FixedUpdateProcesses[coindex.i], + FixedUpdateProcesses[coindex.i].Current - GetSegmentTime(coindex.seg)); + + return isHeld; + case Segment.LateUpdate: + isHeld = LateUpdateHeld[coindex.i]; + LateUpdateHeld[coindex.i] = newHeldState; + + if (newHeldState && LateUpdateProcesses[coindex.i].Current > GetSegmentTime(coindex.seg)) + LateUpdateProcesses[coindex.i] = _InjectDelay(LateUpdateProcesses[coindex.i], + LateUpdateProcesses[coindex.i].Current - GetSegmentTime(coindex.seg)); + + return isHeld; + case Segment.SlowUpdate: + isHeld = SlowUpdateHeld[coindex.i]; + SlowUpdateHeld[coindex.i] = newHeldState; + + if (newHeldState && SlowUpdateProcesses[coindex.i].Current > GetSegmentTime(coindex.seg)) + SlowUpdateProcesses[coindex.i] = _InjectDelay(SlowUpdateProcesses[coindex.i], + SlowUpdateProcesses[coindex.i].Current - GetSegmentTime(coindex.seg)); + + return isHeld; + case Segment.RealtimeUpdate: + isHeld = RealtimeUpdateHeld[coindex.i]; + RealtimeUpdateHeld[coindex.i] = newHeldState; + + if (newHeldState && RealtimeUpdateProcesses[coindex.i].Current > GetSegmentTime(coindex.seg)) + RealtimeUpdateProcesses[coindex.i] = _InjectDelay(RealtimeUpdateProcesses[coindex.i], + RealtimeUpdateProcesses[coindex.i].Current - GetSegmentTime(coindex.seg)); + + return isHeld; + case Segment.EditorUpdate: + isHeld = EditorUpdateHeld[coindex.i]; + EditorUpdateHeld[coindex.i] = newHeldState; + + if (newHeldState && EditorUpdateProcesses[coindex.i].Current > GetSegmentTime(coindex.seg)) + EditorUpdateProcesses[coindex.i] = _InjectDelay(EditorUpdateProcesses[coindex.i], + EditorUpdateProcesses[coindex.i].Current - GetSegmentTime(coindex.seg)); + + return isHeld; + case Segment.EditorSlowUpdate: + isHeld = EditorSlowUpdateHeld[coindex.i]; + EditorSlowUpdateHeld[coindex.i] = newHeldState; + + if (newHeldState && EditorSlowUpdateProcesses[coindex.i].Current > GetSegmentTime(coindex.seg)) + EditorSlowUpdateProcesses[coindex.i] = _InjectDelay(EditorSlowUpdateProcesses[coindex.i], + EditorSlowUpdateProcesses[coindex.i].Current - GetSegmentTime(coindex.seg)); + + return isHeld; + case Segment.EndOfFrame: + isHeld = EndOfFrameHeld[coindex.i]; + EndOfFrameHeld[coindex.i] = newHeldState; + + if (newHeldState && EndOfFrameProcesses[coindex.i].Current > GetSegmentTime(coindex.seg)) + EndOfFrameProcesses[coindex.i] = _InjectDelay(EndOfFrameProcesses[coindex.i], + EndOfFrameProcesses[coindex.i].Current - GetSegmentTime(coindex.seg)); + + return isHeld; + case Segment.ManualTimeframe: + isHeld = ManualTimeframeHeld[coindex.i]; + ManualTimeframeHeld[coindex.i] = newHeldState; + + if (newHeldState && ManualTimeframeProcesses[coindex.i].Current > GetSegmentTime(coindex.seg)) + ManualTimeframeProcesses[coindex.i] = _InjectDelay(ManualTimeframeProcesses[coindex.i], + ManualTimeframeProcesses[coindex.i].Current - GetSegmentTime(coindex.seg)); + + return isHeld; + default: + return false; + } + } + + private IEnumerator CreateHold(ProcessIndex coindex, IEnumerator coptr) + { + if (CoindexPeek(coindex) == null) + return null; + + switch (coindex.seg) + { + case Segment.Update: + UpdateHeld[coindex.i] = true; + + if (UpdateProcesses[coindex.i].Current > GetSegmentTime(coindex.seg)) + coptr = _InjectDelay(UpdateProcesses[coindex.i], UpdateProcesses[coindex.i].Current - GetSegmentTime(coindex.seg)); + + return coptr; + case Segment.FixedUpdate: + FixedUpdateHeld[coindex.i] = true; + + if (FixedUpdateProcesses[coindex.i].Current > GetSegmentTime(coindex.seg)) + coptr = _InjectDelay(FixedUpdateProcesses[coindex.i], + FixedUpdateProcesses[coindex.i].Current - GetSegmentTime(coindex.seg)); + + return coptr; + case Segment.LateUpdate: + LateUpdateHeld[coindex.i] = true; + + if (LateUpdateProcesses[coindex.i].Current > GetSegmentTime(coindex.seg)) + coptr = _InjectDelay(LateUpdateProcesses[coindex.i], + LateUpdateProcesses[coindex.i].Current - GetSegmentTime(coindex.seg)); + + return coptr; + case Segment.SlowUpdate: + SlowUpdateHeld[coindex.i] = true; + + if (SlowUpdateProcesses[coindex.i].Current > GetSegmentTime(coindex.seg)) + coptr = _InjectDelay(SlowUpdateProcesses[coindex.i], + SlowUpdateProcesses[coindex.i].Current - GetSegmentTime(coindex.seg)); + + return coptr; + case Segment.RealtimeUpdate: + RealtimeUpdateHeld[coindex.i] = true; + + if (RealtimeUpdateProcesses[coindex.i].Current > GetSegmentTime(coindex.seg)) + coptr = _InjectDelay(RealtimeUpdateProcesses[coindex.i], + RealtimeUpdateProcesses[coindex.i].Current - GetSegmentTime(coindex.seg)); + + return coptr; + case Segment.EditorUpdate: + EditorUpdateHeld[coindex.i] = true; + + if (EditorUpdateProcesses[coindex.i].Current > GetSegmentTime(coindex.seg)) + coptr = _InjectDelay(EditorUpdateProcesses[coindex.i], + EditorUpdateProcesses[coindex.i].Current - GetSegmentTime(coindex.seg)); + + return coptr; + case Segment.EditorSlowUpdate: + EditorSlowUpdateHeld[coindex.i] = true; + + if (EditorSlowUpdateProcesses[coindex.i].Current > GetSegmentTime(coindex.seg)) + coptr = _InjectDelay(EditorSlowUpdateProcesses[coindex.i], + EditorSlowUpdateProcesses[coindex.i].Current - GetSegmentTime(coindex.seg)); + + return coptr; + case Segment.EndOfFrame: + EndOfFrameHeld[coindex.i] = true; + + if (EndOfFrameProcesses[coindex.i].Current > GetSegmentTime(coindex.seg)) + coptr = _InjectDelay(EndOfFrameProcesses[coindex.i], + EndOfFrameProcesses[coindex.i].Current - GetSegmentTime(coindex.seg)); + + return coptr; + case Segment.ManualTimeframe: + ManualTimeframeHeld[coindex.i] = true; + + if (ManualTimeframeProcesses[coindex.i].Current > GetSegmentTime(coindex.seg)) + coptr = _InjectDelay(ManualTimeframeProcesses[coindex.i], + ManualTimeframeProcesses[coindex.i].Current - GetSegmentTime(coindex.seg)); + + return coptr; + default: + return coptr; + } + } + + private bool CoindexIsPaused(ProcessIndex coindex) + { + switch (coindex.seg) + { + case Segment.Update: + return UpdatePaused[coindex.i]; + case Segment.FixedUpdate: + return FixedUpdatePaused[coindex.i]; + case Segment.LateUpdate: + return LateUpdatePaused[coindex.i]; + case Segment.SlowUpdate: + return SlowUpdatePaused[coindex.i]; + case Segment.RealtimeUpdate: + return RealtimeUpdatePaused[coindex.i]; + case Segment.EditorUpdate: + return EditorUpdatePaused[coindex.i]; + case Segment.EditorSlowUpdate: + return EditorSlowUpdatePaused[coindex.i]; + case Segment.EndOfFrame: + return EndOfFramePaused[coindex.i]; + case Segment.ManualTimeframe: + return ManualTimeframePaused[coindex.i]; + default: + return false; + } + } + + private bool CoindexIsHeld(ProcessIndex coindex) + { + switch (coindex.seg) + { + case Segment.Update: + return UpdateHeld[coindex.i]; + case Segment.FixedUpdate: + return FixedUpdateHeld[coindex.i]; + case Segment.LateUpdate: + return LateUpdateHeld[coindex.i]; + case Segment.SlowUpdate: + return SlowUpdateHeld[coindex.i]; + case Segment.RealtimeUpdate: + return RealtimeUpdateHeld[coindex.i]; + case Segment.EditorUpdate: + return EditorUpdateHeld[coindex.i]; + case Segment.EditorSlowUpdate: + return EditorSlowUpdateHeld[coindex.i]; + case Segment.EndOfFrame: + return EndOfFrameHeld[coindex.i]; + case Segment.ManualTimeframe: + return ManualTimeframeHeld[coindex.i]; + default: + return false; + } + } + + private void CoindexReplace(ProcessIndex coindex, IEnumerator replacement) + { + switch (coindex.seg) + { + case Segment.Update: + UpdateProcesses[coindex.i] = replacement; + return; + case Segment.FixedUpdate: + FixedUpdateProcesses[coindex.i] = replacement; + return; + case Segment.LateUpdate: + LateUpdateProcesses[coindex.i] = replacement; + return; + case Segment.SlowUpdate: + SlowUpdateProcesses[coindex.i] = replacement; + return; + case Segment.RealtimeUpdate: + RealtimeUpdateProcesses[coindex.i] = replacement; + return; + case Segment.EditorUpdate: + EditorUpdateProcesses[coindex.i] = replacement; + return; + case Segment.EditorSlowUpdate: + EditorSlowUpdateProcesses[coindex.i] = replacement; + return; + case Segment.EndOfFrame: + EndOfFrameProcesses[coindex.i] = replacement; + return; + case Segment.ManualTimeframe: + ManualTimeframeProcesses[coindex.i] = replacement; + return; + } + } + + /// + /// Use the command "yield return Timing.WaitUntilDone(newCoroutine);" to start a new coroutine and pause the + /// current one until it finishes. + /// + /// The coroutine to pause for. + public static float WaitUntilDone(IEnumerator newCoroutine) + { + return WaitUntilDone(RunCoroutine(newCoroutine, CurrentCoroutine.Segment), true); + } + + /// + /// Use the command "yield return Timing.WaitUntilDone(newCoroutine);" to start a new coroutine and pause the + /// current one until it finishes. + /// + /// The coroutine to pause for. + /// An optional tag to attach to the coroutine which can later be used to identify this coroutine. + public static float WaitUntilDone(IEnumerator newCoroutine, string tag) + { + return WaitUntilDone(RunCoroutine(newCoroutine, CurrentCoroutine.Segment, tag), true); + } + + /// + /// Use the command "yield return Timing.WaitUntilDone(newCoroutine);" to start a new coroutine and pause the + /// current one until it finishes. + /// + /// The coroutine to pause for. + /// An optional layer to attach to the coroutine which can later be used to identify this coroutine. + public static float WaitUntilDone(IEnumerator newCoroutine, int layer) + { + return WaitUntilDone(RunCoroutine(newCoroutine, CurrentCoroutine.Segment, layer), true); + } + + /// + /// Use the command "yield return Timing.WaitUntilDone(newCoroutine);" to start a new coroutine and pause the + /// current one until it finishes. + /// + /// The coroutine to pause for. + /// An optional layer to attach to the coroutine which can later be used to identify this coroutine. + /// An optional tag to attach to the coroutine which can later be used to identify this coroutine. + public static float WaitUntilDone(IEnumerator newCoroutine, int layer, string tag) + { + return WaitUntilDone(RunCoroutine(newCoroutine, CurrentCoroutine.Segment, layer, tag), true); + } + + /// + /// Use the command "yield return Timing.WaitUntilDone(newCoroutine);" to start a new coroutine and pause the + /// current one until it finishes. + /// + /// The coroutine to pause for. + /// The segment that the new coroutine should run in. + public static float WaitUntilDone(IEnumerator newCoroutine, Segment segment) + { + return WaitUntilDone(RunCoroutine(newCoroutine, segment), true); + } + + /// + /// Use the command "yield return Timing.WaitUntilDone(newCoroutine);" to start a new coroutine and pause the + /// current one until it finishes. + /// + /// The coroutine to pause for. + /// The segment that the new coroutine should run in. + /// An optional tag to attach to the coroutine which can later be used to identify this coroutine. + public static float WaitUntilDone(IEnumerator newCoroutine, Segment segment, string tag) + { + return WaitUntilDone(RunCoroutine(newCoroutine, segment, tag), true); + } + + /// + /// Use the command "yield return Timing.WaitUntilDone(newCoroutine);" to start a new coroutine and pause the + /// current one until it finishes. + /// + /// The coroutine to pause for. + /// The segment that the new coroutine should run in. + /// An optional layer to attach to the coroutine which can later be used to identify this coroutine. + public static float WaitUntilDone(IEnumerator newCoroutine, Segment segment, int layer) + { + return WaitUntilDone(RunCoroutine(newCoroutine, segment, layer), true); + } + + /// + /// Use the command "yield return Timing.WaitUntilDone(newCoroutine);" to start a new coroutine and pause the + /// current one until it finishes. + /// + /// The coroutine to pause for. + /// The segment that the new coroutine should run in. + /// An optional layer to attach to the coroutine which can later be used to identify this coroutine. + /// An optional tag to attach to the coroutine which can later be used to identify this coroutine. + public static float WaitUntilDone(IEnumerator newCoroutine, Segment segment, int layer, string tag) + { + return WaitUntilDone(RunCoroutine(newCoroutine, segment, layer, tag), true); + } + + /// + /// Use the command "yield return Timing.WaitUntilDone(otherCoroutine);" to pause the current + /// coroutine until otherCoroutine is done. + /// + /// The coroutine to pause for. + public static float WaitUntilDone(CoroutineHandle otherCoroutine) + { + return WaitUntilDone(otherCoroutine, true); + } + + /// + /// Use the command "yield return Timing.WaitUntilDone(otherCoroutine, false);" to pause the current + /// coroutine until otherCoroutine is done, supressing warnings. + /// + /// The coroutine to pause for. + /// Post a warning if no hold action was actually performed. + public static float WaitUntilDone(CoroutineHandle otherCoroutine, bool warnOnIssue) + { + Timing inst = GetInstance(otherCoroutine.Key); + + if (inst != null && inst._handleToIndex.ContainsKey(otherCoroutine)) + { + if (inst.CoindexIsNull(inst._handleToIndex[otherCoroutine])) + return 0f; + + if (!inst._waitingTriggers.ContainsKey(otherCoroutine)) + { + inst.CoindexReplace(inst._handleToIndex[otherCoroutine], + inst._StartWhenDone(otherCoroutine, inst.CoindexPeek(inst._handleToIndex[otherCoroutine]))); + inst._waitingTriggers.Add(otherCoroutine, new HashSet()); + } + + if (inst.currentCoroutine == otherCoroutine) + { + Assert.IsFalse(warnOnIssue, "A coroutine cannot wait for itself."); + return WaitForOneFrame; + } + if (!inst.currentCoroutine.IsValid) + { + Assert.IsFalse(warnOnIssue, "The two coroutines are not running on the same MEC instance."); + return WaitForOneFrame; + } + + inst._waitingTriggers[otherCoroutine].Add(inst.currentCoroutine); + if (!inst._allWaiting.Contains(inst.currentCoroutine)) + inst._allWaiting.Add(inst.currentCoroutine); + inst.SetHeld(inst._handleToIndex[inst.currentCoroutine], true); + inst.SwapToLast(otherCoroutine, inst.currentCoroutine); + + return float.NaN; + } + + Assert.IsFalse(warnOnIssue, "WaitUntilDone cannot hold, the coroutine handle that was passed in is invalid: " + otherCoroutine); + return 0f; + } + + /// + /// This will pause one coroutine until another coroutine finishes running. Note: This is NOT used with a yield return statement. + /// + /// The coroutine that should be paused. + /// The coroutine that will be waited for. + /// Whether a warning should be logged if there is a problem. + public static void WaitForOtherHandles(CoroutineHandle handle, CoroutineHandle otherHandle, bool warnOnIssue = true) + { + if (!IsRunning(handle) || !IsRunning(otherHandle)) + return; + + if (handle == otherHandle) + { + Assert.IsFalse(warnOnIssue, "A coroutine cannot wait for itself."); + return; + } + + if (handle.Key != otherHandle.Key) + { + Assert.IsFalse(warnOnIssue, "A coroutine cannot wait for another coroutine on a different MEC instance."); + return; + } + + Timing inst = GetInstance(handle.Key); + + if (inst != null && inst._handleToIndex.ContainsKey(handle) && inst._handleToIndex.ContainsKey(otherHandle) && + !inst.CoindexIsNull(inst._handleToIndex[otherHandle])) + { + if (!inst._waitingTriggers.ContainsKey(otherHandle)) + { + inst.CoindexReplace(inst._handleToIndex[otherHandle], + inst._StartWhenDone(otherHandle, inst.CoindexPeek(inst._handleToIndex[otherHandle]))); + inst._waitingTriggers.Add(otherHandle, new HashSet()); + } + + inst._waitingTriggers[otherHandle].Add(handle); + if (!inst._allWaiting.Contains(handle)) + inst._allWaiting.Add(handle); + inst.SetHeld(inst._handleToIndex[handle], true); + inst.SwapToLast(otherHandle, handle); + } + } + + /// + /// This will pause one coroutine until the other coroutines finish running. Note: This is NOT used with a yield return statement. + /// + /// The coroutine that should be paused. + /// A list of coroutines to be waited for. + /// Whether a warning should be logged if there is a problem. + public static void WaitForOtherHandles(CoroutineHandle handle, IEnumerable otherHandles, bool warnOnIssue = true) + { + if (!IsRunning(handle)) + return; + + Timing inst = GetInstance(handle.Key); + + var othersEnum = otherHandles.GetEnumerator(); + while (othersEnum.MoveNext()) + { + if (!IsRunning(othersEnum.Current)) + continue; + + if (handle == othersEnum.Current) + { + Assert.IsFalse(warnOnIssue, "A coroutine cannot wait for itself."); + continue; + } + + if (handle.Key != othersEnum.Current.Key) + { + Assert.IsFalse(warnOnIssue, "A coroutine cannot wait for another coroutine on a different MEC instance."); + continue; + } + + if (!inst._waitingTriggers.ContainsKey(othersEnum.Current)) + { + inst.CoindexReplace(inst._handleToIndex[othersEnum.Current], + inst._StartWhenDone(othersEnum.Current, inst.CoindexPeek(inst._handleToIndex[othersEnum.Current]))); + inst._waitingTriggers.Add(othersEnum.Current, new HashSet()); + } + + inst._waitingTriggers[othersEnum.Current].Add(handle); + if (!inst._allWaiting.Contains(handle)) + inst._allWaiting.Add(handle); + inst.SetHeld(inst._handleToIndex[handle], true); + inst.SwapToLast(othersEnum.Current, handle); + } + } + + private void SwapToLast(CoroutineHandle firstHandle, CoroutineHandle lastHandle) + { + if (firstHandle.Key != lastHandle.Key) + return; + + ProcessIndex firstIndex = _handleToIndex[firstHandle]; + ProcessIndex lastIndex = _handleToIndex[lastHandle]; + + if (firstIndex.seg != lastIndex.seg || firstIndex.i <= lastIndex.i) + return; + + IEnumerator tempCoptr = CoindexPeek(firstIndex); + CoindexReplace(firstIndex, CoindexPeek(lastIndex)); + CoindexReplace(lastIndex, tempCoptr); + + _indexToHandle[firstIndex] = lastHandle; + _indexToHandle[lastIndex] = firstHandle; + _handleToIndex[firstHandle] = lastIndex; + _handleToIndex[lastHandle] = firstIndex; + bool tmpB = SetPause(firstIndex, CoindexIsPaused(lastIndex)); + SetPause(lastIndex, tmpB); + tmpB = SetHeld(firstIndex, CoindexIsHeld(lastIndex)); + SetHeld(lastIndex, tmpB); + + if (_waitingTriggers.ContainsKey(lastHandle)) + { + var trigsEnum = _waitingTriggers[lastHandle].GetEnumerator(); + while (trigsEnum.MoveNext()) + SwapToLast(lastHandle, trigsEnum.Current); + } + + if (_allWaiting.Contains(firstHandle)) + { + var keyEnum = _waitingTriggers.GetEnumerator(); + while (keyEnum.MoveNext()) + { + var valueEnum = keyEnum.Current.Value.GetEnumerator(); + while (valueEnum.MoveNext()) + if (valueEnum.Current == firstHandle) + SwapToLast(keyEnum.Current.Key, firstHandle); + } + } + } + + private IEnumerator _StartWhenDone(CoroutineHandle handle, IEnumerator proc) + { + if (!_waitingTriggers.ContainsKey(handle)) yield break; + + try + { + if (proc.Current > localTime) + yield return proc.Current; + + while (proc.MoveNext()) + yield return proc.Current; + } + finally + { + CloseWaitingProcess(handle); + } + } + + private void CloseWaitingProcess(CoroutineHandle handle) + { + if (!_waitingTriggers.ContainsKey(handle)) return; + + var tasksEnum = _waitingTriggers[handle].GetEnumerator(); + _waitingTriggers.Remove(handle); + + while (tasksEnum.MoveNext()) + { + if (_handleToIndex.ContainsKey(tasksEnum.Current) && !HandleIsInWaitingList(tasksEnum.Current)) + { + SetHeld(_handleToIndex[tasksEnum.Current], false); + _allWaiting.Remove(tasksEnum.Current); + } + } + } + + private bool HandleIsInWaitingList(CoroutineHandle handle) + { + var triggersEnum = _waitingTriggers.GetEnumerator(); + while (triggersEnum.MoveNext()) + if (triggersEnum.Current.Value.Contains(handle)) + return true; + + return false; + } + + private static IEnumerator ReturnTmpRefForRepFunc(IEnumerator coptr, CoroutineHandle handle) + { + return _tmpRef as IEnumerator; + } + +#if !UNITY_2018_3_OR_NEWER + /// + /// Use the command "yield return Timing.WaitUntilDone(wwwObject);" to pause the current + /// coroutine until the wwwObject is done. + /// + /// The www object to pause for. + public static float WaitUntilDone(WWW wwwObject) + { + if (wwwObject == null || wwwObject.isDone) return 0f; + + _tmpRef = wwwObject; + ReplacementFunction = WaitUntilDoneWwwHelper; + return float.NaN; + } + + private static IEnumerator WaitUntilDoneWwwHelper(IEnumerator coptr, CoroutineHandle handle) + { + return _StartWhenDone(_tmpRef as WWW, coptr); + } + + private static IEnumerator _StartWhenDone(WWW wwwObject, IEnumerator pausedProc) + { + while (!wwwObject.isDone) + yield return WaitForOneFrame; + + _tmpRef = pausedProc; + ReplacementFunction = ReturnTmpRefForRepFunc; + yield return float.NaN; + } +#endif + + /// + /// Use the command "yield return Timing.WaitUntilDone(operation);" to pause the current + /// coroutine until the operation is done. + /// + /// The operation variable returned. + public static float WaitUntilDone(AsyncOperation operation) + { + if (operation == null || operation.isDone) return float.NaN; + + CoroutineHandle handle = CurrentCoroutine; + Timing inst = GetInstance(CurrentCoroutine.Key); + if (inst == null) return float.NaN; + + _tmpRef = _StartWhenDone(operation, inst.CoindexPeek(inst._handleToIndex[handle])); + ReplacementFunction = ReturnTmpRefForRepFunc; + return float.NaN; + } + + private static IEnumerator _StartWhenDone(AsyncOperation operation, IEnumerator pausedProc) + { + while (!operation.isDone) + yield return WaitForOneFrame; + + _tmpRef = pausedProc; + ReplacementFunction = ReturnTmpRefForRepFunc; + yield return float.NaN; + } + + /// + /// Use the command "yield return Timing.WaitUntilDone(operation);" to pause the current + /// coroutine until the operation is done. + /// + /// The operation variable returned. + public static float WaitUntilDone(CustomYieldInstruction operation) + { + if (operation == null || !operation.keepWaiting) return float.NaN; + + CoroutineHandle handle = CurrentCoroutine; + Timing inst = GetInstance(CurrentCoroutine.Key); + if (inst == null) return float.NaN; + + _tmpRef = _StartWhenDone(operation, inst.CoindexPeek(inst._handleToIndex[handle])); + ReplacementFunction = ReturnTmpRefForRepFunc; + return float.NaN; + } + + private static IEnumerator _StartWhenDone(CustomYieldInstruction operation, IEnumerator pausedProc) + { + while (operation.keepWaiting) + yield return WaitForOneFrame; + + _tmpRef = pausedProc; + ReplacementFunction = ReturnTmpRefForRepFunc; + yield return float.NaN; + } + + /// + /// Use the command "yield return Timing.WaitUntilTrue(evaluatorFunc);" to pause the current + /// coroutine until the evaluator function returns true. + /// + /// The evaluator function. + public static float WaitUntilTrue(System.Func evaluatorFunc) + { + if (evaluatorFunc == null || evaluatorFunc()) return float.NaN; + _tmpRef = evaluatorFunc; + ReplacementFunction = WaitUntilTrueHelper; + return float.NaN; + } + + private static IEnumerator WaitUntilTrueHelper(IEnumerator coptr, CoroutineHandle handle) + { + return _StartWhenDone(_tmpRef as System.Func, false, coptr); + } + + /// + /// Use the command "yield return Timing.WaitUntilFalse(evaluatorFunc);" to pause the current + /// coroutine until the evaluator function returns false. + /// + /// The evaluator function. + public static float WaitUntilFalse(System.Func evaluatorFunc) + { + if (evaluatorFunc == null || !evaluatorFunc()) return float.NaN; + _tmpRef = evaluatorFunc; + ReplacementFunction = WaitUntilFalseHelper; + return float.NaN; + } + + private static IEnumerator WaitUntilFalseHelper(IEnumerator coptr, CoroutineHandle handle) + { + return _StartWhenDone(_tmpRef as System.Func, true, coptr); + } + + private static IEnumerator _StartWhenDone(System.Func evaluatorFunc, bool continueOn, IEnumerator pausedProc) + { + while (evaluatorFunc() == continueOn) + yield return WaitForOneFrame; + + _tmpRef = pausedProc; + ReplacementFunction = ReturnTmpRefForRepFunc; + yield return float.NaN; + } + + private IEnumerator _InjectDelay(IEnumerator proc, float waitTime) + { + yield return WaitForSecondsOnInstance(waitTime); + + _tmpRef = proc; + ReplacementFunction = ReturnTmpRefForRepFunc; + yield return float.NaN; + } + + /// + /// Keeps this coroutine from executing until UnlockCoroutine is called with a matching key. + /// + /// The handle to the coroutine to be locked. + /// The key to use. A new key can be generated by calling "new CoroutineHandle(0)". + /// Whether the lock was successful. + public bool LockCoroutine(CoroutineHandle coroutine, CoroutineHandle key) + { + if (coroutine.Key != _instanceID || key == new CoroutineHandle() || key.Key != 0) + return false; + + if (!_waitingTriggers.ContainsKey(key)) + _waitingTriggers.Add(key, new HashSet { coroutine }); + else + _waitingTriggers[key].Add(coroutine); + + _allWaiting.Add(coroutine); + + SetHeld(_handleToIndex[coroutine], true); + + return true; + } + + /// + /// Unlocks a coroutine that has been locked, so long as the key matches. + /// + /// The handle to the coroutine to be unlocked. + /// The key that the coroutine was previously locked with. + /// Whether the coroutine was successfully unlocked. + public bool UnlockCoroutine(CoroutineHandle coroutine, CoroutineHandle key) + { + if (coroutine.Key != _instanceID || key == new CoroutineHandle() || + !_handleToIndex.ContainsKey(coroutine) || !_waitingTriggers.ContainsKey(key)) + return false; + + if (_waitingTriggers[key].Count == 1) + _waitingTriggers.Remove(key); + else + _waitingTriggers[key].Remove(coroutine); + + if (!HandleIsInWaitingList(coroutine)) + { + SetHeld(_handleToIndex[coroutine], false); + _allWaiting.Remove(coroutine); + } + + return true; + } + + /// + /// This will create a one way link between two handles. If the master coroutine ends for any reason or is paused or resumed + /// that will also happen to the slave coroutine. If a two way link is desired then just call this funciton twice with + /// parameters reversed. + /// + /// The coroutine that generates the link events + /// The coroutine that recieves the link events + /// The number of coroutines that were linked. + public static int LinkCoroutines(CoroutineHandle master, CoroutineHandle slave) + { + if (!IsRunning(slave) || !master.IsValid) + { + return 0; + } + else if (!IsRunning(master)) + { + KillCoroutines(slave); + return 1; + } + + if (Links.ContainsKey(master)) + { + if (!Links[master].Contains(slave)) + { + Links[master].Add(slave); + return 1; + } + else + { + return 0; + } + } + else + { + Links.Add(master, new HashSet { slave }); + return 1; + } + } + + /// + /// This will remove the link between two coroutine handles if one exists. + /// + /// The coroutine that generates the link events + /// The coroutine that recieves the link events + /// if true this will also remove any links that exist from the slave to the master + /// The number of coroutines that were unlinked. + public static int UnlinkCoroutines(CoroutineHandle master, CoroutineHandle slave, bool twoWay = false) + { + int count = 0; + if (Links.ContainsKey(master) && Links[master].Contains(slave)) + { + if (Links[master].Count <= 1) + Links.Remove(master); + else + Links[master].Remove(slave); + + count++; + } + + if (twoWay && Links.ContainsKey(slave) && Links[slave].Contains(master)) + { + if (Links[slave].Count <= 1) + Links.Remove(slave); + else + Links[slave].Remove(master); + + count++; + } + + return count; + } + + [System.Obsolete("Use Timing.CurrentCoroutine instead.", false)] + public static float GetMyHandle(System.Action reciever) + { + _tmpRef = reciever; + ReplacementFunction = GetHandleHelper; + return float.NaN; + } + + private static IEnumerator GetHandleHelper(IEnumerator input, CoroutineHandle handle) + { + System.Action reciever = _tmpRef as System.Action; + if (reciever != null) + reciever(handle); + return input; + } + + /// + /// Use the command "yield return Timing.SwitchCoroutine(segment);" to switch this coroutine to + /// the given segment on the default instance. + /// + /// The new segment to run in. + public static float SwitchCoroutine(Segment newSegment) + { + _tmpSegment = newSegment; + ReplacementFunction = SwitchCoroutineRepS; + + return float.NaN; + } + + private static IEnumerator SwitchCoroutineRepS(IEnumerator coptr, CoroutineHandle handle) + { + Timing instance = GetInstance(handle.Key); + instance.RunCoroutineInternal(coptr, _tmpSegment, 0, false, null, handle, false); + return null; + } + + /// + /// Use the command "yield return Timing.SwitchCoroutine(segment, tag);" to switch this coroutine to + /// the given values. + /// + /// The new segment to run in. + /// The new tag to apply, or null to remove this coroutine's tag. + public static float SwitchCoroutine(Segment newSegment, string newTag) + { + _tmpSegment = newSegment; + _tmpRef = newTag; + ReplacementFunction = SwitchCoroutineRepST; + + return float.NaN; + } + + private static IEnumerator SwitchCoroutineRepST(IEnumerator coptr, CoroutineHandle handle) + { + Timing instance = GetInstance(handle.Key); + instance.RemoveTagOnInstance(handle); + if ((_tmpRef as string) != null) + instance.AddTagOnInstance((string)_tmpRef, handle); + instance.RunCoroutineInternal(coptr, _tmpSegment, 0, false, null, handle, false); + return null; + } + + /// + /// Use the command "yield return Timing.SwitchCoroutine(segment, layer);" to switch this coroutine to + /// the given values. + /// + /// The new segment to run in. + /// The new layer to apply. + public static float SwitchCoroutine(Segment newSegment, int newLayer) + { + _tmpSegment = newSegment; + _tmpInt = newLayer; + ReplacementFunction = SwitchCoroutineRepSL; + + return float.NaN; + } + + private static IEnumerator SwitchCoroutineRepSL(IEnumerator coptr, CoroutineHandle handle) + { + Timing instance = GetInstance(handle.Key); + RemoveLayer(handle); + instance.AddLayerOnInstance(_tmpInt, handle); + instance.RunCoroutineInternal(coptr, _tmpSegment, _tmpInt, false, null, handle, false); + return null; + } + + /// + /// Use the command "yield return Timing.SwitchCoroutine(segment, layer, tag);" to switch this coroutine to + /// the given values. + /// + /// The new segment to run in. + /// The new layer to apply. + /// The new tag to apply, or null to remove this coroutine's tag. + public static float SwitchCoroutine(Segment newSegment, int newLayer, string newTag) + { + _tmpSegment = newSegment; + _tmpInt = newLayer; + _tmpRef = newTag; + ReplacementFunction = SwitchCoroutineRepSLT; + + return float.NaN; + } + + private static IEnumerator SwitchCoroutineRepSLT(IEnumerator coptr, CoroutineHandle handle) + { + Timing instance = GetInstance(handle.Key); + instance.RemoveTagOnInstance(handle); + if ((_tmpRef as string) != null) + instance.AddTagOnInstance((string)_tmpRef, handle); + RemoveLayer(handle); + instance.AddLayerOnInstance(_tmpInt, handle); + instance.RunCoroutineInternal(coptr, _tmpSegment, _tmpInt, false, null, handle, false); + return null; + } + + /// + /// Use the command "yield return Timing.SwitchCoroutine(tag);" to switch this coroutine to + /// the given tag. + /// + /// The new tag to apply, or null to remove this coroutine's tag. + public static float SwitchCoroutine(string newTag) + { + _tmpRef = newTag; + ReplacementFunction = SwitchCoroutineRepT; + + return float.NaN; + } + + private static IEnumerator SwitchCoroutineRepT(IEnumerator coptr, CoroutineHandle handle) + { + Timing instance = GetInstance(handle.Key); + instance.RemoveTagOnInstance(handle); + if ((_tmpRef as string) != null) + instance.AddTagOnInstance((string)_tmpRef, handle); + return coptr; + } + + /// + /// Use the command "yield return Timing.SwitchCoroutine(layer);" to switch this coroutine to + /// the given layer. + /// + /// The new layer to apply. + public static float SwitchCoroutine(int newLayer) + { + _tmpInt = newLayer; + ReplacementFunction = SwitchCoroutineRepL; + + return float.NaN; + } + + private static IEnumerator SwitchCoroutineRepL(IEnumerator coptr, CoroutineHandle handle) + { + RemoveLayer(handle); + GetInstance(handle.Key).AddLayerOnInstance(_tmpInt, handle); + return coptr; + } + + /// + /// Use the command "yield return Timing.SwitchCoroutine(layer, tag);" to switch this coroutine to + /// the given tag. + /// + /// The new layer to apply. + /// The new tag to apply, or null to remove this coroutine's tag. + public static float SwitchCoroutine(int newLayer, string newTag) + { + _tmpInt = newLayer; + _tmpRef = newTag; + ReplacementFunction = SwitchCoroutineRepLT; + + return float.NaN; + } + + private static IEnumerator SwitchCoroutineRepLT(IEnumerator coptr, CoroutineHandle handle) + { + Timing instance = GetInstance(handle.Key); + instance.RemoveLayerOnInstance(handle); + instance.AddLayerOnInstance(_tmpInt, handle); + instance.RemoveTagOnInstance(handle); + if ((_tmpRef as string) != null) + instance.AddTagOnInstance((string)_tmpRef, handle); + + return coptr; + } + + /// + /// Calls the specified action after a specified number of seconds. + /// + /// The number of seconds to wait before calling the action. + /// The action to call. + /// The handle to the coroutine that is started by this function. + public static CoroutineHandle CallDelayed(float delay, System.Action action) + { + return action == null ? new CoroutineHandle() : RunCoroutine(Instance._DelayedCall(delay, action, null)); + } + + /// + /// Calls the specified action after a specified number of seconds. + /// + /// The number of seconds to wait before calling the action. + /// The action to call. + /// The handle to the coroutine that is started by this function. + public CoroutineHandle CallDelayedOnInstance(float delay, System.Action action) + { + return action == null ? new CoroutineHandle() : RunCoroutineOnInstance(_DelayedCall(delay, action, null)); + } + + /// + /// Calls the specified action after a specified number of seconds. + /// + /// The number of seconds to wait before calling the action. + /// The action to call. + /// A GameObject that will be tagged onto the coroutine and checked to make sure it hasn't been destroyed + /// before calling the action. + /// The handle to the coroutine that is started by this function. + public static CoroutineHandle CallDelayed(float delay, System.Action action, GameObject gameObject) + { + return action == null ? new CoroutineHandle() : RunCoroutine(Instance._DelayedCall(delay, action, gameObject), gameObject); + } + + /// + /// Calls the specified action after a specified number of seconds. + /// + /// The number of seconds to wait before calling the action. + /// The action to call. + /// A GameObject that will be tagged onto the coroutine and checked to make sure it hasn't been destroyed + /// before calling the action. + /// The handle to the coroutine that is started by this function. + public CoroutineHandle CallDelayedOnInstance(float delay, System.Action action, GameObject gameObject) + { + return action == null ? new CoroutineHandle() : RunCoroutineOnInstance(_DelayedCall(delay, action, gameObject), gameObject); + } + + private IEnumerator _DelayedCall(float delay, System.Action action, GameObject cancelWith) + { + yield return WaitForSecondsOnInstance(delay); + + if (ReferenceEquals(cancelWith, null) || cancelWith != null) + action(); + } + + /// + /// Calls the specified action after a specified number of seconds. + /// + /// The number of seconds to wait before calling the action. + /// The action to call. + /// The timing segment that the call should be made in. + /// The handle to the coroutine that is started by this function. + public static CoroutineHandle CallDelayed(float delay, Segment segment, System.Action action) + { + return action == null ? new CoroutineHandle() : RunCoroutine(Instance._DelayedCall(delay, action, null), segment); + } + + /// + /// Calls the specified action after a specified number of seconds. + /// + /// The number of seconds to wait before calling the action. + /// The action to call. + /// The timing segment that the call should be made in. + /// The handle to the coroutine that is started by this function. + public CoroutineHandle CallDelayedOnInstance(float delay, Segment segment, System.Action action) + { + return action == null ? new CoroutineHandle() : RunCoroutineOnInstance(_DelayedCall(delay, action, null), segment); + } + + /// + /// Calls the specified action after a specified number of seconds. + /// + /// The number of seconds to wait before calling the action. + /// The action to call. + /// A GameObject that will be tagged onto the coroutine and checked to make sure it hasn't been destroyed + /// before calling the action. + /// The timing segment that the call should be made in. + /// The handle to the coroutine that is started by this function. + public static CoroutineHandle CallDelayed(float delay, Segment segment, System.Action action, GameObject gameObject) + { + return action == null ? new CoroutineHandle() : RunCoroutine(Instance._DelayedCall(delay, action, gameObject), segment, gameObject); + } + + /// + /// Calls the specified action after a specified number of seconds. + /// + /// The number of seconds to wait before calling the action. + /// The action to call. + /// A GameObject that will be tagged onto the coroutine and checked to make sure it hasn't been destroyed + /// before calling the action. + /// The timing segment that the call should be made in. + /// The handle to the coroutine that is started by this function. + public CoroutineHandle CallDelayedOnInstance(float delay, Segment segment, System.Action action, GameObject gameObject) + { + return action == null ? new CoroutineHandle() : RunCoroutineOnInstance(_DelayedCall(delay, action, gameObject), segment, gameObject); + } + + /// + /// Calls the supplied action at the given rate for a given number of seconds. + /// + /// The number of seconds that this function should run. Use float.PositiveInfinity to run indefinitely. + /// The amount of time between calls. + /// The action to call every frame. + /// An optional action to call when this function finishes. + /// The handle to the coroutine that is started by this function. + public static CoroutineHandle CallPeriodically(float timeframe, float period, System.Action action, System.Action onDone = null) + { + CoroutineHandle handle = action == null ? new CoroutineHandle() : RunCoroutine(Instance._CallContinuously(period, action, null)); + if (!float.IsPositiveInfinity(timeframe)) + RunCoroutine(Instance._WatchCall(timeframe, handle, null, onDone)); + return handle; + } + + /// + /// Calls the supplied action at the given rate for a given number of seconds. + /// + /// The number of seconds that this function should run. Use float.PositiveInfinity to run indefinitely. + /// The amount of time between calls. + /// The action to call every frame. + /// An optional action to call when this function finishes. + /// The handle to the coroutine that is started by this function. + public CoroutineHandle CallPeriodicallyOnInstance(float timeframe, float period, System.Action action, System.Action onDone = null) + { + CoroutineHandle handle = action == null ? new CoroutineHandle() : RunCoroutineOnInstance(_CallContinuously(period, action, null)); + if (!float.IsPositiveInfinity(timeframe)) + RunCoroutineOnInstance(_WatchCall(timeframe, handle, null, onDone)); + return handle; + } + + /// + /// Calls the supplied action at the given rate for a given number of seconds. + /// + /// The number of seconds that this function should run. Use float.PositiveInfinity to run indefinitely. + /// The amount of time between calls. + /// The action to call every frame. + /// A GameObject that will be tagged onto the coroutine and checked to make sure it hasn't been destroyed or disabled + /// before calling the action. + /// An optional action to call when this function finishes. + /// The handle to the coroutine that is started by this function. + public static CoroutineHandle CallPeriodically(float timeframe, float period, System.Action action, + GameObject gameObject, System.Action onDone = null) + { + CoroutineHandle handle = action == null ? new CoroutineHandle() + : RunCoroutine(Instance._CallContinuously(period, action, gameObject), gameObject); + if (!float.IsPositiveInfinity(timeframe)) + LinkCoroutines(handle, RunCoroutine(Instance._WatchCall(timeframe, handle, gameObject, onDone), gameObject)); + return handle; + } + + /// + /// Calls the supplied action at the given rate for a given number of seconds. + /// + /// The number of seconds that this function should run. Use float.PositiveInfinity to run indefinitely. + /// The amount of time between calls. + /// The action to call every frame. + /// A GameObject that will be tagged onto the coroutine and checked to make sure it hasn't been destroyed or disabled + /// before calling the action. + /// An optional action to call when this function finishes. + /// The handle to the coroutine that is started by this function. + public CoroutineHandle CallPeriodicallyOnInstance(float timeframe, float period, System.Action action, + GameObject gameObject, System.Action onDone = null) + { + CoroutineHandle handle = action == null ? new CoroutineHandle() + : RunCoroutineOnInstance(_CallContinuously(period, action, gameObject), gameObject); + if (!float.IsPositiveInfinity(timeframe)) + LinkCoroutines(handle, RunCoroutineOnInstance(_WatchCall(timeframe, handle, gameObject, onDone), gameObject)); + return handle; + } + + /// + /// Calls the supplied action at the given rate for a given number of seconds. + /// + /// The number of seconds that this function should run. Use float.PositiveInfinity to run indefinitely. + /// The amount of time between calls. + /// The action to call every frame. + /// The timing segment to run in. + /// An optional action to call when this function finishes. + /// The handle to the coroutine that is started by this function. + public static CoroutineHandle CallPeriodically(float timeframe, float period, System.Action action, Segment timing, System.Action onDone = null) + { + CoroutineHandle handle = action == null ? new CoroutineHandle() + : RunCoroutine(Instance._CallContinuously(period, action, null), timing); + if (!float.IsPositiveInfinity(timeframe)) + RunCoroutine(Instance._WatchCall(timeframe, handle, null, onDone), timing); + return handle; + } + + /// + /// Calls the supplied action at the given rate for a given number of seconds. + /// + /// The number of seconds that this function should run. Use float.PositiveInfinity to run indefinitely. + /// The amount of time between calls. + /// The action to call every frame. + /// The timing segment to run in. + /// An optional action to call when this function finishes. + /// The handle to the coroutine that is started by this function. + public CoroutineHandle CallPeriodicallyOnInstance(float timeframe, float period, System.Action action, Segment timing, System.Action onDone = null) + { + CoroutineHandle handle = action == null ? new CoroutineHandle() + : RunCoroutineOnInstance(_CallContinuously(period, action, null), timing); + if (!float.IsPositiveInfinity(timeframe)) + LinkCoroutines(handle, RunCoroutineOnInstance(_WatchCall(timeframe, handle, null, onDone), timing)); + return handle; + } + + /// + /// Calls the supplied action at the given rate for a given number of seconds. + /// + /// The number of seconds that this function should run. Use float.PositiveInfinity to run indefinitely. + /// The amount of time between calls. + /// The action to call every frame. + /// The timing segment to run in. + /// A GameObject that will be tagged onto the coroutine and checked to make sure it hasn't been destroyed or disabled + /// before calling the action. + /// An optional action to call when this function finishes. + /// The handle to the coroutine that is started by this function. + public static CoroutineHandle CallPeriodically(float timeframe, float period, System.Action action, Segment timing, + GameObject gameObject, System.Action onDone = null) + { + CoroutineHandle handle = action == null ? new CoroutineHandle() + : RunCoroutine(Instance._CallContinuously(period, action, gameObject), timing, gameObject); + if (!float.IsPositiveInfinity(timeframe)) + LinkCoroutines(handle, RunCoroutine(Instance._WatchCall(timeframe, handle, gameObject, onDone), timing, gameObject)); + return handle; + } + + /// + /// Calls the supplied action at the given rate for a given number of seconds. + /// + /// The number of seconds that this function should run. Use float.PositiveInfinity to run indefinitely. + /// The amount of time between calls. + /// The action to call every frame. + /// The timing segment to run in. + /// A GameObject that will be tagged onto the coroutine and checked to make sure it hasn't been destroyed or disabled + /// before calling the action. + /// An optional action to call when this function finishes. + /// The handle to the coroutine that is started by this function. + public CoroutineHandle CallPeriodicallyOnInstance(float timeframe, float period, System.Action action, Segment timing, + GameObject gameObject, System.Action onDone = null) + { + CoroutineHandle handle = action == null ? new CoroutineHandle() + : RunCoroutineOnInstance(_CallContinuously(period, action, gameObject), timing, gameObject); + if (!float.IsPositiveInfinity(timeframe)) + LinkCoroutines(handle, RunCoroutineOnInstance(_WatchCall(timeframe, handle, gameObject, onDone), timing, gameObject)); + return handle; + } + + /// + /// Calls the supplied action at the given rate for a given number of seconds. + /// + /// The number of seconds that this function should run. Use float.PositiveInfinity to run indefinitely. + /// The action to call every frame. + /// An optional action to call when this function finishes. + /// The handle to the coroutine that is started by this function. + public static CoroutineHandle CallContinuously(float timeframe, System.Action action, System.Action onDone = null) + { + CoroutineHandle handle = action == null ? new CoroutineHandle() : RunCoroutine(Instance._CallContinuously(0f, action, null)); + if (!float.IsPositiveInfinity(timeframe)) + LinkCoroutines(handle, RunCoroutine(Instance._WatchCall(timeframe, handle, null, onDone))); + return handle; + } + + /// + /// Calls the supplied action at the given rate for a given number of seconds. + /// + /// The number of seconds that this function should run. Use float.PositiveInfinity to run indefinitely. + /// The action to call every frame. + /// An optional action to call when this function finishes. + /// The handle to the coroutine that is started by this function. + public CoroutineHandle CallContinuouslyOnInstance(float timeframe, System.Action action, System.Action onDone = null) + { + CoroutineHandle handle = action == null ? new CoroutineHandle() : RunCoroutineOnInstance(_CallContinuously(0f, action, null)); + if (!float.IsPositiveInfinity(timeframe)) + LinkCoroutines(handle, RunCoroutineOnInstance(_WatchCall(timeframe, handle, null, onDone))); + return handle; + } + + /// + /// Calls the supplied action at the given rate for a given number of seconds. + /// + /// The number of seconds that this function should run. Use float.PositiveInfinity to run indefinitely. + /// The action to call every frame. + /// A GameObject that will be tagged onto the coroutine and checked to make sure it hasn't been destroyed or disabled + /// before calling the action. + /// An optional action to call when this function finishes. + /// The handle to the coroutine that is started by this function. + public static CoroutineHandle CallContinuously(float timeframe, System.Action action, GameObject gameObject, System.Action onDone = null) + { + CoroutineHandle handle = action == null ? new CoroutineHandle() : RunCoroutine(Instance._CallContinuously(0f, action, gameObject), gameObject); + if (!float.IsPositiveInfinity(timeframe)) + LinkCoroutines(handle, RunCoroutine(Instance._WatchCall(timeframe, handle, gameObject, onDone), gameObject)); + return handle; + } + + /// + /// Calls the supplied action at the given rate for a given number of seconds. + /// + /// The number of seconds that this function should run. Use float.PositiveInfinity to run indefinitely. + /// The action to call every frame. + /// A GameObject that will be tagged onto the coroutine and checked to make sure it hasn't been destroyed or disabled + /// before calling the action. + /// An optional action to call when this function finishes. + /// The handle to the coroutine that is started by this function. + public CoroutineHandle CallContinuouslyOnInstance(float timeframe, System.Action action, GameObject gameObject, System.Action onDone = null) + { + CoroutineHandle handle = action == null ? new CoroutineHandle() : RunCoroutineOnInstance(_CallContinuously(0f, action, gameObject), gameObject); + if (!float.IsPositiveInfinity(timeframe)) + LinkCoroutines(handle, RunCoroutineOnInstance(_WatchCall(timeframe, handle, gameObject, onDone), gameObject)); + return handle; + } + + /// + /// Calls the supplied action every frame for a given number of seconds. + /// + /// The number of seconds that this function should run. Use float.PositiveInfinity to run indefinitely. + /// The action to call every frame. + /// The timing segment to run in. + /// An optional action to call when this function finishes. + /// The handle to the coroutine that is started by this function. + public static CoroutineHandle CallContinuously(float timeframe, System.Action action, Segment timing, System.Action onDone = null) + { + CoroutineHandle handle = action == null ? new CoroutineHandle() : RunCoroutine(Instance._CallContinuously(0f, action, null), timing); + if (!float.IsPositiveInfinity(timeframe)) + LinkCoroutines(handle, RunCoroutine(Instance._WatchCall(timeframe, handle, null, onDone), timing)); + return handle; + } + + /// + /// Calls the supplied action every frame for a given number of seconds. + /// + /// The number of seconds that this function should run. Use float.PositiveInfinity to run indefinitely. + /// The action to call every frame. + /// The timing segment to run in. + /// An optional action to call when this function finishes. + /// The handle to the coroutine that is started by this function. + public CoroutineHandle CallContinuouslyOnInstance(float timeframe, System.Action action, Segment timing, System.Action onDone = null) + { + CoroutineHandle handle = action == null ? new CoroutineHandle() : RunCoroutineOnInstance(_CallContinuously(0f, action, null), timing); + if (!float.IsPositiveInfinity(timeframe)) + LinkCoroutines(handle, RunCoroutineOnInstance(_WatchCall(timeframe, handle, null, onDone), timing)); + return handle; + } + + /// + /// Calls the supplied action every frame for a given number of seconds. + /// + /// The number of seconds that this function should run. Use float.PositiveInfinity to run indefinitely. + /// The action to call every frame. + /// The timing segment to run in. + /// A GameObject that will be tagged onto the coroutine and checked to make sure it hasn't been destroyed or disabled + /// before calling the action. + /// An optional action to call when this function finishes. + /// The handle to the coroutine that is started by this function. + public static CoroutineHandle CallContinuously(float timeframe, System.Action action, Segment timing, + GameObject gameObject, System.Action onDone = null) + { + CoroutineHandle handle = action == null ? new CoroutineHandle() + : RunCoroutine(Instance._CallContinuously(0f, action, gameObject), timing, gameObject); + if (!float.IsPositiveInfinity(timeframe)) + LinkCoroutines(handle, RunCoroutine(Instance._WatchCall(timeframe, handle, gameObject, onDone), timing, gameObject)); + return handle; + } + + /// + /// Calls the supplied action every frame for a given number of seconds. + /// + /// The number of seconds that this function should run. Use float.PositiveInfinity to run indefinitely. + /// The action to call every frame. + /// The timing segment to run in. + /// A GameObject that will be tagged onto the coroutine and checked to make sure it hasn't been destroyed or disabled + /// before calling the action. + /// An optional action to call when this function finishes. + /// The handle to the coroutine that is started by this function. + public CoroutineHandle CallContinuouslyOnInstance(float timeframe, System.Action action, Segment timing, + GameObject gameObject, System.Action onDone = null) + { + CoroutineHandle handle = action == null ? new CoroutineHandle() + : RunCoroutineOnInstance(_CallContinuously(0f, action, gameObject), timing, gameObject); + if (!float.IsPositiveInfinity(timeframe)) + LinkCoroutines(handle, RunCoroutineOnInstance(_WatchCall(timeframe, handle, gameObject, onDone), timing, gameObject)); + return handle; + } + + private IEnumerator _WatchCall(float timeframe, CoroutineHandle handle, GameObject gObject, System.Action onDone) + { + yield return WaitForSecondsOnInstance(timeframe); + + KillCoroutinesOnInstance(handle); + + if (onDone != null && (ReferenceEquals(gObject, null) || gObject != null)) + onDone(); + } + + private IEnumerator _CallContinuously(float period, System.Action action, GameObject gObject) + { + while (ReferenceEquals(gObject, null) || gObject != null) + { + yield return WaitForSecondsOnInstance(period); + + if (ReferenceEquals(gObject, null) || (gObject != null && gObject.activeInHierarchy)) + action(); + } + } + + /// + /// Calls the supplied action at the given rate for a given number of seconds. + /// + /// A value that will be passed in to the supplied action each period. + /// The number of seconds that this function should run. Use float.PositiveInfinity to run indefinitely. + /// The amount of time between calls. + /// The action to call every frame. + /// An optional action to call when this function finishes. + /// The handle to the coroutine that is started by this function. + public static CoroutineHandle CallPeriodically(T reference, float timeframe, float period, + System.Action action, System.Action onDone = null) + { + CoroutineHandle handle = action == null ? new CoroutineHandle() : RunCoroutine(Instance._CallContinuously(reference, period, action, null)); + if (!float.IsPositiveInfinity(timeframe)) + LinkCoroutines(handle, RunCoroutine(Instance._WatchCall(reference, timeframe, handle, null, onDone))); + return handle; + } + + /// + /// Calls the supplied action at the given rate for a given number of seconds. + /// + /// A value that will be passed in to the supplied action each period. + /// The number of seconds that this function should run. Use float.PositiveInfinity to run indefinitely. + /// The amount of time between calls. + /// The action to call every frame. + /// An optional action to call when this function finishes. + /// The handle to the coroutine that is started by this function. + public CoroutineHandle CallPeriodicallyOnInstance(T reference, float timeframe, float period, + System.Action action, System.Action onDone = null) + { + CoroutineHandle handle = action == null ? new CoroutineHandle() : RunCoroutineOnInstance(_CallContinuously(reference, period, action, null)); + if (!float.IsPositiveInfinity(timeframe)) + LinkCoroutines(handle, RunCoroutineOnInstance(_WatchCall(reference, timeframe, handle, null, onDone))); + return handle; + } + + /// + /// Calls the supplied action at the given rate for a given number of seconds. + /// + /// A value that will be passed in to the supplied action each period. + /// The number of seconds that this function should run. Use float.PositiveInfinity to run indefinitely. + /// The amount of time between calls. + /// The action to call every frame. + /// A GameObject that will be tagged onto the coroutine and checked to make sure it hasn't been destroyed or disabled + /// before calling the action. + /// An optional action to call when this function finishes. + /// The handle to the coroutine that is started by this function. + public static CoroutineHandle CallPeriodically(T reference, float timeframe, float period, + System.Action action, GameObject gameObject, System.Action onDone = null) + { + CoroutineHandle handle = action == null ? new CoroutineHandle() + : RunCoroutine(Instance._CallContinuously(reference, period, action, gameObject), gameObject); + if (!float.IsPositiveInfinity(timeframe)) + LinkCoroutines(handle, RunCoroutine(Instance._WatchCall(reference, timeframe, handle, gameObject, onDone), gameObject)); + return handle; + } + + /// + /// Calls the supplied action at the given rate for a given number of seconds. + /// + /// A value that will be passed in to the supplied action each period. + /// The number of seconds that this function should run. Use float.PositiveInfinity to run indefinitely. + /// The amount of time between calls. + /// The action to call every frame. + /// A GameObject that will be tagged onto the coroutine and checked to make sure it hasn't been destroyed or disabled + /// before calling the action. + /// An optional action to call when this function finishes. + /// The handle to the coroutine that is started by this function. + public CoroutineHandle CallPeriodicallyOnInstance(T reference, float timeframe, float period, + System.Action action, GameObject gameObject, System.Action onDone = null) + { + CoroutineHandle handle = action == null ? new CoroutineHandle() + : RunCoroutineOnInstance(_CallContinuously(reference, period, action, gameObject), gameObject); + if (!float.IsPositiveInfinity(timeframe)) + LinkCoroutines(handle, RunCoroutineOnInstance(_WatchCall(reference, timeframe, handle, gameObject, onDone), gameObject)); + return handle; + } + + /// + /// Calls the supplied action at the given rate for a given number of seconds. + /// + /// A value that will be passed in to the supplied action each period. + /// The number of seconds that this function should run. Use float.PositiveInfinity to run indefinitely. + /// The amount of time between calls. + /// The action to call every frame. + /// The timing segment to run in. + /// An optional action to call when this function finishes. + /// The handle to the coroutine that is started by this function. + public static CoroutineHandle CallPeriodically(T reference, float timeframe, float period, System.Action action, + Segment timing, System.Action onDone = null) + { + CoroutineHandle handle = action == null ? new CoroutineHandle() + : RunCoroutine(Instance._CallContinuously(reference, period, action, null), timing); + if (!float.IsPositiveInfinity(timeframe)) + LinkCoroutines(handle, RunCoroutine(Instance._WatchCall(reference, timeframe, handle, null, onDone), timing)); + return handle; + } + + /// + /// Calls the supplied action at the given rate for a given number of seconds. + /// + /// A value that will be passed in to the supplied action each period. + /// The number of seconds that this function should run. Use float.PositiveInfinity to run indefinitely. + /// The amount of time between calls. + /// The action to call every frame. + /// The timing segment to run in. + /// An optional action to call when this function finishes. + /// The handle to the coroutine that is started by this function. + public CoroutineHandle CallPeriodicallyOnInstance(T reference, float timeframe, float period, System.Action action, + Segment timing, System.Action onDone = null) + { + CoroutineHandle handle = action == null ? new CoroutineHandle() + : RunCoroutineOnInstance(_CallContinuously(reference, period, action, null), timing); + if (!float.IsPositiveInfinity(timeframe)) + LinkCoroutines(handle, RunCoroutineOnInstance(_WatchCall(reference, timeframe, handle, null, onDone), timing)); + return handle; + } + + /// + /// Calls the supplied action at the given rate for a given number of seconds. + /// + /// A value that will be passed in to the supplied action each period. + /// The number of seconds that this function should run. Use float.PositiveInfinity to run indefinitely. + /// The amount of time between calls. + /// The action to call every frame. + /// The timing segment to run in. + /// A GameObject that will be tagged onto the coroutine and checked to make sure it hasn't been destroyed or disabled + /// before calling the action. + /// An optional action to call when this function finishes. + /// The handle to the coroutine that is started by this function. + public static CoroutineHandle CallPeriodically(T reference, float timeframe, float period, System.Action action, + Segment timing, GameObject gameObject, System.Action onDone = null) + { + CoroutineHandle handle = action == null ? new CoroutineHandle() + : RunCoroutine(Instance._CallContinuously(reference, period, action, gameObject), timing, gameObject); + if (!float.IsPositiveInfinity(timeframe)) + LinkCoroutines(handle, RunCoroutine(Instance._WatchCall(reference, timeframe, handle, gameObject, onDone), timing, gameObject)); + return handle; + } + + /// + /// Calls the supplied action at the given rate for a given number of seconds. + /// + /// A value that will be passed in to the supplied action each period. + /// The number of seconds that this function should run. Use float.PositiveInfinity to run indefinitely. + /// The amount of time between calls. + /// The action to call every frame. + /// The timing segment to run in. + /// A GameObject that will be tagged onto the coroutine and checked to make sure it hasn't been destroyed or disabled + /// before calling the action. + /// An optional action to call when this function finishes. + /// The handle to the coroutine that is started by this function. + public CoroutineHandle CallPeriodicallyOnInstance(T reference, float timeframe, float period, System.Action action, + Segment timing, GameObject gameObject, System.Action onDone = null) + { + CoroutineHandle handle = action == null ? new CoroutineHandle() + : RunCoroutineOnInstance(_CallContinuously(reference, period, action, gameObject), timing, gameObject); + if (!float.IsPositiveInfinity(timeframe)) + LinkCoroutines(handle, RunCoroutineOnInstance(_WatchCall(reference, timeframe, handle, gameObject, onDone), timing, gameObject)); + return handle; + } + + /// + /// Calls the supplied action every frame for a given number of seconds. + /// + /// A value that will be passed in to the supplied action each frame. + /// The number of seconds that this function should run. Use float.PositiveInfinity to run indefinitely. + /// The action to call every frame. + /// An optional action to call when this function finishes. + /// The handle to the coroutine that is started by this function. + public static CoroutineHandle CallContinuously(T reference, float timeframe, System.Action action, System.Action onDone = null) + { + CoroutineHandle handle = action == null ? new CoroutineHandle() : RunCoroutine(Instance._CallContinuously(reference, 0f, action, null)); + if (!float.IsPositiveInfinity(timeframe)) + LinkCoroutines(handle, RunCoroutine(Instance._WatchCall(reference, timeframe, handle, null, onDone))); + return handle; + } + + /// + /// Calls the supplied action every frame for a given number of seconds. + /// + /// A value that will be passed in to the supplied action each frame. + /// The number of seconds that this function should run. Use float.PositiveInfinity to run indefinitely. + /// The action to call every frame. + /// An optional action to call when this function finishes. + /// The handle to the coroutine that is started by this function. + public CoroutineHandle CallContinuouslyOnInstance(T reference, float timeframe, System.Action action, System.Action onDone = null) + { + CoroutineHandle handle = action == null ? new CoroutineHandle() : RunCoroutineOnInstance(_CallContinuously(reference, 0f, action, null)); + if (!float.IsPositiveInfinity(timeframe)) + LinkCoroutines(handle, RunCoroutineOnInstance(_WatchCall(reference, timeframe, handle, null, onDone))); + return handle; + } + + /// + /// Calls the supplied action every frame for a given number of seconds. + /// + /// A value that will be passed in to the supplied action each frame. + /// The number of seconds that this function should run. Use float.PositiveInfinity to run indefinitely. + /// The action to call every frame. + /// A GameObject that will be tagged onto the coroutine and checked to make sure it hasn't been destroyed or disabled + /// before calling the action. + /// An optional action to call when this function finishes. + /// The handle to the coroutine that is started by this function. + public static CoroutineHandle CallContinuously(T reference, float timeframe, System.Action action, + GameObject gameObject, System.Action onDone = null) + { + CoroutineHandle handle = action == null ? new CoroutineHandle() + : RunCoroutine(Instance._CallContinuously(reference, 0f, action, gameObject), gameObject); + if (!float.IsPositiveInfinity(timeframe)) + LinkCoroutines(handle, RunCoroutine(Instance._WatchCall(reference, timeframe, handle, gameObject, onDone), gameObject)); + return handle; + } + + /// + /// Calls the supplied action every frame for a given number of seconds. + /// + /// A value that will be passed in to the supplied action each frame. + /// The number of seconds that this function should run. Use float.PositiveInfinity to run indefinitely. + /// The action to call every frame. + /// A GameObject that will be tagged onto the coroutine and checked to make sure it hasn't been destroyed or disabled + /// before calling the action. + /// An optional action to call when this function finishes. + /// The handle to the coroutine that is started by this function. + public CoroutineHandle CallContinuouslyOnInstance(T reference, float timeframe, System.Action action, + GameObject gameObject, System.Action onDone = null) + { + CoroutineHandle handle = action == null ? new CoroutineHandle() + : RunCoroutineOnInstance(_CallContinuously(reference, 0f, action, gameObject), gameObject); + if (!float.IsPositiveInfinity(timeframe)) + LinkCoroutines(handle, RunCoroutineOnInstance(_WatchCall(reference, timeframe, handle, gameObject, onDone), gameObject)); + return handle; + } + + /// + /// Calls the supplied action every frame for a given number of seconds. + /// + /// A value that will be passed in to the supplied action each frame. + /// The number of seconds that this function should run. Use float.PositiveInfinity to run indefinitely. + /// The action to call every frame. + /// The timing segment to run in. + /// An optional action to call when this function finishes. + /// The handle to the coroutine that is started by this function. + public static CoroutineHandle CallContinuously(T reference, float timeframe, System.Action action, + Segment timing, System.Action onDone = null) + { + CoroutineHandle handle = action == null ? new CoroutineHandle() + : RunCoroutine(Instance._CallContinuously(reference, 0f, action, null), timing); + if (!float.IsPositiveInfinity(timeframe)) + LinkCoroutines(handle, RunCoroutine(Instance._WatchCall(reference, timeframe, handle, null, onDone), timing)); + return handle; + } + + /// + /// Calls the supplied action every frame for a given number of seconds. + /// + /// A value that will be passed in to the supplied action each frame. + /// The number of seconds that this function should run. Use float.PositiveInfinity to run indefinitely. + /// The action to call every frame. + /// The timing segment to run in. + /// An optional action to call when this function finishes. + /// The handle to the coroutine that is started by this function. + public CoroutineHandle CallContinuouslyOnInstance(T reference, float timeframe, System.Action action, + Segment timing, System.Action onDone = null) + { + CoroutineHandle handle = action == null ? new CoroutineHandle() + : RunCoroutineOnInstance(_CallContinuously(reference, 0f, action, null), timing); + if (!float.IsPositiveInfinity(timeframe)) + LinkCoroutines(handle, RunCoroutineOnInstance(_WatchCall(reference, timeframe, handle, null, onDone), timing)); + return handle; + } + + /// + /// Calls the supplied action every frame for a given number of seconds. + /// + /// A value that will be passed in to the supplied action each frame. + /// The number of seconds that this function should run. Use float.PositiveInfinity to run indefinitely. + /// The action to call every frame. + /// The timing segment to run in. + /// A GameObject that will be tagged onto the coroutine and checked to make sure it hasn't been destroyed or disabled + /// before calling the action. + /// An optional action to call when this function finishes. + /// The handle to the coroutine that is started by this function. + public static CoroutineHandle CallContinuously(T reference, float timeframe, System.Action action, + Segment timing, GameObject gameObject, System.Action onDone = null) + { + CoroutineHandle handle = action == null ? new CoroutineHandle() + : RunCoroutine(Instance._CallContinuously(reference, 0f, action, gameObject), timing, gameObject); + if (!float.IsPositiveInfinity(timeframe)) + LinkCoroutines(handle, RunCoroutine(Instance._WatchCall(reference, timeframe, handle, gameObject, onDone), timing, gameObject)); + return handle; + } + + /// + /// Calls the supplied action every frame for a given number of seconds. + /// + /// A value that will be passed in to the supplied action each frame. + /// The number of seconds that this function should run. Use float.PositiveInfinity to run indefinitely. + /// The action to call every frame. + /// The timing segment to run in. + /// A GameObject that will be tagged onto the coroutine and checked to make sure it hasn't been destroyed or disabled + /// before calling the action. + /// An optional action to call when this function finishes. + /// The handle to the coroutine that is started by this function. + public CoroutineHandle CallContinuouslyOnInstance(T reference, float timeframe, System.Action action, + Segment timing, GameObject gameObject, System.Action onDone = null) + { + CoroutineHandle handle = action == null ? new CoroutineHandle() + : RunCoroutineOnInstance(_CallContinuously(reference, 0f, action, gameObject), timing, gameObject); + if (!float.IsPositiveInfinity(timeframe)) + LinkCoroutines(handle, RunCoroutineOnInstance(_WatchCall(reference, timeframe, handle, gameObject, onDone), timing, gameObject)); + return handle; + } + + private IEnumerator _WatchCall(T reference, float timeframe, CoroutineHandle handle, GameObject gObject, System.Action onDone) + { + yield return WaitForSecondsOnInstance(timeframe); + + KillCoroutinesOnInstance(handle); + + if (onDone != null && (ReferenceEquals(gObject, null) || gObject != null)) + onDone(reference); + } + + private IEnumerator _CallContinuously(T reference, float period, System.Action action, GameObject gObject) + { + while ((ReferenceEquals(gObject, null) || gObject != null)) + { + yield return WaitForSecondsOnInstance(period); + + if (ReferenceEquals(gObject, null) || (gObject != null && gObject.activeInHierarchy)) + action(reference); + } + } + + private struct ProcessIndex : System.IEquatable + { + public Segment seg; + public int i; + + public bool Equals(ProcessIndex other) + { + return seg == other.seg && i == other.i; + } + + public override bool Equals(object other) + { + if (other is ProcessIndex) + return Equals((ProcessIndex)other); + return false; + } + + public static bool operator ==(ProcessIndex a, ProcessIndex b) + { + return a.seg == b.seg && a.i == b.i; + } + + public static bool operator !=(ProcessIndex a, ProcessIndex b) + { + return a.seg != b.seg || a.i != b.i; + } + + public override int GetHashCode() + { + return (((int)seg - 4) * (int.MaxValue / 7)) + i; + } + } + + [System.Obsolete("Unity coroutine function, use RunCoroutine instead.", true)] + public new Coroutine StartCoroutine(System.Collections.IEnumerator routine) { return null; } + + [System.Obsolete("Unity coroutine function, use RunCoroutine instead.", true)] + public new Coroutine StartCoroutine(string methodName, object value) { return null; } + + [System.Obsolete("Unity coroutine function, use RunCoroutine instead.", true)] + public new Coroutine StartCoroutine(string methodName) { return null; } + + [System.Obsolete("Unity coroutine function, use RunCoroutine instead.", true)] + public new Coroutine StartCoroutine_Auto(System.Collections.IEnumerator routine) { return null; } + + [System.Obsolete("Unity coroutine function, use KillCoroutines instead.", true)] + public new void StopCoroutine(string methodName) { } + + [System.Obsolete("Unity coroutine function, use KillCoroutines instead.", true)] + public new void StopCoroutine(System.Collections.IEnumerator routine) { } + + [System.Obsolete("Unity coroutine function, use KillCoroutines instead.", true)] + public new void StopCoroutine(Coroutine routine) { } + + [System.Obsolete("Unity coroutine function, use KillCoroutines instead.", true)] + public new void StopAllCoroutines() { } + + [System.Obsolete("Use your own GameObject for this.", true)] + public new static void Destroy(Object obj) { } + + [System.Obsolete("Use your own GameObject for this.", true)] + public new static void Destroy(Object obj, float f) { } + + [System.Obsolete("Use your own GameObject for this.", true)] + public new static void DestroyObject(Object obj) { } + + [System.Obsolete("Use your own GameObject for this.", true)] + public new static void DestroyObject(Object obj, float f) { } + + [System.Obsolete("Use your own GameObject for this.", true)] + public new static void DestroyImmediate(Object obj) { } + + [System.Obsolete("Use your own GameObject for this.", true)] + public new static void DestroyImmediate(Object obj, bool b) { } + + [System.Obsolete("Use your own GameObject for this.", true)] + public new static void Instantiate(Object obj) { } + + [System.Obsolete("Use your own GameObject for this.", true)] + public new static void Instantiate(Object original, Vector3 position, Quaternion rotation) { } + + [System.Obsolete("Use your own GameObject for this.", true)] + public new static void Instantiate(T original) where T : Object { } + + [System.Obsolete("Just.. no.", true)] + public new static T FindObjectOfType() where T : Object { return null; } + + [System.Obsolete("Just.. no.", true)] + public new static Object FindObjectOfType(System.Type t) { return null; } + + [System.Obsolete("Just.. no.", true)] + public new static T[] FindObjectsOfType() where T : Object { return null; } + + [System.Obsolete("Just.. no.", true)] + public new static Object[] FindObjectsOfType(System.Type t) { return null; } + + [System.Obsolete("Just.. no.", true)] + public new static void print(object message) { } + } + + /// + /// The timing segment that a coroutine is running in or should be run in. + /// + public enum Segment + { + /// + /// Sometimes returned as an error state + /// + Invalid = -1, + /// + /// This is the default timing segment + /// + Update, + /// + /// This is primarily used for physics calculations + /// + FixedUpdate, + /// + /// This is run immediately after update + /// + LateUpdate, + /// + /// This executes, by default, about as quickly as the eye can detect changes in a text field + /// + SlowUpdate, + /// + /// This is the same as update, but it ignores Unity's timescale + /// + RealtimeUpdate, + /// + /// This is a coroutine that runs in the unity editor while your app is not in play mode + /// + EditorUpdate, + /// + /// This executes in the unity editor about as quickly as the eye can detect changes in a text field + /// + EditorSlowUpdate, + /// + /// This segment executes as the very last action before the frame is done + /// + EndOfFrame, + /// + /// This segment can be configured to execute and/or define its notion of time in custom ways + /// + ManualTimeframe + } + + /// + /// How much debug info should be sent to the Unity profiler. NOTE: Setting this to anything above none shows up in the profiler as a + /// decrease in performance and a memory alloc. Those effects do not translate onto device. + /// + public enum DebugInfoType + { + /// + /// None coroutines will be separated in the Unity profiler + /// + None, + /// + /// The Unity profiler will identify each coroutine individually + /// + SeperateCoroutines, + /// + /// Coroutines will be separated and any tags or layers will be identified + /// + SeperateTags + } + + /// + /// How the new coroutine should act if there are any existing coroutines running. + /// + public enum SingletonBehavior + { + /// + /// Don't run this corutine if there are any matches + /// + Abort, + /// + /// Kill any matching coroutines when this one runs + /// + Overwrite, + /// + /// Run this coroutine once all matches finish running + /// + Wait, + /// + /// Don't run this coroutine if there are any matches, but unpause the matches if they're paused. + /// (Does not resume any coroutines in a WaitUntilDone state.) + /// + AbortAndUnpause + } + + /// + /// A handle for a MEC coroutine. + /// + public struct CoroutineHandle : System.IEquatable + { + private const byte ReservedSpace = 0x0F; + private readonly static int[] NextIndex = { ReservedSpace + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; + private readonly int _id; + + public byte Key { get { return (byte)(_id & ReservedSpace); } } + + public CoroutineHandle(byte ind) + { + if (ind > ReservedSpace) + ind -= ReservedSpace; + + _id = NextIndex[ind] + ind; + NextIndex[ind] += ReservedSpace + 1; + } + + public CoroutineHandle(CoroutineHandle other) + { + _id = other._id; + } + + public bool Equals(CoroutineHandle other) + { + return _id == other._id; + } + + public override bool Equals(object other) + { + if (other is CoroutineHandle) + return Equals((CoroutineHandle)other); + return false; + } + + public static bool operator ==(CoroutineHandle a, CoroutineHandle b) + { + return a._id == b._id; + } + + public static bool operator !=(CoroutineHandle a, CoroutineHandle b) + { + return a._id != b._id; + } + + public override int GetHashCode() + { + return _id; + } + + public override string ToString() + { + if (Timing.GetTag(this) == null) + { + if (Timing.GetLayer(this) == null) + return Timing.GetDebugName(this); + else + return Timing.GetDebugName(this) + " Layer: " + Timing.GetLayer(this); + } + else + { + if (Timing.GetLayer(this) == null) + return Timing.GetDebugName(this) + " Tag: " + Timing.GetTag(this); + else + return Timing.GetDebugName(this) + " Tag: " + Timing.GetTag(this) + " Layer: " + Timing.GetLayer(this); + } + } + + /// + /// Get or set the corrosponding coroutine's tag. Null removes the tag or represents no tag assigned. + /// + public string Tag + { + get { return Timing.GetTag(this); } + set { Timing.SetTag(this, value); } + } + + /// + /// Get or set the corrosponding coroutine's layer. Null removes the layer or represents no layer assigned. + /// + public int? Layer + { + get { return Timing.GetLayer(this); } + set + { + if (value == null) + Timing.RemoveLayer(this); + else + Timing.SetLayer(this, (int)value); + } + } + + /// + /// Get or set the coorsponding coroutine's segment. + /// + public Segment Segment + { + get { return Timing.GetSegment(this); } + set { Timing.SetSegment(this, value); } + } + + /// + /// Is true until the coroutine function ends or is killed. Paused or waiting coroutines count as running. + /// Setting this to false will kill the coroutine. + /// + public bool IsRunning + { + get { return Timing.IsRunning(this); } + set { if (!value) Timing.KillCoroutines(this); } + } + + /// + /// Is true while the coroutine is paused. Setting this value will pause or resume the coroutine. + /// + public bool IsAliveAndPaused + { + get { return Timing.IsAliveAndPaused(this); } + set { if (value) Timing.PauseCoroutines(this); else Timing.ResumeCoroutines(this); } + } + + /// + /// Is true if this handle may have been a valid handle at some point. (i.e. is not an uninitialized handle, error handle, or a key to a coroutine lock) + /// + public bool IsValid + { + get { return Key != 0; } + } + + /// + /// This will execute the function you pass in once the coroutine this handle is pointing to is ended. This works whether this + /// coroutine gets to the end of its function, throws an exception, or is the target of a KillCoroutines command. NOTE: It is + /// generally a bad idea to use this function on any coroutine that you would use a CancelWith command on, because that will + /// typically lead to exceptions when the gameObject is destroyed. + /// + /// The function that you want to execute after this coroutine ends. + /// The timing segment that the OnDestroy action should be executed in. + /// + public CoroutineHandle OnDestroy(System.Action action, Segment segment = Segment.Update) + { + Timing inst = Timing.GetInstance(Key); + if (action == null || inst == null) + return new CoroutineHandle(); + + return inst.RunCoroutineOnInstance(_OnDestroy(this, action), segment); + } + + /// + /// This will execute the coroutine you pass in once the coroutine this handle is pointing to is ended. This works whether this + /// coroutine gets to the end of its function, throws an exception, or is the target of a KillCoroutines command. NOTE: It is + /// generally a bad idea to use this function on any coroutine that you would use a CancelWith command on, because that will + /// typically lead to exceptions when the gameObject is destroyed. + /// + /// The coroutine that you want to execute after this coroutine ends. + /// The timing segment that the OnDestroy coroutine should be executed in. + /// + public CoroutineHandle OnDestroy(IEnumerator action, Segment segment = Segment.Update) + { + Timing inst = Timing.GetInstance(Key); + if (action == null || inst == null) + return new CoroutineHandle(); + + return inst.RunCoroutineOnInstance(_OnDestroy(this, action), segment); + } + + private static IEnumerator _OnDestroy(CoroutineHandle watched, System.Action action) + { + while (watched.IsRunning) + yield return Timing.WaitForOneFrame; + + action(); + } + + private static IEnumerator _OnDestroy(CoroutineHandle watched, IEnumerator action) + { + while (watched.IsRunning) + yield return Timing.WaitForOneFrame; + + while (action.MoveNext()) + yield return action.Current; + } + } + + public static class MECExtensionMethods1 + { + /// + /// Run a new coroutine in the Update segment. + /// + /// The new coroutine's handle. + /// The coroutine's handle, which can be used for Wait and Kill operations. + public static CoroutineHandle RunCoroutine(this IEnumerator coroutine) + { + return Timing.RunCoroutine(coroutine); + } + + /// + /// Run a new coroutine in the Update segment. + /// + /// The new coroutine's handle. + /// The new coroutine will be put on a layer corresponding to this gameObject. + /// The coroutine's handle, which can be used for Wait and Kill operations. + public static CoroutineHandle RunCoroutine(this IEnumerator coroutine, GameObject gameObj) + { + return Timing.RunCoroutine(coroutine, gameObj); + } + + /// + /// Run a new coroutine in the Update segment. + /// + /// The new coroutine's handle. + /// An optional layer to attach to the coroutine which can later be used to identify this coroutine. + /// The coroutine's handle, which can be used for Wait and Kill operations. + public static CoroutineHandle RunCoroutine(this IEnumerator coroutine, int layer) + { + return Timing.RunCoroutine(coroutine, layer); + } + + /// + /// Run a new coroutine in the Update segment. + /// + /// The new coroutine's handle. + /// An optional tag to attach to the coroutine which can later be used to identify this coroutine. + /// The coroutine's handle, which can be used for Wait and Kill operations. + public static CoroutineHandle RunCoroutine(this IEnumerator coroutine, string tag) + { + return Timing.RunCoroutine(coroutine, tag); + } + + /// + /// Run a new coroutine in the Update segment. + /// + /// The new coroutine's handle. + /// The new coroutine will be put on a layer corresponding to this gameObject. + /// An optional tag to attach to the coroutine which can later be used to identify this coroutine. + /// The coroutine's handle, which can be used for Wait and Kill operations. + public static CoroutineHandle RunCoroutine(this IEnumerator coroutine, GameObject gameObj, string tag) + { + return Timing.RunCoroutine(coroutine, gameObj, tag); + } + + /// + /// Run a new coroutine in the Update segment. + /// + /// The new coroutine's handle. + /// An optional layer to attach to the coroutine which can later be used to identify this coroutine. + /// An optional tag to attach to the coroutine which can later be used to identify this coroutine. + /// The coroutine's handle, which can be used for Wait and Kill operations. + public static CoroutineHandle RunCoroutine(this IEnumerator coroutine, int layer, string tag) + { + return Timing.RunCoroutine(coroutine, layer, tag); + } + + /// + /// Run a new coroutine. + /// + /// The new coroutine's handle. + /// The segment that the coroutine should run in. + /// The coroutine's handle, which can be used for Wait and Kill operations. + public static CoroutineHandle RunCoroutine(this IEnumerator coroutine, Segment segment) + { + return Timing.RunCoroutine(coroutine, segment); + } + + /// + /// Run a new coroutine. + /// + /// The new coroutine's handle. + /// The segment that the coroutine should run in. + /// The new coroutine will be put on a layer corresponding to this gameObject. + /// The coroutine's handle, which can be used for Wait and Kill operations. + public static CoroutineHandle RunCoroutine(this IEnumerator coroutine, Segment segment, GameObject gameObj) + { + return Timing.RunCoroutine(coroutine, segment, gameObj); + } + + /// + /// Run a new coroutine. + /// + /// The new coroutine's handle. + /// The segment that the coroutine should run in. + /// An optional layer to attach to the coroutine which can later be used to identify this coroutine. + /// The coroutine's handle, which can be used for Wait and Kill operations. + public static CoroutineHandle RunCoroutine(this IEnumerator coroutine, Segment segment, int layer) + { + return Timing.RunCoroutine(coroutine, segment, layer); + } + + /// + /// Run a new coroutine. + /// + /// The new coroutine's handle. + /// The segment that the coroutine should run in. + /// An optional tag to attach to the coroutine which can later be used to identify this coroutine. + /// The coroutine's handle, which can be used for Wait and Kill operations. + public static CoroutineHandle RunCoroutine(this IEnumerator coroutine, Segment segment, string tag) + { + return Timing.RunCoroutine(coroutine, segment, tag); + } + + /// + /// Run a new coroutine. + /// + /// The new coroutine's handle. + /// The segment that the coroutine should run in. + /// The new coroutine will be put on a layer corresponding to this gameObject. + /// An optional tag to attach to the coroutine which can later be used to identify this coroutine. + /// The coroutine's handle, which can be used for Wait and Kill operations. + public static CoroutineHandle RunCoroutine(this IEnumerator coroutine, Segment segment, GameObject gameObj, string tag) + { + return Timing.RunCoroutine(coroutine, segment, gameObj, tag); + } + + /// + /// Run a new coroutine. + /// + /// The new coroutine's handle. + /// The segment that the coroutine should run in. + /// An optional layer to attach to the coroutine which can later be used to identify this coroutine. + /// An optional tag to attach to the coroutine which can later be used to identify this coroutine. + /// The coroutine's handle, which can be used for Wait and Kill operations. + public static CoroutineHandle RunCoroutine(this IEnumerator coroutine, Segment segment, int layer, string tag) + { + return Timing.RunCoroutine(coroutine, segment, layer, tag); + } + + /// + /// Run a new coroutine in the Update segment, but not while the coroutine with the supplied handle is running. + /// + /// The new coroutine's handle. + /// A tag to attach to the coroutine, and to check for existing instances. + /// Should this coroutine fail to start, overwrite, or wait for any coroutines to finish if any matches are + /// currently running. + /// The newly created or existing handle. + public static CoroutineHandle RunCoroutineSingleton(this IEnumerator coroutine, CoroutineHandle handle, SingletonBehavior behaviorOnCollision) + { + return Timing.RunCoroutineSingleton(coroutine, handle, behaviorOnCollision); + } + + /// + /// Run a new coroutine in the Update segment with the supplied layer unless there is already one or more coroutines running with that layer. + /// + /// The new coroutine's handle. + /// The new coroutine will be put on a layer corresponding to this gameObject. + /// Should this coroutine fail to start, overwrite, or wait for any coroutines to finish if any matches are + /// currently running. + /// The newly created or existing handle. + public static CoroutineHandle RunCoroutineSingleton(this IEnumerator coroutine, GameObject gameObj, SingletonBehavior behaviorOnCollision) + { + return gameObj == null ? Timing.RunCoroutine(coroutine) : + Timing.RunCoroutineSingleton(coroutine, gameObj.GetInstanceID(), behaviorOnCollision); + } + + /// + /// Run a new coroutine in the Update segment with the supplied layer unless there is already one or more coroutines running with that layer. + /// + /// The new coroutine's handle. + /// A layer to attach to the coroutine, and to check for existing instances. + /// Should this coroutine fail to start, overwrite, or wait for any coroutines to finish if any matches are + /// currently running. + /// The newly created or existing handle. + public static CoroutineHandle RunCoroutineSingleton(this IEnumerator coroutine, int layer, SingletonBehavior behaviorOnCollision) + { + return Timing.RunCoroutineSingleton(coroutine, layer, behaviorOnCollision); + } + + /// + /// Run a new coroutine in the Update segment with the supplied tag unless there is already one or more coroutines running with that tag. + /// + /// The new coroutine's handle. + /// A tag to attach to the coroutine, and to check for existing instances. + /// Should this coroutine fail to start, overwrite, or wait for any coroutines to finish if any matches are + /// currently running. + /// The newly created or existing handle. + public static CoroutineHandle RunCoroutineSingleton(this IEnumerator coroutine, string tag, SingletonBehavior behaviorOnCollision) + { + return Timing.RunCoroutineSingleton(coroutine, tag, behaviorOnCollision); + } + + /// + /// Run a new coroutine in the Update segment with the supplied graffitti unless there is already one or more coroutines running with both that + /// tag and layer. + /// + /// The new coroutine's handle. + /// The new coroutine will be put on a layer corresponding to this gameObject. + /// A tag to attach to the coroutine, and to check for existing instances. + /// Should this coroutine fail to start, overwrite, or wait for any coroutines to finish if any matches are + /// currently running. + /// The newly created or existing handle. + public static CoroutineHandle RunCoroutineSingleton(this IEnumerator coroutine, GameObject gameObj, string tag, SingletonBehavior behaviorOnCollision) + { + return gameObj == null ? Timing.RunCoroutineSingleton(coroutine, tag, behaviorOnCollision) + : Timing.RunCoroutineSingleton(coroutine, gameObj.GetInstanceID(), tag, behaviorOnCollision); + } + + /// + /// Run a new coroutine in the Update segment with the supplied graffitti unless there is already one or more coroutines running with both that + /// tag and layer. + /// + /// The new coroutine's handle. + /// A layer to attach to the coroutine, and to check for existing instances. + /// A tag to attach to the coroutine, and to check for existing instances. + /// Should this coroutine fail to start, overwrite, or wait for any coroutines to finish if any matches are + /// currently running. + /// The newly created or existing handle. + public static CoroutineHandle RunCoroutineSingleton(this IEnumerator coroutine, int layer, string tag, SingletonBehavior behaviorOnCollision) + { + return Timing.RunCoroutineSingleton(coroutine, layer, tag, behaviorOnCollision); + } + + /// + /// Run a new coroutine, but not while the coroutine with the supplied handle is running. + /// + /// The new coroutine's handle. + /// The segment that the coroutine should run in. + /// A tag to attach to the coroutine, and to check for existing instances. + /// Should this coroutine fail to start, overwrite, or wait for any coroutines to finish if any matches are + /// currently running. + /// The newly created or existing handle. + public static CoroutineHandle RunCoroutineSingleton(this IEnumerator coroutine, CoroutineHandle handle, Segment segment, + SingletonBehavior behaviorOnCollision) + { + return Timing.RunCoroutineSingleton(coroutine, handle, segment, behaviorOnCollision); + } + + /// + /// Run a new coroutine with the supplied layer unless there is already one or more coroutines running with that layer. + /// + /// The new coroutine's handle. + /// The segment that the coroutine should run in. + /// The new coroutine will be put on a layer corresponding to this gameObject. + /// Should this coroutine fail to start, overwrite, or wait for any coroutines to finish if any matches are + /// currently running. + /// The newly created or existing handle. + public static CoroutineHandle RunCoroutineSingleton(this IEnumerator coroutine, Segment segment, GameObject gameObj, + SingletonBehavior behaviorOnCollision) + { + return gameObj == null ? Timing.RunCoroutine(coroutine, segment) : + Timing.RunCoroutineSingleton(coroutine, segment, gameObj.GetInstanceID(), behaviorOnCollision); + } + + /// + /// Run a new coroutine with the supplied layer unless there is already one or more coroutines running with that layer. + /// + /// The new coroutine's handle. + /// The segment that the coroutine should run in. + /// A layer to attach to the coroutine, and to check for existing instances. + /// Should this coroutine fail to start, overwrite, or wait for any coroutines to finish if any matches are + /// currently running. + /// The newly created or existing handle. + public static CoroutineHandle RunCoroutineSingleton(this IEnumerator coroutine, Segment segment, int layer, + SingletonBehavior behaviorOnCollision) + { + return Timing.RunCoroutineSingleton(coroutine, segment, layer, behaviorOnCollision); + } + + /// + /// Run a new coroutine with the supplied tag unless there is already one or more coroutines running with that tag. + /// + /// The new coroutine's handle. + /// The segment that the coroutine should run in. + /// A tag to attach to the coroutine, and to check for existing instances. + /// Should this coroutine fail to start, overwrite, or wait for any coroutines to finish if any matches are + /// currently running. + /// The newly created or existing handle. + public static CoroutineHandle RunCoroutineSingleton(this IEnumerator coroutine, Segment segment, string tag, + SingletonBehavior behaviorOnCollision) + { + return Timing.RunCoroutineSingleton(coroutine, segment, tag, behaviorOnCollision); + } + + /// + /// Run a new coroutine with the supplied graffitti unless there is already one or more coroutines running with both that tag and layer. + /// + /// The new coroutine's handle. + /// The segment that the coroutine should run in. + /// The new coroutine will be put on a layer corresponding to this gameObject. + /// A tag to attach to the coroutine, and to check for existing instances. + /// Should this coroutine fail to start, overwrite, or wait for any coroutines to finish if any matches are + /// currently running. + /// The newly created or existing handle. + public static CoroutineHandle RunCoroutineSingleton(this IEnumerator coroutine, Segment segment, GameObject gameObj, string tag, + SingletonBehavior behaviorOnCollision) + { + return gameObj == null ? Timing.RunCoroutineSingleton(coroutine, segment, tag, behaviorOnCollision) + : Timing.RunCoroutineSingleton(coroutine, segment, gameObj.GetInstanceID(), tag, behaviorOnCollision); + } + + /// + /// Run a new coroutine with the supplied graffitti unless there is already one or more coroutines running with both that tag and layer. + /// + /// The new coroutine's handle. + /// The segment that the coroutine should run in. + /// A layer to attach to the coroutine, and to check for existing instances. + /// A tag to attach to the coroutine, and to check for existing instances. + /// Should this coroutine fail to start, overwrite, or wait for any coroutines to finish if any matches are + /// currently running. + /// The newly created or existing handle. + public static CoroutineHandle RunCoroutineSingleton(this IEnumerator coroutine, Segment segment, int layer, string tag, + SingletonBehavior behaviorOnCollision) + { + return Timing.RunCoroutineSingleton(coroutine, segment, layer, tag, behaviorOnCollision); + } + + /// + /// Use the command "yield return newCoroutine().WaitUntilDone();" to start a new coroutine and pause the + /// current one until it finishes. + /// + /// The coroutine to pause for. + public static float WaitUntilDone(this IEnumerator newCoroutine) + { + return Timing.WaitUntilDone(newCoroutine); + } + + /// + /// Use the command "yield return newCoroutine().WaitUntilDone();" to start a new coroutine and pause the + /// current one until it finishes. + /// + /// The coroutine to pause for. + /// An optional tag to attach to the coroutine which can later be used to identify this coroutine. + public static float WaitUntilDone(this IEnumerator newCoroutine, string tag) + { + return Timing.WaitUntilDone(newCoroutine, tag); + } + + /// + /// Use the command "yield return newCoroutine().WaitUntilDone();" to start a new coroutine and pause the + /// current one until it finishes. + /// + /// The coroutine to pause for. + /// An optional layer to attach to the coroutine which can later be used to identify this coroutine. + public static float WaitUntilDone(this IEnumerator newCoroutine, int layer) + { + return Timing.WaitUntilDone(newCoroutine, layer); + } + + /// + /// Use the command "yield return newCoroutine().WaitUntilDone();" to start a new coroutine and pause the + /// current one until it finishes. + /// + /// The coroutine to pause for. + /// An optional layer to attach to the coroutine which can later be used to identify this coroutine. + /// An optional tag to attach to the coroutine which can later be used to identify this coroutine. + public static float WaitUntilDone(this IEnumerator newCoroutine, int layer, string tag) + { + return Timing.WaitUntilDone(newCoroutine, layer, tag); + } + + /// + /// Use the command "yield return newCoroutine().WaitUntilDone();" to start a new coroutine and pause the + /// current one until it finishes. + /// + /// The coroutine to pause for. + /// The segment that the new coroutine should run in. + public static float WaitUntilDone(this IEnumerator newCoroutine, Segment segment) + { + return Timing.WaitUntilDone(newCoroutine, segment); + } + + /// + /// Use the command "yield return newCoroutine().WaitUntilDone();" to start a new coroutine and pause the + /// current one until it finishes. + /// + /// The coroutine to pause for. + /// The segment that the new coroutine should run in. + /// An optional tag to attach to the coroutine which can later be used to identify this coroutine. + public static float WaitUntilDone(this IEnumerator newCoroutine, Segment segment, string tag) + { + return Timing.WaitUntilDone(newCoroutine, segment, tag); + } + + /// + /// Use the command "yield return newCoroutine().WaitUntilDone();" to start a new coroutine and pause the + /// current one until it finishes. + /// + /// The coroutine to pause for. + /// The segment that the new coroutine should run in. + /// An optional layer to attach to the coroutine which can later be used to identify this coroutine. + public static float WaitUntilDone(this IEnumerator newCoroutine, Segment segment, int layer) + { + return Timing.WaitUntilDone(newCoroutine, segment, layer); + } + + /// + /// Use the command "yield return newCoroutine().WaitUntilDone();" to start a new coroutine and pause the + /// current one until it finishes. + /// + /// The coroutine to pause for. + /// The segment that the new coroutine should run in. + /// An optional layer to attach to the coroutine which can later be used to identify this coroutine. + /// An optional tag to attach to the coroutine which can later be used to identify this coroutine. + public static float WaitUntilDone(this IEnumerator newCoroutine, Segment segment, int layer, string tag) + { + return Timing.WaitUntilDone(newCoroutine, segment, layer, tag); + } + } +} + +public static class MECExtensionMethods2 +{ + /// + /// Adds a delay to the beginning of this coroutine. + /// + /// The coroutine handle to act upon. + /// The number of seconds to delay this coroutine. + /// The modified coroutine handle. + public static IEnumerator Delay(this IEnumerator coroutine, float timeToDelay) + { + yield return MEC.Timing.WaitForSeconds(timeToDelay); + + while (coroutine.MoveNext()) + yield return coroutine.Current; + } + + /// + /// Adds a delay to the beginning of this coroutine until a function returns true. + /// + /// The coroutine handle to act upon. + /// The coroutine will be paused until this function returns true. + /// The modified coroutine handle. + public static IEnumerator Delay(this IEnumerator coroutine, System.Func condition) + { + while (!condition()) + yield return 0f; + + while (coroutine.MoveNext()) + yield return coroutine.Current; + } + + /// + /// Adds a delay to the beginning of this coroutine until a function returns true. + /// + /// The coroutine handle to act upon. + /// A variable that will be passed into the condition function each time it is tested. + /// The coroutine will be paused until this function returns true. + /// The modified coroutine handle. + public static IEnumerator Delay(this IEnumerator coroutine, T data, System.Func condition) + { + while (!condition(data)) + yield return 0f; + + while (coroutine.MoveNext()) + yield return coroutine.Current; + } + + /// + /// Adds a delay to the beginning of this coroutine in frames. + /// + /// The coroutine handle to act upon. + /// The number of frames to delay this coroutine. + /// The modified coroutine handle. + public static IEnumerator DelayFrames(this IEnumerator coroutine, int framesToDelay) + { + while (framesToDelay-- > 0) + yield return 0f; + + while (coroutine.MoveNext()) + yield return coroutine.Current; + } + + /// + /// Cancels this coroutine when the supplied game object is destroyed or made inactive. + /// + /// The coroutine handle to act upon. + /// The GameObject to test. + /// The modified coroutine handle. + public static IEnumerator CancelWith(this IEnumerator coroutine, GameObject gameObject) + { + while (MEC.Timing.MainThread != System.Threading.Thread.CurrentThread || + (gameObject && gameObject.activeInHierarchy && coroutine.MoveNext())) + yield return coroutine.Current; + } + + /// + /// Cancels this coroutine when either of the supplied game objects are destroyed or made inactive. + /// + /// The coroutine handle to act upon. + /// The first GameObject to test. + /// The second GameObject to test + /// The modified coroutine handle. + public static IEnumerator CancelWith(this IEnumerator coroutine, GameObject gameObject1, GameObject gameObject2) + { + while (MEC.Timing.MainThread != System.Threading.Thread.CurrentThread || (gameObject1 && gameObject1.activeInHierarchy && + gameObject2 && gameObject2.activeInHierarchy && coroutine.MoveNext())) + yield return coroutine.Current; + } + + /// + /// Cancels this coroutine when the supplied monobehavior is removed from its game object, or the game object is made inactive or destroyed. + /// + /// The coroutine handle to act upon. + /// The GameObject to test. + /// The modified coroutine handle. + public static IEnumerator CancelWith(this IEnumerator coroutine, T script) where T : MonoBehaviour + { + GameObject myGO = script.gameObject; + + while (MEC.Timing.MainThread != System.Threading.Thread.CurrentThread || + (myGO && myGO.activeInHierarchy && script != null && coroutine.MoveNext())) + yield return coroutine.Current; + } + + /// + /// Cancels this coroutine when the supplied function returns false. + /// + /// The coroutine handle to act upon. + /// The test function. True for continue, false to stop. + /// The modified coroutine handle. + public static IEnumerator CancelWith(this IEnumerator coroutine, System.Func condition) + { + if (condition == null) yield break; + + while (MEC.Timing.MainThread != System.Threading.Thread.CurrentThread || (condition() && coroutine.MoveNext())) + yield return coroutine.Current; + } + + /// + /// Cancels this coroutine when the supplied game object is destroyed, but only pauses it while it's inactive. + /// + /// The coroutine handle to act upon. + /// The GameObject to test. + /// The modified coroutine handle. + public static IEnumerator PauseWith(this IEnumerator coroutine, GameObject gameObject) + { + while (MEC.Timing.MainThread == System.Threading.Thread.CurrentThread && gameObject) + { + if (gameObject.activeInHierarchy) + { + if (coroutine.MoveNext()) + yield return coroutine.Current; + else + yield break; + } + else + { + yield return MEC.Timing.WaitForOneFrame; + } + } + } + + /// + /// Cancels this coroutine when either of the supplied game objects are destroyed, but only pauses them while they're inactive. + /// + /// The coroutine handle to act upon. + /// The first GameObject to test. + /// The second GameObject to test + /// The modified coroutine handle. + public static IEnumerator PauseWith(this IEnumerator coroutine, GameObject gameObject1, GameObject gameObject2) + { + while (MEC.Timing.MainThread == System.Threading.Thread.CurrentThread && gameObject1 && gameObject2) + { + if (gameObject1.activeInHierarchy && gameObject2.activeInHierarchy) + { + if (coroutine.MoveNext()) + yield return coroutine.Current; + else + yield break; + } + else + { + yield return MEC.Timing.WaitForOneFrame; + } + } + } + + /// + /// Cancels this coroutine when the supplied monobehavior is removed from its game object, or the game object is destroyed. Pauses the coroutine + /// if the game object or script is disabled. + /// + /// The coroutine handle to act upon. + /// The GameObject to test. + /// The modified coroutine handle. + public static IEnumerator PauseWith(this IEnumerator coroutine, T script) where T : MonoBehaviour + { + GameObject myGO = script.gameObject; + + while (MEC.Timing.MainThread == System.Threading.Thread.CurrentThread && myGO && myGO.GetComponent() != null) + { + if (myGO.activeInHierarchy && script.enabled) + { + if (coroutine.MoveNext()) + yield return coroutine.Current; + else + yield break; + } + else + { + yield return MEC.Timing.WaitForOneFrame; + } + } + } + + /// + /// Pauses this coroutine whenever the supplied function returns false. + /// + /// The coroutine handle to act upon. + /// The test function. True for continue, false to stop. + /// The modified coroutine handle. + public static IEnumerator PauseWith(this IEnumerator coroutine, System.Func condition) + { + if (condition == null) yield break; + + while (MEC.Timing.MainThread != System.Threading.Thread.CurrentThread || (condition() && coroutine.MoveNext())) + yield return coroutine.Current; + } + + /// + /// Watches the supplied handle and ends this coroutine when the other coroutine ends. + /// + /// The coroutine handle to act upon. + /// A handle to the coroutine that should be watched. + /// The modified coroutine handle. + public static IEnumerator KillWith(this IEnumerator coroutine, MEC.CoroutineHandle otherCoroutine) + { + while (otherCoroutine.IsRunning && coroutine.MoveNext()) + yield return coroutine.Current; + } + + /// + /// Runs the supplied coroutine immediately after this one. + /// + /// The coroutine handle to act upon. + /// The coroutine to run next. + /// The modified coroutine handle. + public static IEnumerator Append(this IEnumerator coroutine, IEnumerator nextCoroutine) + { + while (coroutine.MoveNext()) + yield return coroutine.Current; + + if (nextCoroutine == null) yield break; + + while (nextCoroutine.MoveNext()) + yield return nextCoroutine.Current; + } + + /// + /// Runs the supplied function immediately after this coroutine finishes. + /// + /// The coroutine handle to act upon. + /// The action to run after this coroutine finishes. + /// The modified coroutine handle. + public static IEnumerator Append(this IEnumerator coroutine, System.Action onDone) + { + while (coroutine.MoveNext()) + yield return coroutine.Current; + + if (onDone != null) + onDone(); + } + + /// + /// Runs the supplied coroutine immediately before this one. + /// + /// The coroutine handle to act upon. + /// The coroutine to run first. + /// The modified coroutine handle. + public static IEnumerator Prepend(this IEnumerator coroutine, IEnumerator lastCoroutine) + { + if (lastCoroutine != null) + while (lastCoroutine.MoveNext()) + yield return lastCoroutine.Current; + + while (coroutine.MoveNext()) + yield return coroutine.Current; + } + + /// + /// Runs the supplied function immediately before this coroutine starts. + /// + /// The coroutine handle to act upon. + /// The action to run before this coroutine starts. + /// The modified coroutine handle. + public static IEnumerator Prepend(this IEnumerator coroutine, System.Action onStart) + { + if (onStart != null) + onStart(); + + while (coroutine.MoveNext()) + yield return coroutine.Current; + } + + /// + /// Combines the this coroutine with another and runs them in a combined handle. + /// + /// The coroutine handle to act upon. + /// The coroutine handle to combine. + /// The modified coroutine handle. + public static IEnumerator Superimpose(this IEnumerator coroutineA, IEnumerator coroutineB) + { + return Superimpose(coroutineA, coroutineB, MEC.Timing.Instance); + } + + /// + /// Combines the this coroutine with another and runs them in a combined handle. + /// + /// The coroutine handle to act upon. + /// The coroutine handle to combine. + /// The timing instance that this will be run in, if not the default instance. + /// The modified coroutine handle. + public static IEnumerator Superimpose(this IEnumerator coroutineA, IEnumerator coroutineB, MEC.Timing instance) + { + while (coroutineA != null || coroutineB != null) + { + if (coroutineA != null && !(instance.localTime < coroutineA.Current) && !coroutineA.MoveNext()) + coroutineA = null; + + if (coroutineB != null && !(instance.localTime < coroutineB.Current) && !coroutineB.MoveNext()) + coroutineB = null; + + if ((coroutineA != null && float.IsNaN(coroutineA.Current)) || (coroutineB != null && float.IsNaN(coroutineB.Current))) + yield return float.NaN; + else if (coroutineA != null && coroutineB != null) + yield return coroutineA.Current < coroutineB.Current ? coroutineA.Current : coroutineB.Current; + else if (coroutineA == null && coroutineB != null) + yield return coroutineB.Current; + else if (coroutineA != null) + yield return coroutineA.Current; + } + } + + /// + /// Uses the passed in function to change the return values of this coroutine. + /// + /// The coroutine handle to act upon. + /// A function that takes the current return value and returns the new return. + /// The modified coroutine handle. + public static IEnumerator Hijack(this IEnumerator coroutine, System.Func newReturn) + { + if (newReturn == null) yield break; + + while (coroutine.MoveNext()) + yield return newReturn(coroutine.Current); + } + + /// + /// This will send any exceptions thrown in this coroutine to the exception handler you define. If you pass in null then your exceptions + /// will go unreported. NOTE: Any exceptions thrown will still terminate that coroutine function. The only way to avoid termination is + /// to catch the exception inside your function (avoiding any yield return statements). + /// + /// The coroutine handle to act upon. + /// The function to be called when an exception occurs. + /// The modified coroutine handle. + public static IEnumerator RerouteExceptions(this IEnumerator coroutine, System.Action exceptionHandler) + { + while(true) + { + try + { + if (!coroutine.MoveNext()) + yield break; + } + catch (System.Exception ex) + { + if (exceptionHandler != null) + exceptionHandler(ex); + yield break; + } + + yield return coroutine.Current; + } + } +} diff --git a/UnityClient/Assets/CraftingSystem/Plugins/Trinary Software/Timing.cs.meta b/UnityClient/Assets/CraftingSystem/Plugins/Trinary Software/Timing.cs.meta new file mode 100644 index 00000000..21e6c1bb --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Plugins/Trinary Software/Timing.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 2d2433f4570c1404da40af9ea0b12741 +timeCreated: 1510248004 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: a0f854455b10ba44d819f36586b0909b, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Scenes.meta b/UnityClient/Assets/CraftingSystem/Scenes.meta new file mode 100644 index 00000000..b4aea10a --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Scenes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 41866701d4d8a5b4ba8927fc302873e3 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Scenes/CreaftingSystem.unity b/UnityClient/Assets/CraftingSystem/Scenes/CreaftingSystem.unity new file mode 100644 index 00000000..48abc1a4 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Scenes/CreaftingSystem.unity @@ -0,0 +1,561 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 705507994} + m_IndirectSpecularColor: {r: 0.44657898, g: 0.4964133, b: 0.5748178, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_LightingSettings: {fileID: 0} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &705507993 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 705507995} + - component: {fileID: 705507994} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &705507994 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 705507993} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 1 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &705507995 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 705507993} + m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!1 &963194225 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 963194228} + - component: {fileID: 963194227} + - component: {fileID: 963194226} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &963194226 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 963194225} + m_Enabled: 1 +--- !u!20 &963194227 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 963194225} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &963194228 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 963194225} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1287183000 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1287183005} + - component: {fileID: 1287183004} + - component: {fileID: 1287183003} + - component: {fileID: 1287183002} + - component: {fileID: 1287183001} + m_Layer: 0 + m_Name: Cube (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1287183001 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1287183000} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a23889943e02d874ebf934cf7ac7d252, type: 3} + m_Name: + m_EditorClassIdentifier: + serializationData: + SerializedFormat: 2 + SerializedBytes: + ReferencedUnityObjects: + - {fileID: 11400000, guid: 2a7cee4836d4eee40ba3837f9b006d06, type: 2} + - {fileID: 11400000, guid: cc19dc84ceaaf9d4eb0920def9006ad5, type: 2} + SerializedBytesString: + Prefab: {fileID: 0} + PrefabModificationsReferencedUnityObjects: [] + PrefabModifications: [] + SerializationNodes: + - Name: _mats + Entry: 7 + Data: 0|System.Collections.Generic.Dictionary`2[[CraftingMaterial, Assembly-CSharp],[System.Int32, + mscorlib]], mscorlib + - Name: comparer + Entry: 7 + Data: 1|System.Collections.Generic.ObjectEqualityComparer`1[[CraftingMaterial, + Assembly-CSharp]], mscorlib + - Name: + Entry: 8 + Data: + - Name: + Entry: 12 + Data: 2 + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 10 + Data: 0 + - Name: $v + Entry: 3 + Data: 4 + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 10 + Data: 1 + - Name: $v + Entry: 3 + Data: 0 + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + _blacksmith: {fileID: 11400000, guid: 69ff576e1d1641746a0f5a6f0456a480, type: 2} + _ironSword: {fileID: 11400000, guid: 309ef7139efd0b84687af92b77cbb016, type: 2} +--- !u!65 &1287183002 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1287183000} + 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 &1287183003 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1287183000} + 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: 2100000, guid: 160ec6c9f3a8a60428a1c5111fd8a765, type: 2} + 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: 1 + 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 &1287183004 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1287183000} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1287183005 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1287183000} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -1.3030624, y: -1.92, z: -2.61} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1564852004 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1564852008} + - component: {fileID: 1564852007} + - component: {fileID: 1564852006} + - component: {fileID: 1564852005} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!65 &1564852005 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1564852004} + 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 &1564852006 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1564852004} + 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: 1 + 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 &1564852007 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1564852004} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1564852008 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1564852004} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -3.88, y: -4.52, z: 3.25} + m_LocalScale: {x: 25.965, y: 1, z: 19.815} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/UnityClient/Assets/CraftingSystem/Scenes/CreaftingSystem.unity.meta b/UnityClient/Assets/CraftingSystem/Scenes/CreaftingSystem.unity.meta new file mode 100644 index 00000000..e3d25af0 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Scenes/CreaftingSystem.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: e2b5300363bacf64298c0d5940751f65 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/ScriptableObjects.meta b/UnityClient/Assets/CraftingSystem/ScriptableObjects.meta new file mode 100644 index 00000000..cdba2f8a --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/ScriptableObjects.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ee7bc3792de5bae468b794e9c1b1c917 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/ScriptableObjects/CraftingMaterials.meta b/UnityClient/Assets/CraftingSystem/ScriptableObjects/CraftingMaterials.meta new file mode 100644 index 00000000..757f745f --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/ScriptableObjects/CraftingMaterials.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d42957b9a5127b44f87d019955aa001d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/ScriptableObjects/CraftingMaterials/Iron.asset b/UnityClient/Assets/CraftingSystem/ScriptableObjects/CraftingMaterials/Iron.asset new file mode 100644 index 00000000..ce4d0dc5 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/ScriptableObjects/CraftingMaterials/Iron.asset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:11e87e0e7ee4d423db113c46ece2299c1ff3b7d98c1cc8fffb8593ae371919ba +size 437 diff --git a/UnityClient/Assets/CraftingSystem/ScriptableObjects/CraftingMaterials/Iron.asset.meta b/UnityClient/Assets/CraftingSystem/ScriptableObjects/CraftingMaterials/Iron.asset.meta new file mode 100644 index 00000000..76cea41b --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/ScriptableObjects/CraftingMaterials/Iron.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cc19dc84ceaaf9d4eb0920def9006ad5 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/ScriptableObjects/Profession.meta b/UnityClient/Assets/CraftingSystem/ScriptableObjects/Profession.meta new file mode 100644 index 00000000..696b4d26 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/ScriptableObjects/Profession.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f5e3d7b6ef7e0844da99b397b0aac5a9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/ScriptableObjects/Profession/BlackSmith.meta b/UnityClient/Assets/CraftingSystem/ScriptableObjects/Profession/BlackSmith.meta new file mode 100644 index 00000000..5e92895b --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/ScriptableObjects/Profession/BlackSmith.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: dcfb43d3ce8b4724f8978bd5879c6d8d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/ScriptableObjects/Profession/BlackSmith/Blacksmith.asset b/UnityClient/Assets/CraftingSystem/ScriptableObjects/Profession/BlackSmith/Blacksmith.asset new file mode 100644 index 00000000..fa2f1894 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/ScriptableObjects/Profession/BlackSmith/Blacksmith.asset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bcb22feaed15bcb9e8c26c44c5a537f43ae51acb610bf269baddb7c5c8a24ac8 +size 483 diff --git a/UnityClient/Assets/CraftingSystem/ScriptableObjects/Profession/BlackSmith/Blacksmith.asset.meta b/UnityClient/Assets/CraftingSystem/ScriptableObjects/Profession/BlackSmith/Blacksmith.asset.meta new file mode 100644 index 00000000..2e210630 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/ScriptableObjects/Profession/BlackSmith/Blacksmith.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 69ff576e1d1641746a0f5a6f0456a480 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/ScriptableObjects/Profession/BlackSmith/CraftingMaterials.meta b/UnityClient/Assets/CraftingSystem/ScriptableObjects/Profession/BlackSmith/CraftingMaterials.meta new file mode 100644 index 00000000..f4a05565 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/ScriptableObjects/Profession/BlackSmith/CraftingMaterials.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b1f360978f5f26f4cb29de8523827189 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/ScriptableObjects/Profession/BlackSmith/CraftingMaterials/Flux.asset b/UnityClient/Assets/CraftingSystem/ScriptableObjects/Profession/BlackSmith/CraftingMaterials/Flux.asset new file mode 100644 index 00000000..5021bc5a --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/ScriptableObjects/Profession/BlackSmith/CraftingMaterials/Flux.asset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9203cb44fad6ee44264313f8326f10e461582bb77010679a31bb504bea3f83a2 +size 437 diff --git a/UnityClient/Assets/CraftingSystem/ScriptableObjects/Profession/BlackSmith/CraftingMaterials/Flux.asset.meta b/UnityClient/Assets/CraftingSystem/ScriptableObjects/Profession/BlackSmith/CraftingMaterials/Flux.asset.meta new file mode 100644 index 00000000..e1ff81ca --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/ScriptableObjects/Profession/BlackSmith/CraftingMaterials/Flux.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2a7cee4836d4eee40ba3837f9b006d06 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/ScriptableObjects/Profession/BlackSmith/Recipies.meta b/UnityClient/Assets/CraftingSystem/ScriptableObjects/Profession/BlackSmith/Recipies.meta new file mode 100644 index 00000000..8a6ab0a9 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/ScriptableObjects/Profession/BlackSmith/Recipies.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 45d003ff49f221646b268fb9a833f380 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/ScriptableObjects/Profession/BlackSmith/Recipies/Iron Sword.asset b/UnityClient/Assets/CraftingSystem/ScriptableObjects/Profession/BlackSmith/Recipies/Iron Sword.asset new file mode 100644 index 00000000..34c3a071 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/ScriptableObjects/Profession/BlackSmith/Recipies/Iron Sword.asset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5a3d5095de96c7e2d704835f2c9510d4685ac7c255271fda71e3f8b2d96f5843 +size 1674 diff --git a/UnityClient/Assets/CraftingSystem/ScriptableObjects/Profession/BlackSmith/Recipies/Iron Sword.asset.meta b/UnityClient/Assets/CraftingSystem/ScriptableObjects/Profession/BlackSmith/Recipies/Iron Sword.asset.meta new file mode 100644 index 00000000..c28d4f76 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/ScriptableObjects/Profession/BlackSmith/Recipies/Iron Sword.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 309ef7139efd0b84687af92b77cbb016 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Scripts.meta b/UnityClient/Assets/CraftingSystem/Scripts.meta new file mode 100644 index 00000000..438a6914 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b18a282004835eb41a25ca1087550985 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Scripts/Anvil.cs b/UnityClient/Assets/CraftingSystem/Scripts/Anvil.cs new file mode 100644 index 00000000..cf5afa1d --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Scripts/Anvil.cs @@ -0,0 +1,49 @@ +using Sirenix.OdinInspector; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace CraftingSystem +{ + public class Anvil : SerializedMonoBehaviour + { + [SerializeField] private Blacksmith _blacksmith; + [SerializeField] private Recipe _ironSword; + + //Replace / Link invetory here + [SerializeField] Dictionary _mats; + + [Button] + private void Craft() + { + bool canCraft = true; + + foreach (var mat in _ironSword.Mats) + { + if (!_mats.ContainsKey(mat.Key)) + { + canCraft = false; + } + else + { + if (mat.Value > _mats[mat.Key]) + { + canCraft = false; + } + } + } + if (canCraft) + { + _blacksmith.Craft(_ironSword); + + //Removing some of the materials after crafting is done + foreach (var mat in _ironSword.Mats) + { + _mats[mat.Key] -= mat.Value; + } + } + else + Debug.Log("Not enough materials"); + } + } +} diff --git a/UnityClient/Assets/CraftingSystem/Scripts/Anvil.cs.meta b/UnityClient/Assets/CraftingSystem/Scripts/Anvil.cs.meta new file mode 100644 index 00000000..a6c84d33 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Scripts/Anvil.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a23889943e02d874ebf934cf7ac7d252 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Scripts/BaseClasses.meta b/UnityClient/Assets/CraftingSystem/Scripts/BaseClasses.meta new file mode 100644 index 00000000..9197dd79 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Scripts/BaseClasses.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0358bb186e2e3b2459e6b5655eca4e98 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Scripts/BaseClasses/CraftingMaterial.cs b/UnityClient/Assets/CraftingSystem/Scripts/BaseClasses/CraftingMaterial.cs new file mode 100644 index 00000000..fff827ef --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Scripts/BaseClasses/CraftingMaterial.cs @@ -0,0 +1,14 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public abstract class CraftingMaterial : ScriptableObject +{ + [SerializeField] private string _name; + [SerializeField] private Sprite _icon; + [SerializeField] private int _id; + + public string Name { get => _name; } + public Sprite Icon { get => _icon; } + public int Id { get => _id; } +} diff --git a/UnityClient/Assets/CraftingSystem/Scripts/BaseClasses/CraftingMaterial.cs.meta b/UnityClient/Assets/CraftingSystem/Scripts/BaseClasses/CraftingMaterial.cs.meta new file mode 100644 index 00000000..312cc372 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Scripts/BaseClasses/CraftingMaterial.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 07ad12aabf42a004c9af2a8adf9e50e0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Scripts/BaseClasses/Profession.cs b/UnityClient/Assets/CraftingSystem/Scripts/BaseClasses/Profession.cs new file mode 100644 index 00000000..96dadf1f --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Scripts/BaseClasses/Profession.cs @@ -0,0 +1,20 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace CraftingSystem +{ + public abstract class Profession : ScriptableObject + { + //We keep track of all the recipies here and on the player we could make available + //just the ones that they learned ( same can be done with any profession created) + + //If a recipie should be removed it just needs to be removed from the list + [SerializeField] protected List recipies; + + public virtual void Craft(Recipe recipe) + { + Debug.Log("Crafted " + recipe.Name); + } + } +} diff --git a/UnityClient/Assets/CraftingSystem/Scripts/BaseClasses/Profession.cs.meta b/UnityClient/Assets/CraftingSystem/Scripts/BaseClasses/Profession.cs.meta new file mode 100644 index 00000000..22050aac --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Scripts/BaseClasses/Profession.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2965fbf3864555d48905c1919f5311c2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Scripts/BaseClasses/Recipe.cs b/UnityClient/Assets/CraftingSystem/Scripts/BaseClasses/Recipe.cs new file mode 100644 index 00000000..b6880e0f --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Scripts/BaseClasses/Recipe.cs @@ -0,0 +1,20 @@ +using Sirenix.OdinInspector; +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace CraftingSystem +{ + public abstract class Recipe : SerializedScriptableObject + { + [SerializeField] private string _name; + [SerializeField] private float _craftingTime; + [SerializeField] private Dictionary _matsCount; + + public string Name { get { return _name; } } + public Dictionary Mats { get { return _matsCount; } } + + public float CraftingTime { get => _craftingTime; } + } +} \ No newline at end of file diff --git a/UnityClient/Assets/CraftingSystem/Scripts/BaseClasses/Recipe.cs.meta b/UnityClient/Assets/CraftingSystem/Scripts/BaseClasses/Recipe.cs.meta new file mode 100644 index 00000000..26f5d24a --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Scripts/BaseClasses/Recipe.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 134f2b87ba3f8cd46bf71e9129b353bb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Scripts/Professions.meta b/UnityClient/Assets/CraftingSystem/Scripts/Professions.meta new file mode 100644 index 00000000..a028d752 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Scripts/Professions.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fe402d9324b0a804380df86338a35b08 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Scripts/Professions/Blacksmith.meta b/UnityClient/Assets/CraftingSystem/Scripts/Professions/Blacksmith.meta new file mode 100644 index 00000000..daab338b --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Scripts/Professions/Blacksmith.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0c663db5d77a4ea479be38a60a4d7327 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Scripts/Professions/Blacksmith/Blacksmith.cs b/UnityClient/Assets/CraftingSystem/Scripts/Professions/Blacksmith/Blacksmith.cs new file mode 100644 index 00000000..14abe0c9 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Scripts/Professions/Blacksmith/Blacksmith.cs @@ -0,0 +1,12 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace CraftingSystem +{ + [CreateAssetMenu(menuName = "CraftingSystem/Blacksmith")] + public class Blacksmith : Profession + { + + } +} diff --git a/UnityClient/Assets/CraftingSystem/Scripts/Professions/Blacksmith/Blacksmith.cs.meta b/UnityClient/Assets/CraftingSystem/Scripts/Professions/Blacksmith/Blacksmith.cs.meta new file mode 100644 index 00000000..ee3871cb --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Scripts/Professions/Blacksmith/Blacksmith.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b6a361d0640a9c84c8f54298c1187365 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Scripts/Professions/Blacksmith/CraftingMaterial.meta b/UnityClient/Assets/CraftingSystem/Scripts/Professions/Blacksmith/CraftingMaterial.meta new file mode 100644 index 00000000..c633cd3d --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Scripts/Professions/Blacksmith/CraftingMaterial.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bc625d9e395adbe47acb83ba2a27c79d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Scripts/Professions/Blacksmith/CraftingMaterial/Flux.cs b/UnityClient/Assets/CraftingSystem/Scripts/Professions/Blacksmith/CraftingMaterial/Flux.cs new file mode 100644 index 00000000..4c5ed79b --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Scripts/Professions/Blacksmith/CraftingMaterial/Flux.cs @@ -0,0 +1,9 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +[CreateAssetMenu(menuName = "Crafting/CraftingMats/Flux")] +public class Flux : CraftingMaterial +{ + +} diff --git a/UnityClient/Assets/CraftingSystem/Scripts/Professions/Blacksmith/CraftingMaterial/Flux.cs.meta b/UnityClient/Assets/CraftingSystem/Scripts/Professions/Blacksmith/CraftingMaterial/Flux.cs.meta new file mode 100644 index 00000000..3cdc04b1 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Scripts/Professions/Blacksmith/CraftingMaterial/Flux.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5fef4a4c49b105c43a38f35720308421 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Scripts/Professions/Blacksmith/CraftingMaterial/Iron.cs b/UnityClient/Assets/CraftingSystem/Scripts/Professions/Blacksmith/CraftingMaterial/Iron.cs new file mode 100644 index 00000000..9efc00fa --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Scripts/Professions/Blacksmith/CraftingMaterial/Iron.cs @@ -0,0 +1,9 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +[CreateAssetMenu(menuName ="Crafting/CraftingMats/Iron")] +public class Iron : CraftingMaterial +{ + +} diff --git a/UnityClient/Assets/CraftingSystem/Scripts/Professions/Blacksmith/CraftingMaterial/Iron.cs.meta b/UnityClient/Assets/CraftingSystem/Scripts/Professions/Blacksmith/CraftingMaterial/Iron.cs.meta new file mode 100644 index 00000000..a9f358e2 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Scripts/Professions/Blacksmith/CraftingMaterial/Iron.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 691362f5d8479a7409c56d96968bc96c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Scripts/Professions/Blacksmith/Recipie.meta b/UnityClient/Assets/CraftingSystem/Scripts/Professions/Blacksmith/Recipie.meta new file mode 100644 index 00000000..18df6d1d --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Scripts/Professions/Blacksmith/Recipie.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f75f34e4248c9ea4fb568d0b3ceb7cea +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Scripts/Professions/Blacksmith/Recipie/IronSword.meta b/UnityClient/Assets/CraftingSystem/Scripts/Professions/Blacksmith/Recipie/IronSword.meta new file mode 100644 index 00000000..749e3bcf --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Scripts/Professions/Blacksmith/Recipie/IronSword.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8bab937fe5f03e0458206931af01051e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Assets/CraftingSystem/Scripts/Professions/Blacksmith/Recipie/IronSword/IronSword.cs b/UnityClient/Assets/CraftingSystem/Scripts/Professions/Blacksmith/Recipie/IronSword/IronSword.cs new file mode 100644 index 00000000..4b90c8d3 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Scripts/Professions/Blacksmith/Recipie/IronSword/IronSword.cs @@ -0,0 +1,14 @@ +using Sirenix.OdinInspector; +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace CraftingSystem +{ + [CreateAssetMenu(menuName = "Crafting/Recipie/IronSword")] + public class IronSword : Recipe + { + + } +} diff --git a/UnityClient/Assets/CraftingSystem/Scripts/Professions/Blacksmith/Recipie/IronSword/IronSword.cs.meta b/UnityClient/Assets/CraftingSystem/Scripts/Professions/Blacksmith/Recipie/IronSword/IronSword.cs.meta new file mode 100644 index 00000000..40424b31 --- /dev/null +++ b/UnityClient/Assets/CraftingSystem/Scripts/Professions/Blacksmith/Recipie/IronSword/IronSword.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a00ca7a39b3fb8949bcc3bb49dd94f34 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityClient/Packages/manifest.json b/UnityClient/Packages/manifest.json index bbb2150a..da71cd44 100644 --- a/UnityClient/Packages/manifest.json +++ b/UnityClient/Packages/manifest.json @@ -1,11 +1,12 @@ { "dependencies": { - "com.unity.collab-proxy": "1.2.16", - "com.unity.ide.rider": "1.1.4", - "com.unity.ide.vscode": "1.2.2", - "com.unity.test-framework": "1.1.18", - "com.unity.textmeshpro": "2.1.1", - "com.unity.timeline": "1.2.17", + "com.unity.collab-proxy": "1.15.4", + "com.unity.ide.rider": "2.0.7", + "com.unity.ide.visualstudio": "2.0.12", + "com.unity.ide.vscode": "1.2.4", + "com.unity.test-framework": "1.1.29", + "com.unity.textmeshpro": "3.0.6", + "com.unity.timeline": "1.4.8", "com.unity.ugui": "1.0.0", "com.unity.modules.ai": "1.0.0", "com.unity.modules.androidjni": "1.0.0", diff --git a/UnityClient/Packages/packages-lock.json b/UnityClient/Packages/packages-lock.json index 92686fda..8413f104 100644 --- a/UnityClient/Packages/packages-lock.json +++ b/UnityClient/Packages/packages-lock.json @@ -1,21 +1,24 @@ { "dependencies": { "com.unity.collab-proxy": { - "version": "1.2.16", + "version": "1.15.4", "depth": 0, "source": "registry", - "dependencies": {}, + "dependencies": { + "com.unity.nuget.newtonsoft-json": "2.0.0", + "com.unity.services.core": "1.0.1" + }, "url": "https://packages.unity.com" }, "com.unity.ext.nunit": { - "version": "1.0.0", + "version": "1.0.6", "depth": 1, "source": "registry", "dependencies": {}, "url": "https://packages.unity.com" }, "com.unity.ide.rider": { - "version": "1.1.4", + "version": "2.0.7", "depth": 0, "source": "registry", "dependencies": { @@ -23,26 +26,51 @@ }, "url": "https://packages.unity.com" }, + "com.unity.ide.visualstudio": { + "version": "2.0.12", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.test-framework": "1.1.9" + }, + "url": "https://packages.unity.com" + }, "com.unity.ide.vscode": { - "version": "1.2.2", + "version": "1.2.4", "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, + "source": "registry", + "dependencies": { + "com.unity.modules.unitywebrequest": "1.0.0" + }, + "url": "https://packages.unity.com" + }, "com.unity.test-framework": { - "version": "1.1.18", + "version": "1.1.29", "depth": 0, "source": "registry", "dependencies": { - "com.unity.ext.nunit": "1.0.0", + "com.unity.ext.nunit": "1.0.6", "com.unity.modules.imgui": "1.0.0", "com.unity.modules.jsonserialize": "1.0.0" }, "url": "https://packages.unity.com" }, "com.unity.textmeshpro": { - "version": "2.1.1", + "version": "3.0.6", "depth": 0, "source": "registry", "dependencies": { @@ -51,10 +79,15 @@ "url": "https://packages.unity.com" }, "com.unity.timeline": { - "version": "1.2.17", + "version": "1.4.8", "depth": 0, "source": "registry", - "dependencies": {}, + "dependencies": { + "com.unity.modules.director": "1.0.0", + "com.unity.modules.animation": "1.0.0", + "com.unity.modules.audio": "1.0.0", + "com.unity.modules.particlesystem": "1.0.0" + }, "url": "https://packages.unity.com" }, "com.unity.ugui": { @@ -199,6 +232,18 @@ "depth": 0, "source": "builtin", "dependencies": { + "com.unity.modules.ui": "1.0.0", + "com.unity.modules.imgui": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0", + "com.unity.modules.uielementsnative": "1.0.0" + } + }, + "com.unity.modules.uielementsnative": { + "version": "1.0.0", + "depth": 1, + "source": "builtin", + "dependencies": { + "com.unity.modules.ui": "1.0.0", "com.unity.modules.imgui": "1.0.0", "com.unity.modules.jsonserialize": "1.0.0" } diff --git a/UnityClient/ProjectSettings/PackageManagerSettings.asset b/UnityClient/ProjectSettings/PackageManagerSettings.asset index e5c938b5..7658c792 100644 --- a/UnityClient/ProjectSettings/PackageManagerSettings.asset +++ b/UnityClient/ProjectSettings/PackageManagerSettings.asset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b67e5b5e8b74f980d8cb2bcf4b51384843fd5d6b4e4037dda68c3262df587deb -size 881 +oid sha256:a7dabba589abe7fc2b45bd3d3fba3fe9be97043492703f716da2d9131c13a807 +size 1003 diff --git a/UnityClient/ProjectSettings/ProjectSettings.asset b/UnityClient/ProjectSettings/ProjectSettings.asset index 4b33dac7..09c086a4 100644 --- a/UnityClient/ProjectSettings/ProjectSettings.asset +++ b/UnityClient/ProjectSettings/ProjectSettings.asset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4642f1130407ff863aabb1bfab8804a1572241db0975763fa8ec2aa28803facc -size 18851 +oid sha256:12a9080fe851824c18a70b0107c7e3379189ac33c216814a005b069b4bc28553 +size 19582 diff --git a/UnityClient/ProjectSettings/ProjectVersion.txt b/UnityClient/ProjectSettings/ProjectVersion.txt index 66132d0e..495468b1 100644 --- a/UnityClient/ProjectSettings/ProjectVersion.txt +++ b/UnityClient/ProjectSettings/ProjectVersion.txt @@ -1,2 +1,2 @@ -m_EditorVersion: 2019.4.13f1 -m_EditorVersionWithRevision: 2019.4.13f1 (518737b1de84) +m_EditorVersion: 2020.3.24f1 +m_EditorVersionWithRevision: 2020.3.24f1 (79c78de19888) diff --git a/UnityClient/ProjectSettings/VersionControlSettings.asset b/UnityClient/ProjectSettings/VersionControlSettings.asset new file mode 100644 index 00000000..6e1e4026 --- /dev/null +++ b/UnityClient/ProjectSettings/VersionControlSettings.asset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e7bda45bf7a394745fee1316e6c71fa676004d591ad1f3aa247fd3e4ceb86071 +size 188 diff --git a/UnityClient/UserSettings/EditorUserSettings.asset b/UnityClient/UserSettings/EditorUserSettings.asset new file mode 100644 index 00000000..efd0bc71 --- /dev/null +++ b/UnityClient/UserSettings/EditorUserSettings.asset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aef4f389f25145b504783fe58c6792b70897d9a6bb20ce90171bfb8bddca905f +size 849