You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
1.2 KiB
50 lines
1.2 KiB
#nullable enable
|
|
using Babushka.scripts.CSharp.GameEntity.LoadSave;
|
|
using Newtonsoft.Json.Linq;
|
|
|
|
namespace Babushka.scripts.CSharp.Common.Inventory;
|
|
|
|
/// <summary>
|
|
/// Represents a virtual object wrapper for an item instance.
|
|
/// Can return the containing item or null.
|
|
/// </summary>
|
|
public class InventorySlot: IJsonSerializable
|
|
{
|
|
/// <summary>
|
|
/// The inventory item instance that may or may not be bound to this slot.
|
|
/// </summary>
|
|
public ItemInstance? itemInstance;
|
|
|
|
/// <summary>
|
|
/// Whether or not this slot is currently occupied by an item instance.
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public bool IsEmpty()
|
|
{
|
|
return itemInstance == null;
|
|
}
|
|
|
|
public void LoadFromJson(JObject json)
|
|
{
|
|
var itemJson = json.Value<JObject>("item");
|
|
if (itemJson != null)
|
|
{
|
|
itemInstance = new ItemInstance();
|
|
itemInstance.LoadFromJson(itemJson);
|
|
}
|
|
else
|
|
{
|
|
itemInstance = null;
|
|
}
|
|
}
|
|
|
|
public JObject SaveToJson()
|
|
{
|
|
return new JObject()
|
|
{
|
|
["item"] = itemInstance?.SaveToJson()
|
|
};
|
|
}
|
|
}
|
|
|