diff --git a/dev-assets/doodads/buttons/button.js b/dev-assets/doodads/buttons/button.js index c31e342..8919467 100644 --- a/dev-assets/doodads/buttons/button.js +++ b/dev-assets/doodads/buttons/button.js @@ -4,16 +4,23 @@ function main() { // Has a linked Sticky Button been pressed permanently down? var stickyDown = false; - Message.Subscribe("sticky:down", function(down) { + Message.Subscribe("sticky:down", function (down) { stickyDown = down; Self.ShowLayer(stickyDown ? 1 : 0); }); - Events.OnCollide(function(e) { + // Track who all is colliding with us. + var colliders = {}; + + Events.OnCollide(function (e) { if (!e.Settled) { return; } + if (colliders[e.Actor.ID()] == undefined) { + colliders[e.Actor.ID()] = true; + } + // If a linked Sticky Button is pressed, button stays down too and // doesn't interact. if (stickyDown) { @@ -37,12 +44,17 @@ function main() { } Self.ShowLayer(1); - timer = setTimeout(function() { + }); + + Events.OnLeave(function (e) { + delete colliders[e.Actor.ID()]; + + if (Object.keys(colliders).length === 0) { Sound.Play("button-up.wav") Self.ShowLayer(0); Message.Publish("power", false); timer = 0; pressed = false; - }, 200); + } }); } diff --git a/dev-assets/doodads/doors/electric-door.js b/dev-assets/doodads/doors/electric-door.js index 1f4be7c..127b812 100644 --- a/dev-assets/doodads/doors/electric-door.js +++ b/dev-assets/doodads/doors/electric-door.js @@ -6,7 +6,6 @@ var powerState = false; function setPoweredState(powered) { powerState = powered; - console.log("setPoweredState: %+v", powered) if (powered) { if (animating || opened) { return; @@ -14,14 +13,14 @@ function setPoweredState(powered) { animating = true; Sound.Play("electric-door.wav") - Self.PlayAnimation("open", function() { + Self.PlayAnimation("open", function () { opened = true; animating = false; }); } else { animating = true; Sound.Play("electric-door.wav") - Self.PlayAnimation("close", function() { + Self.PlayAnimation("close", function () { opened = false; animating = false; }) @@ -41,13 +40,12 @@ function main() { // power sources like Buttons will work as normal, as they emit only a power // signal. var ignoreNextPower = false; - Message.Subscribe("switch:toggle", function(powered) { - console.log("A switch powered %+v, setPoweredState(%+v) to opposite", powered, powerState); + Message.Subscribe("switch:toggle", function (powered) { ignoreNextPower = true; setPoweredState(!powerState); }) - Message.Subscribe("power", function(powered) { + Message.Subscribe("power", function (powered) { if (ignoreNextPower) { ignoreNextPower = false; return; @@ -56,7 +54,7 @@ function main() { setPoweredState(powered); }); - Events.OnCollide(function(e) { + Events.OnCollide(function (e) { if (e.InHitbox) { if (!opened) { return false; diff --git a/dev-assets/doodads/doors/keys.js b/dev-assets/doodads/doors/keys.js index 469a158..505f1e9 100644 --- a/dev-assets/doodads/doors/keys.js +++ b/dev-assets/doodads/doors/keys.js @@ -5,6 +5,12 @@ function main() { Events.OnCollide(function (e) { if (e.Settled) { if (e.Actor.HasInventory()) { + // If we don't have a quantity, and the actor already has + // one of us, don't pick it up so the player can get it. + if (quantity === 0 && e.Actor.HasItem(Self.Filename) === 0 && !e.Actor.IsPlayer()) { + return; + } + Sound.Play("item-get.wav") e.Actor.AddItem(Self.Filename, quantity); Self.Destroy();