summaryrefslogtreecommitdiff
path: root/bonnie-bee/player.scm
diff options
context:
space:
mode:
Diffstat (limited to 'bonnie-bee/player.scm')
-rw-r--r--bonnie-bee/player.scm35
1 files changed, 33 insertions, 2 deletions
diff --git a/bonnie-bee/player.scm b/bonnie-bee/player.scm
index 6e8f7fb..9a5da1c 100644
--- a/bonnie-bee/player.scm
+++ b/bonnie-bee/player.scm
@@ -1,7 +1,9 @@
(define-module (bonnie-bee player)
#:use-module (bonnie-bee actor)
#:use-module (bonnie-bee assets)
+ #:use-module (bonnie-bee bullet)
#:use-module (chickadee math vector)
+ #:use-module (chickadee scripting)
#:use-module (oop goops)
#:use-module (starling node)
#:use-module (starling node-2d)
@@ -13,14 +15,17 @@
shoot?
speed
lives
- pollen))
+ pollen
+ shoot-maybe))
(define-class <player> (<actor>)
(move-left? #:accessor move-left? #:init-value #f)
(move-right? #:accessor move-right? #:init-value #f)
(move-down? #:accessor move-down? #:init-value #f)
(move-up? #:accessor move-up? #:init-value #f)
- (shoot? #:accessor shoot? #:init-value #f)
+ (shoot? #:accessor shoot? #:init-value #f #:watch? #t)
+ (last-shot #:accessor last-shot #:init-value 0)
+ (shot-interval #:getter shot-interval #:init-value 2)
(speed #:accessor speed #:init-value 2.0)
(lives #:accessor lives #:init-value 3)
(pollen #:accessor pollen #:init-value 0))
@@ -32,6 +37,12 @@
#:index 12
#:origin (vec2 16.0 16.0))))
+(define-method (on-change (player <player>) slot-name old new)
+ (case slot-name
+ ((shoot?)
+ (when (and new (not (and old new)))
+ (set! (last-shot player) 0)))))
+
(define-method (update (player <player>) dt)
(let ((v (velocity player)))
(set-vec2! v
@@ -42,3 +53,23 @@
(vec2-normalize! v)
(vec2-mult! v (speed player)))
(next-method))
+
+(define-method (on-collide (player <player>) (bullet <bullet>))
+ (if (eq? (type bullet) pollen-pickup)
+ (begin
+ (kill-bullet bullet)
+ (set! (pollen player) (+ (pollen player) 1))
+ #t)
+ #f))
+
+(define-method (shoot-maybe (player <player>) bullets)
+ (with-agenda (agenda player)
+ (when (and (shoot? player)
+ (>= (- (agenda-time) (last-shot player))
+ (shot-interval player)))
+ (let ((p (position player)))
+ (set! (last-shot player) (agenda-time))
+ (add-bullet bullets
+ player-primary-bullet
+ (vec2 (vec2-x p) (+ (vec2-y p) 14.0))
+ (vec2 0.0 6.0))))))