forked from Shardstone/trail-into-darkness
57 lines
1.4 KiB
C#
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
|
|
}
|
|
}
|
|
}
|