Files
fpv/source/scenes/Game.lua
assada 348bd4fe64 cleanup: QOL improvements — gitignore, Tags constants, remove debug artifacts
- Add .DS_Store, unused/, .vscode/settings.json to .gitignore
- Add .editorconfig (tabs for Lua, LF, UTF-8)
- Fix duplicate submodule entry in .gitmodules
- Add Tags table (player, tank, ground, granade, ammoCrate) — replace magic numbers
- Add SCREEN_W/SCREEN_H constants
- Fix leaked global variable `c` in Game.lua
- Remove Noble.showFPS = true from BomberScene
- Remove debug print() calls from granade, enemy, BomberScene
- Fix clean_build_dir glob bug in both build scripts
- Make PLAYDATE_SDK_PATH configurable via env var
2026-02-24 12:48:00 +01:00

175 lines
4.7 KiB
Lua

Game = {}
class("Game").extends(BaseScene)
local scene = Game
local font = Graphics.font.new('assets/fonts/Mini Sans 2X')
function scene:drawBackground()
local speed = 0.1
if scene.ground ~= nil then
speed = scene.ground.moveSpeed * 0.4
end
if scene.distance > 0 then
scene.bgX = scene.bgX - speed
end
if scene.bgX <= -400 then
scene.bgX = 0
end
self.bg:draw(scene.bgX or 0, 0)
end
function scene:setValues()
local bgPaths = { "assets/sprites/backgrounds/fpv", "assets/sprites/backgrounds/bomber" }
self.bg = Graphics.image.new(bgPaths[CurrentMission.mapId])
scene.bgX = 0
scene.telemLostSound = playdate.sound.fileplayer.new("assets/audio/telemko")
scene.telemLostSoundPlayed = false
scene.resultShowed = false
scene.musicEnabled = Noble.Settings.get("music")
scene.difficulty = Noble.Settings.get("difficulty")
scene.balebas = {}
scene.balebaSpawner = playdate.timer.new(10000)
scene.balebaSpawner.repeats = true
scene.levelAudio = playdate.sound.fileplayer.new("assets/audio/game")
scene.levelAudio:setVolume(0.7)
scene.helloAudio = playdate.sound.fileplayer.new("assets/audio/hello")
scene.tank = nil
scene.distance = DifficultySettings[scene.difficulty].distance
end
function scene:init()
scene.super.init(self)
scene:setValues()
end
function scene:start()
scene.super.start(self)
self.optionsMenu:addMenuItem("Main Menu", function() Noble.transition(Menu) end)
Noble.showFPS = false
end
function scene:spawnBaleba()
local balebaCount = #scene.balebas
if balebaCount >= 6 then
scene.balebaSpawner:remove()
return
end
scene.balebas[balebaCount + 1] = Baleba(math.random(410, 900), math.random(10, 210), scene.player, true)
end
function scene:enter()
scene.super.enter(self)
scene:setValues()
scene.player = Player(150, 100)
scene.ground = Ground(0, 225, scene.player)
scene.balebaSpawner.timerEndedCallback = function()
-- scene:spawnBaleba()
end
for i = 1, 3 do
-- scene:spawnBaleba()
end
scene.helloAudio:play(1)
if scene.musicEnabled then
scene.levelAudio:play(0)
end
end
function scene:update()
scene.super.update(self)
if playdate.isCrankDocked() then
playdate.ui.crankIndicator:draw()
end
if scene.player == nil then
return
end
if scene.distance > 0 then
scene.distance = scene.distance - scene.ground.moveSpeed
end
if scene.distance < 0 then -- SHIT
scene.distance = 0
end
if scene.distance < 150 and scene.tank == nil then
scene.tank = Tank(480, 190, scene.ground)
scene:addSprite(scene.tank) -- Raw sprite
end
if scene.player.isDead() then
scene.ground:setMoveSpeed(0)
if scene.resultShowed ~= true then
Noble.Text.draw("Telemetry Lost", 200, 110, Noble.Text.ALIGN_CENTER, false, font)
end
else
local t = scene.player.getBat() / 10000
local lerpBat = playdate.math.lerp(12.0, 16.8, t)
Noble.Text.draw(round(lerpBat) .. "v", 10, 210, Noble.Text.ALIGN_LEFT, false, font)
Noble.Text.draw(math.round(scene.distance) .. "m", 200, 20, Noble.Text.ALIGN_CENTER, false, font)
end
if scene.player.isDead() and not scene.telemLostSoundPlayed then
scene.telemLostSound:play(1)
scene.telemLostSoundPlayed = true
screenShake(1000, 5)
playdate.timer.performAfterDelay(4000, function()
scene.resultShowed = true
local message = "You failed!"
if scene.player.targetDone then
message = "You did it!"
end
if scene.player.targetDone then
local reward = 100
Noble.GameData.set("missionsCompleted", Noble.GameData.get("missionsCompleted") + 1)
Noble.GameData.set("money", Noble.GameData.get("money") + reward)
message = "You did it! +$" .. reward
end
local c = notify(message, function()
Noble.transition(DroneCardSelector)
c:remove()
end)
c:moveTo(200, 120)
c:add()
end)
return
end
end
function scene:exit()
scene.super.exit(self)
if scene.tank ~= nil then
scene.tank:remove()
end
scene.helloAudio:stop()
scene.telemLostSound:stop()
scene.levelAudio:stop()
scene.balebaSpawner:remove()
Noble.showFPS = false
end
function scene:finish()
scene.super.finish(self)
playdate.display.setScale(1)
end