(import scheme (chicken base) (only srfi-1 iota) (prefix sdl2 "sdl2:") (prefix sdl2-ttf "ttf:") downstroke-engine downstroke-world downstroke-renderer downstroke-entity downstroke-prefabs downstroke-scene-loader downstroke-tilemap) ;; ── State ──────────────────────────────────────────────────────────────────── (define *label-font* #f) (define *title-font* #f) (define (make-demo-tilemap ts tw th gw gh) (let* ((ncols (inexact->exact (ceiling (/ gw tw)))) (nrows (inexact->exact (ceiling (/ gh th)))) (empty-row (map (lambda (_) 0) (iota ncols))) (floor-row (map (lambda (_) 20) (iota ncols))) (map-data (append (map (lambda (_) empty-row) (iota (- nrows 1))) (list floor-row)))) (make-tilemap width: ncols height: nrows tilewidth: tw tileheight: th tileset-source: "" tileset: ts layers: (list (make-layer name: "ground" width: ncols height: nrows map: map-data)) objects: '()))) (define (make-demo-scene game) (let* ((prefabs (load-prefabs "demo/assets/animation-prefabs.scm" (engine-mixins) '())) (ts (game-load-tileset! game 'tileset "demo/assets/monochrome_transparent.tsx")) (tw (tileset-tilewidth ts)) (th (tileset-tileheight ts)) (tex (create-texture-from-tileset (game-renderer game) ts)) (tm (make-demo-tilemap ts tw th (game-width game) (game-height game))) (entities (list (instantiate-prefab prefabs 'std-frames 80 80 tw th) (instantiate-prefab prefabs 'timed-frames 220 60 tw th)))) (make-scene entities: entities tilemap: tm tileset: #f camera: (make-camera x: 0 y: 0) tileset-texture: tex camera-target: #f background: '(32 34 40)))) (define *game* (make-game title: "Demo: Animation" width: 640 height: 480 preload: (lambda (_game) (set! *title-font* (ttf:open-font "demo/assets/DejaVuSans.ttf" 22)) (set! *label-font* (ttf:open-font "demo/assets/DejaVuSans.ttf" 13))) create: (lambda (game) (game-scene-set! game (make-demo-scene game))))) (game-run! *game*)