(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 flower) #: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 (spawn (game ) (actor )) (set! (quadtree actor) (quadtree game)) (attach-to game actor)) (define-method (player (game )) (& game player)) (define-method (bullets (game )) (& game bullets)) (define-method (on-boot (game )) (set! *random-state* (random-state-from-platform)) (set-cameras! game) (attach-to game (make #:name 'bullets #:quadtree (quadtree game)))) (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))) (spawn game (make #:position (vec2 (/ %game-width 2.0) (/ %game-height 2.0)) #:hitbox (make-rect -32.0 -32.0 64.0 64.0) #:health 10))) (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)))) (define-method (update (game ) dt) (next-method) (shoot-maybe (player game) (bullets game)) (for-each-child (lambda (child) (when (and (is-a? child ) (dead? child)) (on-death child (bullets game)) (quadtree-delete! (quadtree game) (world-hitbox child) child) (detach child))) game))