summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--heyllama.scm104
1 files changed, 84 insertions, 20 deletions
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 <animal> (<object>)
+ (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 <animal>
+ #: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)