bloatrunner/game/main.scm

61 lines
1.7 KiB
Scheme
Raw Normal View History

2024-05-17 23:49:31 +02:00
(define-module (game main)
#:use-module (game model level)
#:use-module (game render level)
2024-05-17 23:49:31 +02:00
#:use-module (chickadee)
2024-05-19 18:48:18 +02:00
#:use-module (chickadee math rect)
2024-05-17 23:49:31 +02:00
#:use-module (chickadee math vector)
2024-05-19 18:48:18 +02:00
#:use-module (chickadee graphics color)
2024-05-17 23:49:31 +02:00
#:use-module (chickadee graphics sprite)
#:use-module (chickadee graphics texture)
2024-05-19 18:48:18 +02:00
#:use-module (chickadee graphics text)
#:use-module (chickadee graphics tile-map)
2024-05-17 23:49:31 +02:00
#:use-module (system repl coop-server)
#:export (launch-game))
2024-05-19 21:54:30 +02:00
(define hero-texture #f)
2024-05-19 18:48:18 +02:00
(define hero-atlas #f)
(define hero-position (vec2 32.0 32.0))
2024-05-19 21:54:30 +02:00
(define level #f)
2024-05-17 23:49:31 +02:00
(define repl #f)
(define (load)
(render-level-load)
2024-05-19 21:54:30 +02:00
(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)
2024-05-17 23:49:31 +02:00
(set! repl (spawn-coop-repl-server)))
2024-05-19 18:48:18 +02:00
(define (update dt)
(poll-coop-repl-server repl)
(set-vec2-x! hero-position
(floor-remainder (+ (vec2-x hero-position) (* 50.0 dt)) 608.0)))
2024-05-19 18:48:18 +02:00
(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))
2024-05-19 21:54:30 +02:00
(draw-text (format #f "~A" i) (vec2 x y) #:color white))
2024-05-19 18:48:18 +02:00
)
2024-05-19 21:54:30 +02:00
2024-05-17 23:49:31 +02:00
(define (draw _alpha)
(render-level-draw level)
(let ((hero-index (+ 56 (remainder (inexact->exact (floor (vec2-x hero-position))) 8))))
2024-05-19 18:48:18 +02:00
(draw-sprite
(texture-atlas-ref hero-atlas hero-index)
(vec2+ hero-position (vec2 16.0 0.0))))
2024-05-19 21:54:30 +02:00
)
2024-05-17 23:49:31 +02:00
(define (launch-game args)
2024-05-19 18:48:18 +02:00
(run-game #:load (lambda () (load))
#:update (lambda (dt) (update dt))
#:draw (lambda (alpha) (draw alpha))))
2024-05-19 21:54:30 +02:00