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 --- engine.scm | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'engine.scm') 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) -- cgit v1.2.3