tween.fnl 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. (var _ts {})
  2. (fn lerp [a b r] (+ a (* (- b a) r)))
  3. (fn vlerp [a b r] (vadd a (vmul (vsub b a) r)))
  4. (fn powf [n] (fn [v] (^ v n)))
  5. (fn tween [o p v d _]
  6. (let [_ (or _ {})
  7. t {:o o :p p :v v :d d :s d
  8. :f _.f
  9. :l (or _.l lerp)
  10. :ei (or _.ei _.e)
  11. :eo (or _.eo _.e)
  12. :iv (or (and p (. o p)) o)}]
  13. (table.insert _ts t) t))
  14. (fn wait [d f] (tween 0 nil 0 d {:f f}))
  15. (fn update-tweens []
  16. (local ts {})
  17. (each [_ t (ipairs _ts)]
  18. (when t.o
  19. (set t.d (- t.d 1))
  20. (var r (- 1 (/ t.d t.s)))
  21. (if (and t.ei t.eo)
  22. (set r (or (and (< r 0.5) (/ (t.ei (* r 2)) 2))
  23. (- 1 (/ (t.eo (* (- 1 r) 2)) 2))))
  24. t.ei
  25. (set r (t.ei r))
  26. t.eo
  27. (set r (- 1 (t.eo (- 1 r)))))
  28. (var z (t.l t.iv t.v r))
  29. (if t.p (tset t.o t.p z)
  30. (set t.o z))
  31. (if (> t.d 0) (table.insert ts t)
  32. (if t.f (t.f t.o)))))
  33. (set _ts ts))
  34. ;(tween object prop_name target_value duration options_table)
  35. ; options are
  36. ; :e dual in+out easing fn
  37. ; :ei,:eo in,out easing fn
  38. ; :f tween callback (takes 1 argument - the object)
  39. ; :l lerping function