From 6b30446eefacc5507489f3784f1333e1fddba884 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Sat, 19 Sep 2020 19:05:44 +0200 Subject: Add tiled environment --- Tileset_ground.png | Bin 0 -> 11663 bytes heyllama.scm | 81 +++++++++++++++++++++++++++++++++++++++-------------- llama.tmx | 26 +++++++++++++++++ 3 files changed, 86 insertions(+), 21 deletions(-) create mode 100644 Tileset_ground.png create mode 100644 llama.tmx diff --git a/Tileset_ground.png b/Tileset_ground.png new file mode 100644 index 0000000..1294865 Binary files /dev/null and b/Tileset_ground.png differ diff --git a/heyllama.scm b/heyllama.scm index 9b08c45..0b90dcb 100644 --- a/heyllama.scm +++ b/heyllama.scm @@ -1,25 +1,31 @@ (use-modules (chickadee) (chickadee math vector) + (chickadee math rect) (chickadee render font) (chickadee render sprite) (chickadee render texture) + (chickadee render tiled) (oop goops)) (define-class () - (pos #:init-keyword #:initial-pos + (pos #:init-keyword #:pos #:getter get-pos) + (size #:init-keyword #:size + #:getter get-size) + (vel #:init-value #v(0.0 0.0) #:getter get-vel #:setter set-vel!) + (walk-direction #:init-value 0 #:setter set-walk-direction! #:getter get-walk-direction) (face-direction - #:init-keyword #:initial-face-dir + #:init-keyword #:face-dir #:setter set-face-direction! #:getter get-face-direction) @@ -28,8 +34,7 @@ #:setter set-animation-step!) (sprite #:init-keyword #:sprite - #:getter get-sprite - #:setter set-sprite!)) + #:getter get-sprite)) (define (face-row dir) (if (> 0 dir) @@ -40,7 +45,7 @@ (draw-sprite (texture-atlas-ref (get-sprite animal) (+ (face-row (get-face-direction animal)) (truncate (/ (get-animation-step animal) 4)))) - (get-pos animal))) + (get-screen-pos animal))) (define (update-animal animal tstep) @@ -53,7 +58,7 @@ (+ (get-animation-step animal) wd) 16)))) (vec2-add! (get-pos animal) (get-vel animal)) - (if (> (vec2-y (get-pos animal)) 100.0) + (if (> (vec2-y (get-pos animal)) 200.0) (set-vel! animal (vec2+ (get-vel animal) #v(0.0 -1.0))) @@ -63,42 +68,76 @@ ;; -------------- Initial game state -------------- -(define llama - (make - #:initial-pos #v(100.0 100.0) - #:initial-face-dir 1)) +(define llama #f) +(define tile-map #f) +(define view-pos #v(0.0 0.0)) +(define (load) + (set! llama (make + #:pos #v(200.0 200.0) + #:size #v(128.0 128.0) + #:face-dir 1 + #:sprite (split-texture (load-image "llama_walk.png") + 128 + 128))) -;; ------------------------------------------------ + (set! tile-map (load-tile-map "llama.tmx"))) -(define (load) - (set-sprite! llama - (split-texture (load-image "llama_walk.png") - 128 - 128))) +;; ------------------------------------------------ (define (draw alpha) + (draw-tile-map tile-map + #:position (vec2* view-pos -1.0)) (draw-animal llama)) +(define (get-screen-pos animal) + (vec2- (get-pos animal) view-pos)) + + +(define (rect-xy rect) + #v((rect-x rect) (rect-y rect))) + + +(define (get-screen-rect animal) + (let ((screen-pos (get-screen-pos animal))) + (make-rect (vec2-x screen-pos) + (vec2-y screen-pos) + (vec2-x (get-size animal)) + (vec2-y (get-size animal))))) + + +(define (overshoot small-rect big-rect) + (let ((moved-small-rect (rect-clamp small-rect big-rect))) + (vec2- (rect-xy small-rect) + (rect-xy moved-small-rect)))) + + (define (update tstep) - (update-animal llama tstep)) + + (update-animal llama tstep) + + ;; 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))) + (unless (rect-within? llama-rect fovea) + (vec2-add! view-pos (overshoot llama-rect fovea))))) (define (key-press key scancode modifier repeat?) (case key ((q) (abort-game)) ((right) (set-walk-direction! llama 1)) - ((left) (set-walk-direction! llama -1)))) - ;;((space) (accelerate llama #v(0.0 10.0))))) + ((left) (set-walk-direction! llama -1)) + ((space) (unless repeat? + (set-vel! llama #v(0.0 15.0)))))) (define (key-release key scancode modifier) (case key ((right) (set-walk-direction! llama 0)) - ((left) (set-walk-direction! llama 0)) - ((space) (set-vel! llama #v(0.0 20.0))))) + ((left) (set-walk-direction! llama 0)))) (run-game #:window-title "Hey Llama!" diff --git a/llama.tmx b/llama.tmx new file mode 100644 index 0000000..bdb0f80 --- /dev/null +++ b/llama.tmx @@ -0,0 +1,26 @@ + + + + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,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,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + -- cgit v1.2.3