From 74317970413d856453fdec2daddc5a4482a9adff Mon Sep 17 00:00:00 2001 From: Thomas White Date: Fri, 18 Sep 2020 22:36:34 +0200 Subject: OO llama --- heyllama.scm | 104 +++++++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 84 insertions(+), 20 deletions(-) (limited to 'heyllama.scm') diff --git a/heyllama.scm b/heyllama.scm index 0a5a87f..9b08c45 100644 --- a/heyllama.scm +++ b/heyllama.scm @@ -2,45 +2,109 @@ (chickadee math vector) (chickadee render font) (chickadee render sprite) - (chickadee render texture)) + (chickadee render texture) + (oop goops)) +(define-class () + (pos #:init-keyword #:initial-pos + #:getter get-pos) + + (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 + #:setter set-face-direction! + #:getter get-face-direction) + + (animation-step #:init-value 0 + #:getter get-animation-step + #:setter set-animation-step!) + + (sprite #:init-keyword #:sprite + #:getter get-sprite + #:setter set-sprite!)) + +(define (face-row dir) + (if (> 0 dir) + 4 + 12)) + +(define (draw-animal animal) + (draw-sprite (texture-atlas-ref (get-sprite animal) + (+ (face-row (get-face-direction animal)) + (truncate (/ (get-animation-step animal) 4)))) + (get-pos animal))) + + +(define (update-animal animal tstep) + (let ((wd (get-walk-direction animal))) + (unless (eq? wd 0) + (set-face-direction! animal wd) + (vec2-add! (get-pos animal) #v((* tstep wd 0.2) 0)) + (set-animation-step! animal + (floor-remainder + (+ (get-animation-step animal) wd) + 16)))) + (vec2-add! (get-pos animal) (get-vel animal)) + (if (> (vec2-y (get-pos animal)) 100.0) + (set-vel! animal + (vec2+ (get-vel animal) + #v(0.0 -1.0))) + (set-vel! animal #v(0.0 0.0)))) -(define pos #v(100.0 140.0)) -(define sprite #f) -(define ss 0) -(define time 0) -(define dir 0) -(define (draw alpha) - (draw-sprite (texture-atlas-ref sprite (+ 12 ss)) - pos)) -(define (update t) - (set! time (+ time 1)) - (set! pos (vec2+ pos #v((* dir 2) 0.0))) - (when (eq? (floor-remainder time 4) 0) - (set! ss (floor-remainder (+ ss dir) 4)))) +;; -------------- Initial game state -------------- + +(define llama + (make + #:initial-pos #v(100.0 100.0) + #:initial-face-dir 1)) + + +;; ------------------------------------------------ (define (load) - (set! sprite (split-texture (load-image "llama_walk.png") - 128 128))) + (set-sprite! llama + (split-texture (load-image "llama_walk.png") + 128 + 128))) + + +(define (draw alpha) + (draw-animal llama)) + + +(define (update tstep) + (update-animal llama tstep)) + (define (key-press key scancode modifier repeat?) (case key ((q) (abort-game)) - ((right) (set! dir 1)) - ((left) (set! dir -1)))) + ((right) (set-walk-direction! llama 1)) + ((left) (set-walk-direction! llama -1)))) + ;;((space) (accelerate llama #v(0.0 10.0))))) (define (key-release key scancode modifier) (case key - ((right) (set! dir 0)) - ((left) (set! dir 0)))) + ((right) (set-walk-direction! llama 0)) + ((left) (set-walk-direction! llama 0)) + ((space) (set-vel! llama #v(0.0 20.0))))) (run-game #:window-title "Hey Llama!" #:load load #:draw draw #:key-press key-press + #:update-hz 60 #:key-release key-release #:update update) -- cgit v1.2.3