using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using GCGame.Table; public class PopAutoMedicItemPanel : MonoBehaviour { public static PopAutoMedicItemPanel Instance; private void Awake() { Instance = this; } private void OnDestroy() { Instance = null; } //4.红 5.蓝 private int _CurSelectType = -1; private List<int> SettingAutoItemIdList = new List<int>(); private ClientCustomData.AutoMedicInfoStruct atuoMedicInfo; public void ShowItemByType(int type) { atuoMedicInfo = GameManager.gameManager.PlayerDataPool.ClientCustomDateManager.PlayerCustomData.autoMedicInfo; switch (type) { case 4: { SettingAutoItemIdList = new List<int>(); SettingAutoItemIdList.AddRange(atuoMedicInfo.autoHpIdList); } break; default: { SettingAutoItemIdList = new List<int>(); SettingAutoItemIdList.AddRange(atuoMedicInfo.autoMpIdList); } break; } _CurSelectType = type; var autoUseItemTab = TableManager.GetAutoUseItem().Values; var itemIdList = new List<int>(); foreach(var item in autoUseItemTab) { if(item.SubClassID == type) { itemIdList.Add(item.Id); } } itemIdList.Sort(SortItemIdListByLevel); StartCoroutine(CraeteMedicItem(itemIdList)); } public int SortItemIdListByLevel(int itemA, int itemB) { if (itemA == itemB) return 0; var autoUseItemTabA = TableManager.GetAutoUseItemByID(itemA, 0); var autoUseItemTabB = TableManager.GetAutoUseItemByID(itemB, 0); var backPack = GameManager.gameManager.PlayerDataPool.BackPack; if (autoUseItemTabA == null || autoUseItemTabB == null) return itemA < itemB ? -1 : 1; var itemACount = backPack.GetItemCountByDataId(itemA); var itemBCount = backPack.GetItemCountByDataId(itemB); if (itemACount > 0 && itemBCount <= 0) { return -1; } else if (itemACount <= 0 && itemBCount > 0) { return 1; } else { return autoUseItemTabA.NeedLevel > autoUseItemTabB.NeedLevel ? 1 : -1; } } public GameObject itemPrefab; public Transform itemParent; private List<AutoMedicItem> autoMedicItemPrefabList = new List<AutoMedicItem>(); IEnumerator CraeteMedicItem(List<int> itemIdList) { yield return new WaitForEndOfFrame(); var _lackCount = 0; _lackCount = itemIdList.Count - autoMedicItemPrefabList.Count; if(_lackCount > 0) { for(int index = 0; index < _lackCount; index++) { var item = GameObject.Instantiate(itemPrefab); item.transform.SetParent(itemParent); item.transform.localScale = Vector3.one; item.transform.localPosition = Vector3.zero; item.transform.localRotation = Quaternion.Euler(Vector3.zero); autoMedicItemPrefabList.Add(item.GetComponent<AutoMedicItem>()); } }else { _lackCount = Mathf.Abs(_lackCount); for(int index = 0; index < autoMedicItemPrefabList.Count - _lackCount; index++) { autoMedicItemPrefabList[index].gameObject.SetActive(true); } for(int index = autoMedicItemPrefabList.Count - _lackCount; index < autoMedicItemPrefabList.Count; index++) { autoMedicItemPrefabList[index].gameObject.SetActive(false); } } for(int index = 0; index < itemIdList.Count; index++) { if(autoMedicItemPrefabList[index].gameObject.activeInHierarchy) { autoMedicItemPrefabList[index].InitItem(itemIdList[index], SettingAutoItemIdList.Contains(itemIdList[index])); } } yield break; } public void AddItemToItemDateIdList(int itemId) { if (!SettingAutoItemIdList.Contains(itemId)) SettingAutoItemIdList.Add(itemId); } public void RemoveFromItemDateIdList(int itemId) { if (SettingAutoItemIdList.Contains(itemId)) SettingAutoItemIdList.Remove(itemId); if (SettingAutoItemIdList.Count == 0) SettingAutoItemIdList.Add(-1); //默认添加一个,表示不是第一次打开 } private void OnDisable() { //删除-1的引用 if(SettingAutoItemIdList.Count > 1) { var count = SettingAutoItemIdList.Count - 1; for (int index = count; index >= 0; index--) { if (SettingAutoItemIdList[index] == -1) SettingAutoItemIdList.RemoveAt(index); } } //保存之前做一次排序 SettingAutoItemIdList.Sort(SortItemIdListByLevel); switch (_CurSelectType) { case 4: { atuoMedicInfo.autoHpIdList = new List<int>(); atuoMedicInfo.autoHpIdList.AddRange(SettingAutoItemIdList); } break; default: { atuoMedicInfo.autoMpIdList = new List<int>(); atuoMedicInfo.autoMpIdList.AddRange(SettingAutoItemIdList); } break; } GameManager.gameManager.PlayerDataPool.ClientCustomDateManager.SaveDataToServer(); } public void OnMaskClick() { UIManager.CloseUI(UIInfo.PopAutoMedicItemPanel); } }