From 11240e5b771fbf0aa078922f121954aa6ddf5935 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Tue, 22 Sep 2020 21:04:36 +0200 Subject: Gravity logic --- heyllama.scm | 67 +++++++++++++++++++++++++++++++++++++++--------------------- llama.tmx | 20 +++++++++--------- 2 files changed, 54 insertions(+), 33 deletions(-) diff --git a/heyllama.scm b/heyllama.scm index f9abaa6..6eca177 100644 --- a/heyllama.scm +++ b/heyllama.scm @@ -12,11 +12,16 @@ (define-class () (pos #:init-keyword #:pos - #:getter get-pos) + #:getter get-pos + #:setter set-pos!) (size #:init-keyword #:size #:getter get-size) + (falling #:init-value #t + #:getter is-falling? + #:setter set-falling!) + (draw-offset #:init-keyword #:draw-offset #:getter get-draw-offset) @@ -133,12 +138,23 @@ (rect-xy moved-small-rect)))) +(define (vertical-overlap a b) + (or (> (rect-right b) (rect-left a) (rect-left b)) + (> (rect-right b) (rect-right a) (rect-left b)))) + + +(define (rect-above a b) + (>= (rect-bottom a) (rect-top b))) + + (define (update tstep) (let ((x-vel 0.0)) - (define (slide-llama-only a b) - (if (eq? a 'llama) slide #f)) + (when (and (key-pressed? 'space) + (not (is-falling? llama))) + (set-y-vel! llama 8.0) + (set-falling! llama #t)) (when (key-pressed? 'right) (set-face-direction! llama 1) @@ -146,7 +162,8 @@ (set-animation-step! llama (floor-remainder (+ (get-animation-step llama) -1) - 16))) + 16)) + (set-falling! llama #t)) (when (key-pressed? 'left) (set-face-direction! llama -1) @@ -154,7 +171,8 @@ (set-animation-step! llama (floor-remainder (- (get-animation-step llama) 1) - 16))) + 16)) + (set-falling! llama #t)) (vec2-add! (get-pos llama) #v(x-vel 0.0)) @@ -162,26 +180,31 @@ (grid-move grid 'llama (get-pos llama) - slide-llama-only)) + (lambda (a b) + (if (eq? a 'llama) + (lambda (item item-rect other other-rect goal) + (slide item item-rect other other-rect goal)) + #f)))) ;; 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)) + (when (is-falling? llama) + (vec2-add! (get-pos llama) #v(0.0 (get-y-vel llama))) + (set-y-vel! llama (- (get-y-vel llama) 0.4)) - (set-y-vel! llama - (- (get-y-vel llama) 0.4)) + (grid-move grid + 'llama + (get-pos llama) + (lambda (a b) + (if (eq? a 'llama) + (lambda (item item-rect other other-rect goal) + (when (vertical-overlap item-rect other-rect) + (set-y-vel! llama 0.0) + (when (rect-above item-rect other-rect) + (set-falling! llama #f))) + (slide item item-rect other other-rect goal)) + #f)))) - (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 100.0 450.0 350.0)) @@ -193,9 +216,7 @@ (define (key-press key scancode modifier repeat?) (case key ((q) (abort-game)) - ((f1) (set! show-hitboxes (not show-hitboxes))) - ((space) (unless repeat? - (set-y-vel! llama 8.0))))) + ((f1) (set! show-hitboxes (not show-hitboxes))))) (run-game #:window-title "Hey Llama!" diff --git a/llama.tmx b/llama.tmx index be9c354..937d0a0 100644 --- a/llama.tmx +++ b/llama.tmx @@ -11,10 +11,10 @@ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21,22,23,23,23,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21,22,24,0,0,0,0,0,0,0,0,0,21,23,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21,22,22,22,22,22,22,22,22,22,22,22,22,22,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21,23,23,23,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21,23,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21,23,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21,22,22,22,22,22,22,22,22,22,22,22,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,2,2,2,2,2,2,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,0,0,1,2,2,2,2,2,2,3,7,7,7,7,7,7,7,7,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, @@ -24,13 +24,13 @@ - + - + - - - - + + + + -- cgit v1.2.3