summaryrefslogtreecommitdiff
path: root/heyllama.scm
diff options
context:
space:
mode:
authorThomas White <taw@physics.org>2020-09-19 23:31:52 +0200
committerThomas White <taw@physics.org>2020-09-19 23:31:52 +0200
commit6834e0e46ac5516c7883d22261728d4651d2f554 (patch)
tree2879df0541805545a2ed29083c3fca4af5f396dc /heyllama.scm
parent5bfc87ce83b1c22e06879b8a0f0704e08ec7204b (diff)
Add basic collision detection
Diffstat (limited to 'heyllama.scm')
-rw-r--r--heyllama.scm36
1 files changed, 23 insertions, 13 deletions
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 <animal> (<object>)
@@ -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 <animal>
@@ -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))))))