diff options
| author | Gene Pasquet <dev@etenil.net> | 2026-04-05 19:47:05 +0100 |
|---|---|---|
| committer | Gene Pasquet <dev@etenil.net> | 2026-04-05 19:47:05 +0100 |
| commit | 027053b11a3a5d861ed2fa2db245388bd95ac246 (patch) | |
| tree | 84dfd90642bb6d8eb4e0e3fa3a9d651ba29b41e8 /demo/topdown.scm | |
| parent | 927f37639a3d5a0d881a5c8709f2cf577aadb15e (diff) | |
Progress
Diffstat (limited to 'demo/topdown.scm')
| -rw-r--r-- | demo/topdown.scm | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/demo/topdown.scm b/demo/topdown.scm new file mode 100644 index 0000000..9bbaf08 --- /dev/null +++ b/demo/topdown.scm @@ -0,0 +1,59 @@ +(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) + +(define *game* + (make-game + title: "Demo: Top-down Explorer" width: 600 height: 400 + + preload: (lambda (game) + (game-asset-set! game 'tilemap + (load-tilemap "demo/assets/level-0.tmx"))) + + create: (lambda (game) + (let* ((tm (game-asset game 'tilemap)) + (tex (sdl2:create-texture-from-surface + (game-renderer game) + (tileset-image (tilemap-tileset tm)))) + (player (list #:type 'player + #:x 100 #:y 100 + #:width 16 #:height 16 + #:vx 0 #:vy 0 + #:gravity? #f + #:tile-id 1))) + (game-scene-set! game + (make-scene + entities: (list player) + tilemap: tm + camera: (make-camera x: 0 y: 0) + tileset-texture: tex)))) + + 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))) + (camera-x-set! (scene-camera scene) (max 0 (- (entity-ref player #:x 0) 300))) + (camera-y-set! (scene-camera scene) (max 0 (- (entity-ref player #:y 0) 200))) + (scene-entities-set! scene (list player)))))) + +(game-run! *game*) |
