From 2c7900384f55caa400e800b07d85b89995d04690 Mon Sep 17 00:00:00 2001 From: Ricardo Wurmus Date: Sun, 15 Jul 2018 22:09:22 +0200 Subject: Revamp motion + add support for actions. --- scenes/game.scm | 62 ++++++++++++++++++++++++++++++++++----------------------- 1 file changed, 37 insertions(+), 25 deletions(-) (limited to 'scenes') diff --git a/scenes/game.scm b/scenes/game.scm index d2c820e..1ad4232 100644 --- a/scenes/game.scm +++ b/scenes/game.scm @@ -236,34 +236,46 @@ (unless (null? released) (walk player released 'stop))) - ;; React to current key presses - (let ((active (fold (lambda (direction acc) - (if (key-pressed? direction) - (cons direction acc) - acc)) - '() - '(left right up down)))) - (if (null? active) - (walk player '(idle)) - (walk player active)) - (set! (previous-key-presses player) active)) - - ;; Only move when the new position does not result in a collision. + (if (talking? player) + ;; Stop conversation on ESC. + (when (key-pressed? 'escape) + (stop-talking player)) + + ;; React to current key presses if there is no current dialogue. + (let ((active (fold (lambda (direction acc) + (if (key-pressed? direction) + (cons direction acc) + acc)) + '() + '(left right up down)))) + (if (null? active) + (walk player '(idle)) + (walk player active)) + (set! (previous-key-presses player) active))) + (let* ((pos (position player)) (vel (velocity player))) (vec2-add! pos vel) - (when (collides? player game #:layer "collision") - (vec2-sub! pos vel)) - - ;; TODO: express this on the map instead? - ;; (when (> (vec2-x pos) 294.0) - ;; (set-vec2-x! pos 294.0)) - ;; (when (< (vec2-x pos) -6.0) - ;; (set-vec2-x! pos -6.0)) - ;; (when (> (vec2-y pos) (- %height 32.0)) - ;; (set-vec2-y! pos (- %height 32.0))) - ;; (when (< (vec2-y pos) 0.0) - ;; (set-vec2-y! pos 0.0)) + (and=> (collides? player game #:layer "collision") + (lambda (obj) + (match (map-object-type obj) + ;; Reset when the new position is invalid. + ('obstacle + (vec2-sub! pos vel)) + ('action + (when (key-pressed? 'space) + (match (map-object-name obj) + ("enter-house" + (teleport player 560.0 1800.0) + ;; TODO: change music? + (pause-music)) + ("exit-house" + (teleport player 620.0 1100.0) + (resume-music)) + ("talk-to-reaper" + (talk player (child-ref game 'reaper))) + (_ #t)))) + (_ #t)))) ;; Keep the player in the centre (move-to game -- cgit v1.2.3