using System; using System.Collections.Generic; using UnityEditor; using UnityEngine; public class EquipmentDataManager : SceneBaseDataManager<IndexValuePair<int, EquippableItem>> { protected override string OBJECT_FOLDER_NAME { get { return "Equipment"; } } protected override string OBJECT_LIST_NAME { get { return "EquipmentList"; } } protected new SceneBaseDataLoader<IndexValuePair<EquipmentPanelSlotsTypeEnum, EquippableItemPrefabAsset>> DataLoader { get; set; } [SerializeField] public List<IndexValuePair<EquipmentPanelSlotsTypeEnum, EquippableItemPrefabAsset>> ElementsToBuildOnSceneList = new List<IndexValuePair<EquipmentPanelSlotsTypeEnum, EquippableItemPrefabAsset>>(); [SerializeField] List<IndexValuePair<int, EquippableItem>> convertedData = new List<IndexValuePair<int, EquippableItem>>(); 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 SceneEquipmentData manager"); //TaskUIManager.FindOrCreateInstance(); UiManager = EquipmentUIManager.Instance; if (UiManager == null) throw new NullReferenceException("EquipmentUIManager not found!!!"); //StaticDataList = (new EquipmentDataListManager()).SetUiManager(ref taskManager); DynamicDataList = (new EquipmentDataListManager()).SetUiManager(ref UiManager); DataLoader = new EquipmentDataLoader(OBJECT_LIST_NAME, OBJECT_FOLDER_NAME); ((EquipmentDataListManager)DynamicDataList).InitEquipment(); base.Start(); } protected SceneBaseDataManager<IndexValuePair<int, EquippableItem>> GetObjectType() { return GameObject.FindObjectOfType<EquipmentDataManager>(); } protected SceneBaseDataManager<IndexValuePair<int, EquippableItem>> CreateInstance(ref GameObject managerGameObject) { return managerGameObject.AddComponent<EquipmentDataManager>(); } protected override void UseDefaultSettings() { foreach (IndexValuePair<EquipmentPanelSlotsTypeEnum, EquippableItemPrefabAsset> asset in ElementsToBuildOnSceneList) { convertedData.Add( new IndexValuePair<int, EquippableItem>((int)asset.Key, (EquippableItem)asset.Value.EquippableItem) ); } DynamicDataList.SetList(convertedData); UiManager.SetList(convertedData); } protected override void UseDynamicSettings() { LoadDynamicData(); UiManager.SetList(DynamicDataList.GetList()); } #region override load & save protected override bool LoadData(SceneElementTypeEnum type, ref DataListManager<IndexValuePair<int, EquippableItem>> dataListManager) { try { // 1. Convert EquippableItemPrefabAsset to EquippableItem list List<IndexValuePair<int, EquippableItem>> convertedList = new List<IndexValuePair<int, EquippableItem>>(); foreach (IndexValuePair<EquipmentPanelSlotsTypeEnum, EquippableItemPrefabAsset> loadedEquippableItemPrefarbAssetElement in (List<IndexValuePair<EquipmentPanelSlotsTypeEnum, EquippableItemPrefabAsset>>)DataLoader.LoadData(type)) { if(loadedEquippableItemPrefarbAssetElement.Value != null) convertedList.Add(new IndexValuePair<int, EquippableItem>((int)loadedEquippableItemPrefarbAssetElement.Key, (EquippableItem)loadedEquippableItemPrefarbAssetElement.Value.EquippableItem)); else convertedList.Add(new IndexValuePair<int, EquippableItem>((int)loadedEquippableItemPrefarbAssetElement.Key, null)); } // 2. Pass loaded list to InventoryDataManager dataListManager.SetList(convertedList); return true; } catch (Exception e) { Debug.LogError(e.Message); } return false; } protected override bool SaveData(List<IndexValuePair<int, EquippableItem>> _elements, SceneElementTypeEnum type) { try { // 1. Convert EquippableItem to EquippableItemPrefabAsset list List<IndexValuePair<EquipmentPanelSlotsTypeEnum, EquippableItemPrefabAsset>> convertedList = new List<IndexValuePair<EquipmentPanelSlotsTypeEnum, EquippableItemPrefabAsset>>(); foreach (IndexValuePair<int, EquippableItem> itemElement in _elements) { if(itemElement.Value) convertedList.Add(new IndexValuePair<EquipmentPanelSlotsTypeEnum, EquippableItemPrefabAsset>( (EquipmentPanelSlotsTypeEnum)itemElement.Key, new EquippableItemPrefabAsset( itemElement.Value.Name, itemElement.Value.ItemModel.name, new Vector3(0, 0, 0), itemElement.Value ) )); else convertedList.Add(new IndexValuePair<EquipmentPanelSlotsTypeEnum, EquippableItemPrefabAsset>((EquipmentPanelSlotsTypeEnum)itemElement.Key, null)); } // 2. Pass loaded list to InventoryDataManager DataLoader.SaveData(convertedList, type); return true; } catch (Exception e) { Debug.LogError(e.Message); } return false; } #endregion }