| | |
| | | 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 |
| | | }) |
| | | |
| | |
| | | table[i]=toadd |
| | | end |
| | | |
| | | function move_nodes_vect(poslist,vect) |
| | | for _,pos in ipairs(poslist) do |
| | | 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 |