summaryrefslogtreecommitdiff
path: root/bonnie-bee/player.scm
blob: 6e8f7fb1bd9053881071ffcb8ba4171d0968868d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
(define-module (bonnie-bee player)
  #:use-module (bonnie-bee actor)
  #:use-module (bonnie-bee assets)
  #:use-module (chickadee math vector)
  #:use-module (oop goops)
  #:use-module (starling node)
  #:use-module (starling node-2d)
  #:export (<player>
            move-left?
            move-right?
            move-down?
            move-up?
            shoot?
            speed
            lives
            pollen))

(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)
  (speed #:accessor speed #:init-value 2.0)
  (lives #:accessor lives #:init-value 3)
  (pollen #:accessor pollen #:init-value 0))

(define-method (on-boot (player <player>))
  (attach-to player
             (make <atlas-sprite>
               #:atlas bee-atlas
               #:index 12
               #:origin (vec2 16.0 16.0))))

(define-method (update (player <player>) dt)
  (let ((v (velocity player)))
    (set-vec2! v
               (+ (if (move-left? player) -1.0 0.0)
                  (if (move-right? player) 1.0 0.0))
               (+ (if (move-down? player) -1.0 0.0)
                  (if (move-up? player) 1.0 0.0)))
    (vec2-normalize! v)
    (vec2-mult! v (speed player)))
  (next-method))