Rework codebase - Added Editor

This commit is contained in:
2024-05-19 23:29:32 +02:00
parent 9d3ab2f0e0
commit abbc9b3d07
8 changed files with 401 additions and 358 deletions
+37 -316
View File
@@ -1,110 +1,3 @@
--[[
cable_NS1 -> One connection from north to south
cable_NW1_ES1 -> One connection from north to west, and another from east to south
cable_NWE8_S8 -> One connection between north, west and east, 8bit single cable from south
cable_0 -> The one cable without connection
--]]
local nodebox_single = {
{-0.0625, -0.5, 0.25, 0.0625, -0.375, 0.5},
{-0.125, -0.5, 0.25, 0.125, -0.25, 0.5}
}
local nodebox_straight = {
{-0.0625, -0.5, -0.5, 0.0625, -0.375, 0.5},
{-0.125, -0.5, -0.5, 0.125, -0.25, 0.5}
}
local nodeboxes_corner = {
{
{-0.5, -0.5, -0.0625, 0.0625, -0.375, 0.0625}, -- NodeBox1
{-0.0625, -0.5, 0.0625, 0.0625, -0.375, 0.5}, -- NodeBox2
},
{
{-0.5, -0.5, -0.125, 0.125, -0.25, 0.125}, -- NodeBox1
{-0.125, -0.5, 0.125, 0.125, -0.25, 0.5}, -- NodeBox2
}
}
local nodeboxes_jump = {
{
{-0.5, -0.5, -0.0625, -0.1875, -0.375, 0.0625}, -- NodeBox2
{0.1875, -0.5, -0.0625, 0.5, -0.375, 0.0625}, -- NodeBox3
{-0.3125, -0.1875, -0.0625, 0.3125, -0.0625, 0.0625}, -- NodeBox4
{-0.3125, -0.375, -0.0625, -0.1875, -0.1875, 0.0625}, -- NodeBox5
{0.1875, -0.375, -0.0625, 0.3125, -0.1875, 0.0625}, -- NodeBox6
},
{
{-0.5, -0.5, -0.125, -0.1875, -0.25, 0.125}, -- NodeBox2
{0.1875, -0.5, -0.125, 0.5, -0.25, 0.125}, -- NodeBox3
{-0.4375, -0.1875, -0.125, 0.4375, 0.0625, 0.125}, -- NodeBox4
{-0.4375, -0.25, -0.125, -0.1875, -0.1875, 0.125}, -- NodeBox5
{0.1875, -0.25, -0.125, 0.4375, -0.1875, 0.125}, -- NodeBox6
}
}
local nodeboxes_ccorner = {
{
{-0.5, -0.5, -0.0625, -0.1875, -0.375, 0.0625}, -- NodeBox1
{-0.0625, -0.5, 0.1875, 0.0625, -0.375, 0.5}, -- NodeBox2
{-0.3125, -0.5, 0.0625, -0.1875, -0.375, 0.3125}, -- NodeBox3
{-0.1875, -0.5, 0.1875, -0.0625, -0.375, 0.3125}, -- NodeBox4
},
{
{-0.5, -0.5, -0.125, -0.125, -0.25, 0.125}, -- NodeBox1
{-0.125, -0.5, 0.125, 0.125, -0.25, 0.5}, -- NodeBox2
{-0.375, -0.5, 0.125, -0.125, -0.25, 0.375}, -- NodeBox4
}
}
local nodeboxes_tri = {
{
{-0.5, -0.5, -0.0625, 0.5, -0.375, 0.0625}, -- NodeBox1
{-0.0625, -0.5, 0.0625, 0.0625, -0.375, 0.5}, -- NodeBox2
},
{
{-0.5, -0.5, -0.125, 0.5, -0.25, 0.125}, -- NodeBox1
{-0.125, -0.5, 0.125, 0.125, -0.25, 0.5}, -- NodeBox2
}
}
local nodeboxes_cross = {
{
{-0.5, -0.5, -0.0625, 0.5, -0.375, 0.0625}, -- NodeBox1
{-0.0625, -0.5, 0.0625, 0.0625, -0.375, 0.5}, -- NodeBox2
{-0.0625, -0.5, -0.5, 0.0625, -0.375, -0.0625}, -- NodeBox3
},
{
{-0.5, -0.5, -0.125, 0.5, -0.25, 0.125}, -- NodeBox1
{-0.125, -0.5, 0.125, 0.125, -0.25, 0.5}, -- NodeBox2
{-0.125, -0.5, -0.5, 0.125, -0.25, -0.125}, -- NodeBox3
}
}
local nodebox_disconnected = {-0.125, -0.5, -0.125, 0.125, -0.25, 0.125}
local function rotateNodebox(nb,rot)
return
(math.fmod(rot,4)==0) and {nb[1],nb[2],nb[3],nb[4],nb[5],nb[6]} or
(math.fmod(rot,4)==1) and {nb[3],nb[2],-nb[1],nb[6],nb[5],-nb[4]} or
(math.fmod(rot,4)==2) and {-nb[1],nb[2],-nb[3],-nb[4],nb[5],-nb[6]} or
(math.fmod(rot,4)==3) and {-nb[3],nb[2],nb[1],-nb[6],nb[5],nb[4]} or
nb -- Should not happen
end
local function rotate4dir(conn,r)
local function rotate4dirOnce(conn)
return math.floor(conn/2) + 8*math.fmod(conn,2)
end
local x = math.fmod(conn,16)
for i=1,r do
x = rotate4dirOnce(x)
end
return (conn - math.fmod(conn,16) + x)
end
local function constArray(val,size)
local t = {}
for i=1,size
do
table.insert(t,val)
end
return t
end
--[[
name: the name of the cable
nodeboxes: All the rendered nodeboxes
@@ -113,12 +6,12 @@ end
nbconn: Which correspond each nodebox correspond to
ex: {1,1,2,1} -> nodeboxes 1,2,3 correspond to connection ES, and nodebox 2 correspond to connection W
--]]
logikraft.cablesblocks = {}
logikraft.cablesnb = {}
logikraft.cablesconn = {}
logikraft.cablesnbconn = {}
local function createCables(name,nodeboxes,connections,nbconn)
minetest.register_node("logikraft:cable_"..name, {
logikraft.cablenodes = {}
logikraft.cables = {}
function logikraft.registerCable(name,nodeboxes,connections,nbconn)
local nodename = "logikraft:cable_"..name
minetest.register_node(nodename, {
tiles = {
"cable_gray.png",
"cable_gray.png",
@@ -127,8 +20,8 @@ local function createCables(name,nodeboxes,connections,nbconn)
"cable_gray.png",
"cable_gray.png",
},
drawtype = "nodebox",
paramtype = "light",
drawtype = "nodebox",
node_box = {
type = "fixed",
fixed = nodeboxes
@@ -136,9 +29,6 @@ local function createCables(name,nodeboxes,connections,nbconn)
groups = {circuitry = 1,dig_immediate = 3}
})
if name == "EW8_N1_S1"
then print(dump(connections)) end
-- We sort the connections and nbconn
local connections2 = table.copy(connections)
table.sort(connections2)
@@ -148,209 +38,40 @@ local function createCables(name,nodeboxes,connections,nbconn)
do
nbconn2[i] = perm[v]
end
if name == "EW8_N1_S1"
then print(dump(connections2)) end
logikraft.cablesblocks["logikraft:cable_"..name] = name
logikraft.cablesnb[name] = nodeboxes
logikraft.cablesconn[name] = connections2
logikraft.cablesnbconn[name] = nbconn2
logikraft.cablenodes[nodename] = name
logikraft.cables[name] = {
nbs = nodeboxes,
conns = connections2,
nbToConn = nbconn2
}
end
-- cable_NSEW0
for v=1,2 do
createCables("NSEW"..tostring((v-1)*7+1),nodeboxes_cross[v],{(v-1)*16+8+4+2+1},constArray(1,#nodeboxes_cross[v]))
end
--[
-- cable_NW0_SE0
-- cable_NE0_SW0
-- cable_NS0_EW0
for v0=1,2 do
for v1=1,2 do
local nodeboxes = {}
local nbconn = {}
for _,nb in ipairs(nodeboxes_ccorner[v0]) do
table.insert(nodeboxes, nb)
table.insert(nbconn, 1)
end
for _,nb in ipairs(nodeboxes_ccorner[v1]) do
table.insert(nodeboxes, rotateNodebox(nb,2))
table.insert(nbconn, 2)
end
createCables("NW"..tostring((v0-1)*7+1).."_SE"..tostring((v1-1)*7+1),nodeboxes,{(v0-1)*16+8+1,(v1-1)*16+4+2},nbconn)
local nodeboxes = {}
local nbconn = {}
for _,nb in ipairs(nodeboxes_ccorner[v0]) do
table.insert(nodeboxes, rotateNodebox(nb,1))
table.insert(nbconn, 1)
end
for _,nb in ipairs(nodeboxes_ccorner[v1]) do
table.insert(nodeboxes, rotateNodebox(nb,3))
table.insert(nbconn, 2)
end
createCables("NE"..tostring((v0-1)*7+1).."_SW"..tostring((v1-1)*7+1),nodeboxes,{(v0-1)*16+8+4,(v1-1)*16+2+1},nbconn)
local nodeboxes = {}
local nbconn = {}
table.insert(nodeboxes, nodebox_straight[v0])
table.insert(nbconn, 1)
for _,nb in ipairs(nodeboxes_jump[v1]) do
table.insert(nodeboxes, rotateNodebox(nb,2))
table.insert(nbconn, 2)
end
createCables("NS"..tostring((v0-1)*7+1).."_EW"..tostring((v1-1)*7+1),nodeboxes,{(v0-1)*16+8+2,(v1-1)*16+4+1},nbconn)
end
end
-- cable_AB0_C0_D0 -- ("NW","NE","SE","SW") * (/ + C0 + D0 + C0D0)
-- cable_AB0_C0_D0 -- ("NS" "EW") * (/ + C0 + D0 + C0D0)
for v=1,2 do
for v1=0,2 do
for v2=0,2 do
for r,rn in ipairs({{"NW","E","S"},{"NE","S","W"},{"SE","W","N"},{"SW","N","E"}}) do
local nodeboxes = {}
local nbconn = {}
local connz = {rotate4dir((v-1)*16+8+1,r-1)}
for _,nb in ipairs(nodeboxes_corner[v]) do
table.insert(nodeboxes, rotateNodebox(nb,r-1))
table.insert(nbconn, 1)
function logikraft.cableFromConns(conns)
for name,cable in pairs(logikraft.cables)
do
if table.equals1(conns,cable.conns)
then return name
end
if v1 ~= 0 then
table.insert(nodeboxes, rotateNodebox(nodebox_single[v1],r))
table.insert(nbconn, 2)
table.insert(connz,rotate4dir((v1-1)*16+4,r-1))
end
if v2 ~= 0 then
table.insert(nodeboxes, rotateNodebox(nodebox_single[v2],r+1))
table.insert(nbconn, v1==0 and 2 or 3)
table.insert(connz,rotate4dir((v2-1)*16+2,r-1))
end
createCables(
rn[1]..tostring((v-1)*7+1)..
(v1~=0 and ("_"..rn[2]..tostring((v1-1)*7+1)) or "")..
(v2~=0 and ("_"..rn[3]..tostring((v2-1)*7+1)) or "")
,nodeboxes,connz,nbconn
)
end
for r,rn in ipairs({{"NS","E","W"},{"EW","N","S"}}) do
local nodeboxes = {}
local nbconn = {}
local connz = {rotate4dir((v-1)*16+8+2,r-1)}
table.insert(nodeboxes, rotateNodebox(nodebox_straight[v],r-1))
table.insert(nbconn, 1)
if v1 ~= 0 then
table.insert(nodeboxes, rotateNodebox(nodebox_single[v1],r))
table.insert(nbconn, 2)
table.insert(connz,rotate4dir((v1-1)*16+4,r-1))
end
if v2 ~= 0 then
table.insert(nodeboxes, rotateNodebox(nodebox_single[v2],r+2))
table.insert(nbconn, v1==0 and 2 or 3)
table.insert(connz,rotate4dir((v2-1)*16+1,r-1))
end
createCables(
rn[1]..tostring((v-1)*7+1)..
(v1~=0 and ("_"..rn[2]..tostring((v1-1)*7+1)) or "")..
(v2~=0 and ("_"..rn[3]..tostring((v2-1)*7+1)) or ""),
nodeboxes,connz,nbconn
)
end
return nil
end
end
end
-- "cable_A0_B0_C0_D0" -- (n s e w ns ...)
for v1=0,2 do
for v2=0,2 do
for v3=0,2 do
for v4=0,2 do
local nodeboxes = {}
local nbconn = {}
local name = ""
local connz = {}
if v1 ~= 0 then
table.insert(nodeboxes, rotateNodebox(nodebox_single[v1],0))
table.insert(nbconn, 1)
table.insert(connz,(v1-1)*16+8)
name = name.."_N"..tostring((v1-1)*7+1)
end
if v2 ~= 0 then
table.insert(nodeboxes, rotateNodebox(nodebox_single[v2],1))
table.insert(nbconn, #nbconn+1)
table.insert(connz,(v2-1)*16+4)
name = name.."_E"..tostring((v2-1)*7+1)
end
if v3 ~= 0 then
table.insert(nodeboxes, rotateNodebox(nodebox_single[v3],2))
table.insert(nbconn, #nbconn+1)
table.insert(connz,(v3-1)*16+2)
name = name.."_S"..tostring((v3-1)*7+1)
end
if v4 ~= 0 then
table.insert(nodeboxes, rotateNodebox(nodebox_single[v4],3))
table.insert(nbconn, #nbconn+1)
table.insert(connz,(v4-1)*16+1)
name = name.."_W"..tostring((v4-1)*7+1)
end
if name ~= "" then
-- Else there is no connection, we don't have to create a cable
createCables(string.sub(name,2,-1),nodeboxes,connz,nbconn)
end
end
end
end
end
-- "cable_ABC0_D0" -- ("NEW","NES","ESW","SWN") * (/ + D0)
for v=1,2 do
for v1=0,2 do
for r,rn in ipairs({{"NEW","S"},{"NES","W"},{"ESW","N"},{"SWN","E"}}) do
local nodeboxes = {}
local nbconn = {}
local connz = {rotate4dir((v-1)*16+8+4+1,r-1)}
for _,nb in ipairs(nodeboxes_tri[v]) do
table.insert(nodeboxes, rotateNodebox(nb,r-1))
table.insert(nbconn, 1)
end
if v1 ~= 0 then
table.insert(nodeboxes, rotateNodebox(nodebox_single[v1],r+1))
table.insert(nbconn, 2)
table.insert(connz,rotate4dir((v1-1)*16+2,r-1))
end
createCables(
rn[1]..tostring((v-1)*7+1)..
(v1~=0 and ("_"..rn[2]..tostring((v1-1)*7+1)) or ""),
nodeboxes,connz,nbconn
)
end
end
end
--]]
logikraft.cablesfromconn = table.invert(logikraft.cablesconn)
function logikraft.rotateCable(name,r)
local conn = logikraft.cablesconn[name]
local conn = logikraft.cables[name].conns
local newconn = {}
for i,v in ipairs(conn)
do
newconn[i] = rotate4dir(v,r)
end
table.sort(newconn)
return table.getkey1(logikraft.cablesconn,newconn)
return logikraft.cableFromConns(newconn)
end
function logikraft.connectInCable(name,a,b)
local conns = table.copy(logikraft.cablesconn[name])
local cia = logikraft.cablesnbconn[name][a]
local cib = logikraft.cablesnbconn[name][b]
local conns = table.copy(logikraft.cables[name].conns)
local cia = logikraft.cables[name].nbToConn[a]
local cib = logikraft.cables[name].nbToConn[b]
local conna = conns[cia]
local connb = conns[cib]
@@ -360,11 +81,11 @@ function logikraft.connectInCable(name,a,b)
table.remove(conns,cib)
table.sort(conns)
return table.getkey1(logikraft.cablesconn,conns)
return logikraft.cableFromConns(conns)
end
function logikraft.connFromDir(name,dir)
local conns = logikraft.cablesconn[name]
local conns = logikraft.cables[name].conns
local dir8 = math.pow(2,dir)
for i,c in ipairs(conns)
do
@@ -391,12 +112,12 @@ function logikraft.connectContiguousCable(namea,posa,a,nameb,posb,b)
then return nil
end
local connsa = table.copy(logikraft.cablesconn[namea])
local connsb = table.copy(logikraft.cablesconn[nameb])
local connsa = table.copy(logikraft.cables[namea].conns)
local connsb = table.copy(logikraft.cables[nameb].conns)
print(dump(connsa))
print(dump(connsb))
local cia = logikraft.cablesnbconn[namea][a]
local cib = logikraft.cablesnbconn[nameb][b]
local cia = logikraft.cables[namea].nbToConn[a]
local cib = logikraft.cables[nameb].nbToConn[b]
local cia2 = logikraft.connFromDir(namea,dira)
local cib2 = logikraft.connFromDir(nameb,math.fmod(dira+2,4))
print(dira)
@@ -434,13 +155,13 @@ function logikraft.connectContiguousCable(namea,posa,a,nameb,posb,b)
table.sort(connsa)
table.sort(connsb)
return {table.getkey1(logikraft.cablesconn,connsa),table.getkey1(logikraft.cablesconn,connsb)}
return {logikraft.cableFromConns(connsa),logikraft.cableFromConns(connsb)}
end
function logikraft.disconnectInCable(name,a)
local conns = table.copy(logikraft.cablesconn[name])
local cindex = logikraft.cablesnbconn[name][a]
local conns = table.copy(logikraft.cables[name].conns)
local cindex = logikraft.cables[name].nbToConn[a]
local conn = conns[cindex]
table.remove(conns,cindex)
@@ -458,15 +179,15 @@ function logikraft.disconnectInCable(name,a)
end
table.sort(conns)
return table.getkey1(logikraft.cablesconn,conns)
return logikraft.cableFromConns(conns)
end
function logikraft.resizeInCable(name,a)
local conns = table.copy(logikraft.cablesconn[name])
local cindex = logikraft.cablesnbconn[name][a]
local conns = table.copy(logikraft.cables[name].conns)
local cindex = logikraft.cables[name].nbToConn[a]
conns[cindex] = (conns[cindex] >= 16) and (conns[cindex] - 16) or (conns[cindex] + 16)
table.sort(conns)
return table.getkey1(logikraft.cablesconn,conns)
return logikraft.cableFromConns(conns)
end
+253
View File
@@ -0,0 +1,253 @@
--[[
cable_NS1 -> One connection from north to south
cable_NW1_ES1 -> One connection from north to west, and another from east to south
cable_NWE8_S8 -> One connection between north, west and east, 8bit single cable from south
cable_0 -> The one cable without connection
--]]
local nodebox_single = {
{-0.0625, -0.5, 0.25, 0.0625, -0.375, 0.5},
{-0.125, -0.5, 0.25, 0.125, -0.25, 0.5}
}
local nodebox_straight = {
{-0.0625, -0.5, -0.5, 0.0625, -0.375, 0.5},
{-0.125, -0.5, -0.5, 0.125, -0.25, 0.5}
}
local nodeboxes_corner = {
{
{-0.5, -0.5, -0.0625, 0.0625, -0.375, 0.0625}, -- NodeBox1
{-0.0625, -0.5, 0.0625, 0.0625, -0.375, 0.5}, -- NodeBox2
},
{
{-0.5, -0.5, -0.125, 0.125, -0.25, 0.125}, -- NodeBox1
{-0.125, -0.5, 0.125, 0.125, -0.25, 0.5}, -- NodeBox2
}
}
local nodeboxes_jump = {
{
{-0.5, -0.5, -0.0625, -0.1875, -0.375, 0.0625}, -- NodeBox2
{0.1875, -0.5, -0.0625, 0.5, -0.375, 0.0625}, -- NodeBox3
{-0.3125, -0.1875, -0.0625, 0.3125, -0.0625, 0.0625}, -- NodeBox4
{-0.3125, -0.375, -0.0625, -0.1875, -0.1875, 0.0625}, -- NodeBox5
{0.1875, -0.375, -0.0625, 0.3125, -0.1875, 0.0625}, -- NodeBox6
},
{
{-0.5, -0.5, -0.125, -0.1875, -0.25, 0.125}, -- NodeBox2
{0.1875, -0.5, -0.125, 0.5, -0.25, 0.125}, -- NodeBox3
{-0.4375, -0.1875, -0.125, 0.4375, 0.0625, 0.125}, -- NodeBox4
{-0.4375, -0.25, -0.125, -0.1875, -0.1875, 0.125}, -- NodeBox5
{0.1875, -0.25, -0.125, 0.4375, -0.1875, 0.125}, -- NodeBox6
}
}
local nodeboxes_ccorner = {
{
{-0.5, -0.5, -0.0625, -0.1875, -0.375, 0.0625}, -- NodeBox1
{-0.0625, -0.5, 0.1875, 0.0625, -0.375, 0.5}, -- NodeBox2
{-0.3125, -0.5, 0.0625, -0.1875, -0.375, 0.3125}, -- NodeBox3
{-0.1875, -0.5, 0.1875, -0.0625, -0.375, 0.3125}, -- NodeBox4
},
{
{-0.5, -0.5, -0.125, -0.125, -0.25, 0.125}, -- NodeBox1
{-0.125, -0.5, 0.125, 0.125, -0.25, 0.5}, -- NodeBox2
{-0.375, -0.5, 0.125, -0.125, -0.25, 0.375}, -- NodeBox4
}
}
local nodeboxes_tri = {
{
{-0.5, -0.5, -0.0625, 0.5, -0.375, 0.0625}, -- NodeBox1
{-0.0625, -0.5, 0.0625, 0.0625, -0.375, 0.5}, -- NodeBox2
},
{
{-0.5, -0.5, -0.125, 0.5, -0.25, 0.125}, -- NodeBox1
{-0.125, -0.5, 0.125, 0.125, -0.25, 0.5}, -- NodeBox2
}
}
local nodeboxes_cross = {
{
{-0.5, -0.5, -0.0625, 0.5, -0.375, 0.0625}, -- NodeBox1
{-0.0625, -0.5, 0.0625, 0.0625, -0.375, 0.5}, -- NodeBox2
{-0.0625, -0.5, -0.5, 0.0625, -0.375, -0.0625}, -- NodeBox3
},
{
{-0.5, -0.5, -0.125, 0.5, -0.25, 0.125}, -- NodeBox1
{-0.125, -0.5, 0.125, 0.125, -0.25, 0.5}, -- NodeBox2
{-0.125, -0.5, -0.5, 0.125, -0.25, -0.125}, -- NodeBox3
}
}
local nodebox_disconnected = {-0.125, -0.5, -0.125, 0.125, -0.25, 0.125}
-- cable_NSEW0
for v=1,2 do
logikraft.registerCable("NSEW"..tostring((v-1)*7+1),nodeboxes_cross[v],{(v-1)*16+8+4+2+1},table.constTable(1,#nodeboxes_cross[v]))
end
--[
-- cable_NW0_SE0
-- cable_NE0_SW0
-- cable_NS0_EW0
for v0=1,2 do
for v1=1,2 do
local nodeboxes = {}
local nbconn = {}
for _,nb in ipairs(nodeboxes_ccorner[v0]) do
table.insert(nodeboxes, nb)
table.insert(nbconn, 1)
end
for _,nb in ipairs(nodeboxes_ccorner[v1]) do
table.insert(nodeboxes, logikraft.rotateNodebox(nb,2))
table.insert(nbconn, 2)
end
logikraft.registerCable("NW"..tostring((v0-1)*7+1).."_SE"..tostring((v1-1)*7+1),nodeboxes,{(v0-1)*16+8+1,(v1-1)*16+4+2},nbconn)
local nodeboxes = {}
local nbconn = {}
for _,nb in ipairs(nodeboxes_ccorner[v0]) do
table.insert(nodeboxes, logikraft.rotateNodebox(nb,1))
table.insert(nbconn, 1)
end
for _,nb in ipairs(nodeboxes_ccorner[v1]) do
table.insert(nodeboxes, logikraft.rotateNodebox(nb,3))
table.insert(nbconn, 2)
end
logikraft.registerCable("NE"..tostring((v0-1)*7+1).."_SW"..tostring((v1-1)*7+1),nodeboxes,{(v0-1)*16+8+4,(v1-1)*16+2+1},nbconn)
local nodeboxes = {}
local nbconn = {}
table.insert(nodeboxes, nodebox_straight[v0])
table.insert(nbconn, 1)
for _,nb in ipairs(nodeboxes_jump[v1]) do
table.insert(nodeboxes, logikraft.rotateNodebox(nb,2))
table.insert(nbconn, 2)
end
logikraft.registerCable("NS"..tostring((v0-1)*7+1).."_EW"..tostring((v1-1)*7+1),nodeboxes,{(v0-1)*16+8+2,(v1-1)*16+4+1},nbconn)
end
end
-- cable_AB0_C0_D0 -- ("NW","NE","SE","SW") * (/ + C0 + D0 + C0D0)
-- cable_AB0_C0_D0 -- ("NS" "EW") * (/ + C0 + D0 + C0D0)
for v=1,2 do
for v1=0,2 do
for v2=0,2 do
for r,rn in ipairs({{"NW","E","S"},{"NE","S","W"},{"SE","W","N"},{"SW","N","E"}}) do
local nodeboxes = {}
local nbconn = {}
local connz = {logikraft.rotate4dir((v-1)*16+8+1,r-1)}
for _,nb in ipairs(nodeboxes_corner[v]) do
table.insert(nodeboxes, logikraft.rotateNodebox(nb,r-1))
table.insert(nbconn, 1)
end
if v1 ~= 0 then
table.insert(nodeboxes, logikraft.rotateNodebox(nodebox_single[v1],r))
table.insert(nbconn, 2)
table.insert(connz,logikraft.rotate4dir((v1-1)*16+4,r-1))
end
if v2 ~= 0 then
table.insert(nodeboxes, logikraft.rotateNodebox(nodebox_single[v2],r+1))
table.insert(nbconn, v1==0 and 2 or 3)
table.insert(connz,logikraft.rotate4dir((v2-1)*16+2,r-1))
end
logikraft.registerCable(
rn[1]..tostring((v-1)*7+1)..
(v1~=0 and ("_"..rn[2]..tostring((v1-1)*7+1)) or "")..
(v2~=0 and ("_"..rn[3]..tostring((v2-1)*7+1)) or "")
,nodeboxes,connz,nbconn
)
end
for r,rn in ipairs({{"NS","E","W"},{"EW","N","S"}}) do
local nodeboxes = {}
local nbconn = {}
local connz = {logikraft.rotate4dir((v-1)*16+8+2,r-1)}
table.insert(nodeboxes, logikraft.rotateNodebox(nodebox_straight[v],r-1))
table.insert(nbconn, 1)
if v1 ~= 0 then
table.insert(nodeboxes, logikraft.rotateNodebox(nodebox_single[v1],r))
table.insert(nbconn, 2)
table.insert(connz,logikraft.rotate4dir((v1-1)*16+4,r-1))
end
if v2 ~= 0 then
table.insert(nodeboxes, logikraft.rotateNodebox(nodebox_single[v2],r+2))
table.insert(nbconn, v1==0 and 2 or 3)
table.insert(connz,logikraft.rotate4dir((v2-1)*16+1,r-1))
end
logikraft.registerCable(
rn[1]..tostring((v-1)*7+1)..
(v1~=0 and ("_"..rn[2]..tostring((v1-1)*7+1)) or "")..
(v2~=0 and ("_"..rn[3]..tostring((v2-1)*7+1)) or ""),
nodeboxes,connz,nbconn
)
end
end
end
end
-- "cable_A0_B0_C0_D0" -- (n s e w ns ...)
for v1=0,2 do
for v2=0,2 do
for v3=0,2 do
for v4=0,2 do
local nodeboxes = {}
local nbconn = {}
local name = ""
local connz = {}
if v1 ~= 0 then
table.insert(nodeboxes, logikraft.rotateNodebox(nodebox_single[v1],0))
table.insert(nbconn, 1)
table.insert(connz,(v1-1)*16+8)
name = name.."_N"..tostring((v1-1)*7+1)
end
if v2 ~= 0 then
table.insert(nodeboxes, logikraft.rotateNodebox(nodebox_single[v2],1))
table.insert(nbconn, #nbconn+1)
table.insert(connz,(v2-1)*16+4)
name = name.."_E"..tostring((v2-1)*7+1)
end
if v3 ~= 0 then
table.insert(nodeboxes, logikraft.rotateNodebox(nodebox_single[v3],2))
table.insert(nbconn, #nbconn+1)
table.insert(connz,(v3-1)*16+2)
name = name.."_S"..tostring((v3-1)*7+1)
end
if v4 ~= 0 then
table.insert(nodeboxes, logikraft.rotateNodebox(nodebox_single[v4],3))
table.insert(nbconn, #nbconn+1)
table.insert(connz,(v4-1)*16+1)
name = name.."_W"..tostring((v4-1)*7+1)
end
if name ~= "" then
-- Else there is no connection, we don't have to create a cable
logikraft.registerCable(string.sub(name,2,-1),nodeboxes,connz,nbconn)
end
end
end
end
end
-- "cable_ABC0_D0" -- ("NEW","NES","ESW","SWN") * (/ + D0)
for v=1,2 do
for v1=0,2 do
for r,rn in ipairs({{"NEW","S"},{"NES","W"},{"ESW","N"},{"SWN","E"}}) do
local nodeboxes = {}
local nbconn = {}
local connz = {logikraft.rotate4dir((v-1)*16+8+4+1,r-1)}
for _,nb in ipairs(nodeboxes_tri[v]) do
table.insert(nodeboxes, logikraft.rotateNodebox(nb,r-1))
table.insert(nbconn, 1)
end
if v1 ~= 0 then
table.insert(nodeboxes, logikraft.rotateNodebox(nodebox_single[v1],r+1))
table.insert(nbconn, 2)
table.insert(connz,logikraft.rotate4dir((v1-1)*16+2,r-1))
end
logikraft.registerCable(
rn[1]..tostring((v-1)*7+1)..
(v1~=0 and ("_"..rn[2]..tostring((v1-1)*7+1)) or ""),
nodeboxes,connz,nbconn
)
end
end
end
+35 -13
View File
@@ -13,19 +13,41 @@ end
-- +−−−−−−−−−−−> x+
-- {name,width,height,{cables_left,cables_right,cables_top,cables_bottom}}
logikraft.components = {
["and"] = {2,3,{{"in_2",nil,"in_1"},{nil,"out",nil},nil,nil}},
["switch"] = {2,1,{{"in"},{"out"},{"activate",nil},nil}},
["demux"] = {2,8,{{nil,nil,nil,nil,nil,"in_3","in_2","in_1"},{"out_8","out_7","out_6","out_5","out_4","out_3","out_2","out_1"},nil,nil}}
["and"] = {
width = 2,
height = 3,
ports = {
left = {"in_2",nil,"in_1"},
right = {nil,"out",nil}
}
},
["switch"] = {
width = 2,
height = 1,
ports = {
left = {"in"},
right = {"out"},
top = {"activate",nil}
}
},
["demux"] = {
width = 2,
height = 8,
ports = {
left = {nil,nil,nil,nil,nil,"in_3","in_2","in_1"},
right = {"out_8","out_7","out_6","out_5","out_4","out_3","out_2","out_1"}
}
}
}
-- componentsblocks["block"] = {name,x,y}
logikraft.componentsblocks = {}
-- componentsblocks["block"] = {name = Name of the component,x,y}
logikraft.componentnodes = {}
for name,cmp in pairs(logikraft.components)
do
local w = cmp[1]
local h = cmp[2]
local cables = cmp[3]
local w = cmp.width
local h = cmp.height
local cables = cmp.ports
for x=1,w do
for y=1,h do
@@ -36,10 +58,10 @@ do
tiles = {
"component_"..name..".png",
"component.png",
((x==w) and (cables[2] and cables[2][y] and "component_port.png" or "component.png") or "component.png"), -- x+
((x==1) and (cables[1] and cables[1][y] and "component_port.png" or "component.png") or "component.png"), -- x-
((y==h) and (cables[3] and cables[3][x] and "component_port.png" or "component.png") or "component.png"), -- z+
((y==1) and (cables[4] and cables[4][x] and "component_port.png" or "component.png") or "component.png"), -- z-
((x==w) and (cables.right and cables.right[y] and "component_port.png" or "component.png") or "component.png"), -- x+
((x==1) and (cables.left and cables.left[y] and "component_port.png" or "component.png") or "component.png"), -- x-
((y==h) and (cables.top and cables.top[x] and "component_port.png" or "component.png") or "component.png"), -- z+
((y==1) and (cables.bottom and cables.bottom[x] and "component_port.png" or "component.png") or "component.png"), -- z-
},
groups = {circuitry = 1,dig_immediate = 3},
paramtype2 = "4dir",
@@ -109,7 +131,7 @@ do
end
end
})
logikraft.componentsblocks[nodename] = {name = name, x = x, y = y}
logikraft.componentnodes[nodename] = {name = name, x = x, y = y}
end
end