using System.Collections.Generic; using System.Linq; using GFGGame; namespace GFGGame { public class BagDataManager : SingletonBase { private Dictionary _bagDataDic = new Dictionary();//背包数据字典 private List _bagDatas = new List();//背包数据列表 public List BagDatas { get { return _bagDatas; } } public void Clear() { _bagDatas.Clear(); _bagDataDic.Clear(); } public void Add(ItemData itemData) { if (!_bagDataDic.ContainsKey(itemData.id)) { _bagDataDic.Add(itemData.id, itemData); } else { _bagDataDic[itemData.id] = itemData; } SetBagDatas(); } public void Remove(int itemId) { if (_bagDataDic.ContainsKey(itemId)) { _bagDataDic.Remove(itemId); SetBagDatas(); } } private void SetBagDatas() { _bagDatas = _bagDataDic.Values.ToList(); _bagDatas.Sort((ItemData a, ItemData b) => { if (a.subType > b.subType) return -1; if (a.subType < b.subType) return 1; if (a.rarity > b.rarity) return -1; if (a.rarity < b.rarity) return 1; return a.id - b.id; }); } public int GetItemIndex(int itemId, int curSelectIndex) { if (_bagDataDic.Count == 0) return -1;//背包无数数据 if (itemId < 0 || curSelectIndex < 0) return 0;//未选中物品,默认选中第一个 if (!_bagDataDic.ContainsKey(itemId))//已选中物品但背包无数据 { if (curSelectIndex < _bagDatas.Count) { return curSelectIndex; } else { return _bagDatas.Count - 1; } } else//已选中物品且背包有数据 { for (int i = 0; i < _bagDatas.Count; i++) { if (_bagDatas[i].id == itemId) return i; } return 0; } } public Dictionary GetBagData() { return _bagDataDic; } } }