(use-modules (chickadee) (chickadee math vector) (chickadee render font) (chickadee render sprite) (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)))) ;; -------------- Initial game state -------------- (define llama (make #:initial-pos #v(100.0 100.0) #:initial-face-dir 1)) ;; ------------------------------------------------ (define (load) (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-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-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)