aboutsummaryrefslogtreecommitdiff
path: root/tests/animation-test.scm
diff options
context:
space:
mode:
Diffstat (limited to 'tests/animation-test.scm')
-rw-r--r--tests/animation-test.scm36
1 files changed, 36 insertions, 0 deletions
diff --git a/tests/animation-test.scm b/tests/animation-test.scm
new file mode 100644
index 0000000..fefb77f
--- /dev/null
+++ b/tests/animation-test.scm
@@ -0,0 +1,36 @@
+(import srfi-64)
+(include "entity.scm")
+(include "world.scm")
+(include "animation.scm")
+(import downstroke/entity downstroke/world downstroke/animation)
+
+(test-begin "animation")
+
+(test-group "frame->tile-id"
+ (test-equal "first frame, frames (0)" 1 (frame->tile-id '(0) 0))
+ (test-equal "wraps around" 1 (frame->tile-id '(0 1) 2))
+ (test-equal "frame 1 of (27 28)" 29 (frame->tile-id '(27 28) 1)))
+
+(test-group "set-animation"
+ (let ((entity (list #:type 'player #:anim-name 'idle #:anim-frame 5 #:anim-tick 8)))
+ (test-equal "no-op if already active" entity (set-animation entity 'idle))
+ (let ((switched (set-animation entity 'walk)))
+ (test-equal "switches anim-name" 'walk (entity-ref switched #:anim-name))
+ (test-equal "resets frame" 0 (entity-ref switched #:anim-frame))
+ (test-equal "resets tick" 0 (entity-ref switched #:anim-tick)))))
+
+(test-group "animate-entity"
+ (let* ((anims '((walk . (#:frames (0 1) #:duration 4))))
+ (entity (list #:type 'player #:anim-name 'walk #:anim-frame 0 #:anim-tick 0))
+ (stepped (animate-entity entity anims)))
+ (test-equal "increments tick" 1 (entity-ref stepped #:anim-tick))
+ (test-equal "sets tile-id on first tick" 1 (entity-ref stepped #:tile-id)))
+ (let* ((anims '((walk . (#:frames (0 1) #:duration 2))))
+ (entity (list #:type 'player #:anim-name 'walk #:anim-frame 0 #:anim-tick 1))
+ (advanced (animate-entity entity anims)))
+ (test-equal "advances frame when tick reaches duration" 1 (entity-ref advanced #:anim-frame))
+ (test-equal "resets tick on frame advance" 0 (entity-ref advanced #:anim-tick)))
+ (let* ((entity (list #:type 'player)))
+ (test-equal "unchanged entity without anim-name" entity (animate-entity entity '()))))
+
+(test-end "animation")