mirror of
https://github.com/minetest-mods/mesecons.git
synced 2024-12-28 16:27:28 +01:00
Add T-junction extrawire (no good textures yet)
This commit is contained in:
parent
500e95c331
commit
e92387695d
138
mesecons_extrawires/crossing.lua
Normal file
138
mesecons_extrawires/crossing.lua
Normal file
@ -0,0 +1,138 @@
|
|||||||
|
for x=-1, 1 do for z=-1, 1 do
|
||||||
|
rules = {}
|
||||||
|
nodename = "mesecons_extrawires:crossing"
|
||||||
|
if x == -1 then
|
||||||
|
nodename = nodename .. "A"
|
||||||
|
table.insert(rules, {x=-1, y=0, z=0})
|
||||||
|
end
|
||||||
|
if z == 1 then
|
||||||
|
nodename = nodename .. "B"
|
||||||
|
table.insert(rules, {x=0, y=0, z=1})
|
||||||
|
end
|
||||||
|
if x == 1 then
|
||||||
|
nodename = nodename .. "C"
|
||||||
|
table.insert(rules, {x=1, y=0, z=0})
|
||||||
|
end
|
||||||
|
if z == -1 then
|
||||||
|
nodename = nodename .. "D"
|
||||||
|
table.insert(rules, {x=0, y=0, z=-1})
|
||||||
|
end
|
||||||
|
mesecon:add_rules(nodename, rules)
|
||||||
|
mesecon:register_effector(nodename, nodename, all_rules)
|
||||||
|
if nodename == "mesecons_extrawires:crossing" then
|
||||||
|
description = "Insulated Crossing"
|
||||||
|
groups = {dig_immediate = 3, mesecon = 3, mesecon_conductor_craftable=1}
|
||||||
|
else
|
||||||
|
description = "You hacker you!"
|
||||||
|
drop = "mesecons_extrawires:crossing"
|
||||||
|
groups = {dig_immediate = 3, not_in_creative_inventory=1, mesecon = 3}
|
||||||
|
mesecon:add_receptor_node(nodename, rules)
|
||||||
|
end
|
||||||
|
minetest.register_node(nodename, {
|
||||||
|
drawtype = "nodebox",
|
||||||
|
description = description,
|
||||||
|
tiles = {
|
||||||
|
"jeija_insulated_wire_sides.png",
|
||||||
|
},
|
||||||
|
paramtype = "light",
|
||||||
|
walkable = false,
|
||||||
|
stack_max = 99,
|
||||||
|
selection_box = {
|
||||||
|
type = "fixed",
|
||||||
|
fixed = { -16/32-0.0001, -18/32, -16/32-0.001, 16/32+0.001, -5/32, 16/32+0.001 },
|
||||||
|
},
|
||||||
|
node_box = {
|
||||||
|
type = "fixed",
|
||||||
|
fixed = {
|
||||||
|
{ -16/32-0.001, -17/32, -3/32, 16/32+0.001, -13/32, 3/32 },
|
||||||
|
{ -3/32, -17/32, -16/32-0.001, 3/32, -13/32, -6/32 },
|
||||||
|
{ -3/32, -13/32, -9/32, 3/32, -6/32, -6/32 },
|
||||||
|
{ -3/32, -9/32, -9/32, 3/32, -6/32, 9/32 },
|
||||||
|
{ -3/32, -13/32, 6/32, 3/32, -6/32, 9/32 },
|
||||||
|
{ -3/32, -17/32, 6/32, 3/32, -13/32, 16/32+0.001 },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
groups = groups,
|
||||||
|
drop = drop,
|
||||||
|
})
|
||||||
|
end end
|
||||||
|
|
||||||
|
function receptor_set(pos, rules, on)
|
||||||
|
if on then
|
||||||
|
mesecon:receptor_on(pos, rules)
|
||||||
|
else
|
||||||
|
mesecon:receptor_off(pos, rules)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function update_plus(pos, name)
|
||||||
|
vL = {
|
||||||
|
a = string.find(name, "A")~=nil,
|
||||||
|
b = string.find(name, "B")~=nil,
|
||||||
|
c = string.find(name, "C")~=nil,
|
||||||
|
d = string.find(name, "D")~=nil,
|
||||||
|
}
|
||||||
|
rL = yc_get_real_portstates(pos)
|
||||||
|
L = {
|
||||||
|
a = rL.c and not vL.c,
|
||||||
|
b = rL.d and not vL.d,
|
||||||
|
c = rL.a and not vL.a,
|
||||||
|
d = rL.b and not vL.b,
|
||||||
|
}
|
||||||
|
newname = "mesecons_extrawires:crossing"
|
||||||
|
if L.a then newname = newname .. "A" end
|
||||||
|
if L.b then newname = newname .. "B" end
|
||||||
|
if L.c then newname = newname .. "C" end
|
||||||
|
if L.d then newname = newname .. "D" end
|
||||||
|
if newname ~= name then
|
||||||
|
minetest.env:add_node(pos, {name = newname})
|
||||||
|
end
|
||||||
|
if L.a ~= vL.a then
|
||||||
|
receptor_set(pos, mesecon:get_rules("mesecons_extrawires:crossingA"), L.a)
|
||||||
|
if not L.a and yc_get_real_portstates(pos).a then
|
||||||
|
--catch signal changing direction while on
|
||||||
|
update_plus(pos, newname)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if L.b ~= vL.b then
|
||||||
|
receptor_set(pos, mesecon:get_rules("mesecons_extrawires:crossingB"), L.b)
|
||||||
|
if not L.b and yc_get_real_portstates(pos).b then
|
||||||
|
update_plus(pos, newname)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if L.c ~= vL.c then
|
||||||
|
receptor_set(pos, mesecon:get_rules("mesecons_extrawires:crossingC"), L.c)
|
||||||
|
if not L.c and yc_get_real_portstates(pos).c then
|
||||||
|
update_plus(pos, newname)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if L.d ~= vL.d then
|
||||||
|
receptor_set(pos, mesecon:get_rules("mesecons_extrawires:crossingD"), L.d)
|
||||||
|
if not L.c and yc_get_real_portstates(pos).d then
|
||||||
|
update_plus(pos, newname)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
mesecon:register_on_signal_change(function(pos, node)
|
||||||
|
if string.find(node.name, "mesecons_extrawires:crossing")~=nil then
|
||||||
|
update_plus(pos, node.name)
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
type = "shapeless",
|
||||||
|
output = "mesecons_extrawires:crossing",
|
||||||
|
recipe = {
|
||||||
|
"mesecons_insulated:insulated_off",
|
||||||
|
"mesecons_insulated:insulated_off",
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
type = "shapeless",
|
||||||
|
output = "mesecons_insulated:insulated_off 2",
|
||||||
|
recipe = {
|
||||||
|
"mesecons_extrawires:crossing",
|
||||||
|
},
|
||||||
|
})
|
@ -1,138 +1,2 @@
|
|||||||
for x=-1, 1 do for z=-1, 1 do
|
dofile(minetest.get_modpath("mesecons_extrawires").."/crossing.lua");
|
||||||
rules = {}
|
dofile(minetest.get_modpath("mesecons_extrawires").."/tjunction.lua");
|
||||||
nodename = "mesecons_extrawires:crossing"
|
|
||||||
if x == -1 then
|
|
||||||
nodename = nodename .. "A"
|
|
||||||
table.insert(rules, {x=-1, y=0, z=0})
|
|
||||||
end
|
|
||||||
if z == 1 then
|
|
||||||
nodename = nodename .. "B"
|
|
||||||
table.insert(rules, {x=0, y=0, z=1})
|
|
||||||
end
|
|
||||||
if x == 1 then
|
|
||||||
nodename = nodename .. "C"
|
|
||||||
table.insert(rules, {x=1, y=0, z=0})
|
|
||||||
end
|
|
||||||
if z == -1 then
|
|
||||||
nodename = nodename .. "D"
|
|
||||||
table.insert(rules, {x=0, y=0, z=-1})
|
|
||||||
end
|
|
||||||
mesecon:add_rules(nodename, rules)
|
|
||||||
mesecon:register_effector(nodename, nodename, all_rules)
|
|
||||||
if nodename == "mesecons_extrawires:crossing" then
|
|
||||||
description = "Insulated Crossing"
|
|
||||||
groups = {dig_immediate = 3, mesecon = 3, mesecon_conductor_craftable=1}
|
|
||||||
else
|
|
||||||
description = "You hacker you!"
|
|
||||||
drop = "mesecons_extrawires:crossing"
|
|
||||||
groups = {dig_immediate = 3, not_in_creative_inventory=1, mesecon = 3}
|
|
||||||
mesecon:add_receptor_node(nodename, rules)
|
|
||||||
end
|
|
||||||
minetest.register_node(nodename, {
|
|
||||||
drawtype = "nodebox",
|
|
||||||
description = description,
|
|
||||||
tiles = {
|
|
||||||
"jeija_insulated_wire_sides.png",
|
|
||||||
},
|
|
||||||
paramtype = "light",
|
|
||||||
walkable = false,
|
|
||||||
stack_max = 99,
|
|
||||||
selection_box = {
|
|
||||||
type = "fixed",
|
|
||||||
fixed = { -16/32-0.0001, -18/32, -16/32-0.001, 16/32+0.001, -5/32, 16/32+0.001 },
|
|
||||||
},
|
|
||||||
node_box = {
|
|
||||||
type = "fixed",
|
|
||||||
fixed = {
|
|
||||||
{ -16/32-0.001, -17/32, -3/32, 16/32+0.001, -13/32, 3/32 },
|
|
||||||
{ -3/32, -17/32, -16/32-0.001, 3/32, -13/32, -6/32 },
|
|
||||||
{ -3/32, -13/32, -9/32, 3/32, -6/32, -6/32 },
|
|
||||||
{ -3/32, -9/32, -9/32, 3/32, -6/32, 9/32 },
|
|
||||||
{ -3/32, -13/32, 6/32, 3/32, -6/32, 9/32 },
|
|
||||||
{ -3/32, -17/32, 6/32, 3/32, -13/32, 16/32+0.001 },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
groups = groups,
|
|
||||||
drop = drop,
|
|
||||||
})
|
|
||||||
end end
|
|
||||||
|
|
||||||
function receptor_set(pos, rules, on)
|
|
||||||
if on then
|
|
||||||
mesecon:receptor_on(pos, rules)
|
|
||||||
else
|
|
||||||
mesecon:receptor_off(pos, rules)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function update_plus(pos, name)
|
|
||||||
vL = {
|
|
||||||
a = string.find(name, "A")~=nil,
|
|
||||||
b = string.find(name, "B")~=nil,
|
|
||||||
c = string.find(name, "C")~=nil,
|
|
||||||
d = string.find(name, "D")~=nil,
|
|
||||||
}
|
|
||||||
rL = yc_get_real_portstates(pos)
|
|
||||||
L = {
|
|
||||||
a = rL.c and not vL.c,
|
|
||||||
b = rL.d and not vL.d,
|
|
||||||
c = rL.a and not vL.a,
|
|
||||||
d = rL.b and not vL.b,
|
|
||||||
}
|
|
||||||
newname = "mesecons_extrawires:crossing"
|
|
||||||
if L.a then newname = newname .. "A" end
|
|
||||||
if L.b then newname = newname .. "B" end
|
|
||||||
if L.c then newname = newname .. "C" end
|
|
||||||
if L.d then newname = newname .. "D" end
|
|
||||||
if newname ~= name then
|
|
||||||
minetest.env:add_node(pos, {name = newname})
|
|
||||||
end
|
|
||||||
if L.a ~= vL.a then
|
|
||||||
receptor_set(pos, mesecon:get_rules("mesecons_extrawires:crossingA"), L.a)
|
|
||||||
if not L.a and yc_get_real_portstates(pos).a then
|
|
||||||
--catch signal changing direction while on
|
|
||||||
update_plus(pos, newname)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
if L.b ~= vL.b then
|
|
||||||
receptor_set(pos, mesecon:get_rules("mesecons_extrawires:crossingB"), L.b)
|
|
||||||
if not L.b and yc_get_real_portstates(pos).b then
|
|
||||||
update_plus(pos, newname)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
if L.c ~= vL.c then
|
|
||||||
receptor_set(pos, mesecon:get_rules("mesecons_extrawires:crossingC"), L.c)
|
|
||||||
if not L.c and yc_get_real_portstates(pos).c then
|
|
||||||
update_plus(pos, newname)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
if L.d ~= vL.d then
|
|
||||||
receptor_set(pos, mesecon:get_rules("mesecons_extrawires:crossingD"), L.d)
|
|
||||||
if not L.c and yc_get_real_portstates(pos).d then
|
|
||||||
update_plus(pos, newname)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
mesecon:register_on_signal_change(function(pos, node)
|
|
||||||
if string.find(node.name, "mesecons_extrawires:crossing")~=nil then
|
|
||||||
update_plus(pos, node.name)
|
|
||||||
end
|
|
||||||
end)
|
|
||||||
|
|
||||||
minetest.register_craft({
|
|
||||||
type = "shapeless",
|
|
||||||
output = "mesecons_extrawires:crossing",
|
|
||||||
recipe = {
|
|
||||||
"mesecons_insulated:insulated_off",
|
|
||||||
"mesecons_insulated:insulated_off",
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craft({
|
|
||||||
type = "shapeless",
|
|
||||||
output = "mesecons_insulated:insulated_off 2",
|
|
||||||
recipe = {
|
|
||||||
"mesecons_extrawires:crossing",
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
85
mesecons_extrawires/tjunction.lua
Normal file
85
mesecons_extrawires/tjunction.lua
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
local tjunction_nodebox = {
|
||||||
|
type = "fixed",
|
||||||
|
fixed = {{ -16/32-0.001, -17/32, -3/32, 16/32+0.001, -13/32, 3/32 },
|
||||||
|
{ -3/32, -17/32, -16/32+0.001, 3/32, -13/32, -3/32},}
|
||||||
|
}
|
||||||
|
|
||||||
|
local tjunction_selectionbox = {
|
||||||
|
type = "fixed",
|
||||||
|
fixed = { -16/32-0.001, -18/32, -16/32, 16/32+0.001, -12/32, 7/32 }
|
||||||
|
},
|
||||||
|
|
||||||
|
minetest.register_node("mesecons_extrawires:tjunction_on", {
|
||||||
|
drawtype = "nodebox",
|
||||||
|
tiles = {
|
||||||
|
"jeija_insulated_wire_sides.png",
|
||||||
|
"jeija_insulated_wire_sides.png",
|
||||||
|
"jeija_insulated_wire_ends_on.png",
|
||||||
|
"jeija_insulated_wire_ends_on.png",
|
||||||
|
"jeija_insulated_wire_sides.png",
|
||||||
|
"jeija_insulated_wire_ends_on.png"
|
||||||
|
},
|
||||||
|
paramtype = "light",
|
||||||
|
paramtype2 = "facedir",
|
||||||
|
walkable = false,
|
||||||
|
sunlight_propagates = true,
|
||||||
|
selection_box = tjunction_selectionbox,
|
||||||
|
node_box = tjunction_nodebox,
|
||||||
|
groups = {dig_immediate = 3, mesecon = 3, mesecon_conductor_craftable=1, not_in_creative_inventory = 1},
|
||||||
|
drop = "mesecons_insulated:insulated_off",
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_node("mesecons_extrawires:tjunction_off", {
|
||||||
|
drawtype = "nodebox",
|
||||||
|
description = "T-junction",
|
||||||
|
tiles = {
|
||||||
|
"jeija_insulated_wire_sides.png",
|
||||||
|
"jeija_insulated_wire_sides.png",
|
||||||
|
"jeija_insulated_wire_ends_off.png",
|
||||||
|
"jeija_insulated_wire_ends_off.png",
|
||||||
|
"jeija_insulated_wire_sides.png",
|
||||||
|
"jeija_insulated_wire_ends_off.png"
|
||||||
|
},
|
||||||
|
paramtype = "light",
|
||||||
|
paramtype2 = "facedir",
|
||||||
|
walkable = false,
|
||||||
|
sunlight_propagates = true,
|
||||||
|
selection_box = tjunction_selectionbox,
|
||||||
|
node_box = tjunction_nodebox,
|
||||||
|
groups = {dig_immediate = 3, mesecon = 3, mesecon_conductor_craftable=1},
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
output = '"mesecons_extrawires:tjunction_off" 3',
|
||||||
|
recipe = {
|
||||||
|
{"", "", ""},
|
||||||
|
{"mesecons_insulated:insulated_off", "mesecons_insulated:insulated_off", "mesecons_insulated:insulated_off"},
|
||||||
|
{"", "mesecons_insulated:insulated_off", ""},
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
mesecon:add_rules("tjunction_all", { --all possible rules
|
||||||
|
{x = 1, y = 0, z = 0},
|
||||||
|
{x =-1, y = 0, z = 0},
|
||||||
|
{x = 0, y = 0, z = 1},
|
||||||
|
{x = 0, y = 0, z =-1},})
|
||||||
|
|
||||||
|
mesecon:add_rules("tjunction", {
|
||||||
|
{x = 1, y = 0, z = 0},
|
||||||
|
{x =-1, y = 0, z = 0},
|
||||||
|
{x = 0, y = 0, z = -1},})
|
||||||
|
|
||||||
|
function tjunction_get_rules(param2)
|
||||||
|
local rules = mesecon:get_rules("tjunction")
|
||||||
|
if param2 == 1 then
|
||||||
|
rules = mesecon:rotate_rules_left(mesecon:get_rules("tjunction"))
|
||||||
|
elseif param2 == 2 then
|
||||||
|
rules = mesecon:rotate_rules_right(mesecon:rotate_rules_right(mesecon:get_rules("tjunction")))
|
||||||
|
elseif param2 == 3 then
|
||||||
|
rules = mesecon:rotate_rules_right(mesecon:get_rules("tjunction"))
|
||||||
|
end
|
||||||
|
return rules
|
||||||
|
end
|
||||||
|
|
||||||
|
mesecon:register_conductor("mesecons_extrawires:tjunction_on", "mesecons_extrawires:tjunction_off", mesecon:get_rules("tjunction_all"), tjunction_get_rules)
|
@ -53,7 +53,7 @@ minetest.register_node("mesecons_receiver:receiver_off", {
|
|||||||
type = "fixed",
|
type = "fixed",
|
||||||
fixed = rcvboxes
|
fixed = rcvboxes
|
||||||
},
|
},
|
||||||
groups = {dig_immediate = 3, mesecon = 3},
|
groups = {dig_immediate = 3, mesecon = 3, not_in_creative_inventory = 1},
|
||||||
drop = "mesecons:wire_00000000_off",
|
drop = "mesecons:wire_00000000_off",
|
||||||
})
|
})
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user