added more powerful sand tubes (MESE sand tubes), along with associated crafts, textu...
authorhdastwb <hdastwb@hdastwb.heliohost.org>
Mon, 8 Jul 2013 16:06:47 +0000 (12:06 -0400)
committerhdastwb <hdastwb@hdastwb.heliohost.org>
Sun, 14 Jul 2013 01:16:44 +0000 (21:16 -0400)
Overview.html
crafts.lua
img/CraftMeseSandTube1.png [new file with mode: 0644]
img/CraftMeseSandTube2.png [new file with mode: 0644]
img/MeseSandTubeForm.png [new file with mode: 0644]
textures/pipeworks_mese_sand_tube_end.png [new file with mode: 0644]
textures/pipeworks_mese_sand_tube_inv.png [new file with mode: 0644]
textures/pipeworks_mese_sand_tube_noctr.png [new file with mode: 0644]
textures/pipeworks_mese_sand_tube_plain.png [new file with mode: 0644]
textures/pipeworks_mese_sand_tube_short.png [new file with mode: 0644]
tubes.lua

index f6d4e22f287e1488d889602dc1086724319e7a1d..75e5a0a3dd0504e2d74aba1dc4ffcefbda72ebc7 100644 (file)
@@ -188,10 +188,18 @@ a {
                <p>Here's how you craft it:</p>\r
                <img src="img/CraftNodeBreaker.png">\r
                <h3>Sand Tubes</h3>\r
-               <p>Sand tubes are special tubes that vacuum up free items around it. When an item drops near the sand tube, it is sucked up and sent along the tube.</p>\r
+               <p>Sand tubes are special tubes that vacuum up free items around them. When an item drops near the sand tube, it is sucked up and sent along the tube.</p>\r
                <p>Sand tubes have an effective radius of 2 meters (nodes). Outside of this sphere, items are unaffected.</p>\r
                <img src="img/SandTube.png">\r
                <p>Here's how you craft it:</p>\r
                <img src="img/CraftSandTube.png">\r
+               <h3>Mese Sand Tubes</h3>\r
+               <p>Mese sand tubes pick up items like sand tubes, but they do so in a customizable cubic region rather than a fixed spherical one.</p>\r
+               <p>To change the range of a mese sand tube, change the distance specified in the form.</p>\r
+               <p>The number entered here can be anywhere from 0 (the default) to 8; it represents a sort of cubic radius from the tube, thus the default is to only pick up items within the tube's 1x1x1 node, but, if one entered "5", the tube would pick up items in an 11x11x11 cube.</p>\r
+               <img src="img/MeseSandTubeForm.png" style="width:50%;">\r
+               <p>Crafts are similar to the mese sorting tube, but based on sand tubes instead:</p>\r
+               <img src="img/CraftMeseSandTube1.png">\r
+               <img src="img/CraftMeseSandTube2.png">\r
        </body>\r
 </html>
\ No newline at end of file
index ddc4f9d1ce960d759a3eee2a3b0495f784166c6d..462f760f6312c6cf09608eb8eef45d84029709f2 100644 (file)
@@ -251,5 +251,26 @@ if io.open(minetest.get_modpath("pipeworks").."/../technic/init.lua", "r") == ni
                        { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" }
                },
        })
