diff options
| author | Gene Pasquet <dev@etenil.net> | 2026-04-08 07:08:54 +0100 |
|---|---|---|
| committer | Gene Pasquet <dev@etenil.net> | 2026-04-08 07:08:54 +0100 |
| commit | afc30a12e25215ff5e9226c3b4f8fd127d9a4d68 (patch) | |
| tree | f736393fb8ebfd8982a4b79310a08c57ee430ff0 /demo/sandbox.scm | |
| parent | 9e8b75f9949259ef01942cd3717b79b044efddf7 (diff) | |
Move the engine-update to the scene
Diffstat (limited to 'demo/sandbox.scm')
| -rw-r--r-- | demo/sandbox.scm | 46 |
1 files changed, 11 insertions, 35 deletions
diff --git a/demo/sandbox.scm b/demo/sandbox.scm index a34ebd9..09c31fb 100644 --- a/demo/sandbox.scm +++ b/demo/sandbox.scm @@ -2,7 +2,6 @@ (chicken base) (chicken random) (only srfi-1 iota take) - (only srfi-197 chain) (prefix sdl2 "sdl2:") (prefix sdl2-ttf "ttf:") (prefix sdl2-image "img:") @@ -73,39 +72,18 @@ #:tile-id 1 #:demo-id id #:demo-since-jump 0)) -;; ── Per-entity physics ────────────────────────────────────────────────────── +;; ── Per-entity intent ─────────────────────────────────────────────────────── -(define (run-physics e tm) - (chain e - (apply-gravity _) - (apply-velocity-x _) - (resolve-tile-collisions-x _ tm) - (apply-velocity-y _) - (resolve-tile-collisions-y _ tm))) - -(define (update-demo-bot e dt tm) +(define (update-demo-bot e dt) (let* ((id (entity-ref e #:demo-id 0)) (phase (modulo (+ *demo-t* (* id 400.0)) +demo-bot-cycle-ms+)) (vx (if (< phase +demo-bot-half-cycle-ms+) 3.0 -3.0)) - (e (entity-set e #:vx vx)) (ground? (entity-ref e #:on-ground? #f)) (since (+ (entity-ref e #:demo-since-jump 0) dt)) (jump? (and ground? (>= since +demo-bot-jump-interval-ms+))) - (since (if jump? 0 since))) - (chain (entity-set e #:demo-since-jump since) - (apply-jump _ jump?) - (apply-acceleration _) - (run-physics _ tm)))) - -(define (integrate-entity e dt tm) - (case (entity-type e) - ((demo-bot) (update-demo-bot e dt tm)) - ((box) (run-physics e tm)) - (else - (if (and (entity-ref e #:group-origin? #f) - (entity-ref e #:gravity? #f)) - (run-physics e tm) - e)))) + (since (if jump? 0 since)) + (ay (if jump? (- *jump-force*) 0))) + (entity-set (entity-set (entity-set e #:vx vx) #:demo-since-jump since) #:ay ay))) ;; ── Scene builder ─────────────────────────────────────────────────────────── @@ -159,14 +137,12 @@ update: (lambda (game dt) (set! *demo-t* (+ *demo-t* dt)) - (let ((tm (scene-tilemap (game-scene game)))) + (let ((scene (game-scene game))) (game-scene-set! game - (chain (game-scene game) - (scene-map-entities _ (cut step-tweens <> dt)) - (scene-map-entities _ (cut integrate-entity <> dt tm)) - (scene-transform-entities _ sync-groups) - (scene-transform-entities _ resolve-entity-collisions) - (scene-map-entities _ - (lambda (e) (detect-on-solid e tm (scene-entities _)))))))))) + (scene-map-entities scene + (lambda (e) + (if (eq? (entity-type e) 'demo-bot) + (update-demo-bot e dt) + e)))))))) (game-run! *game*) |
