diff --git a/src/explosion.fnl b/src/explosion.fnl index 1b939a7..8996f14 100644 --- a/src/explosion.fnl +++ b/src/explosion.fnl @@ -36,10 +36,11 @@ (fn restart [] (tbl.extend state - {:bomber {:x 200} + {:bomber {:x 200 :bombs-left 0} :bombs [] :bucket {:count 3} :level 1 + :state :waiting :scene :ingame})) (children:defmethod :bombs iter.reverse-ipairs) @@ -62,7 +63,8 @@ (set ctx.bomber.bombs-left 0) (cache.destroy :bucket count) (destroy-all :bombs ctx) - (set ctx.bombs []))) + (set ctx.bombs []) + (set ctx.state :waiting))) (update:defmethod :bucket (fn [_ bucket] (let [crank (playdate.getCrankPosition) @@ -75,7 +77,7 @@ (let [image (make-image 20 30 #(gfx.fillRoundRect 0 0 20 30 6))] (defsprite :bomber #(with-image $1 image 0.5 0))) -(fn bomberspeed [ctx] (* (+ ctx.level 4) 2)) +(fn bomberspeed [ctx] (+ ctx.level 5)) (fn bombervelocity [ctx dx] (let [sign (if (< dx 0) -1 1) speed (math.min (bomberspeed ctx) (math.abs dx))] @@ -103,11 +105,17 @@ (when (<= bomber.bombframes 0) (drop-bomb ctx))) + (when (and (= ctx.state :bombing) (= bomber.bombs-left 0) (= (length ctx.bombs) 0)) + (set ctx.level (+ ctx.level 1)) + (set ctx.state :waiting)) + (doto (sprite :bomber) (: :moveTo bomber.x 5)) - (when (playdate.buttonJustPressed :a) + (when (and (= ctx.state :waiting) (playdate.buttonJustPressed :a)) + (set ctx.state :bombing) (set bomber.bombs-left (bombcount ctx)) (drop-bomb ctx)) (when (playdate.buttonJustPressed :b) + (set ctx.level 1) (set ctx.bucket.count 3)))) (gfx.sprite.setBackgroundDrawingCallback #(gfx.drawLine 0 33 screenw 33))