72 lines
1.9 KiB
Lua
72 lines
1.9 KiB
Lua
AmmoCrate = {}
|
|
class('AmmoCrate').extends(playdate.graphics.sprite)
|
|
|
|
function AmmoCrate:init(x, y)
|
|
AmmoCrate.super.init(self)
|
|
|
|
self.crateSize = 20
|
|
self:setSize(self.crateSize, self.crateSize)
|
|
self:setCenter(0.5, 0.5)
|
|
self:setZIndex(ZIndex.props)
|
|
self:setGroups(CollideGroups.props)
|
|
self:setCollidesWithGroups({ CollideGroups.granade })
|
|
self:setCollideRect(0, 0, self.crateSize, self.crateSize)
|
|
self:setTag(155)
|
|
|
|
self.removed = false
|
|
self.bonusGrenades = 3
|
|
|
|
self:moveTo(x, y)
|
|
self:add()
|
|
self:markDirty()
|
|
end
|
|
|
|
function AmmoCrate:update()
|
|
if self.removed then return end
|
|
if not BomberScene.instance then return end
|
|
|
|
self:moveBy(0, BomberScene.instance.scrollSpeed)
|
|
|
|
local _, _, collisions, count = self:checkCollisions(self.x, self.y)
|
|
if count > 0 then
|
|
for i, collision in ipairs(collisions) do
|
|
if collision.other:getTag() == 154 and collision.other.currentRadius <= 0.05 then
|
|
self:pickup()
|
|
return
|
|
end
|
|
end
|
|
end
|
|
|
|
if self.y > 260 then
|
|
self.removed = true
|
|
self:remove()
|
|
end
|
|
end
|
|
|
|
function AmmoCrate:pickup()
|
|
self.removed = true
|
|
BomberScene.availableGrenades = BomberScene.availableGrenades + self.bonusGrenades
|
|
|
|
local particle = ParticlePoly(self.x, self.y)
|
|
particle:setThickness(1)
|
|
particle:setSize(1, 2)
|
|
particle:setSpeed(1, 5)
|
|
particle:setColour(Graphics.kColorXOR)
|
|
particle:add(8)
|
|
|
|
self:remove()
|
|
end
|
|
|
|
function AmmoCrate:draw()
|
|
local s = self.crateSize
|
|
-- Box outline
|
|
playdate.graphics.drawRect(0, 0, s, s)
|
|
-- Cross pattern
|
|
playdate.graphics.drawLine(0, 0, s, s)
|
|
playdate.graphics.drawLine(s, 0, 0, s)
|
|
-- Inner + symbol
|
|
local mid = s / 2
|
|
playdate.graphics.drawLine(mid - 3, mid, mid + 3, mid)
|
|
playdate.graphics.drawLine(mid, mid - 3, mid, mid + 3)
|
|
end
|