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<int, ItemModel> items = new Dictionary<int, ItemModel>(); //key 物品位置索引
|
|
PackModelInterface modelInterface { get { return ModelCenter.Instance.GetModel<PackModelInterface>(); } }
|
PlayerPackModel playerPack { get { return ModelCenter.Instance.GetModel<PlayerPackModel>(); } }
|
|
public SinglePackModel(PackType type)
|
{
|
this.type = type;
|
}
|
|
/// <summary>
|
/// 增加和刷新数据
|
/// </summary>
|
/// <param name="itemInfo"></param>
|
/// <param name="type"></param>
|
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<int, ItemModel> GetAllItems()
|
{
|
return items;
|
}
|
|
/// <summary>
|
/// 得到此ID物品的所有数量
|
/// </summary>
|
/// <returns></returns>
|
public int GetItemCountByID(int itemId, out List<ItemModel> list)
|
{
|
int count = 0;
|
list = new List<ItemModel>();
|
foreach (var model in items.Values)
|
{
|
if (model.itemId == itemId)
|
{
|
count += model.count;
|
list.Add(model);
|
}
|
}
|
|
return count;
|
}
|
|
/// <summary>
|
/// 得到此ID物品的所有数量
|
/// </summary>
|
/// <returns></returns>
|
public int GetItemCountByID(int itemId)
|
{
|
int count = 0;
|
foreach (ItemModel model in items.Values)
|
{
|
if (model.itemId == itemId)
|
{
|
count += model.count;
|
}
|
}
|
|
return count;
|
}
|
|
/// <summary>
|
/// 得到此类型物品的所有数量
|
/// </summary>
|
/// <param name="itemType"></param>
|
/// <param name="list"></param>
|
/// <returns></returns>
|
public int GetItemCountByType(int itemType, out List<ItemModel> list)
|
{
|
int count = 0;
|
list = new List<ItemModel>();
|
foreach (ItemModel model in items.Values)
|
{
|
if (model.config.Type == itemType)
|
{
|
count += model.count;
|
list.Add(model);
|
}
|
}
|
return count;
|
}
|
|
/// <summary>
|
/// 得到相同品质物品
|
/// </summary>
|
/// <param name="_quality"></param>
|
/// <returns></returns>
|
public List<int> GetItemsByQuality(int _quality)
|
{
|
var itemList = new List<int>();
|
foreach (var value in items.Values)
|
{
|
if (value.config.ItemColor == _quality)
|
{
|
itemList.Add(value.itemId);
|
}
|
}
|
|
return itemList;
|
}
|
|
/// <summary>
|
/// 得到指定数量物品绑定和未绑定的索引
|
/// </summary>
|
/// <param name="itemId"></param>
|
/// <param name="needCount"></param>
|
/// <param name="type"></param>
|
/// <returns></returns>
|
public List<int> ItemIndexlist(int itemId, int needCount)
|
{
|
List<int> itemIndexlist = new List<int>();
|
List<ItemModel> itemModellist = new List<ItemModel>();
|
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;
|
}
|
|
/// <summary>
|
/// 得到相同Id所有绑定 或不绑定的物品
|
/// </summary>
|
/// <param name="itemId"></param>
|
/// <param name="isBind"></param>
|
/// <returns></returns>
|
public List<int> ItemIndexlistByIsBind(int itemId, int needCnt, int isBind)
|
{
|
List<int> itemIndexlist = new List<int>();
|
List<ItemModel> itemModellist = new List<ItemModel>();
|
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;
|
}
|
|
/// <summary>
|
/// 得到第一个空格位置索引
|
/// </summary>
|
/// <param name="type"></param>
|
/// <returns></returns>
|
public int GetNullGridIndex()
|
{
|
int i = -1;
|
for (i = 0; i < openGridCount; i++)
|
{
|
if (!items.ContainsKey(i))
|
{
|
return i;
|
}
|
}
|
return i;
|
}
|
|
/// <summary>
|
/// 得到剩余背包格子数
|
/// </summary>
|
/// <param name="type"></param>
|
/// <returns></returns>
|
public int GetRemainGridCount()
|
{
|
return openGridCount - items.Count;
|
}
|
public void ClearItemModelByIndex(int index)
|
{
|
if (items.ContainsKey(index))
|
{
|
items.Remove(index);
|
}
|
}
|
|
public void ClearPackModel()
|
{
|
items.Clear();
|
}
|
}
|
}
|