Line-segment-based Circular Bar Loader Class

Showcase your libraries, tools and other projects that help your fellow love users.
Post Reply
User avatar
substitute541
Party member
Posts: 484
Joined: Fri Aug 24, 2012 9:04 am
Location: Southern Leyte, Visayas, Philippines
Contact:

Line-segment-based Circular Bar Loader Class

Post 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...
Currently designing themes for WordPress.

Sometimes lurks around the forum.
Post Reply

Who is online

Users browsing this forum: No registered users and 77 guests