From 4ba3e18e1899099dbb8773902fae7be33e3c82e4 Mon Sep 17 00:00:00 2001 From: Noah Petherbridge Date: Thu, 2 Apr 2020 23:09:46 -0700 Subject: [PATCH] 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. --- dev-assets/doodads/doors/colored-door.js | 6 ++++-- dev-assets/doodads/doors/keys.js | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/dev-assets/doodads/doors/colored-door.js b/dev-assets/doodads/doors/colored-door.js index baf7ac4..48015d8 100644 --- a/dev-assets/doodads/doors/colored-door.js +++ b/dev-assets/doodads/doors/colored-door.js @@ -1,6 +1,7 @@ function main() { var color = Self.Doodad.Tag("color"); + var keyname = "key-" + color + ".doodad"; // Layers in the doodad image. var layer = { @@ -34,8 +35,9 @@ function main() { return; } - var data = e.Actor.GetData("key:" + color); - if (data === "") { + // Do they have our key? + var hasKey = e.Actor.HasItem(keyname) >= 0; + if (!hasKey) { // Door is locked. return false; } diff --git a/dev-assets/doodads/doors/keys.js b/dev-assets/doodads/doors/keys.js index 2f7fba1..667022e 100644 --- a/dev-assets/doodads/doors/keys.js +++ b/dev-assets/doodads/doors/keys.js @@ -2,7 +2,9 @@ function main() { var color = Self.Doodad.Tag("color"); Events.OnCollide(function(e) { - e.Actor.SetData("key:" + color, "true"); - Self.Destroy(); + if (e.Settled) { + e.Actor.AddItem(Self.Doodad.Filename, 0); + Self.Destroy(); + } }) }