Noah Petherbridge
0518df226c
* The Anvil doodad is affected by gravity and becomes dangerous when falling. If it lands on the player character, you die! If it lands on any other mobile doodad, it destroys it! It can land on solid doodads such as the Electric Trapdoor and the Crumbly Floor. It will activate a Crumbly Floor if it lands on one, and can activate buttons and switches that it passes. * JavaScript API: FailLevel(message) can be called from a doodad to kill the player character. The Anvil does this if it collides with the player while it's been falling.
64 lines
1.7 KiB
JavaScript
64 lines
1.7 KiB
JavaScript
// Pushable Box.
|
|
var speed = 4;
|
|
var size = 75;
|
|
|
|
function main() {
|
|
Self.SetMobile(true);
|
|
Self.SetGravity(true);
|
|
Self.SetHitbox(0, 0, size, size);
|
|
|
|
Events.OnCollide(function (e) {
|
|
// Ignore events from neighboring Boxes.
|
|
if (e.Actor.Actor.Filename === "box.doodad") {
|
|
return false;
|
|
}
|
|
|
|
if (e.Actor.IsMobile() && e.InHitbox) {
|
|
var overlap = e.Overlap;
|
|
|
|
if (overlap.Y === 0 && !(overlap.X === 0 && overlap.W < 5) && !(overlap.X === size)) {
|
|
// Standing on top, ignore.
|
|
return false;
|
|
} else if (overlap.Y === size) {
|
|
// From the bottom, boop it up.
|
|
Self.SetVelocity(Vector(0, -speed * 2))
|
|
}
|
|
|
|
// If touching from the sides, slide away.
|
|
if (overlap.X === 0) {
|
|
Self.SetVelocity(Vector(speed, 0))
|
|
} else if (overlap.X === size) {
|
|
Self.SetVelocity(Vector(-speed, 0))
|
|
}
|
|
|
|
return false;
|
|
}
|
|
});
|
|
Events.OnLeave(function (e) {
|
|
Self.SetVelocity(Vector(0, 0));
|
|
});
|
|
|
|
// When we receive power, we reset to our original position.
|
|
var origPoint = Self.Position();
|
|
Message.Subscribe("power", function (powered) {
|
|
Self.MoveTo(origPoint);
|
|
Self.SetVelocity(Vector(0, 0));
|
|
});
|
|
|
|
// Start animation on a loop.
|
|
animate();
|
|
}
|
|
|
|
function animate() {
|
|
Self.AddAnimation("animate", 100, [0, 1, 2, 3, 2, 1]);
|
|
|
|
var running = false;
|
|
setInterval(function () {
|
|
if (!running) {
|
|
running = true;
|
|
Self.PlayAnimation("animate", function () {
|
|
running = false;
|
|
})
|
|
}
|
|
}, 100);
|
|
} |