Replace 'win state with 'credits, refactoring level drawing

This commit is contained in:
Amy Grinn 2024-12-20 10:14:44 -05:00
parent b468bab159
commit b29c13e0fc
No known key found for this signature in database
GPG key ID: 6B558BED1DCF3192

View file

@ -228,7 +228,7 @@
(update-objects!)))
(define (load-credits!)
(replace-game-state! 'win)
(replace-game-state! 'credits)
(set! *actormap* (make-whactormap))
(set-vec2-y! *credits-scroll* 0.0)
(clear-snapshots!)
@ -371,14 +371,14 @@
(define (menu-up!)
(set-menu-index! (max -1 (1- (current-menu-index))))
(if (and (> (current-menu-page) 0)
(= (current-menu-index) (- (* (current-menu-page) menu:max-items) (current-menu-page) 1)))
(set-menu-page! (1- (current-menu-page)))))
(when (and (> (current-menu-page) 0)
(= (current-menu-index) (- (* (current-menu-page) menu:max-items) (current-menu-page) 1)))
(set-menu-page! (1- (current-menu-page)))))
(define (menu-down!)
(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)))
(set-menu-page! (1+ (current-menu-page)))))
(when (= (current-menu-index) (- (* (1+ (current-menu-page)) menu:max-items) (current-menu-page)))
(set-menu-page! (1+ (current-menu-page)))))
(define (push-menu-history!)
(set-menu-history! (cons (cons (current-menu)
@ -801,6 +801,26 @@
(+ r r-page-offset)))))
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)
(draw-background)
(for-each draw-object *objects*)
@ -814,7 +834,9 @@
(set-font! context "normal 32px monogram")
(set-fill-color! context "#ffffff")
(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)
(draw-level))
@ -869,7 +891,7 @@
(define credits-line-spacing 16.0)
(define max-credits-scroll
(+ game-height (* (- (vector-length credits) 9) credits-line-spacing)))
(define (draw-win)
(define (draw-credits)
(draw-level)
(set-fill-color! context "#ffffff")
(set-text-align! context "center")
@ -920,33 +942,13 @@
(scale! context *canvas-scale* *canvas-scale*)
(draw-current-effect 'pre)
(let ((state (current-game-state)))
(match state
((or 'menu 'play 'interstitial)
(draw-level)
;; Display input mappings on the title screen/first level.
(when (= *level-idx* 0)
(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)))
(when (eq? 'menu state)
(draw-menu)))
('win (draw-win))))
(match (current-game-state)
((or 'play 'interstitial)
(draw-level))
('menu
(draw-level)
(draw-menu))
('credits (draw-credits)))
(draw-current-effect 'post)
(request-animation-frame draw-callback)))
(define draw-callback (procedure->external draw))
@ -1058,11 +1060,12 @@
('menu (hide-menu!))
(_ #f)))
;; Pressing any bound input resets the game.
('win (if *level-last*
(begin
;; If traveling to the credits via the menu, go back to '*level-last*'
('credits (cond
(*level-last*
(load-level! *level-last*)
(set! *level-last* #f))
(reset-game!)))))
(else (reset-game!))))))
;; Canvas and event loop setup
(define canvas (get-element-by-id "canvas"))