using System; using System.Collections.Generic; using UnityEngine; namespace Flexalon { [Serializable] internal class FlexalonDict<K, V> : ISerializationCallbackReceiver { private Dictionary<K, V> _dict = new Dictionary<K, V>(); [SerializeField] private List<K> _keys = new List<K>(); [SerializeField] private List<V> _values = new List<V>(); public void Add(K key, V value) { _dict.Add(key, value); } public bool TryGetValue(K key, out V value) { return _dict.TryGetValue(key, out value); } public void Clear() { _dict.Clear(); } public int Count => _dict.Count; public void OnBeforeSerialize() { _keys.Clear(); _values.Clear(); foreach (var kvp in _dict) { _keys.Add(kvp.Key); _values.Add(kvp.Value); } } public void OnAfterDeserialize() { _dict.Clear(); for (int i = 0; i < _keys.Count; i++) { _dict.Add(_keys[i], _values[i]); } _keys.Clear(); _values.Clear(); } } }