blob: 12ddc5e7918f044723ff16f5b5300af66bccfa00 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
(in-package :animise)
(defmacro when-bound (symbol)
`(when (boundp (quote ,symbol)) ,symbol))
(defvar *duration*)
(defvar *target*)
(defvar *start-time*)
(defmacro sequencing ((&key loop-mode start starting with-target targeting target) &body forms)
(let ((this-seq (gensym))
(dyn-vars (append (when (or with-target target targeting)
`((*target* ,(or with-target target targeting))))
(when (or start starting)
`((*start-time* ,(or start starting)))))))
`(let ,dyn-vars
(let ((,this-seq (in-sequence ,@forms)))
(setf (loop-mode ,this-seq) ',loop-mode)
,this-seq))))
(defun pausing (&key for duration start)
(pause (or for duration (when-bound *duration*) 0)
(or start (when-bound *start-time*) 0)))
(defmacro grouping ((&key duration for with-duration) &body forms)
(let ((dyn-vars (append (when (or duration for with-duration)
`((*duration* ,(or duration for with-duration)))))))
`(let ,dyn-vars
(as-group ,@forms))))
(defun keyword->ease-fn (name)
(case name
((:bounce-out :bouncing-out) #'bounce-out)
((:cubing-in :cubically-in :cubic-in) #'cubic-in)
((:cubing-in-out :cubically-in-out :cubic-in-out) #'cubic-in-out)
((:cubing-out :cubically-out :cubic-out) #'cubic-out)
((:elastic-out :elastically-out) #'elastic-out)
((:linear :linearly) #'linear)
((:quading-in :quad-in :quadratically-in) #'quad-in)
((:quading-in-out :quad-in-out :quadratically-in-out) #'quad-in-out)
((:quading-out :quad-out :quadratically-out) #'quad-out)
((:sine-in :sinusoidal-in :sinusoidally-in) #'sinusoidal-in)
((:sine-in-out :sinusoidally-in-out :sinusoidal-in-out) #'sinusoidal-in-out)
((:sine-out :sinusoidal-out :sinusoidally-out) #'sinusoidal-out)))
(defun animating (ease &key the modifying of to for start starting)
(animate (or of (when-bound *target*))
(or the modifying)
to
:start (or start starting (when-bound *start-time*) 0)
:ease (if (functionp ease) ease (keyword->ease-fn ease))
:duration (or for (when-bound *duration*) 0)))
|