(define-module (game main) #:use-module (game model level) #:use-module (game render level) #:use-module (chickadee) #:use-module (chickadee math rect) #:use-module (chickadee math vector) #:use-module (chickadee graphics color) #:use-module (chickadee graphics sprite) #:use-module (chickadee graphics texture) #:use-module (chickadee graphics text) #:use-module (chickadee graphics tile-map) #:use-module (system repl coop-server) #:export (launch-game)) (define hero-texture #f) (define hero-atlas #f) (define hero-position (vec2 32.0 32.0)) (define level #f) (define repl #f) (define (load) (render-level-load) (set! hero-texture (load-image "assets/images/lr_penguin2.png")) (set! hero-atlas (split-texture hero-texture 32 32)) (set! level (level-parse-file "assets/levels/level-1.map")) (render-level-set! level) (set! repl (spawn-coop-repl-server))) (define (update dt) (poll-coop-repl-server repl) (set-vec2-x! hero-position (floor-remainder (+ (vec2-x hero-position) (* 50.0 dt)) 608.0))) (define (draw-hero i) (let ((x (* 64 (remainder i 8))) (y (* 32 (quotient i 8))) ) (draw-sprite (texture-atlas-ref hero-atlas i) (vec2 (+ x 16) y) #:scale (vec2 1.0 1.0)) (draw-text (format #f "~A" i) (vec2 x y) #:color white)) ) (define (draw _alpha) (render-level-draw level) (let ((hero-index (+ 56 (remainder (inexact->exact (floor (vec2-x hero-position))) 8)))) (draw-sprite (texture-atlas-ref hero-atlas hero-index) (vec2+ hero-position (vec2 16.0 0.0)))) ) (define (launch-game args) (run-game #:load (lambda () (load)) #:update (lambda (dt) (update dt)) #:draw (lambda (alpha) (draw alpha))))