using System; using System.Linq; using System.Collections.Generic; using UnityEngine; [CreateAssetMenu(fileName = "DataContainerGadgetCollection", menuName = "ScriptableObjects/Spawn DataContainerGadgetCollection", order = 1)] public class DataContainerGadgetCollection : ScriptableObject, ISerializationCallbackReceiver { public Material[] Materials; public Sprite[] ButtonSprites; public string[] GadgetNames; public Dictionary<Gadget.GadgetIDs, DataContainerGadgetInit> DataContainerGadgetDict = new(); [SerializeField] private List<Gadget.GadgetIDs> GadgetType = new(); [SerializeField] private List<DataContainerGadgetInit> GadgetData = new(); public void OnBeforeSerialize() { var keys = DataContainerGadgetDict.Keys.ToArray(); var vals = DataContainerGadgetDict.Values.ToArray(); for (int i = 0; i < keys.Length; i++) { if (GadgetType.Count <= i) GadgetType.Add(keys[i]); else GadgetType[i] = keys[i]; if (GadgetData.Count <= i) GadgetData.Add(vals[i]); else GadgetData[i] = vals[i]; } } public void OnAfterDeserialize() { DataContainerGadgetDict = new(); for (int i = 0; i != Math.Min(GadgetType.Count, GadgetData.Count); i++) if (GadgetData[i] != null) DataContainerGadgetDict.Add(GadgetType[i], GadgetData[i]); } }