From f8cc4a748bb8b6431a1023a876745b1bb473eb19 Mon Sep 17 00:00:00 2001 From: Gene Pasquet Date: Wed, 8 Apr 2026 00:30:11 +0100 Subject: Support entity groups --- demo/topdown.scm | 49 +++++++++++++++++++++++++++++-------------------- 1 file changed, 29 insertions(+), 20 deletions(-) (limited to 'demo/topdown.scm') 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*) -- cgit v1.2.3