diff options
Diffstat (limited to 'world.scm')
| -rw-r--r-- | world.scm | 18 |
1 files changed, 11 insertions, 7 deletions
@@ -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))) ) |
