From 60b998758df3864b79ad2097e71761fee1e8810b Mon Sep 17 00:00:00 2001 From: Amy Grinn Date: Wed, 11 Dec 2024 10:13:20 -0500 Subject: [PATCH] Have menu open and close with Space --- game.scm | 36 ++++++++++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/game.scm b/game.scm index 1fbaba7..1e3f817 100644 --- a/game.scm +++ b/game.scm @@ -107,6 +107,10 @@ ;; Game state (define *state* #f) +;; Menu state +(define *menu* #f) +(define *menu:index* 0) + (define *actormap* (make-whactormap)) (define (call-with-goblins thunk) (actormap-churn-run! *actormap* thunk)) @@ -269,6 +273,13 @@ (load-level! *level-idx*) (media-play audio:bg-music))))) +(define (toggle-menu!) + (cond + (*menu* (set! *menu* #f)) + (else + (set! *menu* menu:main) + (set! *menu:index* 0)))) + (define (reset-game!) (run-script (lambda () @@ -607,6 +618,22 @@ (id (level-tile-id tile))) (draw-tile context tileset id (vec2-x pos) (vec2-y pos)))))) +(define menu:main #(("Select Level" . menu:level-select) + ("Credits" . menu:credits))) + +;; (define menu:level-select +;; (vector-map +;; (lambda (i val) +;; (cons (string-append "Level " (string->number i)) i)) +;; levels)) + +(define (draw-menu) + (do ((x (* 7 tile-width) (+ tile-width x))) + ((> x (* 13 tile-width))) + (do ((y 0 (+ tile-height y))) + ((> y (* 15 tile-height))) + (draw-tile context tileset 23 x y)))) + (define (draw-level) (draw-background) (for-each draw-object *objects*) @@ -750,6 +777,8 @@ (fill-text context "A -> undo" cx2 baseline)))) ('win (draw-win))) + (when *menu* + (draw-menu)) (draw-current-effect 'post) (request-animation-frame draw-callback))) (define draw-callback (procedure->external draw)) @@ -761,6 +790,7 @@ (define key:up "ArrowUp") (define key:confirm "Enter") (define key:undo "KeyZ") +(define key:menu "Space") (define (on-key-down event) (let ((key (keyboard-event-code event))) @@ -776,7 +806,9 @@ ((string=? key key:undo) (on-input-down 'undo)) ((string=? key key:confirm) - (on-input-down 'confirm))))) + (on-input-down 'confirm)) + ((string=? key key:menu) + (on-input-down 'menu))))) (define *gamepad* #f) (define *button:left* #f) @@ -849,7 +881,7 @@ (with-goblins (update-objects!))) ;; REMOVE BEFORE RELEASE!!!! ;; ('confirm (next-level!)) - )) + ('menu (toggle-menu!)))) ;; Pressing any bound input resets the game. ('win (reset-game!))))