aboutsummaryrefslogtreecommitdiff
path: root/world.scm
diff options
context:
space:
mode:
authorGene Pasquet <dev@etenil.net>2026-04-08 01:57:20 +0100
committerGene Pasquet <dev@etenil.net>2026-04-08 01:57:20 +0100
commit9e8b75f9949259ef01942cd3717b79b044efddf7 (patch)
treec6b71291ade57f0560a9bbf0db9f5b66bab65cb3 /world.scm
parent84840ede6646ed793b61cdd889d3f57ab05e9311 (diff)
Refactor update pipelines
Diffstat (limited to 'world.scm')
-rw-r--r--world.scm18
1 files changed, 11 insertions, 7 deletions
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)))
)