From 9e8b75f9949259ef01942cd3717b79b044efddf7 Mon Sep 17 00:00:00 2001 From: Gene Pasquet Date: Wed, 8 Apr 2026 01:57:20 +0100 Subject: Refactor update pipelines --- world.scm | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) (limited to 'world.scm') diff --git a/world.scm b/world.scm index 14840c8..de9027c 100644 --- a/world.scm +++ b/world.scm @@ -45,7 +45,7 @@ (update-scene scene entities: (append (scene-entities scene) (list entity)))) - (define (scene-update-entities scene . procs) + (define (scene-map-entities scene . procs) "Apply each proc in sequence to the scene's entities; returns a new scene." (update-scene scene entities: (fold (lambda (proc es) (map proc es)) @@ -57,6 +57,11 @@ (update-scene scene entities: (filter pred (scene-entities scene)))) + (define (scene-transform-entities scene proc) + "Apply proc to the full entity list (entities → entities); returns a new scene." + (update-scene scene + entities: (proc (scene-entities scene)))) + ;; Center camera on entity. Clamps to >= 0 on both axes. ;; Returns a new camera struct. (define (camera-follow camera entity viewport-w viewport-h) @@ -105,10 +110,9 @@ (entity-ref e #:group-local-y 0)))) e))) - ;; Snap member #:x/#:y to origin + #:group-local-x/y. Returns a new scene. - (define (scene-sync-groups scene) - (let ((origins (group-origin-alist (scene-entities scene)))) - (update-scene scene - entities: (map (cut sync-member-to-origin <> origins) - (scene-entities scene))))) + ;; Snap member #:x/#:y to origin + #:group-local-x/y. + ;; Pure entities → entities function; use with scene-transform-entities. + (define (sync-groups entities) + (let ((origins (group-origin-alist entities))) + (map (cut sync-member-to-origin <> origins) entities))) ) -- cgit v1.2.3