Add logic gate animations.
This commit is contained in:
parent
d24124e57e
commit
9027df5f20
1 changed files with 29 additions and 11 deletions
40
game.scm
40
game.scm
|
@ -388,6 +388,21 @@
|
|||
(56 .25)
|
||||
(76 .25)
|
||||
(96 .25))
|
||||
(define-animation anim:and-gate
|
||||
(42 .4)
|
||||
(115 .4)
|
||||
(135 .4)
|
||||
(155 .4))
|
||||
(define-animation anim:or-gate
|
||||
(43 .4)
|
||||
(116 .4)
|
||||
(136 .4)
|
||||
(156 .4))
|
||||
(define-animation anim:xor-gate
|
||||
(44 .4)
|
||||
(117 .4)
|
||||
(137 .4)
|
||||
(157 .4))
|
||||
|
||||
(define number->string*
|
||||
(let ((cache (make-eq-hashtable))) ; assuming fixnums only
|
||||
|
@ -397,13 +412,13 @@
|
|||
(hashtable-set! cache x str)
|
||||
str)))))
|
||||
|
||||
(define (draw-rotated-tile id pos angle)
|
||||
(define (draw-rotated-animation anim pos angle)
|
||||
(let ((hw (* tile-width 0.5))
|
||||
(hh (* tile-height 0.5)))
|
||||
(save! context)
|
||||
(translate! context (+ (vec2-x pos) hw) (+ (vec2-y pos) hh))
|
||||
(rotate! context angle)
|
||||
(draw-tile context tileset id (- hw) (- hh))
|
||||
(draw-animation context anim (- hw) (- hh))
|
||||
(restore! context)))
|
||||
|
||||
(define (draw-player pos alive?)
|
||||
|
@ -467,15 +482,15 @@
|
|||
(define (draw-gate pos open?)
|
||||
(draw-tile context tileset (if open? 46 45) (vec2-x pos) (vec2-y pos)))
|
||||
|
||||
(define (draw-logic-gate pos direction state id)
|
||||
(define (draw-logic-gate pos direction state anim)
|
||||
(let ((x (vec2-x pos))
|
||||
(y (vec2-y pos)))
|
||||
(draw-tile context tileset 2 x y)
|
||||
(match direction
|
||||
('right (draw-tile context tileset id x y))
|
||||
('left (draw-rotated-tile id pos pi))
|
||||
('up (draw-rotated-tile id pos (* pi 1.5)))
|
||||
('down (draw-rotated-tile id pos (* pi 0.5))))
|
||||
('right (draw-animation context anim x y))
|
||||
('left (draw-rotated-animation anim pos pi))
|
||||
('up (draw-rotated-animation anim pos (* pi 1.5)))
|
||||
('down (draw-rotated-animation anim pos (* pi 0.5))))
|
||||
(draw-wire-state pos state)))
|
||||
|
||||
(define (draw-electric-switch pos on?)
|
||||
|
@ -500,9 +515,9 @@
|
|||
(('gem pos) (draw-gem pos))
|
||||
(('ghost-gem pos) (draw-ghost-gem pos))
|
||||
(('gate pos open?) (draw-gate pos open?))
|
||||
(('and-gate pos direction state) (draw-logic-gate pos direction state 42))
|
||||
(('or-gate pos direction state) (draw-logic-gate pos direction state 43))
|
||||
(('xor-gate pos direction state) (draw-logic-gate pos direction state 44))
|
||||
(('and-gate pos direction state) (draw-logic-gate pos direction state anim:and-gate))
|
||||
(('or-gate pos direction state) (draw-logic-gate pos direction state anim:or-gate))
|
||||
(('xor-gate pos direction state) (draw-logic-gate pos direction state anim:xor-gate))
|
||||
(('electric-switch pos on?) (draw-electric-switch pos on?))
|
||||
(('electron-warp pos state) (draw-electron-warp pos state))))
|
||||
|
||||
|
@ -623,7 +638,10 @@
|
|||
(update-animation anim:electron-head dt)
|
||||
(update-animation anim:electron-tail dt)
|
||||
(update-animation anim:gem dt)
|
||||
(update-animation anim:ghost-gem dt))
|
||||
(update-animation anim:ghost-gem dt)
|
||||
(update-animation anim:and-gate dt)
|
||||
(update-animation anim:or-gate dt)
|
||||
(update-animation anim:xor-gate dt))
|
||||
(clear-rect context 0.0 0.0 *canvas-width* *canvas-height*)
|
||||
(set-transform! context 1.0 0.0 0.0 1.0 0.0 0.0)
|
||||
(scale! context *canvas-scale* *canvas-scale*)
|
||||
|
|
Loading…
Add table
Reference in a new issue