MovableCrosshair = {} class('MovableCrosshair').extends(NobleSprite) function MovableCrosshair:init() MovableCrosshair.super.init(self) -- Parameters for crosshair self.lineLength = 10 self.gapSize = 3 -- Parameters for movement self.baseX = 200 self.baseY = 150 self.moveRadius = 2 self.moveSpeed = 2 self.time = 0 end function MovableCrosshair:update() -- Update time self.time = self.time + playdate.display.getRefreshRate() / 1000 -- Calculate new position with slight movement local offsetX = math.sin(self.time) * self.moveRadius local offsetY = math.cos(self.time * 1.3) * self.moveRadius self:moveTo(self.baseX + offsetX, self.baseY + offsetY) self:draw() end function MovableCrosshair:draw() -- Draw horizontal lines playdate.graphics.drawLine( self.x - self.lineLength - self.gapSize, self.y, self.x - self.gapSize, self.y ) playdate.graphics.drawLine( self.x + self.gapSize, self.y, self.x + self.lineLength + self.gapSize, self.y ) -- Draw vertical lines playdate.graphics.drawLine( self.x, self.y - self.lineLength - self.gapSize, self.x, self.y - self.gapSize ) playdate.graphics.drawLine( self.x, self.y + self.gapSize, self.x, self.y + self.lineLength + self.gapSize ) end function MovableCrosshair:moveUp() if self.baseY > 5 then self.baseY = self.baseY - 1 end end function MovableCrosshair:moveDown() if self.baseY < 235 then self.baseY = self.baseY + 1 end end function MovableCrosshair:moveLeft() if self.baseX > 5 then self.baseX = self.baseX - 1 end end function MovableCrosshair:moveRight() if self.baseX < 395 then self.baseX = self.baseX + 1 end end