using System.Collections.Generic; using System.Linq; using UnityEngine; namespace AYellowpaper.SerializedCollections { [System.Serializable] public partial class SerializedDictionary : Dictionary, ISerializationCallbackReceiver { [SerializeField] internal List> _serializedList = new List>(); #if UNITY_EDITOR internal IKeyable LookupTable { get { if (_lookupTable == null) _lookupTable = new DictionaryLookupTable(this); return _lookupTable; } } private DictionaryLookupTable _lookupTable; #endif public void OnAfterDeserialize() { Clear(); foreach (var kvp in _serializedList) { #if UNITY_EDITOR if (!ContainsKey(kvp.Key)) Add(kvp.Key, kvp.Value); #else Add(kvp.Key, kvp.Value); #endif } #if UNITY_EDITOR LookupTable.RecalculateOccurences(); #else _serializedList.Clear(); #endif } public void OnBeforeSerialize() { #if UNITY_EDITOR if (UnityEditor.BuildPipeline.isBuildingPlayer) LookupTable.RemoveDuplicates(); #endif } } }