Using menu item actions instead of type and payload
This commit is contained in:
parent
b248ea72ad
commit
b468bab159
1 changed files with 23 additions and 32 deletions
55
game.scm
55
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 <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,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)
|
||||
|
|
Loading…
Add table
Reference in a new issue