using System.Collections; using System.Collections.Generic; using UnityEngine; namespace KairoEngine.Core { // Todo: Refactor components to use lists instead of a dictionary // Todo: Refactor ScriptableObjects to use lists instead of a dictionary [System.Serializable] public class ObjectSerializer { //[HideInInspector] public Dictionary components = new Dictionary(); //[HideInInspector] public Dictionary scriptableObjects = new Dictionary(); public void Clear() { objectKeyList.Clear(); objectList.Clear(); gameObjectKeyList.Clear(); gameObjectList.Clear(); //components.Clear(); //scriptableObjects.Clear(); } #region Objects [SerializeField] private List objectKeyList = new List(); [SerializeField] private List objectList = new List(); private int GetObjectIndex(string key) { for (int i = 0; i < objectKeyList.Count; i++) { if(objectKeyList[i] == key) return i; } return -1; } public void AddObject(string key, object obj) { int index = GetObjectIndex(key); if(index == -1) { objectKeyList.Add(key); objectList.Add(obj); } else objectList[index] = obj; } public object GetObject(string key) { int index = GetObjectIndex(key); if(index == -1) return null; else if(index >= objectList.Count) return null; else return objectList[index]; } #endregion #region gameObjects [SerializeField] private List gameObjectKeyList = new List(); [SerializeField] private List gameObjectList = new List(); private int GetGameObjectIndex(string key) { for (int i = 0; i < gameObjectKeyList.Count; i++) { if(gameObjectKeyList[i] == key) return i; } return -1; } public void AddGameObject(string key, GameObject obj) { int index = GetGameObjectIndex(key); if(index == -1) { gameObjectKeyList.Add(key); gameObjectList.Add(obj); } else gameObjectList[index] = obj; } public GameObject GetGameObject(string key) { int index = GetGameObjectIndex(key); if(index == -1) return null; else if(index >= gameObjectList.Count) return null; else return gameObjectList[index]; } public int GameObjectCount() => gameObjectList.Count; #endregion } }