using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
|
public class SinglePack
|
{
|
public readonly PackType type;
|
public int unlockedGridCount { get; private set; }
|
private Dictionary<int, ItemModel> items = new Dictionary<int, ItemModel>(); //key 物品位置索引
|
private Dictionary<int, List<int>> itemIDs = new Dictionary<int, List<int>>(); //key 物品ID:物品位置索引
|
public SinglePack(PackType type)
|
{
|
this.type = type;
|
}
|
|
public bool HasItem(int itemID)
|
{
|
return itemIDs.ContainsKey(itemID);
|
}
|
|
public ItemModel UpdateItem(ItemInfo itemInfo)
|
{
|
//字典索引为物品位置索引
|
var index = itemInfo.index;
|
if (!items.ContainsKey(index))
|
{
|
items.Add(index, new ItemModel(type, itemInfo));
|
}
|
else
|
{
|
//位置上的物品变化,先移除原来的
|
var itemID = items[index].itemId;
|
if (itemIDs.ContainsKey(itemID))
|
{
|
if (itemIDs[itemID].Contains(index))
|
{
|
if (itemIDs[itemID].Count == 1)
|
{
|
itemIDs.Remove(itemID);
|
}
|
else
|
{
|
itemIDs[itemID].Remove(index);
|
}
|
}
|
}
|
|
items[index].SetItemInfo(itemInfo);
|
}
|
|
//字典索引为物品ID
|
if (!itemIDs.ContainsKey(itemInfo.itemId))
|
{
|
itemIDs.Add(itemInfo.itemId, new List<int>());
|
}
|
|
if (!itemIDs[itemInfo.itemId].Contains(itemInfo.index))
|
{
|
itemIDs[itemInfo.itemId].Add(itemInfo.index);
|
}
|
|
return items[index];
|
}
|
|
public void RemoveItem(int index)
|
{
|
if (items.ContainsKey(index))
|
{
|
//字典索引为物品ID
|
var itemID = items[index].itemId;
|
if (itemIDs.ContainsKey(itemID))
|
{
|
if (itemIDs[itemID].Contains(index))
|
{
|
if (itemIDs[itemID].Count == 1)
|
{
|
itemIDs.Remove(itemID);
|
}
|
else
|
{
|
itemIDs[itemID].Remove(index);
|
}
|
}
|
}
|
|
items.Remove(index);
|
}
|
|
}
|
|
public void SetOpenGridCount(int count)
|
{
|
unlockedGridCount = count;
|
}
|
|
public ItemModel GetItemByIndex(int index)
|
{
|
ItemModel item = null;
|
items.TryGetValue(index, out item);
|
return item;
|
}
|
|
public Dictionary<int, ItemModel> GetAllItems()
|
{
|
return items;
|
}
|
|
/// <summary>
|
/// 获取指定ID的一个物品
|
/// </summary>
|
/// <param name="itemId"></param>
|
/// <param name="includeAuction"></param>
|
/// <returns></returns>
|
public ItemModel GetItemByID(int itemId, bool includeAuction = true)
|
{
|
//foreach (var item in items.Values)
|
//{
|
// if (!includeAuction && item.isAuction)
|
// {
|
// continue;
|
// }
|
|
// if (item.itemId == itemId)
|
// {
|
// return item;
|
// }
|
//}
|
|
//return null;
|
|
if (itemIDs.ContainsKey(itemId))
|
{
|
foreach (var index in itemIDs[itemId])
|
{
|
var item = items[index];
|
if (!includeAuction && item.isAuction)
|
{
|
continue;
|
}
|
return item;
|
}
|
}
|
return null;
|
}
|
|
/// <summary>
|
/// 获取包内的指定ID的所有物品
|
/// </summary>
|
/// <param name="itemId"></param>
|
/// <param name="includeAuction"></param>
|
/// <returns></returns>
|
public List<ItemModel> GetItemsById(int itemId, bool includeAuction = true)
|
{
|
var list = new List<ItemModel>();
|
//foreach (var item in items.Values)
|
//{
|
// if (!includeAuction && item.isAuction)
|
// {
|
// continue;
|
// }
|
|
// if (item.itemId == itemId)
|
// {
|
// list.Add(item);
|
// }
|
//}
|
|
if (itemIDs.ContainsKey(itemId))
|
{
|
foreach (var index in itemIDs[itemId])
|
{
|
var item = items[index];
|
if (!includeAuction && item.isAuction)
|
{
|
continue;
|
}
|
list.Add(item);
|
}
|
}
|
return list;
|
}
|
|
public int GetCountById(int itemId, bool includeAuction = true)
|
{
|
var count = 0;
|
//foreach (var item in items.Values)
|
//{
|
// if (!includeAuction && item.isAuction)
|
// {
|
// continue;
|
// }
|
|
// if (item.itemId == itemId)
|
// {
|
// count += item.count;
|
// }
|
//}
|
|
if (itemIDs.ContainsKey(itemId))
|
{
|
foreach (var index in itemIDs[itemId])
|
{
|
var item = items[index];
|
if (!includeAuction && item.isAuction)
|
{
|
continue;
|
}
|
count += item.count;
|
}
|
}
|
return count;
|
}
|
|
public List<ItemModel> GetItems(FilterParams filterParams)
|
{
|
var list = new List<ItemModel>();
|
foreach (var item in items.Values)
|
{
|
var levelValid = filterParams.levels == null || filterParams.levels.Contains(item.config.LV);
|
if (!levelValid)
|
{
|
continue;
|
}
|
|
var qualityValid = filterParams.qualitys == null || filterParams.qualitys.Contains(item.config.ItemColor);
|
if (!qualityValid)
|
{
|
continue;
|
}
|
|
var typeValid = filterParams.itemTypes == null || filterParams.itemTypes.Contains(item.config.Type);
|
if (!typeValid)
|
{
|
continue;
|
}
|
|
var equipTypeValid = filterParams.equipTypes == null || filterParams.equipTypes.Contains(item.config.EquipPlace);
|
if (!equipTypeValid)
|
{
|
continue;
|
}
|
|
var jobValid = filterParams.jobs == null || filterParams.jobs.Contains(item.config.JobLimit);
|
if (!jobValid)
|
{
|
continue;
|
}
|
|
//var auctionValid = filterParams.isAuction == item.isAuction;
|
//if (!auctionValid)
|
//{
|
// continue;
|
//}
|
|
var realmValid = filterParams.realmLimit == 0 || filterParams.realmLimit == item.config.RealmLimit;
|
if (!realmValid)
|
{
|
continue;
|
}
|
|
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, bool includeAuction = true)
|
{
|
//var goalItems = new List<ItemModel>();
|
//foreach (var item in this.items.Values)
|
//{
|
// if (!includeAuction && item.isAuction)
|
// {
|
// continue;
|
// }
|
|
// if (item.itemId == itemId)
|
// {
|
// goalItems.Add(item);
|
// }
|
//}
|
|
var itemIndexs = new List<int>();
|
var count = 0;
|
//for (var i = 0; i < goalItems.Count; i++)
|
//{
|
// if (count < needCount)
|
// {
|
// itemIndexs.Add(goalItems[i].gridIndex);
|
// count += goalItems[i].count;
|
// }
|
// else
|
// {
|
// break;
|
// }
|
|
//}
|
|
if (itemIDs.ContainsKey(itemId))
|
{
|
foreach (var index in itemIDs[itemId])
|
{
|
var item = items[index];
|
if (!includeAuction && item.isAuction)
|
{
|
continue;
|
}
|
if (count < needCount)
|
{
|
itemIndexs.Add(index);
|
count += item.count;
|
}
|
else
|
{
|
break;
|
}
|
}
|
}
|
return itemIndexs;
|
}
|
|
/// <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();
|
itemIDs.Clear();
|
}
|
|
public struct FilterParams
|
{
|
public List<int> levels;
|
public List<int> qualitys;
|
public List<int> itemTypes;
|
public List<int> equipTypes;
|
public int realmLimit;
|
public bool isAuction;
|
public List<int> jobs;
|
}
|
|
}
|