From 6834e0e46ac5516c7883d22261728d4651d2f554 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Sat, 19 Sep 2020 23:31:52 +0200 Subject: Add basic collision detection --- heyllama.scm | 36 +++++++++++++++++++++++------------- 1 file changed, 23 insertions(+), 13 deletions(-) (limited to 'heyllama.scm') diff --git a/heyllama.scm b/heyllama.scm index abe9a77..d1e3be3 100644 --- a/heyllama.scm +++ b/heyllama.scm @@ -6,6 +6,8 @@ (chickadee render sprite) (chickadee render texture) (chickadee render tiled) + (chickadee render color) + (chickadee render shapes) (oop goops)) (define-class () @@ -19,7 +21,6 @@ #:getter get-vel #:setter set-vel!) - (walk-direction #:init-value 0 #:setter set-walk-direction! @@ -49,14 +50,6 @@ (get-screen-pos animal))) -(define (update-animal animal tstep) - (vec2-add! (get-pos animal) (get-vel animal)) - (if (> (vec2-y (get-pos animal)) 200.0) - (set-vel! animal - (vec2+ (get-vel animal) - #v(0.0 -1.0))) - (set-vel! animal #v(0.0 0.0)))) - ;; -------------- Initial game state -------------- @@ -65,6 +58,7 @@ (define tile-map #f) (define view-pos #v(0.0 0.0)) (define grid (make-grid 16)) +(define show-hitboxes #f) (define (load) (set! llama (make @@ -76,6 +70,8 @@ #:spacing 48 #:margin 24))) + (grid-add grid 'llama 200.0 200.0 80.0 80.0) + (set! tile-map (load-tile-map "llama.tmx")) ;; Add objects from map to grid @@ -85,7 +81,7 @@ (grid-add grid (map-object-id obj) (rect-x shape) - (rect-y shape) + (- (rect-y shape) (rect-height shape)) (rect-width shape) (rect-height shape)))) @@ -102,9 +98,18 @@ ;; ------------------------------------------------ (define (draw alpha) + (draw-tile-map tile-map #:position (vec2* view-pos -1.0)) - (draw-animal llama)) + + (draw-animal llama) + + (when show-hitboxes + (let ((col (make-color 0.0 0.0 0.7 0.8))) + (for-each-item (lambda (item rect) + (draw-filled-rect (rect-move-by-vec2 rect (vec2* view-pos -1)) + col)) + grid)))) (define (get-screen-pos animal) @@ -131,8 +136,6 @@ (define (update tstep) - (update-animal llama tstep) - (when (key-pressed? 'right) (set-face-direction! llama 1) (vec2-add! (get-pos llama) #v((* tstep 0.2) 0)) @@ -149,6 +152,12 @@ (- (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))) + ;; Ensure llama is near centre of screen (let ((fovea (make-rect 150.0 150.0 350.0 350.0)) (llama-rect (get-screen-rect llama))) @@ -159,6 +168,7 @@ (define (key-press key scancode modifier repeat?) (case key ((q) (abort-game)) + ((f1) (set! show-hitboxes (not show-hitboxes))) ((space) (unless repeat? (set-vel! llama #v(0.0 15.0)))))) -- cgit v1.2.3