aboutsummaryrefslogtreecommitdiff
path: root/demo/sandbox.scm
diff options
context:
space:
mode:
authorGene Pasquet <dev@etenil.net>2026-04-08 07:08:54 +0100
committerGene Pasquet <dev@etenil.net>2026-04-08 07:08:54 +0100
commitafc30a12e25215ff5e9226c3b4f8fd127d9a4d68 (patch)
treef736393fb8ebfd8982a4b79310a08c57ee430ff0 /demo/sandbox.scm
parent9e8b75f9949259ef01942cd3717b79b044efddf7 (diff)
Move the engine-update to the scene
Diffstat (limited to 'demo/sandbox.scm')
-rw-r--r--demo/sandbox.scm46
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*)