diff --git a/Packages/SerializedDictionary-main/.gitignore b/Packages/SerializedDictionary-main/.gitignore
new file mode 100644
index 0000000..0f673c0
--- /dev/null
+++ b/Packages/SerializedDictionary-main/.gitignore
@@ -0,0 +1,2 @@
+.claude/
+.idea/
diff --git a/Packages/SerializedDictionary-main/.images/generators.png b/Packages/SerializedDictionary-main/.images/generators.png
new file mode 100644
index 0000000..3a98977
Binary files /dev/null and b/Packages/SerializedDictionary-main/.images/generators.png differ
diff --git a/Packages/SerializedDictionary-main/.images/menu.png b/Packages/SerializedDictionary-main/.images/menu.png
new file mode 100644
index 0000000..e297e39
Binary files /dev/null and b/Packages/SerializedDictionary-main/.images/menu.png differ
diff --git a/Packages/SerializedDictionary-main/.images/populate.png b/Packages/SerializedDictionary-main/.images/populate.png
new file mode 100644
index 0000000..48f8ee3
Binary files /dev/null and b/Packages/SerializedDictionary-main/.images/populate.png differ
diff --git a/Packages/SerializedDictionary-main/.images/populated.png b/Packages/SerializedDictionary-main/.images/populated.png
new file mode 100644
index 0000000..8461c7c
Binary files /dev/null and b/Packages/SerializedDictionary-main/.images/populated.png differ
diff --git a/Packages/SerializedDictionary-main/Editor.meta b/Packages/SerializedDictionary-main/Editor.meta
new file mode 100644
index 0000000..11e759b
--- /dev/null
+++ b/Packages/SerializedDictionary-main/Editor.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 43bd94852ddc6b34dbe9fec318fb54d8
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Packages/SerializedDictionary-main/Editor/AYellowpaper.SerializedCollections.Editor.asmdef b/Packages/SerializedDictionary-main/Editor/AYellowpaper.SerializedCollections.Editor.asmdef
new file mode 100644
index 0000000..723ecca
--- /dev/null
+++ b/Packages/SerializedDictionary-main/Editor/AYellowpaper.SerializedCollections.Editor.asmdef
@@ -0,0 +1,17 @@
+{
+ "name": "AYellowpaper.SerializedCollections.Editor",
+ "references": [
+ "GUID:d525ad6bd40672747bde77962f1c401e"
+ ],
+ "includePlatforms": [
+ "Editor"
+ ],
+ "excludePlatforms": [],
+ "allowUnsafeCode": false,
+ "overrideReferences": false,
+ "precompiledReferences": [],
+ "autoReferenced": true,
+ "defineConstraints": [],
+ "versionDefines": [],
+ "noEngineReferences": false
+}
\ No newline at end of file
diff --git a/Packages/SerializedDictionary-main/Editor/AYellowpaper.SerializedCollections.Editor.asmdef.meta b/Packages/SerializedDictionary-main/Editor/AYellowpaper.SerializedCollections.Editor.asmdef.meta
new file mode 100644
index 0000000..88570d1
--- /dev/null
+++ b/Packages/SerializedDictionary-main/Editor/AYellowpaper.SerializedCollections.Editor.asmdef.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 234340c04eed5674a988bc6ebde7d248
+AssemblyDefinitionImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Packages/SerializedDictionary-main/Editor/Assets.meta b/Packages/SerializedDictionary-main/Editor/Assets.meta
new file mode 100644
index 0000000..d638068
--- /dev/null
+++ b/Packages/SerializedDictionary-main/Editor/Assets.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: edb739dfb1824234681f6480c75cd523
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Packages/SerializedDictionary-main/Editor/Assets/BurgerMenu@2x.png b/Packages/SerializedDictionary-main/Editor/Assets/BurgerMenu@2x.png
new file mode 100644
index 0000000..775fc35
Binary files /dev/null and b/Packages/SerializedDictionary-main/Editor/Assets/BurgerMenu@2x.png differ
diff --git a/Packages/SerializedDictionary-main/Editor/Assets/BurgerMenu@2x.png.meta b/Packages/SerializedDictionary-main/Editor/Assets/BurgerMenu@2x.png.meta
new file mode 100644
index 0000000..05a5db3
--- /dev/null
+++ b/Packages/SerializedDictionary-main/Editor/Assets/BurgerMenu@2x.png.meta
@@ -0,0 +1,170 @@
+fileFormatVersion: 2
+guid: 8deddfed9f39d7740879d2cb0fcf7ce0
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMasterTextureLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 1
+ aniso: 1
+ mipBias: 0
+ wrapU: 1
+ wrapV: 1
+ wrapW: 0
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 0
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 2
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 8192
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 3
+ buildTarget: Standalone
+ maxTextureSize: 8192
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 3
+ buildTarget: iPhone
+ maxTextureSize: 8192
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 3
+ buildTarget: Android
+ maxTextureSize: 8192
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 3
+ buildTarget: Windows Store Apps
+ maxTextureSize: 8192
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 3
+ buildTarget: Server
+ maxTextureSize: 8192
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 3
+ buildTarget: WebGL
+ maxTextureSize: 8192
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID:
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ nameFileIdTable: {}
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Packages/SerializedDictionary-main/Editor/Assets/KeysGeneratorSelectorWindow.uss b/Packages/SerializedDictionary-main/Editor/Assets/KeysGeneratorSelectorWindow.uss
new file mode 100644
index 0000000..002c4ac
--- /dev/null
+++ b/Packages/SerializedDictionary-main/Editor/Assets/KeysGeneratorSelectorWindow.uss
@@ -0,0 +1,110 @@
+.sc-close-button {
+ background-image: resource('d_winbtn_win_close@2x');
+ width: 16px;
+ height: 16px;
+ position: absolute;
+ right: 2px;
+ top: 2px;
+ background-color: rgba(0, 0, 0, 0);
+ border-left-width: 0;
+ border-right-width: 0;
+ border-top-width: 0;
+ border-bottom-width: 0;
+}
+
+.sc-close-button:hover {
+ background-color: rgba(80, 80, 80, 255);
+}
+
+.sc-close-button:active {
+ background-color: rgba(0, 0, 0, 0);
+}
+
+.sc-text-toggle {
+ margin: 0;
+ padding: 0;
+ justify-content: center;
+}
+
+.sc-text-toggle:checked {
+ -unity-font-style: bold;
+}
+
+.sc-text-toggle > Label {
+ min-width: auto;
+ width: 100%;
+ height: 100%;
+}
+
+.sc-text-toggle > .unity-radio-button__input {
+ display: none;
+}
+
+.sc-title {
+ background-color: rgba(40, 40, 40, 0.35);
+ padding-left: 4px;
+ padding-right: 3px;
+ padding-top: 3px;
+ padding-bottom: 3px;
+ border-left-color: rgb(25, 25, 25);
+ border-right-color: rgb(25, 25, 25);
+ border-top-color: rgb(25, 25, 25);
+ border-bottom-color: rgb(25, 25, 25);
+ border-bottom-width: 1px;
+ -unity-font-style: bold;
+}
+
+.sc-generator-toggle {
+ padding-left: 3px;
+ padding-right: 3px;
+ padding-top: 3px;
+ padding-bottom: 3px;
+}
+
+.sc-generator-toggle:hover {
+ background-color: rgb(48, 48, 48);
+}
+
+.sc-generator-toggle:checked {
+ background-color: rgb(77, 77, 77);
+}
+
+.sc-modification-toggle {
+ flex-basis: 100%;
+ flex-shrink: 1;
+ border-left-color: rgb(41, 41, 41);
+ border-right-color: rgb(41, 41, 41);
+ border-top-color: rgb(41, 41, 41);
+ border-bottom-color: rgb(41, 41, 41);
+ border-left-width: 1px;
+ border-right-width: 1px;
+ border-top-width: 1px;
+ border-bottom-width: 1px;
+ -unity-font-style: normal;
+ -unity-text-align: middle-center;
+ padding-left: 2px;
+ padding-right: 2px;
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+
+.sc-modification-toggle:hover {
+ background-color: rgb(70, 70, 70);
+}
+
+.sc-modification-toggle:checked {
+ background-color: rgb(80, 80, 80);
+}
+
+.sc-radio-button-group {
+ padding: 0;
+ margin: 0;
+}
+
+.sc-radio-button-group > Label {
+ display: none;
+}
+
+#generators-group {
+ flex-direction: column;
+}
diff --git a/Packages/SerializedDictionary-main/Editor/Assets/KeysGeneratorSelectorWindow.uss.meta b/Packages/SerializedDictionary-main/Editor/Assets/KeysGeneratorSelectorWindow.uss.meta
new file mode 100644
index 0000000..c008067
--- /dev/null
+++ b/Packages/SerializedDictionary-main/Editor/Assets/KeysGeneratorSelectorWindow.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: df6c2ef835e40c94c976442569324029
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Packages/SerializedDictionary-main/Editor/Assets/KeysGeneratorSelectorWindow.uxml b/Packages/SerializedDictionary-main/Editor/Assets/KeysGeneratorSelectorWindow.uxml
new file mode 100644
index 0000000..657d0c8
--- /dev/null
+++ b/Packages/SerializedDictionary-main/Editor/Assets/KeysGeneratorSelectorWindow.uxml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Packages/SerializedDictionary-main/Editor/Assets/KeysGeneratorSelectorWindow.uxml.meta b/Packages/SerializedDictionary-main/Editor/Assets/KeysGeneratorSelectorWindow.uxml.meta
new file mode 100644
index 0000000..8802f1f
--- /dev/null
+++ b/Packages/SerializedDictionary-main/Editor/Assets/KeysGeneratorSelectorWindow.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 681c8a924c8b1e14b9fe53bb7397ec3d
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Packages/SerializedDictionary-main/Editor/Scripts.meta b/Packages/SerializedDictionary-main/Editor/Scripts.meta
new file mode 100644
index 0000000..0dc6807
--- /dev/null
+++ b/Packages/SerializedDictionary-main/Editor/Scripts.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 6398825db0c1d5348b5ec85b0c12d9c0
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Packages/SerializedDictionary-main/Editor/Scripts/Data.meta b/Packages/SerializedDictionary-main/Editor/Scripts/Data.meta
new file mode 100644
index 0000000..62e0a34
--- /dev/null
+++ b/Packages/SerializedDictionary-main/Editor/Scripts/Data.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 81bf46994f9232b4e8dcf467c109f046
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Packages/SerializedDictionary-main/Editor/Scripts/Data/ElementData.cs b/Packages/SerializedDictionary-main/Editor/Scripts/Data/ElementData.cs
new file mode 100644
index 0000000..a6ce4d1
--- /dev/null
+++ b/Packages/SerializedDictionary-main/Editor/Scripts/Data/ElementData.cs
@@ -0,0 +1,23 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+namespace AYellowpaper.SerializedCollections.Editor.Data
+{
+ [System.Serializable]
+ internal class ElementData
+ {
+ [SerializeField]
+ private bool _isListToggleActive = false;
+
+ public ElementSettings Settings { get; }
+ public bool ShowAsList => Settings.HasListDrawerToggle && IsListToggleActive;
+ public bool IsListToggleActive { get => _isListToggleActive; set => _isListToggleActive = value; }
+ public DisplayType EffectiveDisplayType => ShowAsList ? DisplayType.List : Settings.DisplayType;
+
+ public ElementData(ElementSettings elementSettings)
+ {
+ Settings = elementSettings;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Packages/SerializedDictionary-main/Editor/Scripts/Data/ElementData.cs.meta b/Packages/SerializedDictionary-main/Editor/Scripts/Data/ElementData.cs.meta
new file mode 100644
index 0000000..7222526
--- /dev/null
+++ b/Packages/SerializedDictionary-main/Editor/Scripts/Data/ElementData.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 650a80186cc93b54aa5627197c23ea6e
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Packages/SerializedDictionary-main/Editor/Scripts/Data/ElementSettings.cs b/Packages/SerializedDictionary-main/Editor/Scripts/Data/ElementSettings.cs
new file mode 100644
index 0000000..93c941c
--- /dev/null
+++ b/Packages/SerializedDictionary-main/Editor/Scripts/Data/ElementSettings.cs
@@ -0,0 +1,15 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+namespace AYellowpaper.SerializedCollections.Editor.Data
+{
+ public class ElementSettings
+ {
+ public const string DefaultName = "Not Set";
+
+ public string DisplayName { get; set; } = DefaultName;
+ public DisplayType DisplayType { get; set; } = DisplayType.PropertyNoLabel;
+ public bool HasListDrawerToggle { get; set; } = false;
+ }
+}
\ No newline at end of file
diff --git a/Packages/SerializedDictionary-main/Editor/Scripts/Data/ElementSettings.cs.meta b/Packages/SerializedDictionary-main/Editor/Scripts/Data/ElementSettings.cs.meta
new file mode 100644
index 0000000..7a0d0a2
--- /dev/null
+++ b/Packages/SerializedDictionary-main/Editor/Scripts/Data/ElementSettings.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 12edfc8006691b7498459540b832c5eb
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Packages/SerializedDictionary-main/Editor/Scripts/Data/PropertyData.cs b/Packages/SerializedDictionary-main/Editor/Scripts/Data/PropertyData.cs
new file mode 100644
index 0000000..208445e
--- /dev/null
+++ b/Packages/SerializedDictionary-main/Editor/Scripts/Data/PropertyData.cs
@@ -0,0 +1,36 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+namespace AYellowpaper.SerializedCollections.Editor.Data
+{
+ [System.Serializable]
+ internal class PropertyData
+ {
+ [SerializeField]
+ private ElementData _keyData;
+ [SerializeField]
+ private ElementData _valueData;
+ [SerializeField]
+ private bool _alwaysShowSearch = false;
+
+ public bool AlwaysShowSearch
+ {
+ get => _alwaysShowSearch;
+ set => _alwaysShowSearch = value;
+ }
+
+ public ElementData GetElementData(bool fieldType)
+ {
+ return fieldType == SCEditorUtility.KeyFlag ? _keyData : _valueData;
+ }
+
+ public PropertyData() : this(new ElementSettings(), new ElementSettings()) { }
+
+ public PropertyData(ElementSettings keySettings, ElementSettings valueSettings)
+ {
+ _keyData = new ElementData(keySettings);
+ _valueData = new ElementData(valueSettings);
+ }
+ }
+}
\ No newline at end of file
diff --git a/Packages/SerializedDictionary-main/Editor/Scripts/Data/PropertyData.cs.meta b/Packages/SerializedDictionary-main/Editor/Scripts/Data/PropertyData.cs.meta
new file mode 100644
index 0000000..5f840e4
--- /dev/null
+++ b/Packages/SerializedDictionary-main/Editor/Scripts/Data/PropertyData.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: ba2d792dfc6653e46bee7c027202acd3
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Packages/SerializedDictionary-main/Editor/Scripts/DisplayType.cs b/Packages/SerializedDictionary-main/Editor/Scripts/DisplayType.cs
new file mode 100644
index 0000000..d1b23ce
--- /dev/null
+++ b/Packages/SerializedDictionary-main/Editor/Scripts/DisplayType.cs
@@ -0,0 +1,13 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+namespace AYellowpaper.SerializedCollections.Editor
+{
+ public enum DisplayType
+ {
+ Property,
+ PropertyNoLabel,
+ List
+ }
+}
\ No newline at end of file
diff --git a/Packages/SerializedDictionary-main/Editor/Scripts/DisplayType.cs.meta b/Packages/SerializedDictionary-main/Editor/Scripts/DisplayType.cs.meta
new file mode 100644
index 0000000..193c32c
--- /dev/null
+++ b/Packages/SerializedDictionary-main/Editor/Scripts/DisplayType.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 37ee13dd67b545846b6b063923812943
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Packages/SerializedDictionary-main/Editor/Scripts/KeyListGenerators.meta b/Packages/SerializedDictionary-main/Editor/Scripts/KeyListGenerators.meta
new file mode 100644
index 0000000..aa37c6c
--- /dev/null
+++ b/Packages/SerializedDictionary-main/Editor/Scripts/KeyListGenerators.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: d74b279cd03ebfb4ca7d2606f3f4f11e
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Packages/SerializedDictionary-main/Editor/Scripts/KeyListGenerators/Implementors.meta b/Packages/SerializedDictionary-main/Editor/Scripts/KeyListGenerators/Implementors.meta
new file mode 100644
index 0000000..af99397
--- /dev/null
+++ b/Packages/SerializedDictionary-main/Editor/Scripts/KeyListGenerators/Implementors.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 10b0c99dadaea0e42b49e323700f2eb9
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Packages/SerializedDictionary-main/Editor/Scripts/KeyListGenerators/Implementors/EnumGenerator.cs b/Packages/SerializedDictionary-main/Editor/Scripts/KeyListGenerators/Implementors/EnumGenerator.cs
new file mode 100644
index 0000000..3696e20
--- /dev/null
+++ b/Packages/SerializedDictionary-main/Editor/Scripts/KeyListGenerators/Implementors/EnumGenerator.cs
@@ -0,0 +1,15 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+namespace AYellowpaper.SerializedCollections.KeysGenerators
+{
+ [KeyListGenerator("Populate Enum", typeof(System.Enum), false)]
+ public class EnumGenerator : KeyListGenerator
+ {
+ public override IEnumerable GetKeys(System.Type type)
+ {
+ return System.Enum.GetValues(type);
+ }
+ }
+}
\ No newline at end of file
diff --git a/Packages/SerializedDictionary-main/Editor/Scripts/KeyListGenerators/Implementors/EnumGenerator.cs.meta b/Packages/SerializedDictionary-main/Editor/Scripts/KeyListGenerators/Implementors/EnumGenerator.cs.meta
new file mode 100644
index 0000000..96b5615
--- /dev/null
+++ b/Packages/SerializedDictionary-main/Editor/Scripts/KeyListGenerators/Implementors/EnumGenerator.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: d639de5d36bbeea4496c97cc3f1f4e81
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Packages/SerializedDictionary-main/Editor/Scripts/KeyListGenerators/Implementors/IntRangeGenerator.cs b/Packages/SerializedDictionary-main/Editor/Scripts/KeyListGenerators/Implementors/IntRangeGenerator.cs
new file mode 100644
index 0000000..db0d0ac
--- /dev/null
+++ b/Packages/SerializedDictionary-main/Editor/Scripts/KeyListGenerators/Implementors/IntRangeGenerator.cs
@@ -0,0 +1,24 @@
+using System;
+using System.Collections;
+using UnityEngine;
+
+namespace AYellowpaper.SerializedCollections.KeysGenerators
+{
+ [KeyListGenerator("Int Range", typeof(int))]
+ public class IntRangeGenerator : KeyListGenerator
+ {
+ [SerializeField]
+ private int _startValue = 1;
+ [SerializeField]
+ private int _endValue = 10;
+
+ public override IEnumerable GetKeys(Type type)
+ {
+ int dir = Math.Sign(_endValue - _startValue);
+ dir = dir == 0 ? 1 : dir;
+ for (int i = _startValue; i != _endValue; i += dir)
+ yield return i;
+ yield return _endValue;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Packages/SerializedDictionary-main/Editor/Scripts/KeyListGenerators/Implementors/IntRangeGenerator.cs.meta b/Packages/SerializedDictionary-main/Editor/Scripts/KeyListGenerators/Implementors/IntRangeGenerator.cs.meta
new file mode 100644
index 0000000..efa32ed
--- /dev/null
+++ b/Packages/SerializedDictionary-main/Editor/Scripts/KeyListGenerators/Implementors/IntRangeGenerator.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: a4203f3a582fa874fb035633bd9892b4
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Packages/SerializedDictionary-main/Editor/Scripts/KeyListGenerators/Implementors/IntSteppingGenerator.cs b/Packages/SerializedDictionary-main/Editor/Scripts/KeyListGenerators/Implementors/IntSteppingGenerator.cs
new file mode 100644
index 0000000..c85f067
--- /dev/null
+++ b/Packages/SerializedDictionary-main/Editor/Scripts/KeyListGenerators/Implementors/IntSteppingGenerator.cs
@@ -0,0 +1,26 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+namespace AYellowpaper.SerializedCollections.KeysGenerators
+{
+ [KeyListGenerator("Int Stepping", typeof(int))]
+ public class IntSteppingGenerator : KeyListGenerator
+ {
+ [SerializeField]
+ private int _startIndex = 0;
+ [SerializeField]
+ private int _stepDistance = 10;
+ [SerializeField, Min(0)]
+ private int _stepCount = 1;
+
+ public override IEnumerable GetKeys(Type type)
+ {
+ for (int i = 0; i <= _stepCount; i++)
+ {
+ yield return _startIndex + i * _stepDistance;
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Packages/SerializedDictionary-main/Editor/Scripts/KeyListGenerators/Implementors/IntSteppingGenerator.cs.meta b/Packages/SerializedDictionary-main/Editor/Scripts/KeyListGenerators/Implementors/IntSteppingGenerator.cs.meta
new file mode 100644
index 0000000..14ac460
--- /dev/null
+++ b/Packages/SerializedDictionary-main/Editor/Scripts/KeyListGenerators/Implementors/IntSteppingGenerator.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 99302d4ff0ae27b4898ced57890ed32d
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Packages/SerializedDictionary-main/Editor/Scripts/KeyListGenerators/KeyListGenerator.cs b/Packages/SerializedDictionary-main/Editor/Scripts/KeyListGenerators/KeyListGenerator.cs
new file mode 100644
index 0000000..6ba1535
--- /dev/null
+++ b/Packages/SerializedDictionary-main/Editor/Scripts/KeyListGenerators/KeyListGenerator.cs
@@ -0,0 +1,11 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+namespace AYellowpaper.SerializedCollections.KeysGenerators
+{
+ public abstract class KeyListGenerator : ScriptableObject
+ {
+ public abstract IEnumerable GetKeys(System.Type type);
+ }
+}
\ No newline at end of file
diff --git a/Packages/SerializedDictionary-main/Editor/Scripts/KeyListGenerators/KeyListGenerator.cs.meta b/Packages/SerializedDictionary-main/Editor/Scripts/KeyListGenerators/KeyListGenerator.cs.meta
new file mode 100644
index 0000000..6b82cb3
--- /dev/null
+++ b/Packages/SerializedDictionary-main/Editor/Scripts/KeyListGenerators/KeyListGenerator.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 08149f25a1b9c5e48a224a7c4d31a154
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Packages/SerializedDictionary-main/Editor/Scripts/KeyListGenerators/KeyListGeneratorAttribute.cs b/Packages/SerializedDictionary-main/Editor/Scripts/KeyListGenerators/KeyListGeneratorAttribute.cs
new file mode 100644
index 0000000..c686cfa
--- /dev/null
+++ b/Packages/SerializedDictionary-main/Editor/Scripts/KeyListGenerators/KeyListGeneratorAttribute.cs
@@ -0,0 +1,19 @@
+using System;
+
+namespace AYellowpaper.SerializedCollections.KeysGenerators
+{
+ [AttributeUsage(AttributeTargets.Class)]
+ public class KeyListGeneratorAttribute : Attribute
+ {
+ public readonly string Name;
+ public readonly Type TargetType;
+ public readonly bool NeedsWindow;
+
+ public KeyListGeneratorAttribute(string name, Type targetType, bool needsWindow = true)
+ {
+ Name = name;
+ TargetType = targetType;
+ NeedsWindow = needsWindow;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Packages/SerializedDictionary-main/Editor/Scripts/KeyListGenerators/KeyListGeneratorAttribute.cs.meta b/Packages/SerializedDictionary-main/Editor/Scripts/KeyListGenerators/KeyListGeneratorAttribute.cs.meta
new file mode 100644
index 0000000..3ce5bfe
--- /dev/null
+++ b/Packages/SerializedDictionary-main/Editor/Scripts/KeyListGenerators/KeyListGeneratorAttribute.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 0f6065c936425ab478ecc8a8cf30d38f
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Packages/SerializedDictionary-main/Editor/Scripts/KeyListGenerators/KeyListGeneratorCache.cs b/Packages/SerializedDictionary-main/Editor/Scripts/KeyListGenerators/KeyListGeneratorCache.cs
new file mode 100644
index 0000000..0a98971
--- /dev/null
+++ b/Packages/SerializedDictionary-main/Editor/Scripts/KeyListGenerators/KeyListGeneratorCache.cs
@@ -0,0 +1,36 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using UnityEditor;
+using UnityEngine;
+
+namespace AYellowpaper.SerializedCollections.KeysGenerators
+{
+ public static class KeyListGeneratorCache
+ {
+ private static List _populators;
+ private static Dictionary> _populatorsByType;
+
+ static KeyListGeneratorCache()
+ {
+ _populators = new List();
+ _populatorsByType = new Dictionary>();
+ var populatorTypes = TypeCache.GetTypesDerivedFrom();
+ foreach (var populatorType in populatorTypes.Where(x => !x.IsAbstract))
+ {
+ var attributes = populatorType.GetCustomAttributes();
+ foreach (var attribute in attributes)
+ _populators.Add(new KeyListGeneratorData(attribute.Name, attribute.TargetType, populatorType, attribute.NeedsWindow));
+ }
+ }
+
+ public static IReadOnlyList GetPopulatorsForType(Type type)
+ {
+ if (!_populatorsByType.ContainsKey(type))
+ _populatorsByType.Add(type, new List(_populators.Where(x => x.TargetType.IsAssignableFrom(type))));
+ return _populatorsByType[type];
+ }
+ }
+}
\ No newline at end of file
diff --git a/Packages/SerializedDictionary-main/Editor/Scripts/KeyListGenerators/KeyListGeneratorCache.cs.meta b/Packages/SerializedDictionary-main/Editor/Scripts/KeyListGenerators/KeyListGeneratorCache.cs.meta
new file mode 100644
index 0000000..6756b4e
--- /dev/null
+++ b/Packages/SerializedDictionary-main/Editor/Scripts/KeyListGenerators/KeyListGeneratorCache.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 7936217ae19613d4bb5e46e73a4a587c
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Packages/SerializedDictionary-main/Editor/Scripts/KeyListGenerators/KeyListGeneratorData.cs b/Packages/SerializedDictionary-main/Editor/Scripts/KeyListGenerators/KeyListGeneratorData.cs
new file mode 100644
index 0000000..ab4ba6a
--- /dev/null
+++ b/Packages/SerializedDictionary-main/Editor/Scripts/KeyListGenerators/KeyListGeneratorData.cs
@@ -0,0 +1,20 @@
+using System;
+
+namespace AYellowpaper.SerializedCollections.KeysGenerators
+{
+ public class KeyListGeneratorData
+ {
+ public string Name { get; set; }
+ public Type TargetType { get; set; }
+ public Type GeneratorType { get; set; }
+ public bool NeedsWindow { get; set; }
+
+ public KeyListGeneratorData(string name, Type targetType, Type populatorType, bool needsWindow)
+ {
+ Name = name;
+ TargetType = targetType;
+ GeneratorType = populatorType;
+ NeedsWindow = needsWindow;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Packages/SerializedDictionary-main/Editor/Scripts/KeyListGenerators/KeyListGeneratorData.cs.meta b/Packages/SerializedDictionary-main/Editor/Scripts/KeyListGenerators/KeyListGeneratorData.cs.meta
new file mode 100644
index 0000000..0337c02
--- /dev/null
+++ b/Packages/SerializedDictionary-main/Editor/Scripts/KeyListGenerators/KeyListGeneratorData.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 8992145ced672cd46a425fb2590b80bb
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Packages/SerializedDictionary-main/Editor/Scripts/KeyListGenerators/KeyListGeneratorEditor.cs b/Packages/SerializedDictionary-main/Editor/Scripts/KeyListGenerators/KeyListGeneratorEditor.cs
new file mode 100644
index 0000000..0fe38bc
--- /dev/null
+++ b/Packages/SerializedDictionary-main/Editor/Scripts/KeyListGenerators/KeyListGeneratorEditor.cs
@@ -0,0 +1,26 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEditor;
+
+namespace AYellowpaper.SerializedCollections.KeysGenerators
+{
+ [CustomEditor(typeof(KeyListGenerator), true)]
+ public class KeyListGeneratorEditor : UnityEditor.Editor
+ {
+ public override void OnInspectorGUI()
+ {
+ var iterator = serializedObject.GetIterator();
+ if (iterator.Next(true))
+ {
+ // skip script name
+ iterator.NextVisible(true);
+ while (iterator.NextVisible(true))
+ {
+ EditorGUILayout.PropertyField(iterator);
+ }
+ }
+ serializedObject.ApplyModifiedProperties();
+ }
+ }
+}
\ No newline at end of file
diff --git a/Packages/SerializedDictionary-main/Editor/Scripts/KeyListGenerators/KeyListGeneratorEditor.cs.meta b/Packages/SerializedDictionary-main/Editor/Scripts/KeyListGenerators/KeyListGeneratorEditor.cs.meta
new file mode 100644
index 0000000..1e2d360
--- /dev/null
+++ b/Packages/SerializedDictionary-main/Editor/Scripts/KeyListGenerators/KeyListGeneratorEditor.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 211518bea98ede643af247b6295984bd
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Packages/SerializedDictionary-main/Editor/Scripts/KeyListGenerators/KeyListGeneratorSelectorWindow.cs b/Packages/SerializedDictionary-main/Editor/Scripts/KeyListGenerators/KeyListGeneratorSelectorWindow.cs
new file mode 100644
index 0000000..2ad0e77
--- /dev/null
+++ b/Packages/SerializedDictionary-main/Editor/Scripts/KeyListGenerators/KeyListGeneratorSelectorWindow.cs
@@ -0,0 +1,182 @@
+using System;
+using System.Collections.Generic;
+using UnityEditor;
+using UnityEngine;
+using UnityEngine.UIElements;
+
+namespace AYellowpaper.SerializedCollections.KeysGenerators
+{
+ public class KeyListGeneratorSelectorWindow : EditorWindow
+ {
+ [SerializeField]
+ private int _selectedIndex;
+ [SerializeField]
+ private ModificationType _modificationType;
+
+ private KeyListGenerator _generator;
+ private UnityEditor.Editor _editor;
+ private List _generatorsData;
+ private Type _targetType;
+ private int _undoStart;
+ private Dictionary _keysGenerators = new Dictionary();
+ private string _detailsText;
+
+ public event Action OnApply;
+
+ private void OnEnable()
+ {
+ VisualTreeAsset document = AssetDatabase.LoadAssetAtPath("Assets/Plugins/SerializedCollections/Editor/Assets/KeysGeneratorSelectorWindow.uxml");
+ var element = document.CloneTree();
+ element.style.height = new StyleLength(new Length(100, LengthUnit.Percent));
+ rootVisualElement.Add(element);
+ }
+
+ public void Initialize(IEnumerable generatorsData, Type type)
+ {
+ _targetType = type;
+ _selectedIndex = 0;
+ _modificationType = ModificationType.Add;
+ _undoStart = Undo.GetCurrentGroup();
+ _generatorsData = new List(generatorsData);
+ SetGeneratorIndex(0);
+ Undo.undoRedoPerformed += HandleUndoCallback;
+
+ rootVisualElement.Q