Using menu item actions instead of type and payload

This commit is contained in:
Amy Grinn 2024-12-20 09:16:30 -05:00
parent b248ea72ad
commit b468bab159
No known key found for this signature in database
GPG key ID: 6B558BED1DCF3192

View file

@ -307,15 +307,21 @@
(page menu-state-page set-menu-state-page!)
(history menu-state-history set-menu-state-history!))
(define-record-type <menu-item>
(_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,8 +797,7 @@
(< (+ r r-page-offset) (1- num-items))))
"...")
(else
(menu-item-name
(vector-ref (menu-items (current-menu))
(car (vector-ref (menu-items (current-menu))
(+ r r-page-offset)))))
text-x (+ y text-offset-y)))))))