Currently, a custom inventory management device can be created from a combination of Item Granters, Item Removers, and Conditional Buttons to detect what player currently has.
This ends up being rather complicated and inefficient (given the number of devices) and does not give control over some operations such as the order of items (which is important, for example, if you are building a custom extended inventory).
Suggestion: GetInventory()
on agent
that could return something like this:
# Not sure on code licensing in forums, but my intention is for code below
# to be under public domain/CC0, please feel free to use in any way.
agent_inventory := interface:
GetSlots(): []inventory_slot
AddItemToSlot(Index: int, Item: creative_item_asset, ?Amount: int = 1, <# some optional args managing what to do if there is an existing item in slot #>)<decides>:void
AddItem(Item: creative_item_asset, ?Amount: int = 1, <# some optional args managing what to do if no space for it, or if item is already owned #>)<decides>:void
RemoveItemFromSlot(Index: int, ?Amount: int, <# some optional args managing whether to drop the item or just destroy it #>)<decides>:void
RemoveItem(Item: creative_item_asset, ?Amount: int, <# some optional args managing whether to drop the items or just destroy them #>)<decides>:void
RemoveAllItems():void
inventory_slot := interface:
Index: int
Item: ?creative_item_asset
IsSelected: logic
# where creative_item_asset some kind of item representation (ideally with a string id or code that allows built-in ones to be identified or compared)