diff --git a/dev-assets/doodads/buttons/button.js b/dev-assets/doodads/buttons/button.js index f640ca0..83318fb 100644 --- a/dev-assets/doodads/buttons/button.js +++ b/dev-assets/doodads/buttons/button.js @@ -1,8 +1,17 @@ function main() { - console.log("Sticky Button initialized!"); + console.log("%s initialized!", Self.Doodad.Title); + + var timer = 0; Events.OnCollide( function() { - console.log("Touched!"); - Self.Canvas.SetBackground(RGBA(255, 153, 0, 153)) + if (timer > 0) { + clearTimeout(timer); + } + + Self.ShowLayer(1); + timer = setTimeout(function() { + Self.ShowLayer(0); + timer = 0; + }, 200); }) } diff --git a/dev-assets/doodads/buttons/sticky.js b/dev-assets/doodads/buttons/sticky.js index f640ca0..cf4fe74 100644 --- a/dev-assets/doodads/buttons/sticky.js +++ b/dev-assets/doodads/buttons/sticky.js @@ -1,8 +1,7 @@ function main() { - console.log("Sticky Button initialized!"); + console.log("%s initialized!", Self.Doodad.Title); Events.OnCollide( function() { - console.log("Touched!"); - Self.Canvas.SetBackground(RGBA(255, 153, 0, 153)) + Self.ShowLayer(1); }) } diff --git a/dev-assets/doodads/doors/electric-door.js b/dev-assets/doodads/doors/electric-door.js new file mode 100644 index 0000000..dedae0d --- /dev/null +++ b/dev-assets/doodads/doors/electric-door.js @@ -0,0 +1,35 @@ +function main() { + console.log("%s initialized!", Self.Doodad.Title); + + var timer = 0; + + // Animation frames. + var frame = 0; + var frames = Self.LayerCount(); + var animationDirection = 1; // forward or backward + var animationSpeed = 100; // interval between frames when animating + var animating = false; // true if animation is actively happening + + console.warn("Electric Door has %d frames", frames); + + // Animation interval function. + setInterval(function() { + if (!animating) { + return; + } + + // Advance the frame forwards or backwards. + frame += animationDirection; + if (frame >= frames) { + // Reached the last frame, start the pause and reverse direction. + animating = false; + frame = frames - 1; + } + + Self.ShowLayer(frame); + }, animationSpeed); + + Events.OnCollide( function() { + animating = true; // start the animation + }) +} diff --git a/dev-assets/doodads/doors/keys.js b/dev-assets/doodads/doors/keys.js new file mode 100644 index 0000000..ab81605 --- /dev/null +++ b/dev-assets/doodads/doors/keys.js @@ -0,0 +1,5 @@ +function main() { + Events.OnCollide(function(e) { + Self.Destroy(); + }) +} diff --git a/dev-assets/doodads/doors/locked-door.js b/dev-assets/doodads/doors/locked-door.js new file mode 100644 index 0000000..7d1ee7a --- /dev/null +++ b/dev-assets/doodads/doors/locked-door.js @@ -0,0 +1,5 @@ +function main() { + Events.OnCollide(function(e) { + Self.ShowLayer(1); + }); +} diff --git a/dev-assets/doodads/trapdoors/down.js b/dev-assets/doodads/trapdoors/down.js new file mode 100644 index 0000000..a38b70d --- /dev/null +++ b/dev-assets/doodads/trapdoors/down.js @@ -0,0 +1,55 @@ +function main() { + console.log("%s initialized!", Self.Doodad.Title); + + var timer = 0; + + // Animation frames. + var frame = 0; + var frames = Self.LayerCount(); + var animationDirection = 1; // forward or backward + var animationSpeed = 100; // interval between frames when animating + var animationDelay = 8; // delay ticks at the end before reversing, in + // multiples of animationSpeed + var delayCountdown = 0; + var animating = false; // true if animation is actively happening + + console.warn("Trapdoor has %d frames", frames); + + // Animation interval function. + setInterval(function() { + if (!animating) { + return; + } + + // At the end of the animation (door is open), delay before resuming + // the close animation. + if (delayCountdown > 0) { + delayCountdown--; + return; + } + + // Advance the frame forwards or backwards. + frame += animationDirection; + if (frame >= frames) { + // Reached the last frame, start the pause and reverse direction. + delayCountdown = animationDelay; + animationDirection = -1; + + // also bounds check it + frame = frames - 1; + } + + if (frame < 0) { + // reached the start again + frame = 0; + animationDirection = 1; + animating = false; + } + + Self.ShowLayer(frame); + }, animationSpeed); + + Events.OnCollide( function() { + animating = true; // start the animation + }) +}