From b468bab15963112ec140aca52fc5c00eb2acb59c Mon Sep 17 00:00:00 2001 From: Amy Grinn Date: Fri, 20 Dec 2024 09:16:30 -0500 Subject: [PATCH] Using menu item actions instead of type and payload --- game.scm | 55 +++++++++++++++++++++++-------------------------------- 1 file changed, 23 insertions(+), 32 deletions(-) diff --git a/game.scm b/game.scm index 3f26f6b..3819cb9 100644 --- a/game.scm +++ b/game.scm @@ -307,15 +307,21 @@ (page menu-state-page set-menu-state-page!) (history menu-state-history set-menu-state-history!)) -(define-record-type - (_make-menu-item name type payload) - menu-item? - (name menu-item-name) - (type menu-item-type) - (payload menu-item-payload)) +(define (menu-action:submenu menu) + (lambda () + (push-menu-history!) + (set-menu! menu) + (set-menu-index! -1))) -(define* (make-menu-item name type #:optional payload) - (_make-menu-item name type payload)) +(define (menu-action:load-level level) + (lambda () + (hide-menu!) + (load-level! level))) + +(define (menu-action:credits) + (hide-menu!) + (set! *level-last* *level-idx*) + (load-level! (vector-length levels))) ;; Menu constants (define center (vec2 (* 10.0 tile-width) (* 7.0 tile-height))) @@ -324,13 +330,13 @@ (let ((items (make-vector (vector-length levels)))) (do ((i 0 (1+ i))) ((= i (vector-length levels))) - (vector-set! items i (make-menu-item (string-append "Level " (number->string i)) - 'level i))) + (vector-set! items i (cons (string-append "Level " (number->string i)) + (menu-action:load-level i)))) (make-menu "Select Level" items))) (define menu:main - (make-menu "Menu" (vector (make-menu-item "Select Level" - 'menu menu:level-select) - (make-menu-item "Credits" 'credits)))) + (make-menu "Menu" (vector (cons "Select Level" + (menu-action:submenu menu:level-select)) + (cons "Credits" menu-action:credits)))) ;; -1 for the index means 'Back' will be indicated first (define *menu* (make-menu-state menu:main -1 0 '())) @@ -388,23 +394,9 @@ (set-menu-history! rest)))) (define (menu-select!) - (if (= (current-menu-index) -1) + (if (= (current-menu-index) -1) ;; back button pressed (pop-menu-history!) - (let* ((item (vector-ref (menu-items (current-menu)) (current-menu-index))) - (type (menu-item-type item)) - (payload (menu-item-payload item))) - (match type - ('menu - (push-menu-history!) - (set-menu! payload) - (set-menu-index! -1)) - ('level - (hide-menu!) - (load-level! payload)) - ('credits - (hide-menu!) - (set! *level-last* *level-idx*) - (load-level! (vector-length levels))))))) + ((cdr (vector-ref (menu-items (current-menu)) (current-menu-index)))))) (define (reset-game!) (run-script @@ -805,9 +797,8 @@ (< (+ r r-page-offset) (1- num-items)))) "...") (else - (menu-item-name - (vector-ref (menu-items (current-menu)) - (+ r r-page-offset))))) + (car (vector-ref (menu-items (current-menu)) + (+ r r-page-offset))))) text-x (+ y text-offset-y))))))) (define (draw-level)