Files
kiln/kiln-core/src/scripts/pusher.rhai
T

25 lines
1.1 KiB
Plaintext

// Built-in script for the `pusher_*` archetypes (see kiln-core/src/builtin_scripts.rs).
//
// A pusher is a self-propelled solid that advances one cell in its facing
// direction every ~0.5s, shoving any pushable chain (including the player) ahead
// and stopping when blocked. The direction is not baked into this source — every
// pusher shares one compiled copy and learns its direction from the
// `BUILTIN_pusher_<dir>` tag the map loader attached to it.
fn tick(me, dt) {
// Only queue a step when idle. `move` shoves the chain ahead via step_object
// and is a no-op when blocked; the delay pads each step out to ~0.5s (move
// itself costs 0.25s), matching the old global pusher heartbeat.
//
// The direction is read from `me` (the hook's first parameter); to use it in a
// helper function you would pass `me` down explicitly.
if !me.waiting {
let dir = if me.has_tag("BUILTIN_pusher_north") { North }
else if me.has_tag("BUILTIN_pusher_south") { South }
else if me.has_tag("BUILTIN_pusher_east") { East }
else { West };
move(dir);
delay(0.25);
}
}