diff --git a/dev-assets/doodads/buttons/button.js b/dev-assets/doodads/buttons/button.js index 3745467..c31e342 100644 --- a/dev-assets/doodads/buttons/button.js +++ b/dev-assets/doodads/buttons/button.js @@ -2,17 +2,30 @@ function main() { var timer = 0; var pressed = false; + // Has a linked Sticky Button been pressed permanently down? + var stickyDown = false; + Message.Subscribe("sticky:down", function(down) { + stickyDown = down; + Self.ShowLayer(stickyDown ? 1 : 0); + }); + Events.OnCollide(function(e) { if (!e.Settled) { return; } + // If a linked Sticky Button is pressed, button stays down too and + // doesn't interact. + if (stickyDown) { + return; + } + // Verify they've touched the button. if (e.Overlap.Y + e.Overlap.H < 24) { return; } - if (!pressed) { + if (!pressed && !stickyDown) { Sound.Play("button-down.wav") Message.Publish("power", true); pressed = true; diff --git a/dev-assets/doodads/buttons/sticky.js b/dev-assets/doodads/buttons/sticky.js index 0958454..a715a59 100644 --- a/dev-assets/doodads/buttons/sticky.js +++ b/dev-assets/doodads/buttons/sticky.js @@ -8,6 +8,7 @@ function main() { pressed = false; Sound.Play("button-up.wav") Message.Publish("power", false); + Message.Publish("sticky:down", false); } }) @@ -29,5 +30,6 @@ function main() { Self.ShowLayer(1); pressed = true; Message.Publish("power", true); + Message.Publish("sticky:down", true); }); } diff --git a/dev-assets/doodads/crumbly-floor/fallen.png b/dev-assets/doodads/crumbly-floor/fallen.png index 6c16dd0..ffd3423 100644 Binary files a/dev-assets/doodads/crumbly-floor/fallen.png and b/dev-assets/doodads/crumbly-floor/fallen.png differ diff --git a/dev-assets/doodads/doors/electric-door.js b/dev-assets/doodads/doors/electric-door.js index 646cf4f..1f4be7c 100644 --- a/dev-assets/doodads/doors/electric-door.js +++ b/dev-assets/doodads/doors/electric-door.js @@ -1,31 +1,59 @@ +var animating = false; +var opened = false; +var powerState = false; + +// Function to handle the door opening or closing. +function setPoweredState(powered) { + powerState = powered; + + console.log("setPoweredState: %+v", powered) + if (powered) { + if (animating || opened) { + return; + } + + animating = true; + Sound.Play("electric-door.wav") + Self.PlayAnimation("open", function() { + opened = true; + animating = false; + }); + } else { + animating = true; + Sound.Play("electric-door.wav") + Self.PlayAnimation("close", function() { + opened = false; + animating = false; + }) + } +} + function main() { Self.AddAnimation("open", 100, [0, 1, 2, 3]); Self.AddAnimation("close", 100, [3, 2, 1, 0]); - var animating = false; - var opened = false; + Self.SetHitbox(0, 0, 34, 76); - Message.Subscribe("power", function(powered) { - if (powered) { - if (animating || opened) { - return; - } + // A linked Switch that activates the door will send the Toggle signal + // immediately before the Power signal. The door can just invert its + // state on this signal, and ignore the very next Power signal. Ordinary + // 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); + ignoreNextPower = true; + setPoweredState(!powerState); + }) - animating = true; - Sound.Play("electric-door.wav") - Self.PlayAnimation("open", function() { - opened = true; - animating = false; - }); - } else { - animating = true; - Sound.Play("electric-door.wav") - Self.PlayAnimation("close", function() { - opened = false; - animating = false; - }) + Message.Subscribe("power", function(powered) { + if (ignoreNextPower) { + ignoreNextPower = false; + return; } + + setPoweredState(powered); }); Events.OnCollide(function(e) { diff --git a/dev-assets/doodads/switches/switch.js b/dev-assets/doodads/switches/switch.js index f51f9cc..88e8eaf 100644 --- a/dev-assets/doodads/switches/switch.js +++ b/dev-assets/doodads/switches/switch.js @@ -20,6 +20,9 @@ function main() { if (collide === false) { Sound.Play("button-down.wav") state = !state; + + var nonce = Math.random() * 2147483647; + Message.Publish("switch:toggle", state); Message.Publish("power", state); showState(state); diff --git a/dev-assets/doodads/trapdoors/down1.png b/dev-assets/doodads/trapdoors/down1.png index 4af2ba4..f4871d5 100644 Binary files a/dev-assets/doodads/trapdoors/down1.png and b/dev-assets/doodads/trapdoors/down1.png differ diff --git a/dev-assets/doodads/trapdoors/down2.png b/dev-assets/doodads/trapdoors/down2.png index 51a7c8c..62adb46 100644 Binary files a/dev-assets/doodads/trapdoors/down2.png and b/dev-assets/doodads/trapdoors/down2.png differ diff --git a/dev-assets/doodads/trapdoors/down3.png b/dev-assets/doodads/trapdoors/down3.png index 986e8b4..6c1f191 100644 Binary files a/dev-assets/doodads/trapdoors/down3.png and b/dev-assets/doodads/trapdoors/down3.png differ diff --git a/dev-assets/doodads/trapdoors/down4.png b/dev-assets/doodads/trapdoors/down4.png index 5e6e5f2..a15da36 100644 Binary files a/dev-assets/doodads/trapdoors/down4.png and b/dev-assets/doodads/trapdoors/down4.png differ diff --git a/dev-assets/doodads/trapdoors/left1.png b/dev-assets/doodads/trapdoors/left1.png index e8cc2a6..6bb04d2 100644 Binary files a/dev-assets/doodads/trapdoors/left1.png and b/dev-assets/doodads/trapdoors/left1.png differ diff --git a/dev-assets/doodads/trapdoors/left2.png b/dev-assets/doodads/trapdoors/left2.png index 9c74728..cd29dd5 100644 Binary files a/dev-assets/doodads/trapdoors/left2.png and b/dev-assets/doodads/trapdoors/left2.png differ diff --git a/dev-assets/doodads/trapdoors/left3.png b/dev-assets/doodads/trapdoors/left3.png index d9a21bc..b7cbb41 100644 Binary files a/dev-assets/doodads/trapdoors/left3.png and b/dev-assets/doodads/trapdoors/left3.png differ diff --git a/dev-assets/doodads/trapdoors/left4.png b/dev-assets/doodads/trapdoors/left4.png index 96d1537..dec5a61 100644 Binary files a/dev-assets/doodads/trapdoors/left4.png and b/dev-assets/doodads/trapdoors/left4.png differ diff --git a/dev-assets/doodads/trapdoors/right1.png b/dev-assets/doodads/trapdoors/right1.png index 85e4394..5ac6228 100644 Binary files a/dev-assets/doodads/trapdoors/right1.png and b/dev-assets/doodads/trapdoors/right1.png differ diff --git a/dev-assets/doodads/trapdoors/right2.png b/dev-assets/doodads/trapdoors/right2.png index d4b090f..e7f33d4 100644 Binary files a/dev-assets/doodads/trapdoors/right2.png and b/dev-assets/doodads/trapdoors/right2.png differ diff --git a/dev-assets/doodads/trapdoors/right3.png b/dev-assets/doodads/trapdoors/right3.png index 73bc55b..88ee3db 100644 Binary files a/dev-assets/doodads/trapdoors/right3.png and b/dev-assets/doodads/trapdoors/right3.png differ diff --git a/dev-assets/doodads/trapdoors/right4.png b/dev-assets/doodads/trapdoors/right4.png index cf7a4e0..8c0d01d 100644 Binary files a/dev-assets/doodads/trapdoors/right4.png and b/dev-assets/doodads/trapdoors/right4.png differ diff --git a/dev-assets/doodads/trapdoors/trapdoor.js b/dev-assets/doodads/trapdoors/trapdoor.js index 5ad50c2..54dca12 100644 --- a/dev-assets/doodads/trapdoors/trapdoor.js +++ b/dev-assets/doodads/trapdoors/trapdoor.js @@ -5,8 +5,8 @@ function main() { var timer = 0; // Set our hitbox based on our orientation. - var thickness = 6; - var doodadSize = 72; + var thickness = 10; + var doodadSize = 86; if (direction === "left") { Self.SetHitbox(48, 0, doodadSize, doodadSize); } else if (direction === "right") { diff --git a/dev-assets/doodads/trapdoors/up1.png b/dev-assets/doodads/trapdoors/up1.png index 686664b..bc7830c 100644 Binary files a/dev-assets/doodads/trapdoors/up1.png and b/dev-assets/doodads/trapdoors/up1.png differ diff --git a/dev-assets/doodads/trapdoors/up2.png b/dev-assets/doodads/trapdoors/up2.png index 9898ed1..bd92a0c 100644 Binary files a/dev-assets/doodads/trapdoors/up2.png and b/dev-assets/doodads/trapdoors/up2.png differ diff --git a/dev-assets/doodads/trapdoors/up3.png b/dev-assets/doodads/trapdoors/up3.png index 1d75b3d..a18640e 100644 Binary files a/dev-assets/doodads/trapdoors/up3.png and b/dev-assets/doodads/trapdoors/up3.png differ diff --git a/dev-assets/doodads/trapdoors/up4.png b/dev-assets/doodads/trapdoors/up4.png index cd880a8..dc68a2d 100644 Binary files a/dev-assets/doodads/trapdoors/up4.png and b/dev-assets/doodads/trapdoors/up4.png differ