You need a class library for this (for this, I used SECS)
Code: Select all
Circlebar = class:new()
Circlebar.startAngle = -math.pi/2
Circlebar.maxNum = 100
Circlebar.curNum = 50
Circlebar.radius = 50
Circlebar.alpha = 255
Circlebar.x = 0
Circlebar.y = 0
Circlebar.thickness = 3
Circlebar.numsegments = 100
Circlebar.segments = {}
function Circlebar:init()
for i=1, self.numsegments do
local segment = {}
local angle = (2 * math.pi)/self.numsegments * (i-1)
local angle2 = (2 * math.pi)/self.numsegments * i
segment.x1 = math.cos(angle + self.startAngle) * self.radius + self.x
segment.y1 = math.sin(angle + self.startAngle) * self.radius + self.y
segment.x2 = math.cos(angle2 + self.startAngle) * self.radius + self.x
segment.y2 = math.sin(angle2 + self.startAngle) * self.radius + self.y
segment.alpha = 50
table.insert(self.segments, segment)
end
end
function Circlebar:update(dt)
local percentage = self.curNum/self.maxNum
local amount = math.ceil(self.numsegments * percentage)
for i=1, #self.segments do
segment = self.segments[i]
if i <= amount then
segment.alpha = 255
else
segment.alpha = 0
end
local angle = (2 * math.pi)/self.numsegments * (i-1)
local angle2 = (2 * math.pi)/self.numsegments * i
segment.x1 = math.cos(angle + self.startAngle) * self.radius + self.x
segment.y1 = math.sin(angle + self.startAngle) * self.radius + self.y
segment.x2 = math.cos(angle2 + self.startAngle) * self.radius + self.x
segment.y2 = math.sin(angle2 + self.startAngle) * self.radius + self.y
end
end
function Circlebar:draw()
--love.graphics.setColor(255, 255, 255)
love.graphics.setLine(self.thickness)
for i, segment in ipairs(self.segments) do
love.graphics.setColor(255, 255, 255, segment.alpha - (255 - self.alpha))
love.graphics.line(segment.x1, segment.y1, segment.x2, segment.y2)
end
love.graphics.setColor(255, 255, 255)
end