( timer + lerping ) : clamp0 ( range val -- i ) 2dup <= if drop else dup 0 <= if drop drop 0 else swap drop then then ; : >ratio ( range value -- f ) over swap clamp0 swap />ratio ; : range ( start end -- start range ) over - ; : r >range r >range ratio lerpr ; : lerp ( start end duration start -- i ) ticks udelta ( start end duration delta ) >ratio lerpr ; : triggered ( duration timer -- b ) dup >r @ ticks udelta ( duration delta ) 2dup <= if drop r @ >rot ticks ( from to duration start ) begin 4dup lerp r@ ! rot suspend repeat rdrop drop drop drop drop ; : sleep ( count -- ) ticks swap begin over ticks udelta over u< while suspend repeat drop drop ;