diff options
author | Ricardo Wurmus <rekado@elephly.net> | 2018-07-16 13:03:20 +0200 |
---|---|---|
committer | Ricardo Wurmus <rekado@elephly.net> | 2018-07-27 17:15:44 +0200 |
commit | ad301f92b95d6884665ec9a65f6bdce44bef40bf (patch) | |
tree | 467b467e2eb66c8e90a0371152e3e6895e51d9d5 /scenes/game.scm | |
parent | e7586e661c5b2d50fe236809b71907879122db63 (diff) |
Get character start positions from the map.
Diffstat (limited to 'scenes/game.scm')
-rw-r--r-- | scenes/game.scm | 22 |
1 files changed, 21 insertions, 1 deletions
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 <game>)) (let ((player (make <player> #: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. |