UP-Viagg-io/Viagg-io/Assets/Packages/MyBT/BT/SerializeableDictionary.cs

51 lines
1.8 KiB
C#

//============= Copyright (c) Ludic GmbH, All rights reserved. ==============
//
// Purpose: Part of the My Behaviour Tree Code
//
//=============================================================================
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
namespace MyBT {
/// <summary>
/// usage:
/// [System.Serializable] public class DictionaryOfStringAndInt : SerializableDictionary<string, int> {}
/// </summary>
[Serializable]
public class SerializableDictionary<TKey, TValue> : Dictionary<TKey, TValue>, ISerializationCallbackReceiver {
[SerializeField]
private List<TKey> keys = new List<TKey>();
[SerializeField]
private List<TValue> values = new List<TValue>();
// save the dictionary to lists
public void OnBeforeSerialize() {
keys.Clear();
values.Clear();
foreach(KeyValuePair<TKey, TValue> pair in this) {
// Debug.Log($"Serialize: {pair.Key} {pair.Value}");
keys.Add(pair.Key);
values.Add(pair.Value);
}
}
// load dictionary from lists
public void OnAfterDeserialize() {
this.Clear();
if(keys.Count != values.Count) {
Debug.LogError("there are {0} keys and {1} values after deserialization. Make sure that both key and value types are serializable.");
//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++) {
// Debug.Log($"Serialize: {keys[i]} {values[i]}");
this.Add(keys[i], values[i]);
}
}
}
}