Rework codebase - Added Editor
This commit is contained in:
parent
9d3ab2f0e0
commit
abbc9b3d07
353
blocks/cable.lua
353
blocks/cable.lua
@ -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
|
name: the name of the cable
|
||||||
nodeboxes: All the rendered nodeboxes
|
nodeboxes: All the rendered nodeboxes
|
||||||
@ -113,12 +6,12 @@ end
|
|||||||
nbconn: Which correspond each nodebox correspond to
|
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
|
ex: {1,1,2,1} -> nodeboxes 1,2,3 correspond to connection ES, and nodebox 2 correspond to connection W
|
||||||
--]]
|
--]]
|
||||||
logikraft.cablesblocks = {}
|
logikraft.cablenodes = {}
|
||||||
logikraft.cablesnb = {}
|
logikraft.cables = {}
|
||||||
logikraft.cablesconn = {}
|
function logikraft.registerCable(name,nodeboxes,connections,nbconn)
|
||||||
logikraft.cablesnbconn = {}
|
local nodename = "logikraft:cable_"..name
|
||||||
local function createCables(name,nodeboxes,connections,nbconn)
|
|
||||||
minetest.register_node("logikraft:cable_"..name, {
|
minetest.register_node(nodename, {
|
||||||
tiles = {
|
tiles = {
|
||||||
"cable_gray.png",
|
"cable_gray.png",
|
||||||
"cable_gray.png",
|
"cable_gray.png",
|
||||||
@ -127,8 +20,8 @@ local function createCables(name,nodeboxes,connections,nbconn)
|
|||||||
"cable_gray.png",
|
"cable_gray.png",
|
||||||
"cable_gray.png",
|
"cable_gray.png",
|
||||||
},
|
},
|
||||||
drawtype = "nodebox",
|
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
|
drawtype = "nodebox",
|
||||||
node_box = {
|
node_box = {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
fixed = nodeboxes
|
fixed = nodeboxes
|
||||||
@ -136,9 +29,6 @@ local function createCables(name,nodeboxes,connections,nbconn)
|
|||||||
groups = {circuitry = 1,dig_immediate = 3}
|
groups = {circuitry = 1,dig_immediate = 3}
|
||||||
})
|
})
|
||||||
|
|
||||||
if name == "EW8_N1_S1"
|
|
||||||
then print(dump(connections)) end
|
|
||||||
|
|
||||||
-- We sort the connections and nbconn
|
-- We sort the connections and nbconn
|
||||||
local connections2 = table.copy(connections)
|
local connections2 = table.copy(connections)
|
||||||
table.sort(connections2)
|
table.sort(connections2)
|
||||||
@ -148,209 +38,40 @@ local function createCables(name,nodeboxes,connections,nbconn)
|
|||||||
do
|
do
|
||||||
nbconn2[i] = perm[v]
|
nbconn2[i] = perm[v]
|
||||||
end
|
end
|
||||||
if name == "EW8_N1_S1"
|
|
||||||
then print(dump(connections2)) end
|
|
||||||
|
|
||||||
logikraft.cablesblocks["logikraft:cable_"..name] = name
|
logikraft.cablenodes[nodename] = name
|
||||||
logikraft.cablesnb[name] = nodeboxes
|
logikraft.cables[name] = {
|
||||||
logikraft.cablesconn[name] = connections2
|
nbs = nodeboxes,
|
||||||
logikraft.cablesnbconn[name] = nbconn2
|
conns = connections2,
|
||||||
|
nbToConn = nbconn2
|
||||||
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
-- cable_NSEW0
|
function logikraft.cableFromConns(conns)
|
||||||
for v=1,2 do
|
for name,cable in pairs(logikraft.cables)
|
||||||
createCables("NSEW"..tostring((v-1)*7+1),nodeboxes_cross[v],{(v-1)*16+8+4+2+1},constArray(1,#nodeboxes_cross[v]))
|
do
|
||||||
end
|
if table.equals1(conns,cable.conns)
|
||||||
|
then return name
|
||||||
--[
|
|
||||||
-- 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)
|
|
||||||
end
|
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
|
end
|
||||||
|
return nil
|
||||||
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, 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)
|
function logikraft.rotateCable(name,r)
|
||||||
local conn = logikraft.cablesconn[name]
|
local conn = logikraft.cables[name].conns
|
||||||
local newconn = {}
|
local newconn = {}
|
||||||
for i,v in ipairs(conn)
|
for i,v in ipairs(conn)
|
||||||
do
|
do
|
||||||
newconn[i] = rotate4dir(v,r)
|
newconn[i] = rotate4dir(v,r)
|
||||||
end
|
end
|
||||||
table.sort(newconn)
|
table.sort(newconn)
|
||||||
return table.getkey1(logikraft.cablesconn,newconn)
|
return logikraft.cableFromConns(newconn)
|
||||||
end
|
end
|
||||||
|
|
||||||
function logikraft.connectInCable(name,a,b)
|
function logikraft.connectInCable(name,a,b)
|
||||||
local conns = table.copy(logikraft.cablesconn[name])
|
local conns = table.copy(logikraft.cables[name].conns)
|
||||||
local cia = logikraft.cablesnbconn[name][a]
|
local cia = logikraft.cables[name].nbToConn[a]
|
||||||
local cib = logikraft.cablesnbconn[name][b]
|
local cib = logikraft.cables[name].nbToConn[b]
|
||||||
local conna = conns[cia]
|
local conna = conns[cia]
|
||||||
local connb = conns[cib]
|
local connb = conns[cib]
|
||||||
|
|
||||||
@ -360,11 +81,11 @@ function logikraft.connectInCable(name,a,b)
|
|||||||
table.remove(conns,cib)
|
table.remove(conns,cib)
|
||||||
|
|
||||||
table.sort(conns)
|
table.sort(conns)
|
||||||
return table.getkey1(logikraft.cablesconn,conns)
|
return logikraft.cableFromConns(conns)
|
||||||
end
|
end
|
||||||
|
|
||||||
function logikraft.connFromDir(name,dir)
|
function logikraft.connFromDir(name,dir)
|
||||||
local conns = logikraft.cablesconn[name]
|
local conns = logikraft.cables[name].conns
|
||||||
local dir8 = math.pow(2,dir)
|
local dir8 = math.pow(2,dir)
|
||||||
for i,c in ipairs(conns)
|
for i,c in ipairs(conns)
|
||||||
do
|
do
|
||||||
@ -391,12 +112,12 @@ function logikraft.connectContiguousCable(namea,posa,a,nameb,posb,b)
|
|||||||
then return nil
|
then return nil
|
||||||
end
|
end
|
||||||
|
|
||||||
local connsa = table.copy(logikraft.cablesconn[namea])
|
local connsa = table.copy(logikraft.cables[namea].conns)
|
||||||
local connsb = table.copy(logikraft.cablesconn[nameb])
|
local connsb = table.copy(logikraft.cables[nameb].conns)
|
||||||
print(dump(connsa))
|
print(dump(connsa))
|
||||||
print(dump(connsb))
|
print(dump(connsb))
|
||||||
local cia = logikraft.cablesnbconn[namea][a]
|
local cia = logikraft.cables[namea].nbToConn[a]
|
||||||
local cib = logikraft.cablesnbconn[nameb][b]
|
local cib = logikraft.cables[nameb].nbToConn[b]
|
||||||
local cia2 = logikraft.connFromDir(namea,dira)
|
local cia2 = logikraft.connFromDir(namea,dira)
|
||||||
local cib2 = logikraft.connFromDir(nameb,math.fmod(dira+2,4))
|
local cib2 = logikraft.connFromDir(nameb,math.fmod(dira+2,4))
|
||||||
print(dira)
|
print(dira)
|
||||||
@ -434,13 +155,13 @@ function logikraft.connectContiguousCable(namea,posa,a,nameb,posb,b)
|
|||||||
|
|
||||||
table.sort(connsa)
|
table.sort(connsa)
|
||||||
table.sort(connsb)
|
table.sort(connsb)
|
||||||
return {table.getkey1(logikraft.cablesconn,connsa),table.getkey1(logikraft.cablesconn,connsb)}
|
return {logikraft.cableFromConns(connsa),logikraft.cableFromConns(connsb)}
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function logikraft.disconnectInCable(name,a)
|
function logikraft.disconnectInCable(name,a)
|
||||||
local conns = table.copy(logikraft.cablesconn[name])
|
local conns = table.copy(logikraft.cables[name].conns)
|
||||||
local cindex = logikraft.cablesnbconn[name][a]
|
local cindex = logikraft.cables[name].nbToConn[a]
|
||||||
local conn = conns[cindex]
|
local conn = conns[cindex]
|
||||||
|
|
||||||
table.remove(conns,cindex)
|
table.remove(conns,cindex)
|
||||||
@ -458,15 +179,15 @@ function logikraft.disconnectInCable(name,a)
|
|||||||
end
|
end
|
||||||
|
|
||||||
table.sort(conns)
|
table.sort(conns)
|
||||||
return table.getkey1(logikraft.cablesconn,conns)
|
return logikraft.cableFromConns(conns)
|
||||||
end
|
end
|
||||||
|
|
||||||
function logikraft.resizeInCable(name,a)
|
function logikraft.resizeInCable(name,a)
|
||||||
local conns = table.copy(logikraft.cablesconn[name])
|
local conns = table.copy(logikraft.cables[name].conns)
|
||||||
local cindex = logikraft.cablesnbconn[name][a]
|
local cindex = logikraft.cables[name].nbToConn[a]
|
||||||
|
|
||||||
conns[cindex] = (conns[cindex] >= 16) and (conns[cindex] - 16) or (conns[cindex] + 16)
|
conns[cindex] = (conns[cindex] >= 16) and (conns[cindex] - 16) or (conns[cindex] + 16)
|
||||||
|
|
||||||
table.sort(conns)
|
table.sort(conns)
|
||||||
return table.getkey1(logikraft.cablesconn,conns)
|
return logikraft.cableFromConns(conns)
|
||||||
end
|
end
|
||||||
253
blocks/cables_register.lua
Normal file
253
blocks/cables_register.lua
Normal 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
|
||||||
@ -13,19 +13,41 @@ end
|
|||||||
-- +−−−−−−−−−−−> x+
|
-- +−−−−−−−−−−−> x+
|
||||||
-- {name,width,height,{cables_left,cables_right,cables_top,cables_bottom}}
|
-- {name,width,height,{cables_left,cables_right,cables_top,cables_bottom}}
|
||||||
logikraft.components = {
|
logikraft.components = {
|
||||||
["and"] = {2,3,{{"in_2",nil,"in_1"},{nil,"out",nil},nil,nil}},
|
["and"] = {
|
||||||
["switch"] = {2,1,{{"in"},{"out"},{"activate",nil},nil}},
|
width = 2,
|
||||||
["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}}
|
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}
|
-- componentsblocks["block"] = {name = Name of the component,x,y}
|
||||||
logikraft.componentsblocks = {}
|
logikraft.componentnodes = {}
|
||||||
|
|
||||||
for name,cmp in pairs(logikraft.components)
|
for name,cmp in pairs(logikraft.components)
|
||||||
do
|
do
|
||||||
local w = cmp[1]
|
local w = cmp.width
|
||||||
local h = cmp[2]
|
local h = cmp.height
|
||||||
local cables = cmp[3]
|
local cables = cmp.ports
|
||||||
|
|
||||||
for x=1,w do
|
for x=1,w do
|
||||||
for y=1,h do
|
for y=1,h do
|
||||||
@ -36,10 +58,10 @@ do
|
|||||||
tiles = {
|
tiles = {
|
||||||
"component_"..name..".png",
|
"component_"..name..".png",
|
||||||
"component.png",
|
"component.png",
|
||||||
((x==w) and (cables[2] and cables[2][y] and "component_port.png" or "component.png") or "component.png"), -- x+
|
((x==w) and (cables.right and cables.right[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-
|
((x==1) and (cables.left and cables.left[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==h) and (cables.top and cables.top[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-
|
((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},
|
groups = {circuitry = 1,dig_immediate = 3},
|
||||||
paramtype2 = "4dir",
|
paramtype2 = "4dir",
|
||||||
@ -109,7 +131,7 @@ do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
})
|
})
|
||||||
logikraft.componentsblocks[nodename] = {name = name, x = x, y = y}
|
logikraft.componentnodes[nodename] = {name = name, x = x, y = y}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
29
circuits.lua
29
circuits.lua
@ -90,10 +90,10 @@ function logikraft.compileCircuit(poz)
|
|||||||
do
|
do
|
||||||
local node = minetest.get_node(pos)
|
local node = minetest.get_node(pos)
|
||||||
print("Analyzing "..node.name)
|
print("Analyzing "..node.name)
|
||||||
if logikraft.cablesblocks[node.name]
|
if logikraft.cablenodes[node.name]
|
||||||
then
|
then
|
||||||
-- It is a cable
|
-- It is a cable
|
||||||
local conns = logikraft.cablesconn[logikraft.cablesblocks[node.name]]
|
local conns = logikraft.cables[logikraft.cablenodes[node.name]].conns
|
||||||
for j,c in ipairs(conns)
|
for j,c in ipairs(conns)
|
||||||
do
|
do
|
||||||
if not (c == 1 or c == 2 or c == 4 or c == 8 or c == 17 or c == 18 or c == 20 or c == 24)
|
if not (c == 1 or c == 2 or c == 4 or c == 8 or c == 17 or c == 18 or c == 20 or c == 24)
|
||||||
@ -110,19 +110,18 @@ function logikraft.compileCircuit(poz)
|
|||||||
table.insert(connections,newconn)
|
table.insert(connections,newconn)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
elseif logikraft.componentsblocks[node.name]
|
elseif logikraft.componentnodes[node.name]
|
||||||
then
|
then
|
||||||
-- It is a component
|
-- It is a component
|
||||||
local cpblock = logikraft.componentsblocks[node.name]
|
local cpblock = logikraft.componentnodes[node.name]
|
||||||
if cpblock.x == 1 and cpblock.y == 1
|
if cpblock.x == 1 and cpblock.y == 1
|
||||||
then
|
then
|
||||||
local component = logikraft.components[cpblock.name]
|
local component = logikraft.components[cpblock.name]
|
||||||
local cp = {type = cpblock.name, ports = {}}
|
local cp = {type = cpblock.name, ports = {}}
|
||||||
print(dump(component))
|
|
||||||
-- Left
|
-- Left
|
||||||
if component[3][1]
|
if component.ports.left
|
||||||
then
|
then
|
||||||
for j,n in pairs(component[3][1])
|
for j,n in pairs(component.ports.left)
|
||||||
do
|
do
|
||||||
if n
|
if n
|
||||||
then
|
then
|
||||||
@ -131,31 +130,31 @@ function logikraft.compileCircuit(poz)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
-- Right
|
-- Right
|
||||||
if component[3][2]
|
if component.ports.right
|
||||||
then
|
then
|
||||||
for j,n in pairs(component[3][2])
|
for j,n in pairs(component.ports.right)
|
||||||
do
|
do
|
||||||
if n
|
if n
|
||||||
then
|
then
|
||||||
cp.ports[n] = {x=pos.x+component[1]-1,y=pos.y,z=pos.z+j-1,d=0}
|
cp.ports[n] = {x=pos.x+component.width-1,y=pos.y,z=pos.z+j-1,d=0}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
-- Top
|
-- Top
|
||||||
if component[3][3]
|
if component.ports.top
|
||||||
then
|
then
|
||||||
for j,n in pairs(component[3][3])
|
for j,n in pairs(component.ports.top)
|
||||||
do
|
do
|
||||||
if n
|
if n
|
||||||
then
|
then
|
||||||
cp.ports[n] = {x=pos.x+j-1,y=pos.y,z=pos.z+component[2]-1,d=1}
|
cp.ports[n] = {x=pos.x+j-1,y=pos.y,z=pos.z+component.height-1,d=1}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
-- Bottom
|
-- Bottom
|
||||||
if component[3][4]
|
if component.ports.bottom
|
||||||
then
|
then
|
||||||
for j,n in pairs(component[3][4])
|
for j,n in pairs(component.ports.bottom)
|
||||||
do
|
do
|
||||||
if n
|
if n
|
||||||
then
|
then
|
||||||
|
|||||||
1
init.lua
1
init.lua
@ -6,6 +6,7 @@ dofile(minetest.get_modpath("logikraft") .. "/circuits.lua")
|
|||||||
dofile(minetest.get_modpath("logikraft") .. "/blocks/circuit.lua")
|
dofile(minetest.get_modpath("logikraft") .. "/blocks/circuit.lua")
|
||||||
dofile(minetest.get_modpath("logikraft") .. "/blocks/component.lua")
|
dofile(minetest.get_modpath("logikraft") .. "/blocks/component.lua")
|
||||||
dofile(minetest.get_modpath("logikraft") .. "/blocks/cable.lua")
|
dofile(minetest.get_modpath("logikraft") .. "/blocks/cable.lua")
|
||||||
|
dofile(minetest.get_modpath("logikraft") .. "/blocks/cables_register.lua")
|
||||||
dofile(minetest.get_modpath("logikraft") .. "/items.lua")
|
dofile(minetest.get_modpath("logikraft") .. "/items.lua")
|
||||||
|
|
||||||
minetest.register_on_joinplayer(function(player)
|
minetest.register_on_joinplayer(function(player)
|
||||||
|
|||||||
43
items.lua
43
items.lua
@ -3,11 +3,11 @@ minetest.register_craftitem("logikraft:rotator", {
|
|||||||
inventory_image = "rotator.png",
|
inventory_image = "rotator.png",
|
||||||
on_place = function(itemstack, user, pointed_thing)
|
on_place = function(itemstack, user, pointed_thing)
|
||||||
local node = minetest.get_node(pointed_thing.under)
|
local node = minetest.get_node(pointed_thing.under)
|
||||||
if not logikraft.cablesblocks[node.name]
|
if not logikraft.cablenodes[node.name]
|
||||||
then return itemstack
|
then return itemstack
|
||||||
end
|
end
|
||||||
|
|
||||||
local new = logikraft.rotateCable(logikraft.cablesblocks[node.name],1)
|
local new = logikraft.rotateCable(logikraft.cablenodes[node.name],1)
|
||||||
minetest.swap_node(pointed_thing.under, {name = "logikraft:cable_" .. new})
|
minetest.swap_node(pointed_thing.under, {name = "logikraft:cable_" .. new})
|
||||||
return itemstack
|
return itemstack
|
||||||
end
|
end
|
||||||
@ -25,14 +25,14 @@ minetest.register_craftitem("logikraft:linker", {
|
|||||||
local selectedy = meta:get_int("logikraft:selected_y")
|
local selectedy = meta:get_int("logikraft:selected_y")
|
||||||
local selectedz = meta:get_int("logikraft:selected_z")
|
local selectedz = meta:get_int("logikraft:selected_z")
|
||||||
local selectedpos = {x = selectedx, y = selectedy, z = selectedz}
|
local selectedpos = {x = selectedx, y = selectedy, z = selectedz}
|
||||||
if logikraft.cablesblocks[node.name]
|
if logikraft.cablenodes[node.name]
|
||||||
then
|
then
|
||||||
if selectedx == pointed_thing.under.x and selectedy == pointed_thing.under.y and selectedz == pointed_thing.under.z
|
if selectedx == pointed_thing.under.x and selectedy == pointed_thing.under.y and selectedz == pointed_thing.under.z
|
||||||
then
|
then
|
||||||
local thisnb = logikraft.lookingAtNbIndex(user,pointed_thing.under)
|
local thisnb = logikraft.lookingAtNbIndex(user,pointed_thing.under)
|
||||||
if(selectednb ~= thisnb)
|
if(selectednb ~= thisnb)
|
||||||
then
|
then
|
||||||
local new = logikraft.connectInCable(logikraft.cablesblocks[node.name],selectednb,thisnb)
|
local new = logikraft.connectInCable(logikraft.cablenodes[node.name],selectednb,thisnb)
|
||||||
minetest.swap_node(pointed_thing.under, {name = "logikraft:cable_" .. new})
|
minetest.swap_node(pointed_thing.under, {name = "logikraft:cable_" .. new})
|
||||||
end
|
end
|
||||||
meta:set_int("logikraft:selected_nb",0)
|
meta:set_int("logikraft:selected_nb",0)
|
||||||
@ -40,8 +40,8 @@ minetest.register_craftitem("logikraft:linker", {
|
|||||||
else
|
else
|
||||||
local thisnb = logikraft.lookingAtNbIndex(user,pointed_thing.under)
|
local thisnb = logikraft.lookingAtNbIndex(user,pointed_thing.under)
|
||||||
local new = logikraft.connectContiguousCable(
|
local new = logikraft.connectContiguousCable(
|
||||||
logikraft.cablesblocks[minetest.get_node(selectedpos).name],selectedpos,selectednb,
|
logikraft.cablenodes[minetest.get_node(selectedpos).name],selectedpos,selectednb,
|
||||||
logikraft.cablesblocks[node.name],pointed_thing.under,thisnb)
|
logikraft.cablenodes[node.name],pointed_thing.under,thisnb)
|
||||||
if new
|
if new
|
||||||
then
|
then
|
||||||
minetest.swap_node(selectedpos, {name = "logikraft:cable_" .. new[1]})
|
minetest.swap_node(selectedpos, {name = "logikraft:cable_" .. new[1]})
|
||||||
@ -63,7 +63,7 @@ minetest.register_craftitem("logikraft:linker", {
|
|||||||
meta:set_string("inventory_image","linker.png")
|
meta:set_string("inventory_image","linker.png")
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
if logikraft.cablesblocks[node.name]
|
if logikraft.cablenodes[node.name]
|
||||||
then
|
then
|
||||||
-- If we are looking at a cable we activate and store data
|
-- If we are looking at a cable we activate and store data
|
||||||
meta:set_int("logikraft:selected_nb",logikraft.lookingAtNbIndex(user,pointed_thing.under))
|
meta:set_int("logikraft:selected_nb",logikraft.lookingAtNbIndex(user,pointed_thing.under))
|
||||||
@ -97,13 +97,14 @@ minetest.register_craftitem("logikraft:unlinker", {
|
|||||||
inventory_image = "unlinker.png",
|
inventory_image = "unlinker.png",
|
||||||
on_place = function(itemstack, user, pointed_thing)
|
on_place = function(itemstack, user, pointed_thing)
|
||||||
local node = minetest.get_node(pointed_thing.under)
|
local node = minetest.get_node(pointed_thing.under)
|
||||||
if not logikraft.cablesblocks[node.name]
|
if not logikraft.cablenodes[node.name]
|
||||||
then return itemstack
|
then return itemstack
|
||||||
end
|
end
|
||||||
|
|
||||||
local index = logikraft.lookingAtNbIndex(user,pointed_thing.under)
|
local index = logikraft.lookingAtNbIndex(user,pointed_thing.under)
|
||||||
|
print(logikraft.cablenodes[node.name])
|
||||||
local new = logikraft.disconnectInCable(logikraft.cablesblocks[node.name],index)
|
print(dump(logikraft.cables[logikraft.cablenodes[node.name]]))
|
||||||
|
local new = logikraft.disconnectInCable(logikraft.cablenodes[node.name],index)
|
||||||
if new
|
if new
|
||||||
then minetest.swap_node(pointed_thing.under, {name = "logikraft:cable_" .. new})
|
then minetest.swap_node(pointed_thing.under, {name = "logikraft:cable_" .. new})
|
||||||
else minetest.remove_node(pointed_thing.under)
|
else minetest.remove_node(pointed_thing.under)
|
||||||
@ -117,15 +118,33 @@ minetest.register_craftitem("logikraft:resizer", {
|
|||||||
inventory_image = "resizer.png",
|
inventory_image = "resizer.png",
|
||||||
on_place = function(itemstack, user, pointed_thing)
|
on_place = function(itemstack, user, pointed_thing)
|
||||||
local node = minetest.get_node(pointed_thing.under)
|
local node = minetest.get_node(pointed_thing.under)
|
||||||
if not logikraft.cablesblocks[node.name]
|
if not logikraft.cablenodes[node.name]
|
||||||
then return itemstack
|
then return itemstack
|
||||||
end
|
end
|
||||||
|
|
||||||
local index = logikraft.lookingAtNbIndex(user,pointed_thing.under)
|
local index = logikraft.lookingAtNbIndex(user,pointed_thing.under)
|
||||||
|
|
||||||
local new = logikraft.resizeInCable(logikraft.cablesblocks[node.name],index)
|
local new = logikraft.resizeInCable(logikraft.cablenodes[node.name],index)
|
||||||
minetest.swap_node(pointed_thing.under, {name = "logikraft:cable_" .. new})
|
minetest.swap_node(pointed_thing.under, {name = "logikraft:cable_" .. new})
|
||||||
|
|
||||||
|
return itemstack
|
||||||
|
end
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_craftitem("logikraft:editor", {
|
||||||
|
description = "The Editor",
|
||||||
|
inventory_image = "editor.png",
|
||||||
|
on_place = function(itemstack, user, pointed_thing)
|
||||||
|
local node = minetest.get_node(pointed_thing.under)
|
||||||
|
if logikraft.cablenodes[node.name]
|
||||||
|
then
|
||||||
|
local index = logikraft.lookingAtNbIndex(user,pointed_thing.under)
|
||||||
|
minetest.chat_send_all("Looking at nodeblock "..tostring(index))
|
||||||
|
elseif logikraft.componentnodes[node.name]
|
||||||
|
then
|
||||||
|
minetest.chat_send_all("Looking at component "..logikraft.componentnodes[node.name].name)
|
||||||
|
end
|
||||||
|
|
||||||
return itemstack
|
return itemstack
|
||||||
end
|
end
|
||||||
})
|
})
|
||||||
BIN
textures/editor.png
Normal file
BIN
textures/editor.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.5 KiB |
32
utils.lua
32
utils.lua
@ -68,7 +68,7 @@ function logikraft.nearestNodeboxIndex(nodeboxes,point)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function logikraft.lookingAtNbIndex(user,under)
|
function logikraft.lookingAtNbIndex(user,under)
|
||||||
local range=5
|
local range=15
|
||||||
local eye = vector.add(user:get_pos(),{x=0,y=1.625,z=0})
|
local eye = vector.add(user:get_pos(),{x=0,y=1.625,z=0})
|
||||||
local objective = vector.add(eye, vector.multiply(user:get_look_dir(),range))
|
local objective = vector.add(eye, vector.multiply(user:get_look_dir(),range))
|
||||||
local ray = minetest.raycast(eye,objective,false,false)
|
local ray = minetest.raycast(eye,objective,false,false)
|
||||||
@ -149,4 +149,32 @@ function table.findMatch1(ta,tb)
|
|||||||
end
|
end
|
||||||
return nil
|
return nil
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
function logikraft.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
|
||||||
|
function logikraft.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
|
||||||
|
|
||||||
|
function table.constTable(val,size)
|
||||||
|
local t = {}
|
||||||
|
for i=1,size
|
||||||
|
do
|
||||||
|
table.insert(t,val)
|
||||||
|
end
|
||||||
|
return t
|
||||||
|
end
|
||||||
Loading…
x
Reference in New Issue
Block a user