;;; Lisparuga ;;; Copyright © 2020 David Thompson ;;; ;;; Lisparuga is free software: you can redistribute it and/or modify ;;; it under the terms of the GNU General Public License as published ;;; by the Free Software Foundation, either version 3 of the License, ;;; or (at your option) any later version. ;;; ;;; Lisparuga is distributed in the hope that it will be useful, but ;;; WITHOUT ANY WARRANTY; without even the implied warranty of ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ;;; General Public License for more details. ;;; ;;; You should have received a copy of the GNU General Public License ;;; along with Lisparuga. If not, see . ;;; Commentary: ;; ;; Game container. Handles all the state, logic, and rendering for ;; the game itself. ;; ;;; Code: (define-module (lisparuga game) #:use-module (chickadee math rect) #:use-module (chickadee math vector) #:use-module (chickadee render color) #:use-module (chickadee render texture) #:use-module (chickadee scripting) #:use-module (ice-9 format) #:use-module (lisparuga actor) #:use-module (lisparuga asset) #:use-module (lisparuga bullets) #:use-module (lisparuga config) #:use-module (lisparuga enemy) #:use-module (lisparuga node) #:use-module (lisparuga node-2d) #:use-module (lisparuga player) #:use-module (oop goops) #:export ( steer-player start-player-shooting stop-player-shooting toggle-player-polarity fire-player-homing-missiles)) (define-asset clouds (load-image (scope-asset "images/clouds.png"))) (define-asset player-bullet-atlas (load-tile-atlas (scope-asset "images/player-bullets.png") 16 16)) (define-asset enemy-bullet-atlas (load-tile-atlas (scope-asset "images/enemy-bullets.png") 24 24)) ;; nodes needed: ;; scrolling background (define-class ()) (define-method (on-boot (game )) (let* ((player-bullets (make #:name 'player-bullets #:rank 2 #:capacity 500 #:texture-atlas player-bullet-atlas)) (player (make-player player-bullets)) (enemy-bullets (make #:name 'enemy-bullets #:rank 4 #:capacity 1000 #:texture-atlas enemy-bullet-atlas)) (ui (make #:name 'ui #:rank 999))) (set! (rank player) 1) (attach-to game (make #:name 'clouds #:rank 0 #:texture clouds) player player-bullets (make #:name 'enemies #:rank 3) enemy-bullets ui) ;; Setup UI elements (attach-to ui (make