using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using Snxxz.UI;
|
|
namespace Snxxz.UI
|
{
|
public class SinglePack
|
{
|
public readonly PackType type;
|
public int unlockedGridCount { get; private set; }
|
private Dictionary<int, ItemModel> items = new Dictionary<int, ItemModel>(); //key 物品位置索引
|
|
PackModel playerPack { get { return ModelCenter.Instance.GetModel<PackModel>(); } }
|
|
public SinglePack(PackType type)
|
{
|
this.type = type;
|
}
|
|
public ItemModel UpdateItem(ItemInfo itemInfo)
|
{
|
var index = itemInfo.index;
|
if (!items.ContainsKey(index))
|
{
|
var itemModel = new ItemModel(type);
|
itemModel.SetItemInfo(itemInfo);
|
items.Add(index, itemModel);
|
}
|
else
|
{
|
items[index].SetItemInfo(itemInfo);
|
}
|
|
return items[index];
|
}
|
|
public void RemoveItem(int index)
|
{
|
if (items.ContainsKey(index))
|
{
|
items.Remove(index);
|
}
|
}
|
|
public void SetOpenGridCount(int count)
|
{
|
unlockedGridCount = 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;
|
}
|
|
public List<ItemModel> GetItemsById(int itemId)
|
{
|
var list = new List<ItemModel>();
|
foreach (var model in items.Values)
|
{
|
if (model.itemId == itemId)
|
{
|
list.Add(model);
|
}
|
}
|
|
return list;
|
}
|
|
public int GetCountById(int itemId)
|
{
|
var count = 0;
|
foreach (var item in items.Values)
|
{
|
if (item.itemId == itemId)
|
{
|
count += item.count;
|
}
|
}
|
|
return count;
|
}
|
|
public List<ItemModel> GetItemsByType(int type)
|
{
|
var list = new List<ItemModel>();
|
foreach (var item in items.Values)
|
{
|
if (item.config.Type == type)
|
{
|
list.Add(item);
|
}
|
}
|
|
return list;
|
}
|
|
public int GetCountByType(int type)
|
{
|
var count = 0;
|
foreach (var item in items.Values)
|
{
|
if (item.config.Type == type)
|
{
|
count += item.count;
|
}
|
}
|
|
return count;
|
}
|
|
/// <summary>
|
/// 得到同一个id指定数量的物品格子序号
|
/// </summary>
|
/// <param name="itemId"></param>
|
/// <param name="needCount"></param>
|
/// <param name="type"></param>
|
/// <returns></returns>
|
public List<int> GetItemIndexsAppointedCount(int itemId, int needCount)
|
{
|
var goalItems = new List<ItemModel>();
|
foreach (var item in this.items.Values)
|
{
|
if (item.itemId == itemId)
|
{
|
goalItems.Add(item);
|
}
|
}
|
|
goalItems.Sort(CompareIsBind);
|
|
var itemIndexs = new List<int>();
|
var count = 0;
|
for (var i = 0; i < goalItems.Count; i++)
|
{
|
if (count < needCount)
|
{
|
itemIndexs.Add(goalItems[i].itemPlace);
|
count += goalItems[i].count;
|
}
|
else
|
{
|
break;
|
}
|
|
}
|
|
return itemIndexs;
|
}
|
|
/// <summary>
|
/// 得到同一个id物品指定数量的格子序号
|
/// </summary>
|
/// <param name="itemId"></param>
|
/// <param name="preferBind">优先条件(true 为绑定,false为不绑定)</param>
|
/// <returns></returns>
|
public List<int> GetItemIndexsAppointedCount(int itemId, int needCnt, bool preferBind)
|
{
|
var itemPool = new List<ItemModel>();
|
foreach (var item in items.Values)
|
{
|
if (item.itemId == itemId)
|
{
|
itemPool.Add(item);
|
}
|
}
|
|
var preferCondition = preferBind ? 1 : 0;
|
var indexs = new List<int>();
|
int count = 0;
|
for (int i = 0; count < needCnt && i < itemPool.Count; i++)
|
{
|
if (itemPool[i].isBind == preferCondition)
|
{
|
indexs.Add(itemPool[i].itemPlace);
|
count += itemPool[i].count;
|
}
|
}
|
|
for (int i = 0; count < needCnt && i < itemPool.Count; i++)
|
{
|
if (itemPool[i].isBind != preferCondition)
|
{
|
indexs.Add(itemPool[i].itemPlace);
|
count += itemPool[i].count;
|
}
|
}
|
|
return indexs;
|
}
|
|
private int CompareIsBind(ItemModel x, ItemModel y)
|
{
|
return -x.isBind.CompareTo(y.isBind);
|
}
|
|
/// <summary>
|
/// 得到第一个空格位置索引
|
/// </summary>
|
/// <param name="type"></param>
|
/// <returns></returns>
|
public int GetFirstEmptyGridIndex()
|
{
|
for (var index = 0; index < unlockedGridCount; index++)
|
{
|
if (!items.ContainsKey(index))
|
{
|
return index;
|
}
|
}
|
|
return -1;
|
}
|
|
public int GetEmptyGridCount()
|
{
|
return unlockedGridCount - items.Count;
|
}
|
|
public void Clear()
|
{
|
items.Clear();
|
}
|
|
}
|
}
|