From 45791c1360c98957ebe27655d59a2ae9db6cd709 Mon Sep 17 00:00:00 2001 From: David Thompson Date: Sun, 4 Jun 2023 09:25:06 -0400 Subject: Giant code and assets drop. --- super-bloom/dirt-ball.scm | 81 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 super-bloom/dirt-ball.scm (limited to 'super-bloom/dirt-ball.scm') diff --git a/super-bloom/dirt-ball.scm b/super-bloom/dirt-ball.scm new file mode 100644 index 0000000..fd86d5b --- /dev/null +++ b/super-bloom/dirt-ball.scm @@ -0,0 +1,81 @@ +;;; Copyright 2023 David Thompson +;;; +;;; Licensed under the Apache License, Version 2.0 (the "License"); +;;; you may not use this file except in compliance with the License. +;;; You may obtain a copy of the License at +;;; +;;; http://www.apache.org/licenses/LICENSE-2.0 +;;; +;;; Unless required by applicable law or agreed to in writing, software +;;; distributed under the License is distributed on an "AS IS" BASIS, +;;; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +;;; See the License for the specific language governing permissions and +;;; limitations under the License. + +(define-module (super-bloom dirt-ball) + #:use-module (catbird asset) + #:use-module (catbird node) + #:use-module (catbird node-2d) + #:use-module (chickadee audio) + #:use-module (chickadee graphics particles) + #:use-module (chickadee graphics texture) + #:use-module (chickadee math) + #:use-module (chickadee math rect) + #:use-module (chickadee math vector) + #:use-module (chickadee scripting) + #:use-module (oop goops) + #:use-module (super-bloom actor) + #:use-module (super-bloom common) + #:use-module (super-bloom flower) + #:use-module (super-bloom water) + #:export ()) + +(define-asset (dirt-ball-tileset (file (scope-datadir "assets/images/dirt-ball.png"))) + (load-tileset file 32 32)) + +(define-class () + (flower #:accessor flower #:init-keyword #:flower) + (speed #:accessor speed #:init-keyword #:speed) + (dead? #:accessor dead? #:init-value #f) + (hitbox #:getter hitbox #:init-form (make-rect -8.0 -8.0 16.0 16.0)) + (explosion-particles #:accessor explosion-particles #:init-keyword #:explosion-particles)) + +(define-method (initialize (dirt-ball ) initargs) + (next-method) + (attach-to dirt-ball + (make + #:name 'sprite + #:atlas dirt-ball-tileset + #:origin (vec2 16.0 16.0) + #:animations `((default . ,(make + #:frames #(0 1) + #:frame-duration 0.3)) + (up . ,(make + #:frames #(2 3) + #:frame-duration 0.3))))) + (let ((dir (direction-to dirt-ball (flower dirt-ball)))) + (change-velocity dirt-ball + (* (vec2-x dir) (speed dirt-ball)) + (* (vec2-y dir) (speed dirt-ball)))) + (update-animation dirt-ball)) + +(define-method (update-animation (dirt-ball )) + (let ((dy (vec2-y (velocity dirt-ball)))) + (change-animation (& dirt-ball sprite) (if (> dy 0.0) 'up 'default)))) + +(define-method (on-splash (dirt-ball )) + (set! (dead? dirt-ball) #t)) + +(define-method (on-collide (dirt-ball ) (flower )) + (damage flower 5) + (set! (dead? dirt-ball) #t)) + +(define-method (update (dirt-ball ) _dt) + (next-method) + (when (dead? dirt-ball) + (let ((p (position dirt-ball))) + (audio-play (artifact explosion-sound)) + (add-particle-emitter (particles (explosion-particles dirt-ball)) + (make-particle-emitter (make-rect (vec2-x p) (vec2-y p) 0.0 0.0) + 40 3)) + (detach dirt-ball)))) -- cgit v1.2.3