com.litterbox.inventory
v1.0.1
Published
Inventory system. Part of BCS framework
Downloads
1
Readme
Quick Start
- Add BCS Inventory package to your package manifest. (com.bcs.inventory)
- Go to your game's initialization code and add:
InventoryModule.Initialize(new InventoryPlayerPrefsJsonProvider())
- Initialize method accepts
IInventoryDataProvider
interface, which theInventoryPlayerPrefsJsonProvider
class implements. You can write custom providers by implementing the same interface.
- Inventory module creates a game wide inventory by default. You can access it
with the constant key:
InventoryModule.AccountInventory
. - To create a custom inventory, use below to methods:
InventoryModule.IsInventoryValid(string)
: Makes sure the inventory exists and usableInventoryModule.CreateInventory(string)
: Creates the inventory.- So, to create a new inventory and make sure it is not creates previously:
if (InventoryModule.IsInventoryValid(myInventoryId)) { InventoryModule.CreateInventory(myInventoryId); }
- To add items, use
InventoryModule.AddToInventory(string, string, int)
or one of its overloads:InventoryModule.AddToInventory(string, string, int)
InventoryModule.AddToInventory(string, ItemDefinition, int)
- To remove items from inventory:
InventoryModule.RemoveFromInventory(string, string, int)
InventoryModule.RemoveFromInventory(string, ItemDefinition, int)
- To get the owned quantity of a said item:
InventoryModule.GetOwnedQuantity(string, string)
InventoryModule.GetOwnedQuantity(string, ItemDefinition)
- To get a value indicating whether the given item is in inventory:
InventoryModule.IsInInventory(string, string)
InventoryModule.IsInInventory(string, ItemDefinition)
Inventory Class
To decrease the amount of code written, inventory module comes with a wrapper class named Inventory
. This class stores the id of the inventory it represents
and provides the following methods to modify the invenory with provided id:
void Add(string, int)
void Add(ItemDefition, int)
void Remove(string, int)
void Remove(ItemDefition, int)
int GetOwned(string)
int GetOwned(ItemDefition)
bool HasItem(string)
bool HasItem(ItemDefinition)
A sample usage
public class InventoryClassExample
{
private Inventory myInventory;
private Inventory accountInventory;
public void Initialize()
{
myInventory = new Inventory("myInventory");
accountInventory = new Inventory();
}
public void AddMoneyToAccount(int money)
{
var moneyItem = ItemDatabaseModule.GetItem("it-money");
accountInventory.Add(moneyItem, money);
}
public void MoveFundsToMyInventory(int money)
{
var accountFunds = accountInventory.GetOwned("it-money");
if (accountsFunds < money)
{
money = accountFunds;
}
accountInventory.Remove("it-money", money);
myInventory.Add("it-money", money);
}
}
Scriptable Inventories
Inventory module also provides you with a way to serialize inventory objects as scriptable objects, so that you can reference them from scripts and reuse them. for this, go to any folder you wish (Assets > Game > Data > Inventories
is recommended), right click and then Create > BCS > Inventory
. This will create a scriptable object.
Now, select the inventory scriptable object and set its id.
To use it, create a script and add the following line to it.
[SerializeField] private InventoryObject inventory;
This will create a field in the inspector. Now, click the small circle next to it and select your inventory.
Back to your script, you can now use this like the following:
public void AddMoneyToInventory(int money)
{
inventory.Inventory.Add(currency, money);
}
Full class for clarity:
public class ScriptableInventoryExample : MonoBehaviour
{
[SerializeField] private InventoryObject inventory;
[SerializeField] private ItemDefinition currency;
public void AddMoneyToInventory(int money)
{
inventory.Inventory.Add(currency, money);
}
}
Dependencies
- BCS Item Database:
com.bcs.itemdatabase