summaryrefslogtreecommitdiff
path: root/doc/api.texi
diff options
context:
space:
mode:
Diffstat (limited to 'doc/api.texi')
-rw-r--r--doc/api.texi87
1 files changed, 87 insertions, 0 deletions
diff --git a/doc/api.texi b/doc/api.texi
index 1a56039..c3543b8 100644
--- a/doc/api.texi
+++ b/doc/api.texi
@@ -410,6 +410,7 @@ detection.
* Vectors:: Euclidean vectors.
* Matrices:: Transformation matrices.
* Rectangles:: Axis-aligned bounding boxes.
+* Easings:: Easing functions for interesting animations.
@end menu
@node Basics
@@ -435,6 +436,60 @@ Half of @var{pi}.
@node Rectangles
@subsection Rectangles
+@node Easings
+@subsection Easings
+
+@deffn {Scheme Procedure} linear @var{t}
+@end deffn
+
+@deffn {Scheme Procedure} smoothstep @var{t}
+@end deffn
+
+@deffn {Scheme Procedure} ease-in-quad @var{t}
+@end deffn
+
+@deffn {Scheme Procedure} ease-out-quad @var{t}
+@end deffn
+
+@deffn {Scheme Procedure} ease-in-out-quad @var{t}
+@end deffn
+
+@deffn {Scheme Procedure} ease-in-cubic @var{t}
+@end deffn
+
+@deffn {Scheme Procedure} ease-out-cubic @var{t}
+@end deffn
+
+@deffn {Scheme Procedure} ease-in-out-cubic @var{t}
+@end deffn
+
+@deffn {Scheme Procedure} ease-in-quart @var{t}
+@end deffn
+
+@deffn {Scheme Procedure} ease-out-quart @var{t}
+@end deffn
+
+@deffn {Scheme Procedure} ease-in-out-quart @var{t}
+@end deffn
+
+@deffn {Scheme Procedure} ease-in-quint @var{t}
+@end deffn
+
+@deffn {Scheme Procedure} ease-out-quint @var{t}
+@end deffn
+
+@deffn {Scheme Procedure} ease-in-out-quint @var{t}
+@end deffn
+
+@deffn {Scheme Procedure} ease-in-sine @var{t}
+@end deffn
+
+@deffn {Scheme Procedure} ease-out-sine @var{t}
+@end deffn
+
+@deffn {Scheme Procedure} ease-in-out-sine @var{t}
+@end deffn
+
@node Graphics
@section Graphics
@@ -868,6 +923,7 @@ of scheduling tasks.
@menu
* Agendas:: Scheduling tasks.
* Coroutines:: Cooperative multitasking.
+* Tweening:: Animations.
* Channels:: Publish data to listeners.
@end menu
@@ -1069,6 +1125,37 @@ Wait for a message from @var{channel}.
Evaluate @var{body} in an endless loop.
@end deffn
+@node Tweening
+@subsection Tweening
+
+Tweening is the process of transitioning something from an initial
+state to a final state over a pre-determined period of time. In other
+words, tweening is a way to create animation. The @code{tween}
+procedure can be used within any coroutine like so:
+
+@example
+(define x 0)
+(coroutine
+ ;; 0 to 100 in 60 ticks of the agenda.
+ (tween 60 0 100 (lambda (y) (set! x y))))
+@end example
+
+@deffn {Scheme Procedure} tween @var{duration} @var{start} @var{end} @var{proc} [#:step 1 #:ease @code{smoothstep} #:interpolate @code{lerp}]
+Transition a value from @var{start} to @var{end} over @var{duration},
+sending each succesive value to @var{proc}. @var{step} controls the
+amount of time between each update of the animation.
+
+To control how the animation goes from the initial to final state, an
+``easing'' procedure may be specified. By default, the
+@code{smoothstep} easing is used, which is a more pleasing default
+than a simplistic linear function. @xref{Easings} for a complete
+list of available easing procedures.
+
+The @var{interpolate} procedure computes the values in between
+@var{start} and @var{end}. By default, linear interpolation (``lerp''
+for short) is used.
+@end deffn
+
@node Channels
@subsection Channels