summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBoutade <thegoofist@protonmail.com>2019-10-06 09:23:38 -0500
committerBoutade <thegoofist@protonmail.com>2019-10-06 09:23:38 -0500
commitfddd5a2c2ebcf7aaa4bccba55e6b70d312bfcabc (patch)
tree556a1d7a9e8fb06e0d5db56a7854dddf1cdce130
parent973fc749d11696c19b6cfbc73e6c3eaf2dad8d8c (diff)
tightend the tweening "language" a little
-rw-r--r--package.lisp3
-rw-r--r--tweening.lisp66
2 files changed, 35 insertions, 34 deletions
diff --git a/package.lisp b/package.lisp
index 683a828..c8bc734 100644
--- a/package.lisp
+++ b/package.lisp
@@ -13,6 +13,7 @@
;; TWEEN PROTOCOL
#:start-time
#:duration
+ #:loop-mode
#:run-tween
;; TWEEN FUNCTIONS & Macros
@@ -26,7 +27,7 @@
#:animating
#:sequencing
#:pausing
- #:grouping
+ #:grouping
;; EASING FUNCTIONS
diff --git a/tweening.lisp b/tweening.lisp
index cc6adb1..bc9f37e 100644
--- a/tweening.lisp
+++ b/tweening.lisp
@@ -7,7 +7,7 @@
(defvar *target*)
(defvar *start-time*)
-(defmacro sequencing ((&key loop-mode start starting with-target targeting target) &body forms)
+(defmacro sequencing ((&key loop-mode at targeting) &body forms)
"START and STARTING are synonym keywords, and are used to specify as tart time.
WITH-TARGET, TARGETING, and TARGET are synonym keywords, used to specify a
@@ -16,29 +16,29 @@
LOOP-MODE is supplied to the LOOP-MODE slot on the TWEEN-SEQ class that this
form returns."
(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)))))))
+ (dyn-vars (append (when targeting
+ `((*target* ,targeting )))
+ (when at
+ `((*start-time* ,at))))))
`(let ,dyn-vars
(let ((,this-seq (in-sequence ,@forms)))
(setf (loop-mode ,this-seq) ',loop-mode)
,this-seq))))
-(defun pausing (&key for duration start)
+(defun pausing (&key for at)
"A light wrapper around PAUSE. Is aware of default parameters that may have
been set in an enclosing form."
- (pause (or for duration (when-bound *duration*) 0)
- (or start (when-bound *start-time*) 0)))
+ (pause (or for (when-bound *duration*) 0)
+ (or at (when-bound *start-time*) 0)))
-(defmacro grouping ((&key duration for with-duration) &body forms)
+(defmacro grouping ((&key for) &body forms)
"Returns a TWEEN-GROUP instance.
- DURATION, FOR, and WITH-DURATION are all synonym keywords, used to specify a default
- duration for any tweens define din this body, where applicable."
- (let ((dyn-vars (append (when (or duration for with-duration)
- `((*duration* ,(or duration for with-duration)))))))
+ FOR is used to specify a default duration for any tweens defined in this
+ body, where applicable."
+ (let ((dyn-vars (append (when for
+ `((*duration* ,for ))))))
`(let ,dyn-vars
(as-group ,@forms))))
@@ -46,23 +46,23 @@
(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)
+ ((:cubing-in :cubic-in) #'cubic-in)
+ ((:cubing-in-out :cubic-in-out) #'cubic-in-out)
+ ((:cubing-out :cubic-out) #'cubic-out)
+ ((:elastic-out :springing-out :spring-out) #'elastic-out)
+ ((:linear :linearly :none) #'linear)
+ ((:quading-in :quad-in ) #'quad-in)
+ ((:quading-in-out :quad-in-out ) #'quad-in-out)
+ ((:quading-out :quad-out ) #'quad-out)
+ ((:sine-in :sinusoidal-in ) #'sinusoidal-in)
+ ((:sine-in-out :sinusoidal-in-out) #'sinusoidal-in-out)
+ ((:sine-out :sinusoidal-out ) #'sinusoidal-out)))
+
+(defun animating (&key (by :none) the of to for at)
"A wrapper around ANIMATE that is aware of any default values defined in the
the most recently enclosing form.
- EASE is either an easing function, or a keyword that indicates an easing
+ BY is either an easing function, or a keyword that indicates an easing
function. The valid keywords are :BOUNCE-OUT :BOUNCING-OUT :CUBING-IN
:CUBICALLY-IN :CUBIC-IN :CUBING-IN-OUT :CUBICALLY-IN-OUT :CUBIC-IN-OUT
:CUBING-OUT :CUBICALLY-OUT :CUBIC-OUT :ELASTIC-OUT :ELASTICALLY-OUT
@@ -71,8 +71,8 @@
:SINE-IN :SINUSOIDAL-IN :SINUSOIDALLY-IN :SINE-IN-OUT :SINUSOIDALLY-IN-OUT
:SINUSOIDAL-IN-OUT :SINE-OUT :SINUSOIDAL-OUT :SINUSOIDALLY-OUT
- THE and MODIFYING are synonym keywords. Either one specifies the ACCESSOR to
- use for the tween.
+ THE specifies the ACCESSOR to use for the tween. It should be as symbol
+ naming a setf-able function.
OF becomes the value of the TARGET slot of this TWEEN. If OF is NIL,
then any default target value already set in an enclosing form is used.
@@ -82,12 +82,12 @@
FOR becomes the value of the DURATION slot of this TWEEN, superseding any
default value set in the enclosing form.
- START and STARTING are synonym keywords, specifiying a START-TIME.
+ AT specifies a START-TIME, and overrides.
"
(animate (or of (when-bound *target*))
- (or the modifying)
+ the
to
- :start (or start starting (when-bound *start-time*) 0)
- :ease (if (functionp ease) ease (keyword->ease-fn ease))
+ :start (or at (when-bound *start-time*) 0)
+ :ease (if (functionp by) by (keyword->ease-fn by))
:duration (or for (when-bound *duration*) 0)))