using System; using System.Collections.Generic; using System.Linq; using System.Text; using Snxxz.UI; namespace Snxxz.UI { public class SinglePackModel { public PackType packType { get; private set; } public int openGridCount { get; private set; } private Dictionary packModelIndexDict = new Dictionary(); //key 物品位置索引 PackModelInterface _modelInterface; PackModelInterface modelInterface { get { return _modelInterface ?? (_modelInterface = ModelCenter.Instance.GetModel()); } } PlayerPackModel _playerPack; PlayerPackModel playerPack { get { return _playerPack ?? (_playerPack = ModelCenter.Instance.GetModel()); } } public SinglePackModel(PackType type) { ClearPackModel(); openGridCount = 0; packType = type; } /// /// 增加和刷新数据 /// /// /// public void SetPackModel(ItemInfo itemInfo) { if (!packModelIndexDict.ContainsKey(itemInfo.ItemPlace)) { ItemModel itemModel = new ItemModel(packType); itemModel.SetItemModel(itemInfo); packModelIndexDict.Add(itemInfo.ItemPlace, itemModel); } else { packModelIndexDict[itemInfo.ItemPlace].SetItemModel(itemInfo); } playerPack.SetItemGUIDDict(packModelIndexDict[itemInfo.ItemPlace]); } public void SetOpenGridCount(int count) { openGridCount = count; } public ItemModel GetItemModelByIndex(int index) { ItemModel itemModel = null; packModelIndexDict.TryGetValue(index, out itemModel); return itemModel; } public Dictionary GetPackModelIndexDict() { return packModelIndexDict; } /// /// 得到此ID物品的所有数量 /// /// public int GetItemCountByID(int itemId,out List list) { int count = 0; list = new List(); foreach (ItemModel model in packModelIndexDict.Values) { if (model.itemInfo.ItemID == itemId) { count += model.itemInfo.ItemCount; list.Add(model); } } return count; } /// /// 得到此ID物品的所有数量 /// /// public int GetItemCountByID(int itemId) { int count = 0; foreach (ItemModel model in packModelIndexDict.Values) { if (model.itemInfo.ItemID == itemId) { count += model.itemInfo.ItemCount; } } return count; } /// /// 得到此类型物品的所有数量 /// /// /// /// public int GetItemCountByType(int itemType, out List list) { int count = 0; list = new List(); foreach (ItemModel model in packModelIndexDict.Values) { if (model.chinItemModel.Type == itemType) { count += model.itemInfo.ItemCount; list.Add(model); } } return count; } /// /// 得到相同品质物品 /// /// /// public List GetItemsByQuality(int _quality) { var itemList = new List(); foreach (var value in packModelIndexDict.Values) { if (value.chinItemModel.ItemColor == _quality) { itemList.Add(value.itemInfo.ItemID); } } return itemList; } /// /// 得到指定数量物品绑定和未绑定的索引 /// /// /// /// /// public List ItemIndexlist(int itemId, int needCount) { List itemIndexlist = new List(); List itemModellist = new List(); foreach (ItemModel model in packModelIndexDict.Values) { if (model.itemInfo.ItemID == itemId) { itemModellist.Add(model); } } itemModellist.Sort(CompareIsBind); int i = 0; int count = 0; for (i = 0; i < itemModellist.Count; i++) { if(count < needCount) { itemIndexlist.Add(itemModellist[i].itemInfo.ItemPlace); count += itemModellist[i].itemInfo.ItemCount; } else { break; } } return itemIndexlist; } /// /// 得到相同Id所有绑定 或不绑定的物品 /// /// /// /// public List ItemIndexlistByIsBind(int itemId,int needCnt,int isBind) { List itemIndexlist = new List(); List itemModellist = new List(); foreach (ItemModel model in packModelIndexDict.Values) { if (model.itemInfo.ItemID == itemId) { itemModellist.Add(model); } } int count = 0; for (int i = 0; i < itemModellist.Count; i++) { if(count < needCnt) { if(itemModellist[i].itemInfo.IsBind == isBind) { itemIndexlist.Add(itemModellist[i].itemInfo.ItemPlace); count += itemModellist[i].itemInfo.ItemCount; } } else { break; } } for (int i = 0; i < itemModellist.Count; i++) { if (count < needCnt) { if (itemModellist[i].itemInfo.IsBind != isBind) { itemIndexlist.Add(itemModellist[i].itemInfo.ItemPlace); count += itemModellist[i].itemInfo.ItemCount; } } else { break; } } return itemIndexlist; } private int CompareIsBind(ItemModel start, ItemModel end) { int startIsBind = start.itemInfo.IsBind; int endIsBind = end.itemInfo.IsBind; if (startIsBind.CompareTo(endIsBind) != 0) return -startIsBind.CompareTo(endIsBind); return 0; } /// /// 得到第一个空格位置索引 /// /// /// public int GetNullGridIndex() { int i = -1; for(i = 0; i < openGridCount; i++) { if(!packModelIndexDict.ContainsKey(i)) { return i; } } return i; } /// /// 得到剩余背包格子数 /// /// /// public int GetRemainGridCount() { return openGridCount - packModelIndexDict.Count; } public void ClearItemModelByIndex(int index) { if (packModelIndexDict.ContainsKey(index)) { packModelIndexDict.Remove(index); } } public void ClearPackModel() { packModelIndexDict.Clear(); } } }