summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRicardo Wurmus <rekado@elephly.net>2018-07-15 22:09:22 +0200
committerRicardo Wurmus <rekado@elephly.net>2018-07-27 17:15:44 +0200
commit2c7900384f55caa400e800b07d85b89995d04690 (patch)
treed3de588456b74a28fc632d89ef8825d76046774d
parent0b5067494a8904c999bdfbb78a88d0813500ea49 (diff)
Revamp motion + add support for actions.
-rw-r--r--scenes/game.scm62
1 files changed, 37 insertions, 25 deletions
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