// 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;
}
