Skip to content

easing

The easing namespace provides Robert Pennerโ€™s standard easing algorithms.


All easing functions follow the standard signature:

easing.<function>(time: number, begin: number, change: number, duration: number) --> number
  • time: Current elapsed progression time (0 .. duration).
  • begin: Starting value.
  • change: Total delta to change (target - begin).
  • duration: Total duration of the transition.

  • easing.linear(t, b, c, d)

Each family provides 4 variations: _in, _out, _in_out, and _out_in:

Family Variations
quad easing.quad_in, quad_out, quad_in_out, quad_out_in
cubic easing.cubic_in, cubic_out, cubic_in_out, cubic_out_in
quart easing.quart_in, quart_out, quart_in_out, quart_out_in
quint easing.quint_in, quint_out, quint_in_out, quint_out_in
sine easing.sine_in, sine_out, sine_in_out, sine_out_in
expo easing.expo_in, expo_out, expo_in_out, expo_out_in
circ easing.circ_in, circ_out, circ_in_out, circ_out_in
elastic easing.elastic_in, elastic_out, elastic_in_out, elastic_out_in
back easing.back_in, back_out, back_in_out, back_out_in
bounce easing.bounce_in, bounce_out, bounce_in_out, bounce_out_in

local anim_start = 0
local anim_duration = 0.35 -- 350ms
client.add_callback("render", function()
local elapsed = globals.realtime - anim_start
local clamped_t = math.min(elapsed, anim_duration)
-- Smoothly interpolate X coordinate from 0 to 200 using quintic out
local current_x = easing.quint_out(clamped_t, 0, 200, anim_duration)
render.rect(vector(current_x, 100), vector(current_x + 150, 200), color(20, 20, 20, 200))
end)