using System; using System.Collections.Generic; using System.Linq; using System.Text; using Snxxz.UI; namespace Snxxz.UI { public class SinglePackModel { public readonly PackType type; public int openGridCount { get; private set; } private Dictionary items = new Dictionary(); //key 物品位置索引 PackModelInterface modelInterface { get { return ModelCenter.Instance.GetModel(); } } PlayerPackModel playerPack { get { return ModelCenter.Instance.GetModel(); } } public SinglePackModel(PackType type) { this.type = type; } /// /// 增加和刷新数据 /// /// /// public void UpdateItem(ItemInfo itemInfo) { var index = itemInfo.ItemPlace; if (!items.ContainsKey(index)) { var itemModel = new ItemModel(type); itemModel.SetItemInfo(itemInfo); items.Add(index, itemModel); } else { items[index].SetItemInfo(itemInfo); } playerPack.SetItemGUIDDict(items[index]); } public void SetOpenGridCount(int count) { openGridCount = count; } public ItemModel GetItemByIndex(int index) { switch (type) { case PackType.JadeDynastyEquip: if (index >= 121) { index = index - 121; } break; } ItemModel item = null; items.TryGetValue(index, out item); return item; } public Dictionary GetAllItems() { return items; } /// /// 得到此ID物品的所有数量 /// /// public int GetItemCountByID(int itemId, out List list) { int count = 0; list = new List(); foreach (var model in items.Values) { if (model.itemId == itemId) { count += model.count; list.Add(model); } } return count; } /// /// 得到此ID物品的所有数量 /// /// public int GetItemCountByID(int itemId) { int count = 0; foreach (ItemModel model in items.Values) { if (model.itemId == itemId) { count += model.count; } } return count; } /// /// 得到此类型物品的所有数量 /// /// /// /// public int GetItemCountByType(int itemType, out List list) { int count = 0; list = new List(); foreach (ItemModel model in items.Values) { if (model.config.Type == itemType) { count += model.count; list.Add(model); } } return count; } /// /// 得到相同品质物品 /// /// /// public List GetItemsByQuality(int _quality) { var itemList = new List(); foreach (var value in items.Values) { if (value.config.ItemColor == _quality) { itemList.Add(value.itemId); } } return itemList; } /// /// 得到指定数量物品绑定和未绑定的索引 /// /// /// /// /// public List ItemIndexlist(int itemId, int needCount) { List itemIndexlist = new List(); List itemModellist = new List(); foreach (ItemModel model in items.Values) { if (model.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].itemPlace); count += itemModellist[i].count; } 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 items.Values) { if (model.itemId == itemId) { itemModellist.Add(model); } } int count = 0; for (int i = 0; i < itemModellist.Count; i++) { if (count < needCnt) { if (itemModellist[i].isBind == isBind) { itemIndexlist.Add(itemModellist[i].itemPlace); count += itemModellist[i].count; } } else { break; } } for (int i = 0; i < itemModellist.Count; i++) { if (count < needCnt) { if (itemModellist[i].isBind != isBind) { itemIndexlist.Add(itemModellist[i].itemPlace); count += itemModellist[i].count; } } else { break; } } return itemIndexlist; } private int CompareIsBind(ItemModel start, ItemModel end) { int startIsBind = start.isBind; int endIsBind = end.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 (!items.ContainsKey(i)) { return i; } } return i; } /// /// 得到剩余背包格子数 /// /// /// public int GetRemainGridCount() { return openGridCount - items.Count; } public void ClearItemModelByIndex(int index) { if (items.ContainsKey(index)) { items.Remove(index); } } public void ClearPackModel() { items.Clear(); } } }