From 98645c73173880d72a12fbede5748c28214e7846 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Sun, 20 Sep 2020 12:16:30 +0200 Subject: Separate x and y velocities Gravity and walking need to be handled differently --- heyllama.scm | 76 ++++++++++++++++++++++++++++++++++++++++-------------------- 1 file 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!" -- cgit v1.2.3