mirror of
https://github.com/minetest-mods/technic.git
synced 2024-12-22 13:52:31 +01:00
Use only 1 node for frame motors.
This commit is contained in:
parent
8b8e0a02c7
commit
48ea6fb99d
@ -141,211 +141,28 @@ end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
function frame_motor1_on(pos,node)
|
||||
local npos={x=pos.x,y=pos.y+1,z=pos.z}
|
||||
local nnode=minetest.env:get_node(npos)
|
||||
if node.param2==0 then
|
||||
dir={x=1,y=0,z=0}
|
||||
elseif node.param2==1 then
|
||||
dir={x=0,y=0,z=-1}
|
||||
elseif node.param2==2 then
|
||||
dir={x=-1,y=0,z=0}
|
||||
else
|
||||
dir={x=0,y=0,z=1}
|
||||
end
|
||||
function frame_motor_on(pos, node)
|
||||
local dirs = {{x=0,y=1,z=0},{x=0,y=0,z=1},{x=0,y=0,z=-1},{x=1,y=0,z=0},{x=-1,y=0,z=0},{x=0,y=-1,z=0}}
|
||||
local nnodepos = frames.addVect(pos, dirs[math.floor(node.param2/4)+1])
|
||||
local dir = minetest.facedir_to_dir(node.param2)
|
||||
local nnode=minetest.get_node(nnodepos)
|
||||
if minetest.registered_nodes[nnode.name].frame==1 then
|
||||
local connected_nodes=get_connected_nodes(npos)
|
||||
move_nodes_vect(connected_nodes,dir)
|
||||
local connected_nodes=get_connected_nodes(nnodepos)
|
||||
move_nodes_vect(connected_nodes,dir,pos)
|
||||
end
|
||||
end
|
||||
|
||||
function frame_motor2_on(pos,node)
|
||||
local npos={x=pos.x,y=pos.y-1,z=pos.z}
|
||||
local nnode=minetest.env:get_node(npos)
|
||||
if node.param2==0 then
|
||||
dir={x=1,y=0,z=0}
|
||||
elseif node.param2==1 then
|
||||
dir={x=0,y=0,z=-1}
|
||||
elseif node.param2==2 then
|
||||
dir={x=-1,y=0,z=0}
|
||||
else
|
||||
dir={x=0,y=0,z=1}
|
||||
end
|
||||
if minetest.registered_nodes[nnode.name].frame==1 then
|
||||
local connected_nodes=get_connected_nodes(npos)
|
||||
move_nodes_vect(connected_nodes,dir)
|
||||
end
|
||||
end
|
||||
|
||||
function frame_motor3_on(pos,node)
|
||||
local npos={x=pos.x,y=pos.y,z=pos.z}
|
||||
if node.param2==0 then
|
||||
dir={x=1,y=0,z=0}
|
||||
npos.z=npos.z-1
|
||||
elseif node.param2==1 then
|
||||
dir={x=0,y=0,z=-1}
|
||||
npos.x=npos.x-1
|
||||
elseif node.param2==2 then
|
||||
dir={x=-1,y=0,z=0}
|
||||
npos.z=npos.z+1
|
||||
else
|
||||
dir={x=0,y=0,z=1}
|
||||
npos.x=npos.x+1
|
||||
end
|
||||
local nnode=minetest.env:get_node(npos)
|
||||
if minetest.registered_nodes[nnode.name].frame==1 then
|
||||
local connected_nodes=get_connected_nodes(npos)
|
||||
move_nodes_vect(connected_nodes,dir)
|
||||
end
|
||||
end
|
||||
|
||||
function frame_motor4_on(pos,node)
|
||||
local npos={x=pos.x,y=pos.y,z=pos.z}
|
||||
if node.param2==0 then
|
||||
dir={x=-1,y=0,z=0}
|
||||
npos.z=npos.z-1
|
||||
elseif node.param2==1 then
|
||||
dir={x=0,y=0,z=1}
|
||||
npos.x=npos.x-1
|
||||
elseif node.param2==2 then
|
||||
dir={x=1,y=0,z=0}
|
||||
npos.z=npos.z+1
|
||||
else
|
||||
dir={x=0,y=0,z=-1}
|
||||
npos.x=npos.x+1
|
||||
end
|
||||
local nnode=minetest.env:get_node(npos)
|
||||
if minetest.registered_nodes[nnode.name].frame==1 then
|
||||
local connected_nodes=get_connected_nodes(npos)
|
||||
move_nodes_vect(connected_nodes,dir)
|
||||
end
|
||||
end
|
||||
|
||||
function frame_motor5_on(pos,node)
|
||||
local npos={x=pos.x,y=pos.y,z=pos.z}
|
||||
if node.param2==0 then
|
||||
npos.z=npos.z-1
|
||||
elseif node.param2==1 then
|
||||
npos.x=npos.x-1
|
||||
elseif node.param2==2 then
|
||||
npos.z=npos.z+1
|
||||
else
|
||||
npos.x=npos.x+1
|
||||
end
|
||||
dir={x=0,y=1,z=0}
|
||||
local nnode=minetest.env:get_node(npos)
|
||||
if minetest.registered_nodes[nnode.name].frame==1 then
|
||||
local connected_nodes=get_connected_nodes(npos)
|
||||
move_nodes_vect(connected_nodes,dir)
|
||||
end
|
||||
end
|
||||
|
||||
function frame_motor6_on(pos,node)
|
||||
local npos={x=pos.x,y=pos.y,z=pos.z}
|
||||
if node.param2==0 then
|
||||
npos.z=npos.z-1
|
||||
elseif node.param2==1 then
|
||||
npos.x=npos.x-1
|
||||
elseif node.param2==2 then
|
||||
npos.z=npos.z+1
|
||||
else
|
||||
npos.x=npos.x+1
|
||||
end
|
||||
dir={x=0,y=-1,z=0}
|
||||
local nnode=minetest.env:get_node(npos)
|
||||
if minetest.registered_nodes[nnode.name].frame==1 then
|
||||
local connected_nodes=get_connected_nodes(npos)
|
||||
move_nodes_vect(connected_nodes,dir)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
minetest.register_node("technic:frame_motor1",{
|
||||
description = "Frame motor 1",
|
||||
tiles = {"pipeworks_filter_top.png", "technic_lv_cable.png", "technic_lv_cable.png",
|
||||
minetest.register_node("technic:frame_motor",{
|
||||
description = "Frame motor",
|
||||
tiles = {"pipeworks_filter_top.png^[transformR90", "technic_lv_cable.png", "technic_lv_cable.png",
|
||||
"technic_lv_cable.png", "technic_lv_cable.png", "technic_lv_cable.png"},
|
||||
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,mesecon=2},
|
||||
paramtype2 = "facedir",
|
||||
mesecons={effector={action_on=frame_motor1_on}},
|
||||
mesecons={effector={action_on=frame_motor_on}},
|
||||
frames_can_connect=function(pos,dir)
|
||||
return dir.y~=-1
|
||||
end
|
||||
})
|
||||
|
||||
minetest.register_node("technic:frame_motor2",{
|
||||
description = "Frame motor 2",
|
||||
tiles = {"technic_lv_cable.png", "pipeworks_filter_top.png", "technic_lv_cable.png",
|
||||
"technic_lv_cable.png", "technic_lv_cable.png", "technic_lv_cable.png"},
|
||||
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,mesecon=2},
|
||||
paramtype2 = "facedir",
|
||||
mesecons={effector={action_on=frame_motor2_on}},
|
||||
frames_can_connect=function(pos,dir)
|
||||
return dir.y~=1
|
||||
end
|
||||
})
|
||||
|
||||
minetest.register_node("technic:frame_motor3",{
|
||||
description = "Frame motor 3",
|
||||
tiles = {"technic_lv_cable.png", "technic_lv_cable.png", "technic_lv_cable.png",
|
||||
"technic_lv_cable.png", "technic_lv_cable.png", "pipeworks_filter_top.png"},
|
||||
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,mesecon=2},
|
||||
paramtype2 = "facedir",
|
||||
mesecons={effector={action_on=frame_motor3_on}},
|
||||
frames_can_connect=function(pos,dir)
|
||||
local node=minetest.env:get_node(pos)
|
||||
if node.param2==0 then return dir.z~=1
|
||||
elseif node.param2==1 then return dir.x~=1
|
||||
elseif node.param2==2 then return dir.z~=-1
|
||||
else return dir.x~=-1 end
|
||||
end
|
||||
})
|
||||
|
||||
minetest.register_node("technic:frame_motor4",{
|
||||
description = "Frame motor 4",
|
||||
tiles = {"technic_lv_cable.png", "technic_lv_cable.png", "technic_lv_cable.png",
|
||||
"technic_lv_cable.png", "technic_lv_cable.png", "pipeworks_filter_top.png^[transformR180"},
|
||||
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,mesecon=2},
|
||||
paramtype2 = "facedir",
|
||||
mesecons={effector={action_on=frame_motor4_on}},
|
||||
frames_can_connect=function(pos,dir)
|
||||
local node=minetest.env:get_node(pos)
|
||||
if node.param2==0 then return dir.z~=1
|
||||
elseif node.param2==1 then return dir.x~=1
|
||||
elseif node.param2==2 then return dir.z~=-1
|
||||
else return dir.x~=-1 end
|
||||
end
|
||||
})
|
||||
|
||||
minetest.register_node("technic:frame_motor5",{
|
||||
description = "Frame motor 5",
|
||||
tiles = {"technic_lv_cable.png", "technic_lv_cable.png", "technic_lv_cable.png",
|
||||
"technic_lv_cable.png", "technic_lv_cable.png", "pipeworks_filter_top.png^[transformR90"},
|
||||
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,mesecon=2},
|
||||
paramtype2 = "facedir",
|
||||
mesecons={effector={action_on=frame_motor5_on}},
|
||||
frames_can_connect=function(pos,dir)
|
||||
local node=minetest.env:get_node(pos)
|
||||
if node.param2==0 then return dir.z~=1
|
||||
elseif node.param2==1 then return dir.x~=1
|
||||
elseif node.param2==2 then return dir.z~=-1
|
||||
else return dir.x~=-1 end
|
||||
end
|
||||
})
|
||||
|
||||
minetest.register_node("technic:frame_motor6",{
|
||||
description = "Frame motor 6",
|
||||
tiles = {"technic_lv_cable.png", "technic_lv_cable.png", "technic_lv_cable.png",
|
||||
"technic_lv_cable.png", "technic_lv_cable.png", "pipeworks_filter_top.png^[transformR270"},
|
||||
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,mesecon=2},
|
||||
paramtype2 = "facedir",
|
||||
mesecons={effector={action_on=frame_motor6_on}},
|
||||
frames_can_connect=function(pos,dir)
|
||||
local node=minetest.env:get_node(pos)
|
||||
if node.param2==0 then return dir.z~=1
|
||||
elseif node.param2==1 then return dir.x~=1
|
||||
elseif node.param2==2 then return dir.z~=-1
|
||||
else return dir.x~=-1 end
|
||||
local node = minetest.get_node(pos)
|
||||
local dir2 = ({{x=0,y=1,z=0},{x=0,y=0,z=1},{x=0,y=0,z=-1},{x=1,y=0,z=0},{x=-1,y=0,z=0},{x=0,y=-1,z=0}})[math.floor(node.param2/4)+1]
|
||||
return dir2.x~=-dir.x or dir2.y~=-dir.y or dir2.z~=-dir.z
|
||||
end
|
||||
})
|
||||
|
||||
@ -360,12 +177,16 @@ function add_table(table,toadd)
|
||||
table[i]=toadd
|
||||
end
|
||||
|
||||
function move_nodes_vect(poslist,vect)
|
||||
function move_nodes_vect(poslist,vect,must_not_move)
|
||||
for _,pos in ipairs(poslist) do
|
||||
local npos=frames.addVect(pos,vect)
|
||||
local name = minetest.env:get_node(npos).name
|
||||
if (name~="air" and minetest.registered_nodes[name].liquidtype=="none") and not(pos_in_list(poslist,npos)) then
|
||||
return end
|
||||
return
|
||||
end
|
||||
if pos.x==must_not_move.x and pos.y==must_not_move.y and pos.z==must_not_move.z then
|
||||
return
|
||||
end
|
||||
end
|
||||
nodelist={}
|
||||
for _,pos in ipairs(poslist) do
|
||||
|
Loading…
Reference in New Issue
Block a user