Replace 'win state with 'credits, refactoring level drawing
This commit is contained in:
parent
b468bab159
commit
b29c13e0fc
1 changed files with 41 additions and 38 deletions
79
game.scm
79
game.scm
|
@ -228,7 +228,7 @@
|
||||||
(update-objects!)))
|
(update-objects!)))
|
||||||
|
|
||||||
(define (load-credits!)
|
(define (load-credits!)
|
||||||
(replace-game-state! 'win)
|
(replace-game-state! 'credits)
|
||||||
(set! *actormap* (make-whactormap))
|
(set! *actormap* (make-whactormap))
|
||||||
(set-vec2-y! *credits-scroll* 0.0)
|
(set-vec2-y! *credits-scroll* 0.0)
|
||||||
(clear-snapshots!)
|
(clear-snapshots!)
|
||||||
|
@ -371,14 +371,14 @@
|
||||||
|
|
||||||
(define (menu-up!)
|
(define (menu-up!)
|
||||||
(set-menu-index! (max -1 (1- (current-menu-index))))
|
(set-menu-index! (max -1 (1- (current-menu-index))))
|
||||||
(if (and (> (current-menu-page) 0)
|
(when (and (> (current-menu-page) 0)
|
||||||
(= (current-menu-index) (- (* (current-menu-page) menu:max-items) (current-menu-page) 1)))
|
(= (current-menu-index) (- (* (current-menu-page) menu:max-items) (current-menu-page) 1)))
|
||||||
(set-menu-page! (1- (current-menu-page)))))
|
(set-menu-page! (1- (current-menu-page)))))
|
||||||
|
|
||||||
(define (menu-down!)
|
(define (menu-down!)
|
||||||
(set-menu-index! (min (1- (vector-length (menu-items (current-menu)))) (1+ (current-menu-index))))
|
(set-menu-index! (min (1- (vector-length (menu-items (current-menu)))) (1+ (current-menu-index))))
|
||||||
(if (= (current-menu-index) (- (* (1+ (current-menu-page)) menu:max-items) (current-menu-page)))
|
(when (= (current-menu-index) (- (* (1+ (current-menu-page)) menu:max-items) (current-menu-page)))
|
||||||
(set-menu-page! (1+ (current-menu-page)))))
|
(set-menu-page! (1+ (current-menu-page)))))
|
||||||
|
|
||||||
(define (push-menu-history!)
|
(define (push-menu-history!)
|
||||||
(set-menu-history! (cons (cons (current-menu)
|
(set-menu-history! (cons (cons (current-menu)
|
||||||
|
@ -801,6 +801,26 @@
|
||||||
(+ r r-page-offset)))))
|
(+ r r-page-offset)))))
|
||||||
text-x (+ y text-offset-y)))))))
|
text-x (+ y text-offset-y)))))))
|
||||||
|
|
||||||
|
(define (draw-controls)
|
||||||
|
(let ((cx1 (/ game-width 4.0))
|
||||||
|
(cx2 (* game-width 0.75))
|
||||||
|
(baseline (/ game-height 2.0)))
|
||||||
|
(set-fill-color! context "#ffffff")
|
||||||
|
(set-text-align! context "center")
|
||||||
|
(set-font! context "normal 16px monogram")
|
||||||
|
(fill-text context "keyboard:"
|
||||||
|
cx1 (- baseline 32.0))
|
||||||
|
(fill-text context "arrows -> move"
|
||||||
|
cx1 (- baseline 16.0))
|
||||||
|
(fill-text context "Z -> undo"
|
||||||
|
cx1 baseline)
|
||||||
|
(fill-text context "touchscreen:"
|
||||||
|
cx2 (- baseline 32.0))
|
||||||
|
(fill-text context "dpad -> move"
|
||||||
|
cx2 (- baseline 16.0))
|
||||||
|
(fill-text context "A -> undo"
|
||||||
|
cx2 baseline)))
|
||||||
|
|
||||||
(define (draw-level)
|
(define (draw-level)
|
||||||
(draw-background)
|
(draw-background)
|
||||||
(for-each draw-object *objects*)
|
(for-each draw-object *objects*)
|
||||||
|
@ -814,7 +834,9 @@
|
||||||
(set-font! context "normal 32px monogram")
|
(set-font! context "normal 32px monogram")
|
||||||
(set-fill-color! context "#ffffff")
|
(set-fill-color! context "#ffffff")
|
||||||
(set-text-align! context "center")
|
(set-text-align! context "center")
|
||||||
(fill-text context "OUCH... x_x" (/ game-width 2.0) (/ game-height 2.0)))))
|
(fill-text context "OUCH... x_x" (/ game-width 2.0) (/ game-height 2.0))))
|
||||||
|
(when (= *level-idx* 0)
|
||||||
|
(draw-controls)))
|
||||||
|
|
||||||
(define (draw-interstitial)
|
(define (draw-interstitial)
|
||||||
(draw-level))
|
(draw-level))
|
||||||
|
@ -869,7 +891,7 @@
|
||||||
(define credits-line-spacing 16.0)
|
(define credits-line-spacing 16.0)
|
||||||
(define max-credits-scroll
|
(define max-credits-scroll
|
||||||
(+ game-height (* (- (vector-length credits) 9) credits-line-spacing)))
|
(+ game-height (* (- (vector-length credits) 9) credits-line-spacing)))
|
||||||
(define (draw-win)
|
(define (draw-credits)
|
||||||
(draw-level)
|
(draw-level)
|
||||||
(set-fill-color! context "#ffffff")
|
(set-fill-color! context "#ffffff")
|
||||||
(set-text-align! context "center")
|
(set-text-align! context "center")
|
||||||
|
@ -920,33 +942,13 @@
|
||||||
(scale! context *canvas-scale* *canvas-scale*)
|
(scale! context *canvas-scale* *canvas-scale*)
|
||||||
(draw-current-effect 'pre)
|
(draw-current-effect 'pre)
|
||||||
|
|
||||||
(let ((state (current-game-state)))
|
(match (current-game-state)
|
||||||
(match state
|
((or 'play 'interstitial)
|
||||||
((or 'menu 'play 'interstitial)
|
(draw-level))
|
||||||
(draw-level)
|
('menu
|
||||||
;; Display input mappings on the title screen/first level.
|
(draw-level)
|
||||||
(when (= *level-idx* 0)
|
(draw-menu))
|
||||||
(let ((cx1 (/ game-width 4.0))
|
('credits (draw-credits)))
|
||||||
(cx2 (* game-width 0.75))
|
|
||||||
(baseline (/ game-height 2.0)))
|
|
||||||
(set-fill-color! context "#ffffff")
|
|
||||||
(set-text-align! context "center")
|
|
||||||
(set-font! context "normal 16px monogram")
|
|
||||||
(fill-text context "keyboard:"
|
|
||||||
cx1 (- baseline 32.0))
|
|
||||||
(fill-text context "arrows -> move"
|
|
||||||
cx1 (- baseline 16.0))
|
|
||||||
(fill-text context "Z -> undo"
|
|
||||||
cx1 baseline)
|
|
||||||
(fill-text context "touchscreen:"
|
|
||||||
cx2 (- baseline 32.0))
|
|
||||||
(fill-text context "dpad -> move"
|
|
||||||
cx2 (- baseline 16.0))
|
|
||||||
(fill-text context "A -> undo"
|
|
||||||
cx2 baseline)))
|
|
||||||
(when (eq? 'menu state)
|
|
||||||
(draw-menu)))
|
|
||||||
('win (draw-win))))
|
|
||||||
(draw-current-effect 'post)
|
(draw-current-effect 'post)
|
||||||
(request-animation-frame draw-callback)))
|
(request-animation-frame draw-callback)))
|
||||||
(define draw-callback (procedure->external draw))
|
(define draw-callback (procedure->external draw))
|
||||||
|
@ -1058,11 +1060,12 @@
|
||||||
('menu (hide-menu!))
|
('menu (hide-menu!))
|
||||||
(_ #f)))
|
(_ #f)))
|
||||||
;; Pressing any bound input resets the game.
|
;; Pressing any bound input resets the game.
|
||||||
('win (if *level-last*
|
;; If traveling to the credits via the menu, go back to '*level-last*'
|
||||||
(begin
|
('credits (cond
|
||||||
|
(*level-last*
|
||||||
(load-level! *level-last*)
|
(load-level! *level-last*)
|
||||||
(set! *level-last* #f))
|
(set! *level-last* #f))
|
||||||
(reset-game!)))))
|
(else (reset-game!))))))
|
||||||
|
|
||||||
;; Canvas and event loop setup
|
;; Canvas and event loop setup
|
||||||
(define canvas (get-element-by-id "canvas"))
|
(define canvas (get-element-by-id "canvas"))
|
||||||
|
|
Loading…
Add table
Reference in a new issue