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 /engine.scm | |
| parent | 9e8b75f9949259ef01942cd3717b79b044efddf7 (diff) | |
Move the engine-update to the scene
Diffstat (limited to 'engine.scm')
| -rw-r--r-- | engine.scm | 28 |
1 files changed, 28 insertions, 0 deletions
@@ -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) |
