summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas White <taw@physics.org>2020-09-20 12:16:30 +0200
committerThomas White <taw@physics.org>2020-09-20 12:16:30 +0200
commit98645c73173880d72a12fbede5748c28214e7846 (patch)
treee303fe8b5512716863e6d897fb22fdb7482301ef
parente0efaf0214c2747e7cf348d211217e7dd7bf5170 (diff)
Separate x and y velocities
Gravity and walking need to be handled differently
-rw-r--r--heyllama.scm76
1 files changed, 51 insertions, 25 deletions
diff --git a/heyllama.scm b/heyllama.scm
index da6c927..6a71a0d 100644
--- a/heyllama.scm
+++ b/heyllama.scm
@@ -20,9 +20,9 @@
(draw-offset #:init-keyword #:draw-offset
#:getter get-draw-offset)
- (vel #:init-value #v(0.0 0.0)
- #:getter get-vel
- #:setter set-vel!)
+ (y-vel #:init-value 0.0
+ #:getter get-y-vel
+ #:setter set-y-vel!)
(face-direction
#:init-keyword #:face-dir
@@ -135,27 +135,53 @@
(define (update tstep)
- (when (key-pressed? 'right)
- (set-face-direction! llama 1)
- (vec2-add! (get-pos llama) #v((* tstep 0.2) 0))
- (set-animation-step! llama
- (floor-remainder
- (+ (get-animation-step llama) -1)
- 16)))
-
- (when (key-pressed? 'left)
- (set-face-direction! llama -1)
- (vec2-add! (get-pos llama) #v((* tstep -0.2) 0))
- (set-animation-step! llama
- (floor-remainder
- (- (get-animation-step llama) 1)
- 16)))
-
- (vec2-add! (get-pos llama) #v(0.0 -1.0))
- (grid-move grid 'llama (get-pos llama) (lambda (a b)
- (if (eq? a 'llama)
- slide
- #f)))
+ (let ((x-vel 0.0))
+
+ (define (slide-llama-only a b)
+ (if (eq? a 'llama) slide #f))
+
+ (when (key-pressed? 'right)
+ (set-face-direction! llama 1)
+ (set! x-vel 1.0)
+ (set-animation-step! llama
+ (floor-remainder
+ (+ (get-animation-step llama) -1)
+ 16)))
+
+ (when (key-pressed? 'left)
+ (set-face-direction! llama -1)
+ (set! x-vel -1.0)
+ (set-animation-step! llama
+ (floor-remainder
+ (- (get-animation-step llama) 1)
+ 16)))
+
+ (vec2-add! (get-pos llama)
+ #v((* x-vel tstep 0.2) 0.0))
+
+ (grid-move grid
+ 'llama
+ (get-pos llama)
+ slide-llama-only))
+
+ ;; Gravity
+ (define (slide-llama-only-and-zero-yvel a b)
+ (if (eq? a 'llama)
+ (lambda (item item-rect other other-rect goal)
+ (set-y-vel! llama 0.0)
+ (slide item item-rect other other-rect goal))
+ #f))
+
+ (set-y-vel! llama
+ (- (get-y-vel llama) 0.4))
+
+ (vec2-add! (get-pos llama)
+ #v(0.0 (get-y-vel llama)))
+
+ (grid-move grid
+ 'llama
+ (get-pos llama)
+ slide-llama-only-and-zero-yvel)
;; Ensure llama is near centre of screen
(let ((fovea (make-rect 150.0 150.0 350.0 350.0))
@@ -169,7 +195,7 @@
((q) (abort-game))
((f1) (set! show-hitboxes (not show-hitboxes)))
((space) (unless repeat?
- (set-vel! llama #v(0.0 15.0))))))
+ (set-y-vel! llama 8.0)))))
(run-game #:window-title "Hey Llama!"