summaryrefslogtreecommitdiff
path: root/bonnie-bee/flower.scm
diff options
context:
space:
mode:
Diffstat (limited to 'bonnie-bee/flower.scm')
-rw-r--r--bonnie-bee/flower.scm59
1 files changed, 44 insertions, 15 deletions
diff --git a/bonnie-bee/flower.scm b/bonnie-bee/flower.scm
index cafa4f8..2c018e9 100644
--- a/bonnie-bee/flower.scm
+++ b/bonnie-bee/flower.scm
@@ -2,16 +2,33 @@
#:use-module (bonnie-bee actor)
#:use-module (bonnie-bee assets)
#:use-module (bonnie-bee bullet)
+ #:use-module (chickadee audio)
+ #:use-module (chickadee graphics particles)
#:use-module (chickadee math)
+ #:use-module (chickadee math rect)
#:use-module (chickadee math vector)
#:use-module (chickadee scripting)
#:use-module (chickadee utils)
#:use-module (oop goops)
+ #:use-module (starling asset)
#:use-module (starling node)
#:use-module (starling node-2d)
- #:export (<flower>))
+ #:export (<flower>
+ pollen-enabled?
+ enable-pollen!
+ disable-pollen!))
-(define-class <flower> (<actor> <damageable>))
+(define-class <flower> (<grounded> <damageable> <actor>)
+ (emit-pollen? #:allocation #:class #:init-value #f))
+
+(define (pollen-enabled?)
+ (class-slot-ref <flower> 'emit-pollen?))
+
+(define (enable-pollen!)
+ (class-slot-set! <flower> 'emit-pollen? #t))
+
+(define (disable-pollen!)
+ (class-slot-set! <flower> 'emit-pollen? #f))
(define-method (on-boot (flower <flower>))
(attach-to flower
@@ -20,18 +37,30 @@
#:origin (vec2 32.0 32.0))))
(define-method (on-collide (flower <flower>) (bullet <bullet>))
- (if (eq? (type bullet) player-primary-bullet)
- (begin
- (damage flower 1)
- (kill-bullet bullet)
- #t)
- #f))
+ (cond
+ ((player-bullet? bullet)
+ (damage flower 1)
+ (kill-bullet bullet)
+ #t)
+ ((and (not (pollen-enabled?)) (enemy-bullet? bullet))
+ (damage flower 1000)
+ (kill-bullet bullet))
+ (else #f)))
-(define-method (on-death (flower <flower>) bullets)
+(define-method (on-death (flower <flower>))
(let ((p (position flower)))
- (for-range ((i 16))
- (let ((theta (- (* (random:uniform) (/ pi -2.0)) (/ pi 4.0)))
- (speed (+ (* (random:uniform) 1.0) 1.0)))
- (add-bullet bullets pollen-pickup p
- (vec2 (* (cos theta) speed)
- (* (sin theta) speed)))))))
+ (if (pollen-enabled?)
+ (begin
+ (audio-play (asset-ref pollen-release-sound))
+ (for-range ((i 16))
+ (let ((theta (- (* (random:uniform) (/ pi -2.0)) (/ pi 4.0)))
+ (speed (+ (* (random:uniform) 1.0) 1.0)))
+ (add-bullet (bullets (parent flower))
+ pollen-pickup p
+ (vec2 (* (cos theta) speed)
+ (* (sin theta) speed))))))
+ (begin
+ (audio-play (asset-ref explosion-sound))
+ (add-particle-emitter (particles (particles (parent flower)))
+ (make-particle-emitter (make-rect (vec2-x p) (vec2-y p) 1.0 1.0)
+ 10 5))))))