-- Code for bullets! import "CoreLibs/object" import "CoreLibs/graphics" import "CoreLibs/sprites" local gfx = playdate.graphics class("Bullet").extends(gfx.sprite) local POWER_SIZE_LOOKUP = { [1] = 2, [2] = 4, [3] = 6, [4] = 10, } local POWER_DAMAGE_LOOKUP = { [1] = 1, [2] = 3, [3] = 5, [4] = 10, } function Bullet:init(power, friendly) Bullet.super.init(self) self.power = power local size = POWER_SIZE_LOOKUP[power] local img = gfx.image.new(size, size) gfx.pushContext(img) gfx.fillCircleInRect(0, 0, size, size) gfx.popContext() self:setImage(img) self:setCollideRect(0, 0, self:getSize()) self.collisionResponse = gfx.sprite.kCollisionTypeOverlap local friendly = friendly or true if friendly then self:setGroupMask(0x4) self:setCollidesWithGroupsMask(0x8) self.direction = 1 else self:setGroupMask(0x10) self:setCollidesWithGroupsMask(0x2) self.direction = -1 end end function Bullet:update() local collisions = select(3, self:moveWithCollisions(self.x+self.direction, self.y)) for i=1, #collisions, 1 do -- anything the bullet can collide with should be damaged by it local obj = collisions[i].other obj:damage(POWER_DAMAGE_LOOKUP[self.power]) end if #collisions >= 1 then self:remove() end end