Inventory System for Level Actors

* Added an inventory system for actors as a replacement to the arbitrary
  key/value data store. Colored keys now add themselves to the player's
  inventory, and colored doors check the inventory.
* Inventory is a map[string]int between doodad filenames
  (red-key.doodad) and quantity (0 for key items/unlimited qty).
* API methods to add and remove inventory.
* Items HUD appears in Play Mode in lower-left corner showing doodad
  sprites of all the items in the Player's inventory.
This commit is contained in:
Noah 2020-04-02 23:09:46 -07:00
parent e86ae6144e
commit 4ba3e18e18
2 changed files with 8 additions and 4 deletions

View File

@ -1,6 +1,7 @@
function main() { function main() {
var color = Self.Doodad.Tag("color"); var color = Self.Doodad.Tag("color");
var keyname = "key-" + color + ".doodad";
// Layers in the doodad image. // Layers in the doodad image.
var layer = { var layer = {
@ -34,8 +35,9 @@ function main() {
return; return;
} }
var data = e.Actor.GetData("key:" + color); // Do they have our key?
if (data === "") { var hasKey = e.Actor.HasItem(keyname) >= 0;
if (!hasKey) {
// Door is locked. // Door is locked.
return false; return false;
} }

View File

@ -2,7 +2,9 @@ function main() {
var color = Self.Doodad.Tag("color"); var color = Self.Doodad.Tag("color");
Events.OnCollide(function(e) { Events.OnCollide(function(e) {
e.Actor.SetData("key:" + color, "true"); if (e.Settled) {
e.Actor.AddItem(Self.Doodad.Filename, 0);
Self.Destroy(); Self.Destroy();
}
}) })
} }