51 lines
1.8 KiB
C#
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]);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|