From ad301f92b95d6884665ec9a65f6bdce44bef40bf Mon Sep 17 00:00:00 2001 From: Ricardo Wurmus Date: Mon, 16 Jul 2018 13:03:20 +0200 Subject: Get character start positions from the map. --- scenes/game.scm | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/scenes/game.scm b/scenes/game.scm index 70dfd1f..2c061ce 100644 --- a/scenes/game.scm +++ b/scenes/game.scm @@ -145,10 +145,30 @@ (define-asset text-bubble (load-image "assets/images/paper.png")) + +(define (start-position game name) + "Look up the start position for an object with the given NAME in the +map's object layer." + (let ((positions + (filter (lambda (obj) + (eq? 'start-position + (map-object-type obj))) + (object-layer-objects + (tile-map-layer-ref (asset-ref (tile-map game)) "collision")))) + (offset (origin game))) + (or (and=> (find (lambda (obj) + (equal? (map-object-name obj) name)) + positions) + (lambda (obj) + (let ((shape (map-object-shape obj))) + (vec2 (+ (vec2-x offset) (rect-x shape)) + (+ (vec2-y offset) (rect-y shape)))))) + (vec2 0.0 0.0)))) + (define-method (populate (game )) (let ((player (make #:name 'player - #:position (vec2 620.0 1100.0) + #:position (start-position game "player") #:children ;; Simple player shadow. This should better be done ;; with a single ellipse shader. -- cgit v1.2.3