89 lines
2.2 KiB
Lua
89 lines
2.2 KiB
Lua
MovableCrosshair = {}
|
|
class('MovableCrosshair').extends(playdate.graphics.sprite)
|
|
|
|
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
|
|
|
|
-- Calculate size based on crosshair dimensions
|
|
local totalSize = (self.lineLength + self.gapSize) * 2 + 10
|
|
self:setSize(totalSize, totalSize)
|
|
|
|
-- Set the drawing offset to middle of sprite
|
|
self.drawOffsetX = totalSize / 2
|
|
self.drawOffsetY = totalSize / 2
|
|
|
|
self:add(self.baseX, self.baseY)
|
|
self:setCenter(0.5, 0.5)
|
|
self:markDirty()
|
|
end
|
|
|
|
function MovableCrosshair:update()
|
|
MovableCrosshair.super.update(self)
|
|
self.time = self.time + playdate.display.getRefreshRate() / 1000
|
|
|
|
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:markDirty()
|
|
end
|
|
|
|
function MovableCrosshair:draw()
|
|
local centerX = self.drawOffsetX
|
|
local centerY = self.drawOffsetY
|
|
|
|
playdate.graphics.drawLine(
|
|
centerX - self.lineLength - self.gapSize, centerY,
|
|
centerX - self.gapSize, centerY
|
|
)
|
|
|
|
playdate.graphics.drawLine(
|
|
centerX + self.gapSize, centerY,
|
|
centerX + self.lineLength + self.gapSize, centerY
|
|
)
|
|
|
|
playdate.graphics.drawLine(
|
|
centerX, centerY - self.lineLength - self.gapSize,
|
|
centerX, centerY - self.gapSize
|
|
)
|
|
|
|
playdate.graphics.drawLine(
|
|
centerX, centerY + self.gapSize,
|
|
centerX, centerY + 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 |