Skip to content

RodZill4/godot_inventory

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

godot_inventory

An inventory component for the Godot Engine

The demo

The (very simple) demo constists of:

  • 4 "item generators" (yes, the 4 "GoBot" icons): drag from them and they'll generate an item.
  • 4 inventory windows. You can grab their title to move them around, and move items around from and to those windows. They also have a context menu that can be used to "compact" the inventory. Inventory slots also have a context menu with "split" and "destroy" options.

The inventory component

This component relies on 3 main classes/scenes:

  • the item database, that describes the available items and provides methods to interact with items. This demo includes a minimal database. For each item, the database contains a name, an index (used to select the corresponding icon in the icons image)...
  • an ObjectStack class that describes an object stack (item index + item count). It inherits from Control because it is used as preview when dragging items.
  • an inventory class that inherits from PopupPanel and provides simple inventory features. It is necessary for the associated panel to contain a Label as first child (this will be the title of the window).

Writing components that can drag'n'drop from/to the inventory

  • The data that is dragged/dropped is an array that contains: :* the source widget :* the ObjectStack to be moved around
  • To be able to receive items from the inventory, the following methods must be implemented: :* can_drop_data(p, v): v is described above, this function returns true if v[1] can be dropped into self :* drop_data(p, v): this function actually drops v into self, and if the drop operation is successful, notifies v[0] using v[0].stop_monitoring_drag()
  • to be able to send items to the inventory, the following methods must be implemented: :* get_drag_data(p): return the drag/drop data (basically [self, object_stack]). :* stop_monitoring_drag(): this method is called if the drag'n'drop operation is successful.

Todo

  • Write documentation
  • Fix the ugly monitoring hack. I implemented this because I didn't manage to detect when the object is dropped into an unexpected place, so the inventory class keeps track of the drag'n'drop opeartion until the mouse button is released.

About

An inventory component for the Godot Engine

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published