39 lines
900 B
JavaScript
39 lines
900 B
JavaScript
// 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", (currentID) => {
|
|
setActive(false);
|
|
});
|
|
|
|
Events.OnCollide((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;
|
|
}
|