// 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_` 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); } }