using System; using System.Collections.Generic; using UnityEngine; [Serializable] public class SceneInventoryDataManager : SceneBaseDataManager<IndexValuePair<int, EquippableItem>> { protected override string OBJECT_FOLDER_NAME { get { return "Inventory"; } } protected override string OBJECT_LIST_NAME { get { return "InventoryList"; } } protected new SceneBaseDataLoader<IndexValuePair<int, EquippableItemPrefabAsset>> DataLoader { get; set; } public new static SceneBaseDataManager<IndexValuePair<int, EquippableItem>> Instance; // { get; private set; } public override void Awake() { if (Instance == null) { Debug.Log("Create: " + gameObject); Instance = this; } else { Debug.Log(Instance); Debug.LogError(gameObject); Destroy(gameObject); } } public override void Start() { Debug.Log("Start SceneInventoryData manager"); //TaskUIManager.FindOrCreateInstance(); UiManager = InventoryUIManager.Instance; if (UiManager == null) throw new NullReferenceException("InventoryUIManager not found!!!"); //StaticDataList = (new InventoryDataListManager()).SetUiManager(ref inventoryManager); DynamicDataList = (new InventoryDataListManager()).SetUiManager(ref UiManager); DataLoader = new SceneInventoryDataLoader(OBJECT_LIST_NAME, OBJECT_FOLDER_NAME); base.Start(); } protected SceneBaseDataManager<IndexValuePair<int, EquippableItem>> GetObjectType() { return GameObject.FindObjectOfType<SceneInventoryDataManager>(); } protected SceneBaseDataManager<IndexValuePair<int, EquippableItem>> CreateInstance(ref GameObject managerGameObject) { return managerGameObject.AddComponent<SceneInventoryDataManager>(); } protected override void UseDefaultSettings() { return; // at the beginning we want to have inventory empty } protected override void UseDynamicSettings() { LoadDynamicData(); UiManager.SetList(DynamicDataList.GetList()); } // TODO whats with that /* public int AddToInventory(EquippableItem pickable) { if (this._items.Count <= MAX_ITEMS) { for (int slotNumber = 0; slotNumber < MAX_ITEMS; slotNumber++) { if (!this._items.ContainsKey(slotNumber)) { this._items[slotNumber] = pickable; return slotNumber; } } } return -1; } */ #region override load & save protected override bool LoadData(SceneElementTypeEnum type, ref DataListManager<IndexValuePair<int, EquippableItem>> dataListManager) { // 1. Convert EquippableItemPrefabAsset to EquippableItem list List<IndexValuePair<int, EquippableItem>> convertedList = new List<IndexValuePair<int, EquippableItem>>(); foreach (IndexValuePair<int, EquippableItemPrefabAsset> loadedEquippableItemPrefarbAssetElement in (List<IndexValuePair<int, EquippableItemPrefabAsset>>)DataLoader.LoadData(SceneElementTypeEnum.None)) { convertedList.Add(new IndexValuePair<int, EquippableItem>(loadedEquippableItemPrefarbAssetElement.Key, (EquippableItem)loadedEquippableItemPrefarbAssetElement.Value.EquippableItem)); } // 2. Pass loaded list to InventoryDataManager dataListManager.SetList(convertedList); return true; return false; } protected override bool SaveData(List<IndexValuePair<int, EquippableItem>> _elements, SceneElementTypeEnum type) { try { // 1. Convert EquippableItem to EquippableItemPrefabAsset list List<IndexValuePair<int, EquippableItemPrefabAsset>> convertedList = new List<IndexValuePair<int, EquippableItemPrefabAsset>>(); foreach (IndexValuePair<int, EquippableItem> itemElement in _elements) { convertedList.Add(new IndexValuePair<int, EquippableItemPrefabAsset>( itemElement.Key, new EquippableItemPrefabAsset( itemElement.Value.Name, itemElement.Value.ItemModel.name, new Vector3(0, 0, 0), itemElement.Value ) )); } // 2. Pass loaded list to InventoryDataManager DataLoader.SaveData(convertedList, type); return true; } catch (Exception e) { Debug.LogError(e.Message); } return false; } #endregion }