aboutsummaryrefslogtreecommitdiff
path: root/demo/topdown.scm
diff options
context:
space:
mode:
Diffstat (limited to 'demo/topdown.scm')
-rw-r--r--demo/topdown.scm49
1 files changed, 29 insertions, 20 deletions
diff --git a/demo/topdown.scm b/demo/topdown.scm
index 2b3c208..7e5bd62 100644
--- a/demo/topdown.scm
+++ b/demo/topdown.scm
@@ -1,5 +1,6 @@
(import scheme
(chicken base)
+ (only srfi-197 chain)
(prefix sdl2 "sdl2:")
(prefix sdl2-ttf "ttf:")
(prefix sdl2-image "img:")
@@ -13,36 +14,44 @@
downstroke-entity
downstroke-scene-loader)
+(define (make-player)
+ (list #:type 'player
+ #:x 100 #:y 100
+ #:width 16 #:height 16
+ #:vx 0 #:vy 0
+ #:gravity? #f
+ #:tile-id 1 #:tags '(player)))
+
+(define (input->velocity input)
+ (values (+ (if (input-held? input 'left) -3 0)
+ (if (input-held? input 'right) 3 0))
+ (+ (if (input-held? input 'up) -3 0)
+ (if (input-held? input 'down) 3 0))))
+
+(define (update-player player input tm)
+ (receive (dx dy) (input->velocity input)
+ (chain player
+ (entity-set _ #:vx dx)
+ (entity-set _ #:vy dy)
+ (apply-velocity-x _)
+ (resolve-tile-collisions-x _ tm)
+ (apply-velocity-y _)
+ (resolve-tile-collisions-y _ tm))))
+
(define *game*
(make-game
title: "Demo: Top-down Explorer" width: 600 height: 400
create: (lambda (game)
- (let* ((scene (game-load-scene! game "demo/assets/level-0.tmx"))
- (player (list #:type 'player
- #:x 100 #:y 100
- #:width 16 #:height 16
- #:vx 0 #:vy 0
- #:gravity? #f
- #:tile-id 1
- #:tags '(player)))
- (_ (scene-add-entity scene player)))
+ (let ((scene (game-load-scene! game "demo/assets/level-0.tmx")))
+ (scene-add-entity scene (make-player))
(scene-camera-target-set! scene 'player)))
update: (lambda (game dt)
(let* ((input (game-input game))
(scene (game-scene game))
- (tm (scene-tilemap scene))
- (player (car (scene-entities scene)))
- (dx (+ (if (input-held? input 'left) -3 0)
- (if (input-held? input 'right) 3 0)))
- (dy (+ (if (input-held? input 'up) -3 0)
- (if (input-held? input 'down) 3 0)))
- (player (entity-set (entity-set player #:vx dx) #:vy dy))
- (player (apply-velocity-x player))
- (player (resolve-tile-collisions-x player tm))
- (player (apply-velocity-y player))
- (player (resolve-tile-collisions-y player tm)))
+ (player (update-player (car (scene-entities scene))
+ input (scene-tilemap scene))))
(scene-entities-set! scene (list player))))))
(game-run! *game*)