+       
+       minetest.register_craft( {
+               output = "pipeworks:mese_sand_tube_000000 2",
+               recipe = {
+                       { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" },
+                       { "default:sand", "default:mese_crystal", "default:sand" },
+                       { "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" }
+               },
+       })
+  
+       minetest.register_craft( {
+               type = "shapeless",
+               output = "pipeworks:mese_sand_tube_000000",
+               recipe = {
+      "pipeworks:sand_tube_000000",
+                       "default:mese_crystal_fragment",
+                       "default:mese_crystal_fragment",
+                       "default:mese_crystal_fragment",
+                       "default:mese_crystal_fragment"
+               },
+       })
 end
 
diff --git a/img/CraftMeseSandTube1.png b/img/CraftMeseSandTube1.png
new file mode 100644 (file)
index 0000000..f1aecde
Binary files /dev/null and b/img/CraftMeseSandTube1.png differ
diff --git a/img/CraftMeseSandTube2.png b/img/CraftMeseSandTube2.png
new file mode 100644 (file)
index 0000000..80372e0
Binary files /dev/null and b/img/CraftMeseSandTube2.png differ
diff --git a/img/MeseSandTubeForm.png b/img/MeseSandTubeForm.png
new file mode 100644 (file)
index 0000000..1da2c7e
Binary files /dev/null and b/img/MeseSandTubeForm.png differ
diff --git a/textures/pipeworks_mese_sand_tube_end.png b/textures/pipeworks_mese_sand_tube_end.png
new file mode 100644 (file)
index 0000000..b044d73
Binary files /dev/null and b/textures/pipeworks_mese_sand_tube_end.png differ
diff --git a/textures/pipeworks_mese_sand_tube_inv.png b/textures/pipeworks_mese_sand_tube_inv.png
new file mode 100644 (file)
index 0000000..8829422
Binary files /dev/null and b/textures/pipeworks_mese_sand_tube_inv.png differ
diff --git a/textures/pipeworks_mese_sand_tube_noctr.png b/textures/pipeworks_mese_sand_tube_noctr.png
new file mode 100644 (file)
index 0000000..9e41bc8
Binary files /dev/null and b/textures/pipeworks_mese_sand_tube_noctr.png differ
diff --git a/textures/pipeworks_mese_sand_tube_plain.png b/textures/pipeworks_mese_sand_tube_plain.png
new file mode 100644 (file)
index 0000000..ff0a107
Binary files /dev/null and b/textures/pipeworks_mese_sand_tube_plain.png differ
diff --git a/textures/pipeworks_mese_sand_tube_short.png b/textures/pipeworks_mese_sand_tube_short.png
new file mode 100644 (file)
index 0000000..2defd5d
Binary files /dev/null and b/textures/pipeworks_mese_sand_tube_short.png differ
index 0a91a26e2c6cd342e667e2fbbeadfc3416489917..dc1e95a23a6fd1fc78ad4e3ce6bfec221278ec7c 100644 (file)
--- a/tubes.lua
+++ b/tubes.lua
@@ -518,3 +518,62 @@ minetest.register_abm({nodenames={"group:sand_tube"},interval=1,chance=1,
        end
 })
 
+mese_sand_noctr_textures={"pipeworks_mese_sand_tube_noctr.png","pipeworks_mese_sand_tube_noctr.png","pipeworks_mese_sand_tube_noctr.png",
+               "pipeworks_mese_sand_tube_noctr.png","pipeworks_mese_sand_tube_noctr.png","pipeworks_mese_sand_tube_noctr.png"}
+mese_sand_plain_textures={"pipeworks_mese_sand_tube_plain.png","pipeworks_mese_sand_tube_plain.png","pipeworks_mese_sand_tube_plain.png",
+               "pipeworks_mese_sand_tube_plain.png","pipeworks_mese_sand_tube_plain.png","pipeworks_mese_sand_tube_plain.png"}
+mese_sand_end_textures={"pipeworks_mese_sand_tube_end.png","pipeworks_mese_sand_tube_end.png","pipeworks_mese_sand_tube_end.png",
+               "pipeworks_mese_sand_tube_end.png","pipeworks_mese_sand_tube_end.png","pipeworks_mese_sand_tube_end.png"}
+mese_sand_short_texture="pipeworks_mese_sand_tube_short.png"
+mese_sand_inv_texture="pipeworks_mese_sand_tube_inv.png"
+
+register_tube("pipeworks:mese_sand_tube","Mese sand pneumatic tube segment",mese_sand_plain_textures,mese_sand_noctr_textures,mese_sand_end_textures,
+               mese_sand_short_texture,mese_sand_inv_texture,
+               {groups={mese_sand_tube=1},
+       on_construct = function(pos)
+               local meta = minetest.env:get_meta(pos)
+    meta:set_int("dist", 0)
+               meta:set_string("formspec",
+                               "size[2,1]"..
+                               "field[.5,.5;1.5,1;dist;distance;${dist}]")
+               meta:set_string("infotext", "Mese sand pneumatic tube")
+       end,
+       on_receive_fields=function(pos,formname,fields,sender)
+               local meta=minetest.env:get_meta(pos)
+    local dist
+    _, dist = pcall(tonumber, fields.dist)
+    if dist and 0 <= dist and dist <= 8 then meta:set_int("dist", dist) end
+       end,
+})
+
+local function get_objects_with_square_radius(pos, rad)
+  rad = rad + .5;
+  local objs = {}
+  for _,object in ipairs(minetest.env:get_objects_inside_radius(pos, math.sqrt(3)*rad)) do
+    if not object:is_player() and object:get_luaentity() and object:get_luaentity().name == "__builtin:item" then
+      local opos = object:getpos()
+      if pos.x - rad <= opos.x and opos.x <= pos.x + rad and pos.y - rad <= opos.y and opos.y <= pos.y + rad and pos.z - rad <= opos.z and opos.z <= pos.z + rad then
+        objs[#objs + 1] = object
+      end
+    end
+  end
+  return objs
+end
+
+minetest.register_abm({nodenames={"group:mese_sand_tube"},interval=1,chance=1,
+       action=function(pos, node, active_object_count, active_object_count_wider)
+               for _,object in ipairs(get_objects_with_square_radius(pos, minetest.env:get_meta(pos):get_int("dist"))) do
+                       if not object:is_player() and object:get_luaentity() and object:get_luaentity().name == "__builtin:item" then
+                               if object:get_luaentity().itemstring ~= "" then
+                                       local titem=tube_item(pos,object:get_luaentity().itemstring)
+                                       titem:get_luaentity().start_pos = {x=pos.x,y=pos.y-1,z=pos.z}
+                                       titem:setvelocity({x=0.01,y=1,z=-0.01})
+                                       titem:setacceleration({x=0, y=0, z=0})
+                               end
+                               object:get_luaentity().itemstring = ""
+                               object:remove()
+                       end
+               end
+       end
+})
+