Skip to content
Snippets Groups Projects
DataContainerGadgetCollection.cs 1.39 KiB
Newer Older
  • Learn to ignore specific revisions
  • 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]);
        }