From e48620fc1b5a8ba4d8a3b58963750a3af85f1242 Mon Sep 17 00:00:00 2001 From: David Thompson Date: Sat, 28 Oct 2023 15:08:57 -0400 Subject: Fix scroll speed transitions. --- game.scm | 37 ++++++++++++---------- level.tmx | 106 +++++++++++++++++++++++++++++++------------------------------- 2 files changed, 73 insertions(+), 70 deletions(-) diff --git a/game.scm b/game.scm index 7b93efa..296dc3a 100644 --- a/game.scm +++ b/game.scm @@ -432,13 +432,14 @@ body ... (loop))) (define* (tween proc duration start end ease interpolate) - (let loop ((t 0)) - (if (= t duration) - (proc end) - (let ((alpha (ease (/ t duration)))) - (proc (interpolate start end alpha)) - (wait 1) - (loop (+ t 1)))))) + (let ((d (inexact duration))) + (let loop ((t 0)) + (if (= t duration) + (proc end) + (let ((alpha (ease (/ (inexact t) d)))) + (proc (interpolate start end alpha)) + (wait 1) + (loop (+ t 1))))))) ;; Particles: (define-type particle-pool @@ -634,11 +635,13 @@ (define *last-scroll* 0.0) (define *scroll-speed* 0.5) (define (change-scroll-speed new-speed duration) - (tween (lambda (speed) - (set! *scroll-speed* speed)) - duration - *scroll-speed* new-speed - smoothstep lerp)) + (run-script + (lambda () + (tween (lambda (speed) + (set! *scroll-speed* speed)) + duration + *scroll-speed* new-speed + smoothstep lerp)))) (define *last-row-scanned* 0) ;; action id, sprite sheet offset, x, y (define %tile-size (+ 4 8 8 8)) @@ -721,9 +724,9 @@ ('boss (spawn-boss x y)) ('scroll-speed (let ((speed (assq-ref properties 'speed)) - (ticks (or (assq-ref properties 'ticks) 0))) + (duration (or (assq-ref properties 'duration) 0))) (when speed - (change-scroll-speed speed ticks)))) + (change-scroll-speed speed duration)))) (_ #t))) (define max-scroll (- (* (level-height level) tile-height) game-height)) (define (level-update! level) @@ -1105,9 +1108,9 @@ (if (or (rect-collides-with-level? level x y hbw hbh) (find-enemy enemies x y hbw hbh)) (begin - (set-vec2-x! player-position old-x) - (set-vec2-y! player-position - (+ old-y (- *scroll* *last-scroll*))) + ;; (set-vec2-x! player-position old-x) + ;; (set-vec2-y! player-position + ;; (+ old-y (- *scroll* *last-scroll*))) (player-die!)) (begin (set-vec2-x! player-hitbox-position (- x (/ hbw 2.0))) diff --git a/level.tmx b/level.tmx index a3e93c4..4b0ab00 100644 --- a/level.tmx +++ b/level.tmx @@ -75,29 +75,29 @@ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, 1,0,0,0,0,0,0,0,0,0,0,0,0,1,1, 1,0,0,0,0,0,0,0,0,0,0,0,1,1,1, -1,0,0,0,0,0,0,0,0,0,0,1,1,1,1, -1,1,0,0,0,0,0,0,0,0,1,1,1,1,1, -1,1,1,0,0,0,0,0,0,1,1,1,1,1,1, -1,1,1,0,0,0,0,0,1,1,1,1,1,1,1, -1,1,1,1,0,0,0,1,1,1,1,1,1,1,1, -1,1,1,1,0,0,0,1,1,1,1,1,1,1,1, -1,1,1,1,0,0,0,1,1,1,1,1,1,1,1, -1,1,1,1,0,0,0,1,1,1,1,1,1,1,1, -1,1,1,1,0,0,0,1,1,1,1,1,1,1,1, -1,1,1,1,0,0,0,1,1,1,1,1,1,1,1, -1,1,1,1,0,0,0,1,1,1,1,1,1,1,1, -1,1,1,1,0,0,0,1,1,1,1,1,1,1,1, -1,1,1,1,0,0,0,1,1,1,1,1,1,1,1, -1,1,1,1,0,0,0,1,1,1,1,1,1,1,1, -1,1,1,1,0,0,0,1,1,1,1,1,1,1,1, -1,1,1,1,0,0,0,1,1,1,1,1,1,1,1, -1,1,1,1,0,0,0,1,1,1,1,1,1,1,1, -1,1,1,1,0,0,0,1,1,1,1,1,1,1,1, -1,1,1,1,0,0,0,1,1,1,1,1,1,1,1, -1,1,1,1,0,0,0,1,1,1,1,1,1,1,1, -1,1,1,1,0,0,0,1,1,1,1,1,1,1,1, -1,1,1,1,0,0,0,1,1,1,1,1,1,1,1, -1,1,1,1,0,0,0,1,1,1,1,1,1,1,1, +1,0,0,0,0,0,0,0,0,0,0,0,1,1,1, +1,1,0,0,0,0,0,0,0,0,0,0,1,1,1, +1,1,1,0,0,0,0,0,0,0,0,0,1,1,1, +1,1,1,0,0,0,0,0,1,1,0,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,0,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,0,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,0,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,0,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,0,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,0,1,1,1,1, +1,1,1,1,1,1,1,1,1,0,0,0,1,1,1, +1,1,1,1,1,1,1,1,1,0,0,0,1,1,1, +1,1,1,1,1,1,1,1,1,0,0,0,1,1,1, +1,1,1,1,1,1,1,1,1,0,0,0,1,1,1, +1,1,1,1,1,1,1,1,1,0,0,0,1,1,1, +1,1,1,1,1,1,1,1,1,0,0,0,1,1,1, +1,1,1,1,1,1,1,1,1,0,0,0,1,1,1, +1,1,1,1,1,1,1,1,1,0,0,0,1,1,1, +1,1,1,1,1,1,1,1,1,0,0,0,1,1,1, +1,1,1,1,1,1,1,1,1,0,0,0,1,1,1, +1,1,1,1,0,0,0,0,0,0,0,0,1,1,1, +1,1,1,1,0,0,0,0,0,0,0,0,1,1,1, +1,1,1,1,0,0,0,0,0,0,0,0,1,1,1, 1,1,1,1,0,0,0,1,1,1,1,1,1,1,1, 1,1,1,1,0,0,0,1,1,1,1,1,1,1,1, 1,1,1,1,0,0,0,1,1,1,1,1,1,1,1, @@ -579,29 +579,29 @@ 6,0,0,0,0,0,0,0,0,0,0,0,0,0,6, 6,0,0,0,0,0,0,0,0,0,0,0,0,6,6, 6,0,0,0,0,0,0,0,0,0,0,0,6,6,6, -6,0,0,0,0,0,0,0,0,0,0,6,6,6,6, -6,6,0,0,0,0,0,0,0,0,6,6,6,6,6, -6,6,6,0,0,0,0,0,0,6,6,6,6,6,6, -6,6,6,0,0,0,0,0,6,6,6,6,6,6,6, -6,6,6,6,0,0,0,6,6,6,6,6,6,6,6, -6,6,6,6,0,0,0,6,6,6,6,6,6,6,6, -6,6,6,6,0,0,0,6,6,6,6,6,6,6,6, -6,6,6,6,0,0,0,6,6,6,6,6,6,6,6, -6,6,6,6,0,0,0,6,6,6,6,6,6,6,6, -6,6,6,6,0,0,0,6,6,6,6,6,6,6,6, -6,6,6,6,0,0,0,6,6,6,6,6,6,6,6, -6,6,6,6,0,0,0,6,6,6,6,6,6,6,6, -6,6,6,6,0,0,0,6,6,6,6,6,6,6,6, -6,6,6,6,0,0,0,6,6,6,6,6,6,6,6, -6,6,6,6,0,0,0,6,6,6,6,6,6,6,6, -6,6,6,6,0,0,0,6,6,6,6,6,6,6,6, -6,6,6,6,0,0,0,6,6,6,6,6,6,6,6, -6,6,6,6,0,0,0,6,6,6,6,6,6,6,6, -6,6,6,6,0,0,0,6,6,6,6,6,6,6,6, -6,6,6,6,0,0,0,6,6,6,6,6,6,6,6, -6,6,6,6,0,0,0,6,6,6,6,6,6,6,6, -6,6,6,6,0,0,0,6,6,6,6,6,6,6,6, -6,6,6,6,0,0,0,6,6,6,6,6,6,6,6, +6,0,0,0,0,0,0,0,0,0,0,0,6,6,6, +6,6,0,0,0,0,0,0,0,0,0,0,6,6,6, +6,6,6,0,0,0,0,0,0,0,0,0,6,6,6, +6,6,6,0,0,0,0,0,6,6,0,6,6,6,6, +6,6,6,6,6,6,6,6,6,6,0,6,6,6,6, +6,6,6,6,6,6,6,6,6,6,0,6,6,6,6, +6,6,6,6,6,6,6,6,6,6,0,6,6,6,6, +6,6,6,6,6,6,6,6,6,6,0,6,6,6,6, +6,6,6,6,6,6,6,6,6,6,0,6,6,6,6, +6,6,6,6,6,6,6,6,6,6,0,6,6,6,6, +6,6,6,6,6,6,6,6,6,0,0,0,6,6,6, +6,6,6,6,6,6,6,6,6,0,0,0,6,6,6, +6,6,6,6,6,6,6,6,6,0,0,0,6,6,6, +6,6,6,6,6,6,6,6,6,0,0,0,6,6,6, +6,6,6,6,6,6,6,6,6,0,0,0,6,6,6, +6,6,6,6,6,6,6,6,6,0,0,0,6,6,6, +6,6,6,6,6,6,6,6,6,0,0,0,6,6,6, +6,6,6,6,6,6,6,6,6,0,0,0,6,6,6, +6,6,6,6,6,6,6,6,6,0,0,0,6,6,6, +6,6,6,6,6,6,6,6,6,0,0,0,6,6,6, +6,6,6,6,0,0,0,0,0,0,0,0,6,6,6, +6,6,6,6,0,0,0,0,0,0,0,0,6,6,6, +6,6,6,6,0,0,0,0,0,0,0,0,6,6,6, 6,6,6,6,0,0,0,6,6,6,6,6,6,6,6, 6,6,6,6,0,0,0,6,6,6,6,6,6,6,6, 6,6,6,6,0,0,0,6,6,6,6,6,6,6,6, @@ -1051,7 +1051,7 @@ - + @@ -1155,9 +1155,9 @@ - + - + @@ -1167,13 +1167,13 @@ - + - + - + @@ -1182,7 +1182,7 @@ - + -- cgit v1.2.3