aboutsummaryrefslogtreecommitdiff
path: root/demo/topdown.scm
blob: b95ccc9e018770b2441e80dece04aa752b969b6b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
(import scheme
        (chicken base)
        (prefix sdl2 "sdl2:")
        (prefix sdl2-ttf "ttf:")
        (prefix sdl2-image "img:")
        downstroke/engine
        downstroke/world
        downstroke/tilemap
        downstroke/renderer
        downstroke/input
        downstroke/physics
        downstroke/assets
        downstroke/entity
        downstroke/scene-loader)

(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)))
        (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)))
        (scene-entities-set! scene (list player))))))

(game-run! *game*)