diff options
| author | Gene Pasquet <dev@etenil.net> | 2026-04-05 19:47:05 +0100 |
|---|---|---|
| committer | Gene Pasquet <dev@etenil.net> | 2026-04-05 19:47:05 +0100 |
| commit | 027053b11a3a5d861ed2fa2db245388bd95ac246 (patch) | |
| tree | 84dfd90642bb6d8eb4e0e3fa3a9d651ba29b41e8 /demo/sandbox.scm | |
| parent | 927f37639a3d5a0d881a5c8709f2cf577aadb15e (diff) | |
Progress
Diffstat (limited to 'demo/sandbox.scm')
| -rw-r--r-- | demo/sandbox.scm | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/demo/sandbox.scm b/demo/sandbox.scm new file mode 100644 index 0000000..1be3968 --- /dev/null +++ b/demo/sandbox.scm @@ -0,0 +1,71 @@ +(import scheme + (chicken base) + (chicken random) + (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) + +(define *elapsed* 0) +(define *respawn-interval* 10000) + +(define (spawn-entities) + (let loop ((i 0) (acc '())) + (if (= i 10) + acc + (loop (+ i 1) + (cons (list #:type 'box + #:x (+ 30 (* i 55)) + #:y (+ 10 (* (pseudo-random-integer 4) 20)) + #:width 16 #:height 16 + #:vx 0 #:vy 0 + #:gravity? #t + #:on-ground? #f + #:solid? #t + #:tile-id 1) + acc))))) + +(define *game* + (make-game + title: "Demo: Physics Sandbox" width: 600 height: 400 + + preload: (lambda (game) + (game-asset-set! game 'tilemap + (load-tilemap "demo/assets/level-0.tmx"))) + + create: (lambda (game) + (let* ((tm (game-asset game 'tilemap)) + (tex (sdl2:create-texture-from-surface + (game-renderer game) + (tileset-image (tilemap-tileset tm))))) + (game-scene-set! game + (make-scene + entities: (spawn-entities) + tilemap: tm + camera: (make-camera x: 0 y: 0) + tileset-texture: tex)))) + + update: (lambda (game dt) + (let* ((scene (game-scene game)) + (tm (scene-tilemap scene))) + (set! *elapsed* (+ *elapsed* dt)) + (when (>= *elapsed* *respawn-interval*) + (set! *elapsed* 0) + (scene-entities-set! scene (spawn-entities))) + (scene-update-entities scene + apply-gravity + apply-velocity-x + (lambda (e) (resolve-tile-collisions-x e tm)) + apply-velocity-y + (lambda (e) (resolve-tile-collisions-y e tm)) + (lambda (e) (detect-ground e tm))) + (scene-resolve-collisions scene))))) + +(game-run! *game*) |
