(define-module (bonnie-bee game) #:use-module (bonnie-bee actor) #:use-module (bonnie-bee assets) #:use-module (bonnie-bee bullet) #:use-module (bonnie-bee common) #:use-module (bonnie-bee player) #:use-module (chickadee data quadtree) #:use-module (chickadee graphics color) #:use-module (chickadee math rect) #:use-module (chickadee math vector) #:use-module (chickadee scripting) #:use-module (oop goops) #:use-module (starling kernel) #:use-module (starling node) #:use-module (starling node-2d) #:use-module (starling scene) #:export ()) (define %game-bounds (make-rect 0.0 0.0 %game-width %game-height)) (define-class () (quadtree #:getter quadtree #:init-form (make-quadtree %game-bounds))) (define-method (on-boot (game )) (set-cameras! game) (attach-to game (make #:name 'bullets #:quadtree (quadtree game))) (let loop ((i 0)) (when (< i 100) (add-bullet (& game bullets) pollen-pickup (vec2 (* (random:uniform) 320.0) (* (random:uniform) 240.0)) (vec2 (random:uniform) (random:uniform))) (loop (+ i 1))))) (define-method (spawn (game ) (actor )) (set! (quadtree actor) (quadtree game)) (attach-to game actor)) (define-method (on-enter (game )) (spawn game (make #:name 'player #:position (vec2 (/ %game-width 2.0) 20.0) #:hitbox (make-rect -2.0 -2.0 4.0 4.0)))) (define-method (player (game )) (& game player)) (define-method (on-key-press (game ) key modifiers repeat?) (case key ((q) (pop-scene (current-kernel))) ((left) (set! (move-left? (player game)) #t)) ((right) (set! (move-right? (player game)) #t)) ((down) (set! (move-down? (player game)) #t)) ((up) (set! (move-up? (player game)) #t)) ((z) (set! (shoot? (player game)) #t)))) (define-method (on-key-release (game ) key modifiers) (case key ((left) (set! (move-left? (player game)) #f)) ((right) (set! (move-right? (player game)) #f)) ((down) (set! (move-down? (player game)) #f)) ((up) (set! (move-up? (player game)) #f)) ((z) (set! (shoot? (player game)) #f))))