diff options
Diffstat (limited to 'demo')
| -rw-r--r-- | demo/platformer.scm | 10 | ||||
| -rw-r--r-- | demo/sandbox.scm | 23 | ||||
| -rw-r--r-- | demo/scaling.scm | 3 | ||||
| -rw-r--r-- | demo/shmup.scm | 54 | ||||
| -rw-r--r-- | demo/topdown.scm | 10 | ||||
| -rw-r--r-- | demo/tweens.scm | 5 |
6 files changed, 58 insertions, 47 deletions
diff --git a/demo/platformer.scm b/demo/platformer.scm index ff5caf7..3bad9bd 100644 --- a/demo/platformer.scm +++ b/demo/platformer.scm @@ -55,15 +55,17 @@ (load-sounds! '((jump . "demo/assets/jump.wav")))) create: (lambda (game) - (let ((scene (game-load-scene! game "demo/assets/level-0.tmx"))) - (scene-add-entity scene (make-player)) - (scene-camera-target-set! scene 'player))) + (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)) (tm (scene-tilemap scene)) (player (update-player (car (scene-entities scene)) input tm))) - (scene-entities-set! scene (list player)))))) + (game-scene-set! game + (update-scene scene entities: (list player))))))) (game-run! *game*) diff --git a/demo/sandbox.scm b/demo/sandbox.scm index 319ef80..6a6030f 100644 --- a/demo/sandbox.scm +++ b/demo/sandbox.scm @@ -159,16 +159,17 @@ update: (lambda (game dt) (set! *demo-t* (+ *demo-t* dt)) - (let* ((scene (game-scene game)) - (tm (scene-tilemap scene))) - (scene-update-entities scene (cut step-tweens <> dt)) - (scene-update-entities scene (cut integrate-entity <> dt tm)) - (scene-sync-groups! scene) - (scene-resolve-collisions scene) - (scene-update-entities scene - (lambda (e) - (if (entity-ref e #:gravity? #f) - (detect-on-solid e tm (scene-entities scene)) - e))))))) + (let ((tm (scene-tilemap (game-scene game)))) + (game-scene-set! game + (chain (game-scene game) + (scene-update-entities _ (cut step-tweens <> dt)) + (scene-update-entities _ (cut integrate-entity <> dt tm)) + (scene-sync-groups _) + (scene-resolve-collisions _) + (scene-update-entities _ + (lambda (e) + (if (entity-ref e #:gravity? #f) + (detect-on-solid e tm (scene-entities _)) + e))))))))) (game-run! *game*) diff --git a/demo/scaling.scm b/demo/scaling.scm index 983e583..f8bfdfb 100644 --- a/demo/scaling.scm +++ b/demo/scaling.scm @@ -53,7 +53,8 @@ (ny (max 0 (min (- +height+ +box-size+) (+ (entity-ref box #:y 0) vy)))) (box (entity-set (entity-set box #:x nx) #:y ny))) - (scene-entities-set! scene (list box)))) + (game-scene-set! game + (update-scene scene entities: (list box))))) render: (lambda (game) (let* ((renderer (game-renderer game)) diff --git a/demo/shmup.scm b/demo/shmup.scm index 97779a8..ab09957 100644 --- a/demo/shmup.scm +++ b/demo/shmup.scm @@ -61,6 +61,10 @@ (let ((y (entity-ref e #:y 0))) (and (> y -20) (< y (+ +screen-height+ 20))))) +(define (scene-remove-dead scene) + (let ((dead (find-dead (scene-entities scene)))) + (scene-filter-entities scene (lambda (e) (not (memq e dead)))))) + ;; ── Update helpers ─────────────────────────────────────────────────────────── (define (player-vx input) @@ -72,26 +76,27 @@ (entity-set player #:x (max 0 (min (- +screen-width+ 16) (entity-ref player #:x 0))))) -(define (update-player player input scene) +(define (update-player player input) (let ((updated (chain player (entity-set _ #:vx (player-vx input)) (apply-velocity-x _) (clamp-player-x _)))) (when (input-pressed? input 'a) - (play-sound 'shoot) - (scene-add-entity scene - (make-bullet (+ (entity-ref updated #:x 0) 6) 340))) - updated)) + (play-sound 'shoot)) + (if (input-pressed? input 'a) + (values updated + (list (make-bullet (+ (entity-ref updated #:x 0) 6) 340))) + (values updated '())))) (define (move-projectile e) (chain e (entity-set _ #:x (+ (entity-ref e #:x 0) (entity-ref e #:vx 0))) (entity-set _ #:y (+ (entity-ref e #:y 0) (entity-ref e #:vy 0))))) -(define (maybe-spawn-enemy! scene) - (when (zero? (modulo *frame-count* +spawn-interval+)) - (scene-add-entity scene - (make-enemy (+ 20 (* (pseudo-random-integer 28) 20)))))) +(define (maybe-spawn-enemies) + (if (zero? (modulo *frame-count* +spawn-interval+)) + (list (make-enemy (+ 20 (* (pseudo-random-integer 28) 20)))) + '())) ;; ── Render ─────────────────────────────────────────────────────────────────── @@ -132,22 +137,21 @@ update: (lambda (game dt) (set! *frame-count* (+ *frame-count* 1)) - (let* ((input (game-input game)) - (scene (game-scene game)) - (player (car (scene-entities scene))) - (player (update-player player input scene))) - (maybe-spawn-enemy! scene) - ;; Replace player, then move all projectiles - (scene-entities-set! scene - (cons player (filter (lambda (e) (not (eq? (entity-type e) 'player))) - (scene-entities scene)))) - (scene-update-entities scene - (lambda (e) (if (eq? (entity-type e) 'player) e (move-projectile e)))) - ;; Remove bullet/enemy collisions, then out-of-bounds - (let ((dead (find-dead (scene-entities scene)))) - (scene-filter-entities scene (lambda (e) (not (memq e dead))))) - (scene-filter-entities scene - (lambda (e) (or (eq? (entity-type e) 'player) (in-bounds? e)))))) + (let* ((input (game-input game)) + (scene (game-scene game)) + (player (car (scene-entities scene)))) + (receive (player new-entities) (update-player player input) + (let* ((others (filter (lambda (e) (not (eq? (entity-type e) 'player))) + (scene-entities scene))) + (spawned (maybe-spawn-enemies)) + (all (cons player (append new-entities spawned others)))) + (game-scene-set! game + (chain (update-scene scene entities: all) + (scene-update-entities _ + (lambda (e) (if (eq? (entity-type e) 'player) e (move-projectile e)))) + (scene-remove-dead _) + (scene-filter-entities _ + (lambda (e) (or (eq? (entity-type e) 'player) (in-bounds? e)))))))))) render: (lambda (game) (for-each (cut draw-shmup-entity (game-renderer game) <>) diff --git a/demo/topdown.scm b/demo/topdown.scm index 7e5bd62..1bf6536 100644 --- a/demo/topdown.scm +++ b/demo/topdown.scm @@ -43,15 +43,17 @@ title: "Demo: Top-down Explorer" width: 600 height: 400 create: (lambda (game) - (let ((scene (game-load-scene! game "demo/assets/level-0.tmx"))) - (scene-add-entity scene (make-player)) - (scene-camera-target-set! scene 'player))) + (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)))) - (scene-entities-set! scene (list player)))))) + (game-scene-set! game + (update-scene scene entities: (list player))))))) (game-run! *game*) diff --git a/demo/tweens.scm b/demo/tweens.scm index 7ed2372..d036b6b 100644 --- a/demo/tweens.scm +++ b/demo/tweens.scm @@ -82,8 +82,9 @@ background: '(26 28 34)))) update: (lambda (game dt) - (scene-update-entities (game-scene game) - (cut step-tweens <> dt))) + (game-scene-set! game + (scene-update-entities (game-scene game) + (cut step-tweens <> dt)))) render: (lambda (game) (draw-ease-labels! (game-renderer game) |
