bloatrunner/game/main.scm

86 lines
2.4 KiB
Scheme
Raw Normal View History

2024-05-17 23:49:31 +02:00
(define-module (game main)
#:use-module (ice-9 pretty-print)
#:use-module (game model level)
#:use-module (game model hero)
#:use-module (game model other)
#:use-module (game render level)
#:use-module (game render hero)
#:use-module (game render other)
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)
#:use-module (srfi srfi-1)
2024-05-17 23:49:31 +02:00
#:export (launch-game))
2024-05-19 21:54:30 +02:00
(define level #f)
2024-05-17 23:49:31 +02:00
(define repl #f)
(define hero #f)
(define others #f)
(define inputs '())
2024-05-17 23:49:31 +02:00
(define (load)
(render-level-load)
(render-hero-load)
(render-other-load)
2024-05-19 21:54:30 +02:00
(set! level (level-parse-file "assets/levels/level-1.map"))
(render-level-set! level)
2024-05-21 12:48:43 +02:00
(set! hero (hero-load level))
(set! others (other-load-others 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! hero (hero-update hero level inputs dt))
2024-05-23 17:28:55 +02:00
(set! others (map (lambda (other) (other-update other level hero others dt)) others))
)
2024-05-19 21:54:30 +02:00
2024-05-17 23:49:31 +02:00
(define (draw _alpha)
(render-level-draw level)
(render-hero hero)
(for-each render-other others)
2024-05-19 21:54:30 +02:00
)
2024-05-17 23:49:31 +02:00
(define (set-add set item)
(if (member item set)
set
(cons item set)))
(define (key-press key _modifiers _repeat?)
(set! inputs
(cond ((eq? key 'left) (set-add inputs 'left))
((eq? key 'right) (set-add inputs 'right))
((eq? key 'up) (set-add inputs 'up))
((eq? key 'down) (set-add inputs 'down ))
((eq? key 'space) (set-add inputs 'dig ))
(else inputs)))
)
(define (key-release key _modifiers)
(set! inputs
(cond ((eq? key 'left) (delete 'left inputs))
((eq? key 'right) (delete 'right inputs))
((eq? key 'up) (delete 'up inputs))
((eq? key 'down) (delete 'down inputs))
((eq? key 'space) (delete 'dig inputs))
(else inputs))))
2024-05-17 23:49:31 +02:00
(define (launch-game args)
(run-game
2024-05-21 21:45:48 +02:00
#:window-title "Bloatrunner"
#:load (lambda () (load))
#:update (lambda (dt) (update dt))
#:draw (lambda (alpha) (draw alpha))
#:key-press (lambda (key modifiers repeat?) (key-press key modifiers repeat?))
#:key-release (lambda (key modifiers) (key-release key modifiers))
))
2024-05-19 21:54:30 +02:00