diff options
Diffstat (limited to 'demo')
| -rw-r--r-- | demo/menu.scm | 70 | ||||
| -rw-r--r-- | demo/platformer.scm | 4 | ||||
| -rw-r--r-- | demo/spritefont.scm | 51 |
3 files changed, 125 insertions, 0 deletions
diff --git a/demo/menu.scm b/demo/menu.scm new file mode 100644 index 0000000..2564bd0 --- /dev/null +++ b/demo/menu.scm @@ -0,0 +1,70 @@ +(import scheme + (chicken base) + (prefix sdl2 "sdl2:") + (prefix sdl2-ttf "ttf:") + downstroke-engine + downstroke-renderer + downstroke-input) + +;; Global state for menu cursor +(define *menu-cursor* 0) +(define *menu-items* '("Play" "Quit")) +(define *title-font* #f) +(define *menu-font* #f) + +(define *game* + (make-game + title: "Demo: Menu System" width: 600 height: 400 + + preload: (lambda (game) + (set! *title-font* (ttf:open-font "demo/assets/DejaVuSans.ttf" 24)) + (set! *menu-font* (ttf:open-font "demo/assets/DejaVuSans.ttf" 16))) + + create: (lambda (game) + ;; Register the main-menu state + (game-add-state! game 'main-menu + (make-game-state + #:update (lambda (game dt) + (let ((input (game-input game))) + ;; Navigate menu with up/down + (when (input-pressed? input 'up) + (set! *menu-cursor* (max 0 (- *menu-cursor* 1)))) + (when (input-pressed? input 'down) + (set! *menu-cursor* (min (- (length *menu-items*) 1) (+ *menu-cursor* 1)))) + ;; Confirm selection + (when (input-pressed? input 'a) + (case *menu-cursor* + ((0) ; Play + (game-start-state! game 'playing)) + ((1) ; Quit + (sdl2:quit!) + (exit)))))) + #:render (lambda (game) + (let ((renderer (game-renderer game))) + (set! (sdl2:render-draw-color renderer) (sdl2:make-color 0 0 0 255)) + (sdl2:render-fill-rect! renderer (sdl2:make-rect 0 0 600 400)) + (let ((white (sdl2:make-color 255 255 255 255))) + (draw-ui-text renderer *title-font* "MENU DEMO" white 200 80) + (draw-menu-items renderer *menu-font* *menu-items* *menu-cursor* + 150 150 50)))))) + + ;; Register the playing state + (game-add-state! game 'playing + (make-game-state + #:update (lambda (game dt) + (let ((input (game-input game))) + ;; Return to menu on quit (Escape) + (when (input-pressed? input 'quit) + (set! *menu-cursor* 0) + (game-start-state! game 'main-menu)))) + #:render (lambda (game) + (let ((renderer (game-renderer game))) + (set! (sdl2:render-draw-color renderer) (sdl2:make-color 0 0 0 255)) + (sdl2:render-fill-rect! renderer (sdl2:make-rect 0 0 600 400)) + (let ((white (sdl2:make-color 255 255 255 255))) + (draw-ui-text renderer *menu-font* "PLAYING! PRESS ESC TO RETURN" white 120 150)))))) + + ;; Start with the main menu + (game-start-state! game 'main-menu)))) + +(game-run! *game*) diff --git a/demo/platformer.scm b/demo/platformer.scm index 09f9b56..77fef72 100644 --- a/demo/platformer.scm +++ b/demo/platformer.scm @@ -1,5 +1,6 @@ (import scheme (chicken base) + (chicken process-context) (prefix sdl2 "sdl2:") (prefix sdl2-ttf "ttf:") (prefix sdl2-image "img:") @@ -14,9 +15,12 @@ downstroke-sound downstroke-scene-loader) +(define +debug?+ (member "--debug" (command-line-arguments))) + (define *game* (make-game title: "Demo: Platformer" width: 600 height: 400 + debug?: (and +debug?+ #t) preload: (lambda (game) (init-audio!) diff --git a/demo/spritefont.scm b/demo/spritefont.scm new file mode 100644 index 0000000..8895d3c --- /dev/null +++ b/demo/spritefont.scm @@ -0,0 +1,51 @@ +(import scheme + (chicken base) + (prefix sdl2 "sdl2:") + (prefix sdl2-ttf "ttf:") + (prefix sdl2-image "img:") + downstroke-engine + downstroke-world + downstroke-tilemap + downstroke-renderer + downstroke-assets + downstroke-scene-loader) + +(define *sprite-font* #f) + +(define *game* + (make-game + title: "Demo: Sprite Font" width: 600 height: 400 + + create: (lambda (game) + (let* ((scene (game-load-scene! game "demo/assets/level-0.tmx")) + (tileset (tilemap-tileset (scene-tilemap scene)))) + ;; Create sprite font with character ranges + ;; A-M: tiles 917-929, N-Z: tiles 966-978, 0-9: tiles 868-877 + (set! *sprite-font* + (make-sprite-font* + #:tile-size 16 + #:spacing 1 + #:ranges '((#\A #\M 918) + (#\N #\Z 967) + (#\0 #\9 869)))))) + + render: (lambda (game) + (let* ((renderer (game-renderer game)) + (scene (game-scene game)) + (tileset (tilemap-tileset (scene-tilemap scene))) + (tileset-texture (scene-tileset-texture scene))) + ;; Clear background + (set! (sdl2:render-draw-color renderer) (sdl2:make-color 30 30 60 255)) + (sdl2:render-fill-rect! renderer (sdl2:make-rect 0 0 600 400)) + + ;; Draw sprite text at various positions + (draw-sprite-text renderer tileset-texture tileset *sprite-font* + "HELLO WORLD" 50 50) + (draw-sprite-text renderer tileset-texture tileset *sprite-font* + "DOWNSTROKE" 100 120) + (draw-sprite-text renderer tileset-texture tileset *sprite-font* + "ABCDEFGHIJKLMNOPQRSTUVWXYZ" 20 200) + (draw-sprite-text renderer tileset-texture tileset *sprite-font* + "0123456789" 150 280))))) + +(game-run! *game*) |
