(import scheme (chicken base) (only srfi-197 chain) (prefix sdl2 "sdl2:") (prefix sdl2-ttf "ttf:") (prefix sdl2-image "img:") downstroke-engine downstroke-world downstroke-tilemap downstroke-renderer downstroke-input downstroke-physics downstroke-assets downstroke-entity downstroke-scene-loader) (define (make-player) (list #:type 'player #:x 100 #:y 100 #:width 16 #:height 16 #:vx 0 #:vy 0 #:gravity? #f #:tile-id 1 #:tags '(player))) (define (input->velocity input) (values (+ (if (input-held? input 'left) -3 0) (if (input-held? input 'right) 3 0)) (+ (if (input-held? input 'up) -3 0) (if (input-held? input 'down) 3 0)))) (define (update-player player input tm) (receive (dx dy) (input->velocity input) (chain player (entity-set _ #:vx dx) (entity-set _ #:vy dy) (apply-velocity-x _) (resolve-tile-collisions-x _ tm) (apply-velocity-y _) (resolve-tile-collisions-y _ tm)))) (define *game* (make-game title: "Demo: Top-down Explorer" width: 600 height: 400 create: (lambda (game) (game-scene-set! game (chain (game-load-scene! game "demo/assets/level-0.tmx") (scene-add-entity _ (make-player)) (update-scene _ camera-target: 'player)))) update: (lambda (game dt) (let* ((input (game-input game)) (scene (game-scene game)) (player (update-player (car (scene-entities scene)) input (scene-tilemap scene)))) (game-scene-set! game (update-scene scene entities: (list player))))))) (game-run! *game*)