diff --git a/dev-assets/doodads/regions/Makefile b/dev-assets/doodads/regions/Makefile index 63b40ad..7d8c6b2 100644 --- a/dev-assets/doodads/regions/Makefile +++ b/dev-assets/doodads/regions/Makefile @@ -6,6 +6,10 @@ build: doodad convert -t "Goal Region" goal-128.png reg-goal.doodad doodad install-script goal.js reg-goal.doodad + # Checkpoint Region + doodad convert -t "Checkpoint Region" checkpoint-128.png reg-checkpoint.doodad + doodad install-script checkpoint.js reg-checkpoint.doodad + # Fire Region doodad convert -t "Fire Region" fire-128.png reg-fire.doodad doodad install-script fire.js reg-fire.doodad diff --git a/dev-assets/doodads/regions/checkpoint-128.png b/dev-assets/doodads/regions/checkpoint-128.png new file mode 100644 index 0000000..bc1c34e Binary files /dev/null and b/dev-assets/doodads/regions/checkpoint-128.png differ diff --git a/dev-assets/doodads/regions/checkpoint.js b/dev-assets/doodads/regions/checkpoint.js new file mode 100644 index 0000000..47f5669 --- /dev/null +++ b/dev-assets/doodads/regions/checkpoint.js @@ -0,0 +1,38 @@ +// Checkpoint Region +// Acts like an invisible checkpoint flag. +var isCurrentCheckpoint = false; + +function main() { + Self.Hide(); + setActive(false); + + // Checkpoints broadcast to all of their peers so they all + // know which one is the most recently activated. + Message.Subscribe("broadcast:checkpoint", function (currentID) { + setActive(false); + }); + + Events.OnCollide(function (e) { + if (isCurrentCheckpoint || !e.Settled) { + return; + } + + // Only care about the player character. + if (!e.Actor.IsPlayer()) { + return; + } + + // Set the player checkpoint. + SetCheckpoint(Self.Position()); + setActive(true); + Message.Broadcast("broadcast:checkpoint", Self.ID()) + }); +} + +function setActive(v) { + if (v && !isCurrentCheckpoint) { + Flash("Checkpoint!"); + } + + isCurrentCheckpoint = v; +} \ No newline at end of file