summaryrefslogtreecommitdiff
path: root/main_old.lua
blob: 160a0d7460ce07f67b90c53dcb44bfe708da1869 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
local class = require 'class'
local hsluv = require 'hsluv'

local tau = 2*math.pi
local ZOOM = 200
local G = love.graphics

local function write_at(text,x,y)
	G.push()
	G.translate(x,y)
	G.scale(1/ZOOM)
	G.print(text,0,0)
	G.pop()
end

local Port = class()
Port.R = 0.1
function Port.make(cls, x,y, num)
	return setmetatable({x=x,y=y,n=num,wires={}},cls)
end
function Port.draw(self, istate)
	local c = {0,0,0}
	if istate == 'hover' then
		c[1] = 1
	end
	love.graphics.setColor(c)
	G.circle('line',self.x,self.y,self.R)
	write_at(self.n, self.x, self.y)
end
function Port.contains(self, px,py)
	local d = math.sqrt((self.x - px)^2 + (self.y - py)^2)
	return d <= self.R
end

local ports = {}
local n = 10
for i = 1,n do
	local theta = tau * i/n
	table.insert(ports, Port:make(math.cos(theta), math.sin(theta), i))
end
ports[3].wires = {ports[6]}
ports[5].wires = {ports[7],ports[2]}
for i = 1,15 do
	local r1,r2 = math.random(10), math.random(10)
	if r1 ~= r2 then
		table.insert(ports[r1].wires, ports[r2])
	end
end


local function catenary(x1,y1,x2,y2)
	-- https://math.stackexchange.com/questions/3557767/how-to-construct-a-catenary-of-a-specified-length-through-two-specified-points

end

local function wire_color(n)
	local phi = (1+math.sqrt(5))/2
	local h = (360*phi*n)%360
	return hsluv.hsluv_to_rgb({h, 80, 60})
end

local state = 'normal'


function love.draw()
	local W,H = G.getDimensions()
	G.clear(1,1,1)
	G.setColor(0,0,0)
	G.origin()
	G.setLineWidth(0.01)
	G.translate(W/2,H/2)
	G.scale(ZOOM)

	local mx,my = G.inverseTransformPoint(love.mouse.getPosition())
	local wn = 0
	for i,p in ipairs(ports) do
		local istate = p:contains(mx,my) and 'hover' or 'normal'
		p:draw(istate)
		for _,q in ipairs(p.wires) do
			G.setColor(wire_color(wn))
			wn = wn + 1
			catenary(p.x,p.y,q.x,q.y)
		end
	end
end