Page 1 of 1

Line-segment-based Circular Bar Loader Class

Posted: Tue Nov 20, 2012 4:10 am
by substitute541
I don't even know why I even posted this when there are arcs

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
So um.... yeah, self explanatory...