From afc30a12e25215ff5e9226c3b4f8fd127d9a4d68 Mon Sep 17 00:00:00 2001 From: Gene Pasquet Date: Wed, 8 Apr 2026 07:08:54 +0100 Subject: Move the engine-update to the scene --- demo/sandbox.scm | 46 +++++++++++----------------------------------- 1 file changed, 11 insertions(+), 35 deletions(-) (limited to 'demo/sandbox.scm') 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*) -- cgit v1.2.3