diff options
author | Thomas White <taw@physics.org> | 2020-09-20 12:16:30 +0200 |
---|---|---|
committer | Thomas White <taw@physics.org> | 2020-09-20 12:16:30 +0200 |
commit | 98645c73173880d72a12fbede5748c28214e7846 (patch) | |
tree | e303fe8b5512716863e6d897fb22fdb7482301ef | |
parent | e0efaf0214c2747e7cf348d211217e7dd7bf5170 (diff) |
Separate x and y velocities
Gravity and walking need to be handled differently
-rw-r--r-- | heyllama.scm | 76 |
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!" |