aboutsummaryrefslogtreecommitdiff
path: root/engine.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 /engine.scm
parent9e8b75f9949259ef01942cd3717b79b044efddf7 (diff)
Move the engine-update to the scene
Diffstat (limited to 'engine.scm')
-rw-r--r--engine.scm28
1 files changed, 28 insertions, 0 deletions
diff --git a/engine.scm b/engine.scm
index e3a1fb0..95d33b9 100644
--- a/engine.scm
+++ b/engine.scm
@@ -10,6 +10,8 @@
defstruct
downstroke-world
downstroke-input
+ downstroke-physics
+ downstroke-tween
downstroke-assets
downstroke-renderer)
@@ -39,6 +41,26 @@
;; ── Public constructor wrapper ─────────────────────────────────────────────
;; Wraps the auto-generated make-game (renamed to make-game*) with default values
+;; ── Default engine update ────────────────────────────────────────────────
+;; Standard physics pipeline: tweens → acceleration → gravity → velocity →
+;; tile collisions → ground detection → entity collisions → group sync.
+;; Runs automatically each frame unless overridden or disabled.
+
+(define (default-engine-update game dt)
+ (let ((scene (game-scene game)))
+ (when scene
+ (let* ((scene (scene-map-entities scene (cut step-tweens <> scene dt)))
+ (scene (scene-map-entities scene (cut apply-acceleration <> scene dt)))
+ (scene (scene-map-entities scene (cut apply-gravity <> scene dt)))
+ (scene (scene-map-entities scene (cut apply-velocity-x <> scene dt)))
+ (scene (scene-map-entities scene (cut resolve-tile-collisions-x <> scene dt)))
+ (scene (scene-map-entities scene (cut apply-velocity-y <> scene dt)))
+ (scene (scene-map-entities scene (cut resolve-tile-collisions-y <> scene dt)))
+ (scene (scene-map-entities scene (cut detect-on-solid <> scene dt)))
+ (scene (scene-transform-entities scene resolve-entity-collisions))
+ (scene (scene-transform-entities scene sync-groups)))
+ (game-scene-set! game scene)))))
+
(define (make-game #!key
(title "Downstroke Game")
(width 640) (height 480)
@@ -192,6 +214,12 @@
(game-input-config game))))
(game-input-set! game input)
(unless (input-held? input 'quit)
+ (let ((scene (game-scene game)))
+ (when scene
+ (let ((eu (scene-engine-update scene)))
+ (cond
+ ((procedure? eu) (eu game dt))
+ ((not eu) (default-engine-update game dt))))))
(receive (update-fn render-fn) (resolve-hooks game)
(when update-fn (update-fn game dt))
(when (game-scene game)