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<int, ItemModel> packModelIndexDict = new Dictionary<int, ItemModel>(); //key 物品位置索引
|
|
PackModelInterface _modelInterface;
|
PackModelInterface modelInterface
|
{
|
get { return _modelInterface ?? (_modelInterface = ModelCenter.Instance.GetModel<PackModelInterface>()); }
|
}
|
|
PlayerPackModel _playerPack;
|
PlayerPackModel playerPack
|
{
|
get { return _playerPack ?? (_playerPack = ModelCenter.Instance.GetModel<PlayerPackModel>()); }
|
}
|
|
public SinglePackModel(PackType type)
|
{
|
ClearPackModel();
|
openGridCount = 0;
|
packType = type;
|
}
|
|
/// <summary>
|
/// 增加和刷新数据
|
/// </summary>
|
/// <param name="itemInfo"></param>
|
/// <param name="type"></param>
|
public void SetPackModel(ItemInfo itemInfo)
|
{
|
if (!packModelIndexDict.ContainsKey(itemInfo.ItemPlace))
|
{
|
ItemModel itemModel = new ItemModel(packType);
|
itemModel.SetItemInfo(itemInfo);
|
packModelIndexDict.Add(itemInfo.ItemPlace, itemModel);
|
}
|
else
|
{
|
packModelIndexDict[itemInfo.ItemPlace].SetItemInfo(itemInfo);
|
}
|
playerPack.SetItemGUIDDict(packModelIndexDict[itemInfo.ItemPlace]);
|
}
|
|
public void SetOpenGridCount(int count)
|
{
|
openGridCount = count;
|
}
|
|
|
public ItemModel GetItemModelByIndex(int index)
|
{
|
switch (packType)
|
{
|
case PackType.JadeDynastyEquip:
|
if (index >= 121)
|
{
|
index = index - 121;
|
}
|
break;
|
}
|
ItemModel itemModel = null;
|
packModelIndexDict.TryGetValue(index, out itemModel);
|
return itemModel;
|
}
|
|
public Dictionary<int, ItemModel> GetPackModelIndexDict()
|
{
|
return packModelIndexDict;
|
}
|
|
/// <summary>
|
/// 得到此ID物品的所有数量
|
/// </summary>
|
/// <returns></returns>
|
public int GetItemCountByID(int itemId,out List<ItemModel> list)
|
{
|
int count = 0;
|
list = new List<ItemModel>();
|
foreach (ItemModel model in packModelIndexDict.Values)
|
{
|
if (model.itemId == itemId)
|
{
|
count += model.itemInfo.ItemCount;
|
list.Add(model);
|
}
|
}
|
|
return count;
|
}
|
|
/// <summary>
|
/// 得到此ID物品的所有数量
|
/// </summary>
|
/// <returns></returns>
|
public int GetItemCountByID(int itemId)
|
{
|
int count = 0;
|
foreach (ItemModel model in packModelIndexDict.Values)
|
{
|
if (model.itemId == itemId)
|
{
|
count += model.itemInfo.ItemCount;
|
}
|
}
|
|
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 packModelIndexDict.Values)
|
{
|
if (model.config.Type == itemType)
|
{
|
count += model.itemInfo.ItemCount;
|
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 packModelIndexDict.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 packModelIndexDict.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].itemInfo.ItemCount;
|
}
|
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 packModelIndexDict.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].itemInfo.IsBind == isBind)
|
{
|
itemIndexlist.Add(itemModellist[i].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].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;
|
}
|
|
/// <summary>
|
/// 得到第一个空格位置索引
|
/// </summary>
|
/// <param name="type"></param>
|
/// <returns></returns>
|
public int GetNullGridIndex()
|
{
|
int i = -1;
|
for(i = 0; i < openGridCount; i++)
|
{
|
if(!packModelIndexDict.ContainsKey(i))
|
{
|
return i;
|
}
|
}
|
return i;
|
}
|
|
/// <summary>
|
/// 得到剩余背包格子数
|
/// </summary>
|
/// <param name="type"></param>
|
/// <returns></returns>
|
public int GetRemainGridCount()
|
{
|
return openGridCount - packModelIndexDict.Count;
|
}
|
public void ClearItemModelByIndex(int index)
|
{
|
if (packModelIndexDict.ContainsKey(index))
|
{
|
packModelIndexDict.Remove(index);
|
}
|
}
|
|
public void ClearPackModel()
|
{
|
packModelIndexDict.Clear();
|
}
|
}
|
}
|