Jordan Snelling
2013-06-27 c687e8cb7b9e624474353b0cc10acc5db14192f8
technic/frames.lua
@@ -1,3 +1,5 @@
frames={}
function get_face(pos,ppos,pvect)
   ppos={x=ppos.x-pos.x,y=ppos.y-pos.y+1.5,z=ppos.z-pos.z}
   if pvect.x>0 then
@@ -96,6 +98,10 @@
      node_box = {
         type = "fixed",
      fixed=nodeboxes,
      },
      selection_box = {
         type="fixed",
         fixed={-0.5,-0.5,-0.5,0.5,0.5,0.5}
      },
      paramtype = "light",
      frame=1,
@@ -298,7 +304,7 @@
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"},
      "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}},
@@ -314,7 +320,7 @@
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"},
      "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}},
@@ -330,7 +336,7 @@
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"},
      "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}},
@@ -356,15 +362,16 @@
function move_nodes_vect(poslist,vect)
      for _,pos in ipairs(poslist) do
      local npos=addVect(pos,vect)
      if minetest.env:get_node(npos).name~="air" and not(pos_in_list(poslist,npos)) then return end
      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
   end
   nodelist={}
   for _,pos in ipairs(poslist) do
      local node=minetest.env:get_node(pos)
      local meta=minetest.env:get_meta(pos):to_table()
      nodelist[#(nodelist)+1]={pos=pos,node=node,meta=meta}
      minetest.env:remove_node(pos)
   end
   objects={}
   for _,pos in ipairs(poslist) do
@@ -373,17 +380,26 @@
      end
   end
   for _,obj in ipairs(objects) do
      obj:setpos(addVect(obj:getpos(),vect))
      if obj:get_luaentity().name == "pipeworks:tubed_item" then
         le=obj:get_luaentity()
         le.start_pos=addVect(le.start_pos,vect)
      obj:setpos(frames.addVect(obj:getpos(),vect))
      le=obj:get_luaentity()
      if le and le.name == "pipeworks:tubed_item" then
         le.start_pos=frames.addVect(le.start_pos,vect)
      end
   end
   for _,n in ipairs(nodelist) do
      local npos=addVect(n.pos,vect)
      local npos=frames.addVect(n.pos,vect)
      minetest.env:set_node(npos,n.node)
      local meta=minetest.env:get_meta(npos)
      meta:from_table(n.meta)
      for __,pos in ipairs(poslist) do
         if npos.x==pos.x and npos.y==pos.y and npos.z==pos.z then
            table.remove(poslist, __)
            break
         end
      end
   end
   for __,pos in ipairs(poslist) do
      minetest.env:remove_node(pos)
   end
end
@@ -394,7 +410,7 @@
   return c
end
function addVect(pos,vect)
function frames.addVect(pos,vect)
   return {x=pos.x+vect.x,y=pos.y+vect.y,z=pos.z+vect.z}
end
@@ -407,7 +423,7 @@
function connected(pos,c,adj)
   for _,vect in ipairs(adj) do
      local pos1=addVect(pos,vect)
      local pos1=frames.addVect(pos,vect)
      local nodename=minetest.env:get_node(pos1).name
      if not(pos_in_list(c,pos1)) and nodename~="air" and
      (minetest.registered_nodes[nodename].frames_can_connect==nil or