/// <summary>
/// Can the item be moved from its current collection to one of the equippable item collections?
/// </summary>
/// <param name="itemInfo">The item info to move.</param>
/// <param name="equippableCollectionIndex">The index of the equippable item collection.</param>
/// <param name="slotIndex">The slot Index if the equippable is an item slot collection.</param>
/// <returns>True if the item can be moved safely.</returns>
public virtual bool CanMoveItemToEquippable(ItemInfo itemInfo, int equippableCollectionIndex = 0, int slotIndex = -1)
{
var equippableCollection = m_BridgeItemCollections.GetItemCollection(equippableCollectionIndex);
if (equippableCollection == null) { return false; }
var sourceItemCollection = itemInfo.ItemCollection;
if (sourceItemCollection == null) {
sourceItemCollection = DefaultItemCollection;
}
if (sourceItemCollection == null || sourceItemCollection.HasItem(itemInfo) == false) { return false; }
var removableItemInfo = sourceItemCollection.RemoveItemCondition(itemInfo);
if (removableItemInfo.HasValue == false || removableItemInfo.Value.Amount != itemInfo.Amount) { return false; }
var addItemInfo = new ItemInfo(itemInfo.Amount, removableItemInfo.Value);
var canAddItemInfo = equippableCollection.CanAddItem(addItemInfo);
if (canAddItemInfo.HasValue == false || canAddItemInfo.Value.Amount != itemInfo.Amount) { return false; }
if (equippableCollection is ItemSlotCollection equippableSlotCollection) {
if (slotIndex == -1) {
slotIndex = equippableSlotCollection.GetTargetSlotIndex(itemInfo.Item);
}
if (slotIndex == -1) { return false; }
var previousItemInSlot = equippableSlotCollection.GetItemInfoAtSlot(slotIndex);
if (previousItemInSlot.Item != null && !previousItemInSlot.Item.StackableEquivalentTo(itemInfo.Item)) {
var canRemovePreviousItem = equippableSlotCollection.RemoveItemCondition(previousItemInSlot);
if (canRemovePreviousItem.HasValue == false ||
canRemovePreviousItem.Value.Amount != previousItemInSlot.Amount) { return false; }
var canReturnPreviousItem = sourceItemCollection.CanAddItem(previousItemInSlot);
if (canReturnPreviousItem.HasValue == false ||
canReturnPreviousItem.Value.Amount != previousItemInSlot.Amount) { return false; }
}
}
return true;
}
/// <summary>
/// Can the item be moved from one of the equippable item collections to the default item collection?
/// </summary>
/// <param name="itemInfo">The item info.</param>
/// <param name="equippableCollectionIndex">The index of the equippable item collection.</param>
/// <param name="slotIndex">The slot Index if the equippable is an item slot collection.</param>
/// <returns>True if the item can be moved safely.</returns>
public virtual bool CanMoveItemToDefault(ItemInfo itemInfo, int equippableCollectionIndex = 0, int slotIndex = -1)
{
var equippableCollection = m_BridgeItemCollections.GetItemCollection(equippableCollectionIndex);
if (equippableCollection == null || m_DefaultItemCollection == null) { return false; }
if (equippableCollection.HasItem(itemInfo) == false) { return false; }
ItemInfo itemInfoToRemove;
if (equippableCollection is ItemSlotCollection equippableSlotCollection) {
if (slotIndex == -1) {
slotIndex = equippableSlotCollection.GetItemSlotIndex(itemInfo.Item);
}
if (slotIndex == -1) { return false; }
itemInfoToRemove = equippableSlotCollection.GetItemInfoAtSlot(slotIndex);
if (itemInfoToRemove.Item == null) { return false; }
itemInfoToRemove = new ItemInfo(itemInfo.Amount, itemInfoToRemove);
} else {
itemInfoToRemove = itemInfo;
}
var removableItemInfo = equippableCollection.RemoveItemCondition(itemInfoToRemove);
if (removableItemInfo.HasValue == false || removableItemInfo.Value.Amount != itemInfo.Amount) { return false; }
var canAddItemInfo = m_DefaultItemCollection.CanAddItem(new ItemInfo(itemInfo.Amount, removableItemInfo.Value));
if (canAddItemInfo.HasValue == false || canAddItemInfo.Value.Amount != itemInfo.Amount) { return false; }
return true;
}
public void MoveEquip(ItemInfo itemInfo, int equippableItemCollectionSet, int slotID, bool equip)
{
if (equip) {
MoveItemToEquippable(itemInfo, equippableItemCollectionSet, slotID);
Equip(itemInfo,true);
var movedItemInfo = MoveItemToEquippable(itemInfo, equippableItemCollectionSet, slotID);
if (movedItemInfo.Amount == itemInfo.Amount) {
Equip(itemInfo,true);
}
} else {
MoveItemToDefault(itemInfo, equippableItemCollectionSet, slotID);
}
}