BomberScene = {} class("BomberScene").extends(BaseScene) local scene = BomberScene local font = Graphics.font.new('assets/fonts/Mini Sans 2X') function scene:init() scene.super.init(self) self.bg = Graphics.image.new("assets/sprites/bg2") self.bgY = 0 self.scrollSpeed = 0.6 scene.progressBar = ProgressBar(50, 210, 50, 5) scene.progressBar:set(0) scene.progressBar:setVisible(false) scene.grenadeCooldown = false scene.grenadeCooldownTimer = nil scene.grenadeCooldownDuration = 100 scene.progressBarMax = 100 scene.availableGrenades = 8 BomberScene.instance = self end function scene:drawBackground() self.bgY = self.bgY + self.scrollSpeed if self.bgY >= 720 then self.bgY = 0 end self.bg:draw(0, self.bgY - 720) self.bg:draw(0, self.bgY) end scene.inputHandler = { upButtonHold = function() scene.crosshair:moveUp() end, downButtonHold = function() scene.crosshair:moveDown() end, leftButtonHold = function() scene.crosshair:moveLeft() end, rightButtonHold = function() scene.crosshair:moveRight() end, AButtonDown = function() if scene.availableGrenades <= 0 then return end print("AButtonDown") if not scene.grenadeCooldown then Granade(scene.crosshair.x, scene.crosshair.y) scene.grenadeCooldown = true scene.progressBar:set(0) scene.progressBar:setVisible(true) scene.availableGrenades = scene.availableGrenades - 1 scene.grenadeCooldownTimer = playdate.timer.new(scene.grenadeCooldownDuration, function() scene.grenadeCooldown = false scene.progressBar:setVisible(false) end) scene.grenadeCooldownTimer.updateCallback = function(timer) local percentage = (scene.grenadeCooldownDuration - timer.timeLeft) / scene.grenadeCooldownDuration * scene.progressBarMax scene.progressBar:set(percentage) end end end } function scene:enter() scene.super.enter(self) Noble.Input.setHandler(scene.inputHandler) scene.crosshair = MovableCrosshair(100, 100) end function scene:start() scene.super.start(self) self.optionsMenu:addMenuItem("Main Menu", function() Noble.transition(Menu) end) Noble.showFPS = true end function scene:update() scene.super.update(self) Noble.Text.draw(scene.availableGrenades .. "x", 10, 210, Noble.Text.ALIGN_LEFT, false, font) if scene.availableGrenades <= 0 then Noble.Text.draw("No grenades left", 200, 110, Noble.Text.ALIGN_CENTER, false, font) scene.crosshair:setVisible(false) end if playdate.isCrankDocked() then Noble.Text.draw("Crank it to reload!", 200, 110, Noble.Text.ALIGN_CENTER, false, font) playdate.ui.crankIndicator:draw() end end -- TODO: to reset grenades spin crank -- TODO: random spawn of enemies -- TODO: random spawn some decorations -- TODO: add some music -- TODO: add some sound effects -- TODO: add clouds or smoke -- TODO: random disactivate granades