; SPDX-FileCopyrightText: 2023 Jummit
;
; SPDX-License-Identifier: GPL-3.0-or-later
(fn lerp [a b t speed]
"Linearly interpolate between a and b. T is the time the lerp started"
(+ a (* (- b a) (math.min 1 (/ (- (_G.time) (or t 0)) (or speed 100))))))
(fn move [entity x y]
(set entity.move {:from-x entity.x :from-y entity.y :start (_G.time)})
(set entity.x x)
(set entity.y y))
(fn animate-movement [world]
(each [_ entity (ipairs world)]
(case entity
{:move {: from-x : from-y : start} : x : y}
(do
(set entity.screen-x (lerp from-x x start))
(set entity.screen-y (lerp from-y y start))))))
{: move : animate-movement}