Difference between revisions of "User:Darkfrei/example functions"

(Draw grid)
Line 87: Line 87:
 
factor= factor or 1
 
factor= factor or 1
 
return factor*x/d, factor*y/d
 
return factor*x/d, factor*y/d
 +
end
 +
</source>
 +
 +
 +
=== Evaluate a point from any amount of control points ===
 +
 +
<source lang="lua">
 +
local function evaluate (curve, t)
 +
local ccpc = curve:getControlPointCount( )
 +
if ccpc > 1 then
 +
return curve:evaluate(t)
 +
elseif ccpc == 1 then
 +
return curve:getControlPoint(1)
 +
else
 +
return 0, 0
 +
end
 
end
 
end
 
</source>
 
</source>

Revision as of 10:13, 14 October 2022

Prints table

print('{' ..table.concat(line,",")..'},')

Draw grid

function draw_grid ()
	local grid_size = 20
	love.graphics.setLineWidth (1)
	love.graphics.setColor(0.25,0.25,0.25)
	local width, height = love.graphics.getDimensions( )
	for x = grid_size, width-1, grid_size do
		love.graphics.line(x, 0, x, height)
	end
	for y = grid_size, height-1, grid_size do
		love.graphics.line(0, y, width, y)
	end
end

Draw mouse position

function draw_mouse ()
	local mx, my = love.mouse.getPosition ()
	local text = mx..' '..my
	local font = love.graphics.getFont()
	local w = font:getWidth(text)
	local h = font:getHeight()
	love.graphics.setColor(0,0,0)
	love.graphics.rectangle('fill', mx, my-h, w, h)
	love.graphics.setColor(1,1,1)
	love.graphics.print(mx..' '..my,mx,my-h)
end

Beep

Define it:

local rate = 44100
local length = 1/32
local tone = 440 -- Hz
local p = math.floor(rate/tone) -- 128
local soundData = love.sound.newSoundData(length*rate, rate, 16, 1)
for i=0, length*rate-1 do soundData:setSample(i, i%p>p/2 and 1 or -1) end
local source = love.audio.newSource(soundData)
local function beep() source:play() end

Call it:

beep()

Point in area

function is_in_area (mx,my, x,y,w,h) -- mouse position and rectangle
	if (mx > x) and (mx < (x + w)) and
	   (my > y) and (my < (y + h)) then
		return true
	end
end


Is value in list

function is_value_in_list (value, list)
	for i, v in pairs (list) do
		if v == value then
			return true
		end
	end
end


Normalization and multiplication

Set magnitude to this vector:

function normul (x, y, factor) -- normalization and multiplication
	local d = (x*x+y*y)^0.5
	factor= factor or 1
	return factor*x/d, factor*y/d
end


Evaluate a point from any amount of control points

local function evaluate (curve, t)
	local ccpc = curve:getControlPointCount( )
	if ccpc > 1 then
		return curve:evaluate(t)
	elseif ccpc == 1 then
		return curve:getControlPoint(1)
	else
		return 0, 0
	end
end