summaryrefslogtreecommitdiff
path: root/scenes
diff options
context:
space:
mode:
authorRicardo Wurmus <rekado@elephly.net>2018-07-16 13:03:20 +0200
committerRicardo Wurmus <rekado@elephly.net>2018-07-27 17:15:44 +0200
commitad301f92b95d6884665ec9a65f6bdce44bef40bf (patch)
tree467b467e2eb66c8e90a0371152e3e6895e51d9d5 /scenes
parente7586e661c5b2d50fe236809b71907879122db63 (diff)
Get character start positions from the map.
Diffstat (limited to 'scenes')
-rw-r--r--scenes/game.scm22
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.