Files
trail-into-darkness/Packages/ayellowpaper.serialized-dictionary/Runtime/Scripts/SerializedDictionary.cs
2026-04-02 07:22:33 +02:00

57 lines
1.4 KiB
C#

using System.Collections.Generic;
using System.Linq;
using UnityEngine;
namespace AYellowpaper.SerializedCollections
{
[System.Serializable]
public partial class SerializedDictionary<TKey, TValue> : Dictionary<TKey, TValue>, ISerializationCallbackReceiver
{
[SerializeField]
internal List<SerializedKeyValuePair<TKey, TValue>> _serializedList = new List<SerializedKeyValuePair<TKey, TValue>>();
#if UNITY_EDITOR
internal IKeyable LookupTable
{
get
{
if (_lookupTable == null)
_lookupTable = new DictionaryLookupTable<TKey, TValue>(this);
return _lookupTable;
}
}
private DictionaryLookupTable<TKey, TValue> _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
}
}
}