Logikraft/blocks/cables_register.lua

253 lines
8.8 KiB
Lua

--[[
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