Can* API functions by Yota's request.
This commit is contained in:
@@ -45,10 +45,15 @@ namespace Content.Server.Interfaces.GameObjects
|
|||||||
return slots[slot];
|
return slots[slot];
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool PutInSlot(string slot, IItemComponent item)
|
public bool Insert(string slot, IItemComponent item)
|
||||||
{
|
{
|
||||||
|
if (item == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(item), "An item must be passed. To remove an item from a slot, use Drop()");
|
||||||
|
}
|
||||||
|
|
||||||
var inventorySlot = _GetSlot(slot);
|
var inventorySlot = _GetSlot(slot);
|
||||||
if (inventorySlot.Item != null)
|
if (!CanInsert(slot, item))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -58,11 +63,22 @@ namespace Content.Server.Interfaces.GameObjects
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool DropSlot(string slot)
|
public bool CanInsert(string slot, IItemComponent item)
|
||||||
{
|
{
|
||||||
|
var inventorySlot = _GetSlot(slot);
|
||||||
|
return inventorySlot.Item == null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool Drop(string slot)
|
||||||
|
{
|
||||||
|
if (!CanDrop(slot))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
var inventorySlot = _GetSlot(slot);
|
var inventorySlot = _GetSlot(slot);
|
||||||
var item = inventorySlot.Item;
|
var item = inventorySlot.Item;
|
||||||
if (item == null || !container.Remove(item.Owner))
|
if (!container.Remove(item.Owner))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -76,17 +92,42 @@ namespace Content.Server.Interfaces.GameObjects
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool CanDrop(string slot)
|
||||||
|
{
|
||||||
|
var inventorySlot = _GetSlot(slot);
|
||||||
|
var item = inventorySlot.Item;
|
||||||
|
return item != null && container.CanRemove(item.Owner);
|
||||||
|
}
|
||||||
|
|
||||||
public void AddSlot(string slot)
|
public void AddSlot(string slot)
|
||||||
{
|
{
|
||||||
if (slots.ContainsKey(slot))
|
if (HasSlot(slot))
|
||||||
{
|
{
|
||||||
|
throw new InvalidOperationException($"Slot '{slot}' already exists.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
slots[slot] = new InventorySlot(slot, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void RemoveSlot(string slot)
|
public void RemoveSlot(string slot)
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
if (!HasSlot(slot))
|
||||||
|
{
|
||||||
|
throw new InvalidOperationException($"Slow '{slot}' does not exist.");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Get(slot) != null && !Drop(slot))
|
||||||
|
{
|
||||||
|
// TODO: Handle this potential failiure better.
|
||||||
|
throw new InvalidOperationException("Unable to remove slot as the contained item could not be dropped");
|
||||||
|
}
|
||||||
|
|
||||||
|
slots.Remove(slot);
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool HasSlot(string slot)
|
||||||
|
{
|
||||||
|
return slots.ContainsKey(slot);
|
||||||
}
|
}
|
||||||
|
|
||||||
private class InventorySlot : IInventorySlot
|
private class InventorySlot : IInventorySlot
|
||||||
|
|||||||
@@ -40,11 +40,35 @@ namespace Content.Server.Interfaces.GameObjects
|
|||||||
/// <returns>True if the item was inserted into a hand, false otherwise.</returns>
|
/// <returns>True if the item was inserted into a hand, false otherwise.</returns>
|
||||||
bool PutInHand(IItemComponent item, string index, bool fallback=true);
|
bool PutInHand(IItemComponent item, string index, bool fallback=true);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Checks to see if an item can be put in any hand.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="item">The item to check for.</param>
|
||||||
|
/// <returns>True if the item can be inserted, false otherwise.</returns>
|
||||||
|
bool CanPutInHand(IItemComponent item);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Checks to see if an item can be put in the specified hand.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="item">The item to check for.</param>
|
||||||
|
/// <param name="index">The index for the hand to check for.</param>
|
||||||
|
/// <returns>True if the item can be inserted, false otherwise.</returns>
|
||||||
|
bool CanPutInHand(IItemComponent item, string index);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Drops an item on the ground, removing it from the hand.
|
/// Drops an item on the ground, removing it from the hand.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="index">The hand to drop from.</param>
|
/// <param name="index">The hand to drop from.</param>
|
||||||
/// <returns>True if an item was successfully dropped, false otherwise.</returns>
|
/// <returns>True if an item was successfully dropped, false otherwise.</returns>
|
||||||
bool Drop(string index);
|
bool Drop(string index);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Checks whether the item in the specified hand can be dropped.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="index">The hand to check for.</param>
|
||||||
|
/// <returns>
|
||||||
|
/// True if the item can be dropped, false if the hand is empty or the item in the hand cannot be dropped.
|
||||||
|
/// </returns>
|
||||||
|
bool CanDrop(string index);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,14 +29,31 @@ namespace Content.Server.Interfaces.GameObjects
|
|||||||
/// <param name="slot">The slot to put the item in.</param>
|
/// <param name="slot">The slot to put the item in.</param>
|
||||||
/// <param name="item">The item to insert into the slot.</param>
|
/// <param name="item">The item to insert into the slot.</param>
|
||||||
/// <returns>True if the item was successfully inserted, false otherwise.</returns>
|
/// <returns>True if the item was successfully inserted, false otherwise.</returns>
|
||||||
bool PutInSlot(string slot, IItemComponent item);
|
bool Insert(string slot, IItemComponent item);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Checks whether an item can be put in the specified slot.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="slot">The slot to check for.</param>
|
||||||
|
/// <param name="item">The item to check for.</param>
|
||||||
|
/// <returns>True if the item can be inserted into the specified slot.</returns>
|
||||||
|
bool CanInsert(string slot, IItemComponent item);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Drops the item in a slot.
|
/// Drops the item in a slot.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="slot">The slot to drop the item from.</param>
|
/// <param name="slot">The slot to drop the item from.</param>
|
||||||
/// <returns>True if an item was dropped, false otherwise.</returns>
|
/// <returns>True if an item was dropped, false otherwise.</returns>
|
||||||
bool DropSlot(string slot);
|
bool Drop(string slot);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Checks whether an item can be dropped from the specified slot.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="slot">The slot to check for.</param>
|
||||||
|
/// <returns>
|
||||||
|
/// True if there is an item in the slot and it can be dropped, false otherwise.
|
||||||
|
/// </returns>
|
||||||
|
bool CanDrop(string slot);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Adds a new slot to this inventory component.
|
/// Adds a new slot to this inventory component.
|
||||||
@@ -57,10 +74,10 @@ namespace Content.Server.Interfaces.GameObjects
|
|||||||
void RemoveSlot(string slot);
|
void RemoveSlot(string slot);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
/// Checks whether a slot with the specified name exists.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="slot"></param>
|
/// <param name="slot">The slot name to check.</param>
|
||||||
/// <returns></returns>
|
/// <returns>True if the slot exists, false otherwise.</returns>
|
||||||
bool HasSlot(string slot);
|
bool HasSlot(string slot);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user