Spawn ghost gems where gems used to be.
This commit is contained in:
parent
2dc354229d
commit
111eb33429
6 changed files with 37 additions and 6 deletions
|
@ -23,6 +23,7 @@
|
|||
#:use-module (scheme base)
|
||||
#:use-module (hoot ffi)
|
||||
#:export (get-context
|
||||
set-global-alpha!
|
||||
set-fill-color!
|
||||
set-font!
|
||||
set-text-align!
|
||||
|
@ -40,6 +41,9 @@
|
|||
(ref extern) (ref string) -> (ref extern))
|
||||
|
||||
;; CanvasRenderingContext2D
|
||||
(define-foreign set-global-alpha!
|
||||
"canvas" "setGlobalAlpha"
|
||||
(ref extern) f64 -> none)
|
||||
(define-foreign set-fill-color!
|
||||
"canvas" "setFillColor"
|
||||
(ref extern) (ref string) -> none)
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
^floor-switch
|
||||
^gate
|
||||
^gem
|
||||
^ghost-gem
|
||||
^and-gate
|
||||
^xor-gate
|
||||
^or-gate
|
||||
|
@ -268,6 +269,21 @@
|
|||
(when (eq? ($ other 'type) 'player)
|
||||
($ picked-up? #t)))))
|
||||
|
||||
(define (^ghost-gem bcom x y)
|
||||
(define position (vector x y 1))
|
||||
(match-lambda*
|
||||
(('type) 'ghost-gem)
|
||||
(('position) position)
|
||||
(('tick grid-info) #f)
|
||||
(('post-tick grid-info) #f)
|
||||
(('enter obj grid-info) #f)
|
||||
(('exit obj grid-info) #f)
|
||||
(('wire-state grid-info) #f)
|
||||
(('update-wire-state grid-info) #f)
|
||||
(('alive?) #t)
|
||||
(('describe) `(ghost-gem ,position))
|
||||
(('collide other offset grid-info) #f)))
|
||||
|
||||
(define (^gate bcom x y)
|
||||
(define position (vector x y 1))
|
||||
(define open? (spawn ^cell))
|
||||
|
@ -461,6 +477,7 @@
|
|||
($ event '(bump)))))
|
||||
('switch ($ event '(switch)))
|
||||
('gem ($ event '(gem)))
|
||||
('ghost-gem #t)
|
||||
('gate
|
||||
(unless ($ other 'open?)
|
||||
(reverse-move)
|
||||
|
|
|
@ -37,7 +37,7 @@
|
|||
(actor level-actor)
|
||||
(player level-player))
|
||||
|
||||
(define (make-level width height background objects spawn-gem?)
|
||||
(define (make-level width height background objects collected-gem?)
|
||||
(let ((level* (spawn ^level width height))
|
||||
(background* (make-vector (* width height))))
|
||||
;; Unpack background tile data.
|
||||
|
@ -70,7 +70,9 @@
|
|||
(8 (let ((target-x (bytevector-u8-ref objects (+ i 3)))
|
||||
(target-y (bytevector-u8-ref objects (+ i 4))))
|
||||
(spawn ^floor-switch x y target-x target-y)))
|
||||
(9 (and spawn-gem? (spawn ^gem x y)))
|
||||
(9 (if collected-gem?
|
||||
(spawn ^ghost-gem x y)
|
||||
(spawn ^gem x y)))
|
||||
(10 (spawn ^gate x y))
|
||||
(11 (spawn ^and-gate x y))
|
||||
(12 (let ((target-x (bytevector-u8-ref objects (+ i 3)))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue