blob: 1bf6536a34ea735d45ad0350e9fdf00e966c5a21 (
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
49
50
51
52
53
54
55
56
57
58
59
|
(import scheme
(chicken base)
(only srfi-197 chain)
(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 (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)
(game-scene-set! game
(chain (game-load-scene! game "demo/assets/level-0.tmx")
(scene-add-entity _ (make-player))
(update-scene _ camera-target: 'player))))
update: (lambda (game dt)
(let* ((input (game-input game))
(scene (game-scene game))
(player (update-player (car (scene-entities scene))
input (scene-tilemap scene))))
(game-scene-set! game
(update-scene scene entities: (list player)))))))
(game-run! *game*)
|