diff --git a/Gameton-06/Assets/Gameton/Scripts/Common/SerializableDictionary.cs b/Gameton-06/Assets/Gameton/Scripts/Common/SerializableDictionary.cs new file mode 100644 index 00000000..f9d9325f --- /dev/null +++ b/Gameton-06/Assets/Gameton/Scripts/Common/SerializableDictionary.cs @@ -0,0 +1,49 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace TON +{ + [System.Serializable] + public class SerializableDictionary : Dictionary, ISerializationCallbackReceiver + { + [System.Serializable] + struct WrapValueClass + { + public TValue Value; + } + + [SerializeField] + private List keys = new List(); + + [SerializeField] + private List values = new List(); + + + // save the dictionary to lists + public void OnBeforeSerialize() + { + keys.Clear(); + values.Clear(); + foreach (KeyValuePair pair in this) + { + keys.Add(pair.Key); + values.Add(new WrapValueClass() { Value = pair.Value }); + } + } + + // load dictionary from lists + public void OnAfterDeserialize() + { + this.Clear(); + if (keys.Count > 0 && values.Count > 0) + { + if (keys.Count != values.Count) + throw new System.Exception(string.Format("there are {0} keys and {1} values after deserialization. Make sure that both key and value types are serializable.")); + + for (int i = 0; i < keys.Count; i++) + this.Add(keys[i], values[i].Value); + } + } + } +} diff --git a/Gameton-06/Assets/Gameton/Scripts/Common/SerializableDictionary.cs.meta b/Gameton-06/Assets/Gameton/Scripts/Common/SerializableDictionary.cs.meta new file mode 100644 index 00000000..da7ac19d --- /dev/null +++ b/Gameton-06/Assets/Gameton/Scripts/Common/SerializableDictionary.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3f0349e2dec5bf347a33316665351092 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: