;;;; Tick counting
;;;; This file implements several tick counting commands similar to those
;;;; found in tintin, useful on Diku muds. To use, just /load this file.
;;;; usage:
;;; /tick Display the time remaining until next tick.
;;; /tickon Reset and start the tick counter.
;;; /tickoff Stop the tick counter.
;;; /tickset Reset and start the tick counter.
;;; /ticksize <n> Set the tick length to <n> seconds (default is 75).
/loaded __TFLIB__/tick.tf
/set ticksize=75
/set next_tick=0
/set _tick_pid1=0
/set _tick_pid2=0
/def -i tick_warn = /echo % Next tick in 10 seconds.
/def -i tick_action = /echo % TICK
/def -i tick = \
/if (next_tick) \
/eval /echo %%% $$[next_tick - $(/time @)] seconds until tick%;\
/else \
/echo -e %% Tick counter is not running.%;\
/endif
/def -i tickon = \
/tickoff%;\
/@test next_tick := $(/time @) + ticksize %;\
/repeat -$[ticksize - 10] 1 \
/set _tick_pid1=0%%;\
/tick_warn%;\
/set _tick_pid1=%?%;\
/repeat -%ticksize 1 \
/set _tick_pid2=0%%;\
/tick_action%%;\
/tickon%;\
/set _tick_pid2=%?
/def -i tickoff = \
/@test _tick_pid1 & (kill(_tick_pid1), _tick_pid1:=0)%;\
/@test _tick_pid2 & (kill(_tick_pid2), _tick_pid2:=0)%;\
/set next_tick=0
/def -i tickset = /tickon %*
/def -i ticksize = /set ticksize %*