Doing the actions when selecting menu items
This commit is contained in:
parent
dbca0ba6cf
commit
c393ab50b3
1 changed files with 27 additions and 13 deletions
40
game.scm
40
game.scm
|
@ -133,6 +133,8 @@
|
|||
load-catboss-2
|
||||
load-catboss-3))
|
||||
(define *level-idx* #f)
|
||||
;; Last level for restoring after visiting credits via the menu
|
||||
(define *level-last* #f)
|
||||
(define *gems* #f)
|
||||
(define *level* #f)
|
||||
;; Latest representation of all actors in level
|
||||
|
@ -202,7 +204,7 @@
|
|||
(define (collected-gem? idx)
|
||||
(memq idx *gems*))
|
||||
|
||||
(define (load-level! idx)
|
||||
(define (set-level! idx)
|
||||
(set! *state* 'play)
|
||||
(set! *actormap* (make-whactormap))
|
||||
(clear-snapshots!)
|
||||
|
@ -219,8 +221,7 @@
|
|||
(set! *level* (load-credits #f))
|
||||
(update-objects!)))
|
||||
|
||||
(define (next-level!)
|
||||
(let ((idx (+ *level-idx* 1)))
|
||||
(define (load-level! idx)
|
||||
;; TODO: Maybe show a little achievement popup when all gems
|
||||
;; are collected?
|
||||
(when (with-goblins ($ (level-actor *level*) 'gem-collected?))
|
||||
|
@ -235,7 +236,7 @@
|
|||
(show-effect! (make-fade-out+in-effect 1.0 k))))
|
||||
(set! *level-idx* idx)
|
||||
(save-game!)
|
||||
(load-level! idx))))
|
||||
(set-level! idx))))
|
||||
(begin
|
||||
(run-script
|
||||
(lambda ()
|
||||
|
@ -249,7 +250,10 @@
|
|||
;; text from showing up when resetting the game, set
|
||||
;; level idx to non-zero during the credits.
|
||||
(set! *level-idx* -1)
|
||||
(load-credits!)))))))
|
||||
(load-credits!))))))
|
||||
|
||||
(define (next-level!)
|
||||
(load-level! (+ *level-idx* 1)))
|
||||
|
||||
;; Auto-save/load to local storage.
|
||||
(define (save-game!)
|
||||
|
@ -267,7 +271,7 @@
|
|||
((idx gems)
|
||||
(set! *level-idx* idx)
|
||||
(set! *gems* gems)
|
||||
(load-level! *level-idx*)
|
||||
(set-level! *level-idx*)
|
||||
(media-play audio:bg-music)))))
|
||||
|
||||
;; Menu types
|
||||
|
@ -291,8 +295,8 @@
|
|||
(do ((i 0 (1+ i)))
|
||||
((= i (vector-length levels)))
|
||||
(vector-set! items i (make-menu-item (string-append "Level " (number->string i))
|
||||
'level
|
||||
(vector-ref levels i))))
|
||||
'level i)))
|
||||
|
||||
(make-menu "Select Level" items)))
|
||||
(define menu:main
|
||||
(make-menu "Menu" (vector (make-menu-item "Select Level"
|
||||
|
@ -347,7 +351,14 @@
|
|||
('menu
|
||||
(set! *menu:history* (cons (cons *menu* *menu:index*) *menu:history*))
|
||||
(set! *menu* payload)
|
||||
(set! *menu:index* -1)))))))
|
||||
(set! *menu:index* -1))
|
||||
('level
|
||||
(hide-menu!)
|
||||
(load-level! payload))
|
||||
('credits
|
||||
(hide-menu!)
|
||||
(set! *level-last* *level-idx*)
|
||||
(load-level! (vector-length levels))))))))
|
||||
|
||||
(define (reset-game!)
|
||||
(run-script
|
||||
|
@ -357,7 +368,7 @@
|
|||
(lambda (k)
|
||||
(show-effect! (make-fade-out+in-effect 2.0 k))))
|
||||
(set! *level-idx* 0)
|
||||
(load-level! 0))))
|
||||
(set-level! 0))))
|
||||
|
||||
(define (emit-pickup-particles x y)
|
||||
(run-script
|
||||
|
@ -880,8 +891,7 @@
|
|||
(fill-text context "A -> undo"
|
||||
cx2 baseline))))
|
||||
('win (draw-win)))
|
||||
(when *menu*
|
||||
(draw-menu))
|
||||
(if *menu* (draw-menu))
|
||||
(draw-current-effect 'post)
|
||||
(request-animation-frame draw-callback)))
|
||||
(define draw-callback (procedure->external draw))
|
||||
|
@ -994,7 +1004,11 @@
|
|||
('confirm (next-level!))
|
||||
('menu (show-menu!))))
|
||||
;; Pressing any bound input resets the game.
|
||||
('win (reset-game!))))))
|
||||
('win (cond
|
||||
(*level-last*
|
||||
(load-level! *level-last*)
|
||||
(set! *level-last* #f))
|
||||
(else (reset-game!))))))))
|
||||
|
||||
;; Canvas and event loop setup
|
||||
(define canvas (get-element-by-id "canvas"))
|
||||
|
|
Loading…
Add table
Reference in a new issue