[pipeworks] Update to Git commit d822279:
https://github.com/minetest-mods/pipeworks/tree/d822279
@ -62,7 +62,7 @@ The game includes the mods from the default [minetest_game](https://github.com/m
|
||||
* npc/
|
||||
* [peaceful_npc][] ([WTFPL][lic.wtfpl]) -- version: [2b3a7a5 Git][ver.peaceful_npc] *2015-08-09*
|
||||
* [painting][] (???)
|
||||
* [pipeworks][] ([WTFPL][lic.wtfpl])
|
||||
* [pipeworks][] ([WTFPL][lic.wtfpl]) -- version: [d822279 Git][ver.pipeworks] *2017-04-13*
|
||||
* plantlife/
|
||||
* player/
|
||||
* [airtanks][] ([MIT][lic.airtanks]) -- version: [fc01ffb Git][ver.airtanks] *2017-04-01*
|
||||
@ -430,6 +430,7 @@ The game includes the mods from the default [minetest_game](https://github.com/m
|
||||
[ver.mydoors]: https://github.com/minetest-mods/mydoors/tree/63aef13
|
||||
[ver.mywoodslopes]: https://github.com/minetest-mods/mywoodslopes/tree/3a1b531
|
||||
[ver.peaceful_npc]: https://github.com/jojoa1997/peaceful_npc/tree/2b3a7a5
|
||||
[ver.pipeworks]: https://github.com/minetest-mods/pipeworks/tree/d822279
|
||||
[ver.playeranim]: https://github.com/minetest-mods/playeranim/tree/0ca8e5a
|
||||
[ver.privilegeareas]: https://github.com/minetest-mods/privilegeareas/tree/aebaa00
|
||||
[ver.quartz]: https://github.com/minetest-mods/quartz/tree/00ca4eb
|
||||
|
@ -102,6 +102,7 @@ local function after_recipe_change(pos, inventory)
|
||||
minetest.get_node_timer(pos):stop()
|
||||
autocrafterCache[minetest.hash_node_position(pos)] = nil
|
||||
meta:set_string("infotext", "unconfigured Autocrafter")
|
||||
inventory:set_stack("output", 1, "")
|
||||
return
|
||||
end
|
||||
local recipe_changed = false
|
||||
@ -171,19 +172,28 @@ end
|
||||
local function update_meta(meta, enabled)
|
||||
local state = enabled and "on" or "off"
|
||||
meta:set_int("enabled", enabled and 1 or 0)
|
||||
meta:set_string("formspec",
|
||||
"size[8,11]"..
|
||||
local fs = "size[8,12]"..
|
||||
"list[context;recipe;0,0;3,3;]"..
|
||||
"image[3,1;1,1;gui_hb_bg.png^[colorize:#141318:255]"..
|
||||
"list[context;output;3,1;1,1;]"..
|
||||
"image_button[3,2;1,1;pipeworks_button_" .. state .. ".png;" .. state .. ";;;false;pipeworks_button_interm.png]" ..
|
||||
"list[context;src;0,3.5;8,3;]"..
|
||||
"image_button[3,2;1,0.6;pipeworks_button_" .. state .. ".png;" .. state .. ";;;false;pipeworks_button_interm.png]" ..
|
||||
"list[context;src;0,4.5;8,3;]"..
|
||||
"list[context;dst;4,0;4,3;]"..
|
||||
default.gui_bg..
|
||||
default.gui_bg_img..
|
||||
default.gui_slots..
|
||||
default.get_hotbar_bg(0,7) ..
|
||||
"list[current_player;main;0,7;8,4;]")
|
||||
default.get_hotbar_bg(0,8) ..
|
||||
"list[current_player;main;0,8;8,4;]" ..
|
||||
"listring[current_player;main]"..
|
||||
"listring[context;src]" ..
|
||||
"listring[current_player;main]"..
|
||||
"listring[context;dst]" ..
|
||||
"listring[current_player;main]"
|
||||
if minetest.get_modpath("digilines") then
|
||||
fs = fs.."field[1,3.5;4,1;channel;Channel;${channel}]"
|
||||
fs = fs.."button_exit[5,3.2;2,1;save;Save]"
|
||||
end
|
||||
meta:set_string("formspec",fs)
|
||||
|
||||
-- toggling the button doesn't quite call for running a recipe change check
|
||||
-- so instead we run a minimal version for infotext setting only
|
||||
@ -275,6 +285,8 @@ minetest.register_node("pipeworks:autocrafter", {
|
||||
if update_meta(meta, true) then
|
||||
start_crafter(pos)
|
||||
end
|
||||
elseif fields.save then
|
||||
meta:set_string("channel",fields.channel)
|
||||
end
|
||||
end,
|
||||
can_dig = function(pos, player)
|
||||
@ -355,7 +367,40 @@ minetest.register_node("pipeworks:autocrafter", {
|
||||
after_inventory_change(pos)
|
||||
return count
|
||||
end,
|
||||
on_timer = run_autocrafter
|
||||
on_timer = run_autocrafter,
|
||||
digiline = {
|
||||
receptor = {},
|
||||
effector = {
|
||||
action = function(pos,node,channel,msg)
|
||||
local meta = minetest.get_meta(pos)
|
||||
if channel ~= meta:get_string("channel") then return end
|
||||
if type(msg) == "table" then
|
||||
if #msg < 3 then return end
|
||||
local inv = meta:get_inventory()
|
||||
for y=0,2,1 do
|
||||
for x=1,3,1 do
|
||||
local slot = y*3+x
|
||||
if minetest.registered_items[msg[y+1][x]] then
|
||||
inv:set_stack("recipe",slot,ItemStack(msg[y+1][x]))
|
||||
else
|
||||
inv:set_stack("recipe",slot,ItemStack(""))
|
||||
end
|
||||
end
|
||||
end
|
||||
after_recipe_change(pos,inv)
|
||||
elseif msg == "off" then
|
||||
update_meta(meta, false)
|
||||
minetest.get_node_timer(pos):stop()
|
||||
elseif msg == "on" then
|
||||
if update_meta(meta, true) then
|
||||
start_crafter(pos)
|
||||
end
|
||||
elseif msg == "single" then
|
||||
run_autocrafter(pos,1)
|
||||
end
|
||||
end,
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_craft( {
|
||||
|
@ -1,6 +1,71 @@
|
||||
-- autorouting for pipes
|
||||
--[[
|
||||
|
||||
autorouting for pipes
|
||||
|
||||
To connect pipes to some node, include this in the node def...
|
||||
|
||||
pipe_connections = {
|
||||
pattern = <string>, -- if supplied, search for this pattern instead of the exact node name
|
||||
left = <bool>, -- true (or 1) if the left side of the node needs to connect to a pipe
|
||||
right = <bool>, -- or from the right side, etc.
|
||||
top = <bool>,
|
||||
bottom = <bool>,
|
||||
front = <bool>,
|
||||
back = <bool>,
|
||||
left_param2 = <num>, -- the node must have this param2 to connect from the left
|
||||
right_param2 = <num>, -- or right, etc.
|
||||
top_param2 = <num>, -- Omit some or all of these to skip checking param2 for those sides
|
||||
bottom_param2 = <num>,
|
||||
front_param2 = <num>,
|
||||
back_param2 = <num>,
|
||||
},
|
||||
|
||||
...then add, pipeworks.scan_for_pipe_objects(pos)
|
||||
to your node's after_dig_node and after_place_node callbacks.
|
||||
|
||||
]]--
|
||||
|
||||
-- get the axis dir (just 6 faces) of target node, assumes the pipe is the axis
|
||||
|
||||
function pipeworks.get_axis_dir(nodetable, pattern)
|
||||
local pxm,pxp,pym,pyp,pzm,pzp
|
||||
|
||||
if string.find(nodetable.nxm.name, pattern)
|
||||
and minetest.facedir_to_dir(nodetable.nxm.param2).x ~= 0 then
|
||||
pxm=1
|
||||
end
|
||||
|
||||
if string.find(nodetable.nxp.name, pattern)
|
||||
and minetest.facedir_to_dir(nodetable.nxp.param2).x ~= 0 then
|
||||
pxp=1
|
||||
end
|
||||
|
||||
if string.find(nodetable.nzm.name, pattern)
|
||||
and minetest.facedir_to_dir(nodetable.nzm.param2).z ~= 0 then
|
||||
pzm=1
|
||||
end
|
||||
|
||||
if string.find(nodetable.nzp.name, pattern)
|
||||
and minetest.facedir_to_dir(nodetable.nzp.param2).z ~= 0 then
|
||||
pzp=1
|
||||
end
|
||||
|
||||
if string.find(nodetable.nym.name, pattern)
|
||||
and minetest.facedir_to_dir(nodetable.nym.param2).y ~= 0 then
|
||||
pym=1
|
||||
end
|
||||
|
||||
if string.find(nodetable.nyp.name, pattern)
|
||||
and minetest.facedir_to_dir(nodetable.nyp.param2).y ~= 0 then
|
||||
pyp=1
|
||||
end
|
||||
local match = pxm or pxp or pym or pyp or pzm or pzp
|
||||
return match,pxm,pxp,pym,pyp,pzm,pzp
|
||||
end
|
||||
|
||||
local tube_table = {[0] = 1, 2, 2, 4, 2, 4, 4, 5, 2, 3, 4, 6, 4, 6, 5, 7, 2, 4, 3, 6, 4, 5, 6, 7, 4, 6, 6, 8, 5, 7, 7, 9, 2, 4, 4, 5, 3, 6, 6, 7, 4, 6, 5, 7, 6, 8, 7, 9, 4, 5, 6, 7, 6, 7, 8, 9, 5, 7, 7, 9, 7, 9, 9, 10}
|
||||
local tube_table_facedirs = {[0] = 0, 0, 5, 0, 3, 4, 3, 0, 2, 0, 2, 0, 6, 4, 3, 0, 7, 12, 5, 12, 7, 4, 5, 5, 18, 20, 16, 0, 7, 4, 7, 0, 1, 8, 1, 1, 1, 13, 1, 1, 10, 8, 2, 2, 17, 4, 3, 6, 9, 9, 9, 9, 21, 13, 1, 1, 10, 10, 11, 2, 19, 4, 3, 0}
|
||||
|
||||
local function autoroute_pipes(pos)
|
||||
local nctr = minetest.get_node(pos)
|
||||
local state = "_empty"
|
||||
@ -23,7 +88,7 @@ function pipeworks.scan_for_pipe_objects(pos)
|
||||
autoroute_pipes(pos)
|
||||
end
|
||||
|
||||
-- auto-rotation code for various devices the tubes attach to
|
||||
-- auto-rotation code for various devices the pipes attach to
|
||||
|
||||
function pipeworks.scan_pipe_surroundings(pos)
|
||||
local pxm=0
|
||||
@ -40,152 +105,102 @@ function pipeworks.scan_pipe_surroundings(pos)
|
||||
local nzm = minetest.get_node({ x=pos.x , y=pos.y , z=pos.z-1 })
|
||||
local nzp = minetest.get_node({ x=pos.x , y=pos.y , z=pos.z+1 })
|
||||
|
||||
if (string.find(nxm.name, "pipeworks:pipe_") ~= nil) then pxm=1 end
|
||||
if (string.find(nxp.name, "pipeworks:pipe_") ~= nil) then pxp=1 end
|
||||
if (string.find(nym.name, "pipeworks:pipe_") ~= nil) then pym=1 end
|
||||
if (string.find(nyp.name, "pipeworks:pipe_") ~= nil) then pyp=1 end
|
||||
if (string.find(nzm.name, "pipeworks:pipe_") ~= nil) then pzm=1 end
|
||||
if (string.find(nzp.name, "pipeworks:pipe_") ~= nil) then pzp=1 end
|
||||
local nodetable = {
|
||||
nxm = nxm,
|
||||
nxp = nxp,
|
||||
nym = nym,
|
||||
nyp = nyp,
|
||||
nzm = nzm,
|
||||
nzp = nzp
|
||||
}
|
||||
|
||||
-- standard handling for pipes...
|
||||
|
||||
if string.find(nxm.name, "pipeworks:pipe_") then pxm=1 end
|
||||
if string.find(nxp.name, "pipeworks:pipe_") then pxp=1 end
|
||||
if string.find(nym.name, "pipeworks:pipe_") then pym=1 end
|
||||
if string.find(nyp.name, "pipeworks:pipe_") then pyp=1 end
|
||||
if string.find(nzm.name, "pipeworks:pipe_") then pzm=1 end
|
||||
if string.find(nzp.name, "pipeworks:pipe_") then pzp=1 end
|
||||
|
||||
-- Special handling for valves...
|
||||
|
||||
if (string.find(nxm.name, "pipeworks:valve") ~= nil)
|
||||
and (nxm.param2 == 0 or nxm.param2 == 2) then
|
||||
pxm=1
|
||||
end
|
||||
|
||||
if (string.find(nxp.name, "pipeworks:valve") ~= nil)
|
||||
and (nxp.param2 == 0 or nxp.param2 == 2) then
|
||||
pxp=1
|
||||
end
|
||||
|
||||
if (string.find(nzm.name, "pipeworks:valve") ~= nil)
|
||||
and (nzm.param2 == 1 or nzm.param2 == 3) then
|
||||
pzm=1
|
||||
end
|
||||
|
||||
if (string.find(nzp.name, "pipeworks:valve") ~= nil)
|
||||
and (nzp.param2 == 1 or nzp.param2 == 3) then
|
||||
pzp=1
|
||||
local match,a,b,c,d,e,f = pipeworks.get_axis_dir(nodetable, "pipeworks:valve")
|
||||
if match then
|
||||
pxm = a or pxm
|
||||
pxp = b or pxp
|
||||
pym = c or pym
|
||||
pyp = d or pyp
|
||||
pzm = e or pzm
|
||||
pzp = f or pzp
|
||||
end
|
||||
|
||||
-- ...flow sensors...
|
||||
|
||||
if (string.find(nxm.name, "pipeworks:flow_sensor") ~= nil)
|
||||
and (nxm.param2 == 0 or nxm.param2 == 2) then
|
||||
pxm=1
|
||||
end
|
||||
|
||||
if (string.find(nxp.name, "pipeworks:flow_sensor") ~= nil)
|
||||
and (nxp.param2 == 0 or nxp.param2 == 2) then
|
||||
pxp=1
|
||||
end
|
||||
|
||||
if (string.find(nzm.name, "pipeworks:flow_sensor") ~= nil)
|
||||
and (nzm.param2 == 1 or nzm.param2 == 3) then
|
||||
pzm=1
|
||||
end
|
||||
|
||||
if (string.find(nzp.name, "pipeworks:flow_sensor") ~= nil)
|
||||
and (nzp.param2 == 1 or nzp.param2 == 3) then
|
||||
pzp=1
|
||||
end
|
||||
|
||||
-- ...spigots...
|
||||
|
||||
if (string.find(nxm.name, "pipeworks:spigot") ~= nil)
|
||||
and nxm.param2 == 1 then
|
||||
pxm=1
|
||||
end
|
||||
|
||||
if (string.find(nxp.name, "pipeworks:spigot") ~= nil)
|
||||
and nxp.param2 == 3 then
|
||||
pxp=1
|
||||
end
|
||||
|
||||
if (string.find(nzm.name, "pipeworks:spigot") ~= nil)
|
||||
and nzm.param2 == 0 then
|
||||
pzm=1
|
||||
end
|
||||
|
||||
if (string.find(nzp.name, "pipeworks:spigot") ~= nil)
|
||||
and nzp.param2 == 2 then
|
||||
pzp=1
|
||||
local match,a,b,c,d,e,f = pipeworks.get_axis_dir(nodetable, "pipeworks:flow_sensor")
|
||||
if match then
|
||||
pxm = a or pxm
|
||||
pxp = b or pxp
|
||||
pym = c or pym
|
||||
pyp = d or pyp
|
||||
pzm = e or pzm
|
||||
pzp = f or pzp
|
||||
end
|
||||
|
||||
-- ...sealed pipe entry/exit...
|
||||
|
||||
if (string.find(nxm.name, "pipeworks:entry_panel") ~= nil)
|
||||
and (nxm.param2 == 1 or nxm.param2 == 3) then
|
||||
pxm=1
|
||||
local match,a,b,c,d,e,f = pipeworks.get_axis_dir(nodetable, "pipeworks:entry_panel")
|
||||
if match then
|
||||
pxm = a or pxm
|
||||
pxp = b or pxp
|
||||
pym = c or pym
|
||||
pyp = d or pyp
|
||||
pzm = e or pzm
|
||||
pzp = f or pzp
|
||||
end
|
||||
|
||||
if (string.find(nxp.name, "pipeworks:entry_panel") ~= nil)
|
||||
and (nxp.param2 == 1 or nxp.param2 == 3) then
|
||||
pxp=1
|
||||
-- ... other nodes
|
||||
|
||||
local def_left = minetest.registered_nodes[nxp.name] -- the node that {pos} is to the left of (not the
|
||||
local def_right = minetest.registered_nodes[nxm.name] -- ...note that is AT the left!), etc.
|
||||
local def_bottom = minetest.registered_nodes[nyp.name]
|
||||
local def_top = minetest.registered_nodes[nym.name]
|
||||
local def_front = minetest.registered_nodes[nzp.name]
|
||||
local def_back = minetest.registered_nodes[nzm.name]
|
||||
|
||||
if def_left and def_left.pipe_connections and def_left.pipe_connections.left
|
||||
and (not def_left.pipe_connections.pattern or string.find(nxp.name, def_left.pipe_connections.pattern))
|
||||
and (not def_left.pipe_connections.left_param2 or (nxp.param2 == def_left.pipe_connections.left_param2)) then
|
||||
pxp = 1
|
||||
end
|
||||
if def_right and def_right.pipe_connections and def_right.pipe_connections.right
|
||||
and (not def_right.pipe_connections.pattern or string.find(nxm.name, def_right.pipe_connections.pattern))
|
||||
and (not def_right.pipe_connections.right_param2 or (nxm.param2 == def_right.pipe_connections.right_param2)) then
|
||||
pxm = 1
|
||||
end
|
||||
if def_top and def_top.pipe_connections and def_top.pipe_connections.top
|
||||
and (not def_top.pipe_connections.pattern or string.find(nym.name, def_top.pipe_connections.pattern))
|
||||
and (not def_top.pipe_connections.top_param2 or (nym.param2 == def_top.pipe_connections.top_param2)) then
|
||||
pym = 1
|
||||
end
|
||||
if def_bottom and def_bottom.pipe_connections and def_bottom.pipe_connections.bottom
|
||||
and (not def_bottom.pipe_connections.pattern or string.find(nyp.name, def_bottom.pipe_connections.pattern))
|
||||
and (not def_bottom.pipe_connections.bottom_param2 or (nyp.param2 == def_bottom.pipe_connections.bottom_param2)) then
|
||||
pyp = 1
|
||||
end
|
||||
if def_front and def_front.pipe_connections and def_front.pipe_connections.front
|
||||
and (not def_front.pipe_connections.pattern or string.find(nzp.name, def_front.pipe_connections.pattern))
|
||||
and (not def_front.pipe_connections.front_param2 or (nzp.param2 == def_front.pipe_connections.front_param2)) then
|
||||
pzp = 1
|
||||
end
|
||||
if def_back and def_back.pipe_connections and def_back.pipe_connections.back
|
||||
and (not def_back.pipe_connections.pattern or string.find(nzm.name, def_back.pipe_connections.pattern))
|
||||
and (not def_back.pipe_connections.back_param2 or (nzm.param2 == def_back.pipe_connections.back_param2)) then
|
||||
pzm = 1
|
||||
end
|
||||
|
||||
if (string.find(nzm.name, "pipeworks:entry_panel") ~= nil)
|
||||
and (nzm.param2 == 0 or nzm.param2 == 2) then
|
||||
pzm=1
|
||||
end
|
||||
|
||||
if (string.find(nzp.name, "pipeworks:entry_panel") ~= nil)
|
||||
and (nzp.param2 == 0 or nzp.param2 == 2) then
|
||||
pzp=1
|
||||
end
|
||||
|
||||
if (string.find(nym.name, "pipeworks:entry_panel") ~= nil)
|
||||
and nym.param2 == 13 then
|
||||
pym=1
|
||||
end
|
||||
|
||||
if (string.find(nyp.name, "pipeworks:entry_panel") ~= nil)
|
||||
and nyp.param2 == 13 then
|
||||
pyp=1
|
||||
end
|
||||
|
||||
|
||||
-- ...pumps, grates...
|
||||
|
||||
if (string.find(nym.name, "pipeworks:grating") ~= nil) or
|
||||
(string.find(nym.name, "pipeworks:pump") ~= nil) then
|
||||
pym=1
|
||||
end
|
||||
|
||||
-- ...fountainheads...
|
||||
|
||||
if (string.find(nyp.name, "pipeworks:fountainhead") ~= nil) then
|
||||
pyp=1
|
||||
end
|
||||
|
||||
-- ... and storage tanks.
|
||||
|
||||
if (string.find(nym.name, "pipeworks:storage_tank_") ~= nil) then
|
||||
pym=1
|
||||
end
|
||||
|
||||
if (string.find(nyp.name, "pipeworks:storage_tank_") ~= nil) then
|
||||
pyp=1
|
||||
end
|
||||
|
||||
-- ...extra devices specified via the function's parameters
|
||||
-- ...except that this part is not implemented yet
|
||||
--
|
||||
-- xxx = nxm, nxp, nym, nyp, nzm, or nzp depending on the direction to check
|
||||
-- yyy = pxm, pxp, pym, pyp, pzm, or pzp accordingly.
|
||||
--
|
||||
-- if string.find(xxx.name, "modname:nodename") ~= nil then
|
||||
-- yyy = 1
|
||||
-- end
|
||||
--
|
||||
-- for example:
|
||||
--
|
||||
-- if string.find(nym.name, "aero:outlet") ~= nil then
|
||||
-- pym = 1
|
||||
-- end
|
||||
--
|
||||
|
||||
print("stage 2 returns "..pxm+8*pxp+2*pym+16*pyp+4*pzm+32*pzp..
|
||||
" for nodes surrounding "..minetest.get_node(pos).name.." at "..minetest.pos_to_string(pos))
|
||||
return pxm+8*pxp+2*pym+16*pyp+4*pzm+32*pzp
|
||||
end
|
||||
|
||||
@ -197,4 +212,3 @@ function pipeworks.look_for_stackable_tanks(pos)
|
||||
minetest.add_node(pos, { name = "pipeworks:expansion_tank_0", param2 = tym.param2})
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
-- autorouting for pneumatic tubes
|
||||
|
||||
local function is_tube(nodename)
|
||||
return table.contains(pipeworks.tubenodes, nodename)
|
||||
return pipeworks.table_contains(pipeworks.tubenodes, nodename)
|
||||
end
|
||||
|
||||
--a function for determining which side of the node we are on
|
||||
@ -11,23 +11,23 @@ local function nodeside(node, tubedir)
|
||||
end
|
||||
|
||||
local backdir = minetest.facedir_to_dir(node.param2)
|
||||
local back = vector.dot(backdir, tubedir)
|
||||
local back = pipeworks.vector_dot(backdir, tubedir)
|
||||
if back == 1 then
|
||||
return "back"
|
||||
elseif back == -1 then
|
||||
return "front"
|
||||
end
|
||||
|
||||
local topdir = minetest.facedir_to_top_dir(node.param2)
|
||||
local top = vector.dot(topdir, tubedir)
|
||||
local topdir = pipeworks.facedir_to_top_dir(node.param2)
|
||||
local top = pipeworks.vector_dot(topdir, tubedir)
|
||||
if top == 1 then
|
||||
return "top"
|
||||
elseif top == -1 then
|
||||
return "bottom"
|
||||
end
|
||||
|
||||
local rightdir = minetest.facedir_to_right_dir(node.param2)
|
||||
local right = vector.dot(rightdir, tubedir)
|
||||
local rightdir = pipeworks.facedir_to_right_dir(node.param2)
|
||||
local right = pipeworks.vector_dot(rightdir, tubedir)
|
||||
if right == 1 then
|
||||
return "right"
|
||||
else
|
||||
@ -99,7 +99,7 @@ end
|
||||
|
||||
function pipeworks.scan_for_tube_objects(pos)
|
||||
for side = 0, 6 do
|
||||
tube_autoroute(vector.add(pos, directions.side_to_dir(side)))
|
||||
tube_autoroute(vector.add(pos, pipeworks.directions.side_to_dir(side)))
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
-- Vector functions --
|
||||
----------------------
|
||||
|
||||
function vector.cross(a, b)
|
||||
function pipeworks.vector_cross(a, b)
|
||||
return {
|
||||
x = a.y * b.z - a.z * b.y,
|
||||
y = a.z * b.x - a.x * b.z,
|
||||
@ -10,7 +10,7 @@ function vector.cross(a, b)
|
||||
}
|
||||
end
|
||||
|
||||
function vector.dot(a, b)
|
||||
function pipeworks.vector_dot(a, b)
|
||||
return a.x * b.x + a.y * b.y + a.z * b.z
|
||||
end
|
||||
|
||||
@ -18,7 +18,7 @@ end
|
||||
-- Facedir functions --
|
||||
-----------------------
|
||||
|
||||
function minetest.facedir_to_top_dir(facedir)
|
||||
function pipeworks.facedir_to_top_dir(facedir)
|
||||
return ({[0] = {x = 0, y = 1, z = 0},
|
||||
{x = 0, y = 0, z = 1},
|
||||
{x = 0, y = 0, z = -1},
|
||||
@ -28,14 +28,15 @@ function minetest.facedir_to_top_dir(facedir)
|
||||
[math.floor(facedir / 4)]
|
||||
end
|
||||
|
||||
function minetest.facedir_to_right_dir(facedir)
|
||||
return vector.cross(
|
||||
minetest.facedir_to_top_dir(facedir),
|
||||
function pipeworks.facedir_to_right_dir(facedir)
|
||||
return pipeworks.vector_cross(
|
||||
pipeworks.facedir_to_top_dir(facedir),
|
||||
minetest.facedir_to_dir(facedir)
|
||||
)
|
||||
end
|
||||
|
||||
directions = {}
|
||||
local directions = {}
|
||||
pipeworks.directions = directions
|
||||
function directions.side_to_dir(side)
|
||||
return ({[0] = vector.new(),
|
||||
vector.new( 0, 1, 0),
|
||||
@ -48,7 +49,7 @@ function directions.side_to_dir(side)
|
||||
end
|
||||
|
||||
function directions.dir_to_side(dir)
|
||||
local c = vector.dot(dir, vector.new(1, 2, 3)) + 4
|
||||
local c = pipeworks.vector_dot(dir, vector.new(1, 2, 3)) + 4
|
||||
return ({6, 2, 4, 0, 3, 1, 5})[c]
|
||||
end
|
||||
|
||||
@ -56,7 +57,7 @@ end
|
||||
-- String functions --
|
||||
----------------------
|
||||
|
||||
--[[function string.split(str, sep)
|
||||
--[[function pipeworks.string_split(str, sep)
|
||||
local fields = {}
|
||||
local index = 1
|
||||
local expr = "([^"..sep.."])+"
|
||||
@ -67,7 +68,7 @@ end
|
||||
return fields
|
||||
end]]
|
||||
|
||||
function string.startswith(str, substr)
|
||||
function pipeworks.string_startswith(str, substr)
|
||||
return str:sub(1, substr:len()) == substr
|
||||
end
|
||||
|
||||
@ -75,7 +76,7 @@ end
|
||||
-- Table functions --
|
||||
---------------------
|
||||
|
||||
function table.contains(tbl, element)
|
||||
function pipeworks.table_contains(tbl, element)
|
||||
for _, elt in pairs(tbl) do
|
||||
if elt == element then
|
||||
return true
|
||||
@ -84,7 +85,7 @@ function table.contains(tbl, element)
|
||||
return false
|
||||
end
|
||||
|
||||
function table.extend(tbl, tbl2)
|
||||
function pipeworks.table_extend(tbl, tbl2)
|
||||
local index = #tbl + 1
|
||||
for _, elt in ipairs(tbl2) do
|
||||
tbl[index] = elt
|
||||
@ -92,11 +93,11 @@ function table.extend(tbl, tbl2)
|
||||
end
|
||||
end
|
||||
|
||||
function table.recursive_replace(tbl, pattern, replace_with)
|
||||
function pipeworks.table_recursive_replace(tbl, pattern, replace_with)
|
||||
if type(tbl) == "table" then
|
||||
local tbl2 = {}
|
||||
for key, value in pairs(tbl) do
|
||||
tbl2[key] = table.recursive_replace(value, pattern, replace_with)
|
||||
tbl2[key] = pipeworks.table_recursive_replace(value, pattern, replace_with)
|
||||
end
|
||||
return tbl2
|
||||
elseif type(tbl) == "string" then
|
||||
@ -110,11 +111,12 @@ end
|
||||
-- Formspec functions --
|
||||
------------------------
|
||||
|
||||
fs_helpers = {}
|
||||
local fs_helpers = {}
|
||||
pipeworks.fs_helpers = fs_helpers
|
||||
function fs_helpers.on_receive_fields(pos, fields)
|
||||
local meta = minetest.get_meta(pos)
|
||||
for field, value in pairs(fields) do
|
||||
if field:startswith("fs_helpers_cycling:") then
|
||||
if pipeworks.string_startswith(field, "fs_helpers_cycling:") then
|
||||
local l = field:split(":")
|
||||
local new_value = tonumber(l[2])
|
||||
local meta_name = l[3]
|
||||
@ -146,7 +148,7 @@ end
|
||||
-- Env --
|
||||
---------
|
||||
|
||||
function minetest.load_position(pos)
|
||||
function pipeworks.load_position(pos)
|
||||
if pos.x < -30912 or pos.y < -30912 or pos.z < -30912 or
|
||||
pos.x > 30927 or pos.y > 30927 or pos.z > 30927 then return end
|
||||
if minetest.get_node_or_nil(pos) then
|
||||
|
187
mods/pipeworks/compat-chests.lua
Normal file
@ -0,0 +1,187 @@
|
||||
-- this bit of code modifies the default chests and furnaces to be compatible
|
||||
-- with pipeworks.
|
||||
--
|
||||
-- the formspecs found here are basically copies of the ones from minetest_game
|
||||
-- plus bits from pipeworks' sorting tubes
|
||||
|
||||
local fs_helpers = pipeworks.fs_helpers
|
||||
|
||||
tube_entry = "^pipeworks_tube_connection_wooden.png"
|
||||
|
||||
local base_chest_formspec = "size[8,9]" ..
|
||||
default.gui_bg ..
|
||||
default.gui_bg_img ..
|
||||
default.gui_slots ..
|
||||
"list[current_player;main;0,4.85;8,1;]" ..
|
||||
"list[current_player;main;0,6.08;8,3;8]" ..
|
||||
"listring[current_player;main]" ..
|
||||
default.get_hotbar_bg(0,4.85)
|
||||
|
||||
local function update_chest_formspec(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local formspec = base_chest_formspec ..
|
||||
"list[current_name;main;0,0.3;8,4;]" ..
|
||||
"listring[current_name;main]" ..
|
||||
fs_helpers.cycling_button(
|
||||
meta,
|
||||
pipeworks.button_base,
|
||||
"splitstacks",
|
||||
{
|
||||
pipeworks.button_off,
|
||||
pipeworks.button_on
|
||||
}
|
||||
)..pipeworks.button_label
|
||||
meta:set_string("formspec", formspec)
|
||||
end
|
||||
|
||||
minetest.override_item("default:chest", {
|
||||
tiles = {
|
||||
"default_chest_top.png"..tube_entry,
|
||||
"default_chest_top.png"..tube_entry,
|
||||
"default_chest_side.png"..tube_entry,
|
||||
"default_chest_side.png"..tube_entry,
|
||||
"default_chest_side.png"..tube_entry,
|
||||
"default_chest_front.png"
|
||||
},
|
||||
groups = {choppy = 2, oddly_breakable_by_hand = 2, tubedevice = 1, tubedevice_receiver = 1},
|
||||
tube = {
|
||||
insert_object = function(pos, node, stack, direction)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
return inv:add_item("main", stack)
|
||||
end,
|
||||
can_insert = function(pos, node, stack, direction)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
if meta:get_int("splitstacks") == 1 then
|
||||
stack = stack:peek_item(1)
|
||||
end
|
||||
return inv:room_for_item("main", stack)
|
||||
end,
|
||||
input_inventory = "main",
|
||||
connect_sides = {left = 1, right = 1, back = 1, front = 1, bottom = 1, top = 1}
|
||||
},
|
||||
after_place_node = pipeworks.after_place,
|
||||
after_dig_node = pipeworks.after_dig,
|
||||
on_construct = function(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
inv:set_size("main", 8*4)
|
||||
update_chest_formspec(pos)
|
||||
end,
|
||||
on_receive_fields = function(pos, formname, fields, sender)
|
||||
if not pipeworks.may_configure(pos, sender) then return end
|
||||
fs_helpers.on_receive_fields(pos, fields)
|
||||
update_chest_formspec(pos)
|
||||
end,
|
||||
})
|
||||
|
||||
-- =====================
|
||||
|
||||
local function get_locked_chest_formspec(pos)
|
||||
local spos = pos.x .. "," .. pos.y .. "," .. pos.z
|
||||
local formspec = base_chest_formspec ..
|
||||
"list[nodemeta:" .. spos .. ";main;0,0.3;8,4;]" ..
|
||||
"listring[nodemeta:" .. spos .. ";main]"
|
||||
return formspec
|
||||
end
|
||||
|
||||
local function setup_locked_formspec(pos, meta)
|
||||
meta:set_string("formspec",
|
||||
get_locked_chest_formspec(pos) ..
|
||||
fs_helpers.cycling_button(
|
||||
meta,
|
||||
pipeworks.button_base,
|
||||
"splitstacks",
|
||||
{
|
||||
pipeworks.button_off,
|
||||
pipeworks.button_on
|
||||
}
|
||||
)..pipeworks.button_label
|
||||
)
|
||||
end
|
||||
|
||||
minetest.override_item("default:chest_locked", {
|
||||
tiles = {
|
||||
"default_chest_top.png"..tube_entry,
|
||||
"default_chest_top.png"..tube_entry,
|
||||
"default_chest_side.png"..tube_entry,
|
||||
"default_chest_side.png"..tube_entry,
|
||||
"default_chest_side.png"..tube_entry,
|
||||
"default_chest_lock.png"
|
||||
},
|
||||
groups = {choppy = 2, oddly_breakable_by_hand = 2, tubedevice = 1, tubedevice_receiver = 1},
|
||||
tube = {
|
||||
insert_object = function(pos, node, stack, direction)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
return inv:add_item("main", stack)
|
||||
end,
|
||||
can_insert = function(pos, node, stack, direction)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
if meta:get_int("splitstacks") == 1 then
|
||||
stack = stack:peek_item(1)
|
||||
end
|
||||
return inv:room_for_item("main", stack)
|
||||
end,
|
||||
connect_sides = {left = 1, right = 1, back = 1, front = 1, bottom = 1, top = 1}
|
||||
},
|
||||
after_place_node = function (pos, placer)
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string("owner", placer:get_player_name() or "")
|
||||
meta:set_string("infotext", "Locked Chest (owned by "..
|
||||
meta:get_string("owner")..")")
|
||||
pipeworks.after_place(pos)
|
||||
end,
|
||||
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
|
||||
if default.can_interact_with_node(clicker, pos) then
|
||||
local meta = minetest.get_meta(pos)
|
||||
local formspec = meta:get_string("formspec")
|
||||
print("on_rightclick")
|
||||
print(dump(formspec))
|
||||
setup_locked_formspec(pos, meta, clicker)
|
||||
minetest.show_formspec(
|
||||
clicker:get_player_name(),
|
||||
"default:chest_locked",
|
||||
get_locked_chest_formspec(pos)
|
||||
)
|
||||
end
|
||||
return itemstack
|
||||
end,
|
||||
on_key_use = function(pos, player)
|
||||
local secret = minetest.get_meta(pos):get_string("key_lock_secret")
|
||||
local itemstack = player:get_wielded_item()
|
||||
local key_meta = itemstack:get_meta()
|
||||
|
||||
if key_meta:get_string("secret") == "" then
|
||||
key_meta:set_string("secret", minetest.parse_json(itemstack:get_metadata()).secret)
|
||||
itemstack:set_metadata("")
|
||||
end
|
||||
|
||||
if secret ~= key_meta:get_string("secret") then
|
||||
return
|
||||
end
|
||||
setup_locked_formspec(pos, minetest.get_meta(pos))
|
||||
end,
|
||||
on_construct = function(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
inv:set_size("main", 8*4)
|
||||
setup_locked_formspec(pos, meta)
|
||||
end,
|
||||
on_receive_fields = function(pos, formname, fields, sender)
|
||||
if not pipeworks.may_configure(pos, sender) then return end
|
||||
fs_helpers.on_receive_fields(pos, fields)
|
||||
local formspec = get_locked_chest_formspec(pos)
|
||||
print("on_receive_fields")
|
||||
print(dump(formspec))
|
||||
|
||||
if formspec == "" then
|
||||
meta:set_string("formspec", formspec)
|
||||
else
|
||||
setup_locked_formspec(pos, minetest.get_meta(pos))
|
||||
end
|
||||
end,
|
||||
after_dig_node = pipeworks.after_dig
|
||||
})
|
433
mods/pipeworks/compat-furnaces.lua
Normal file
@ -0,0 +1,433 @@
|
||||
|
||||
-- this file is basically a modified copy of
|
||||
-- minetest_game/mods/default/furnaces.lua
|
||||
|
||||
local fs_helpers = pipeworks.fs_helpers
|
||||
|
||||
tube_entry = "^pipeworks_tube_connection_stony.png"
|
||||
|
||||
local function active_formspec(fuel_percent, item_percent, pos, meta)
|
||||
local formspec =
|
||||
"size[8,8.5]"..
|
||||
default.gui_bg..
|
||||
default.gui_bg_img..
|
||||
default.gui_slots..
|
||||
"list[current_name;src;2.75,0.5;1,1;]"..
|
||||
"list[current_name;fuel;2.75,2.5;1,1;]"..
|
||||
"image[2.75,1.5;1,1;default_furnace_fire_bg.png^[lowpart:"..
|
||||
(100-fuel_percent)..":default_furnace_fire_fg.png]"..
|
||||
"image[3.75,1.5;1,1;gui_furnace_arrow_bg.png^[lowpart:"..
|
||||
(item_percent)..":gui_furnace_arrow_fg.png^[transformR270]"..
|
||||
"list[current_name;dst;4.75,0.96;2,2;]"..
|
||||
"list[current_player;main;0,4.25;8,1;]"..
|
||||
"list[current_player;main;0,5.5;8,3;8]"..
|
||||
"listring[current_name;dst]"..
|
||||
"listring[current_player;main]"..
|
||||
"listring[current_name;src]"..
|
||||
"listring[current_player;main]"..
|
||||
"listring[current_name;fuel]"..
|
||||
"listring[current_player;main]"..
|
||||
default.get_hotbar_bg(0, 4.25) ..
|
||||
fs_helpers.cycling_button(
|
||||
meta,
|
||||
"image_button[0,3.5;1,0.6",
|
||||
"split_material_stacks",
|
||||
{
|
||||
pipeworks.button_off,
|
||||
pipeworks.button_on
|
||||
}
|
||||
).."label[0.9,3.51;Allow splitting incoming material (not fuel) stacks from tubes]"
|
||||
return formspec
|
||||
end
|
||||
|
||||
local function inactive_formspec(pos, meta)
|
||||
local formspec = "size[8,8.5]"..
|
||||
default.gui_bg..
|
||||
default.gui_bg_img..
|
||||
default.gui_slots..
|
||||
"list[current_name;src;2.75,0.5;1,1;]"..
|
||||
"list[current_name;fuel;2.75,2.5;1,1;]"..
|
||||
"image[2.75,1.5;1,1;default_furnace_fire_bg.png]"..
|
||||
"image[3.75,1.5;1,1;gui_furnace_arrow_bg.png^[transformR270]"..
|
||||
"list[current_name;dst;4.75,0.96;2,2;]"..
|
||||
"list[current_player;main;0,4.25;8,1;]"..
|
||||
"list[current_player;main;0,5.5;8,3;8]"..
|
||||
"listring[current_name;dst]"..
|
||||
"listring[current_player;main]"..
|
||||
"listring[current_name;src]"..
|
||||
"listring[current_player;main]"..
|
||||
"listring[current_name;fuel]"..
|
||||
"listring[current_player;main]"..
|
||||
default.get_hotbar_bg(0, 4.25) ..
|
||||
fs_helpers.cycling_button(
|
||||
meta,
|
||||
"image_button[0,3.5;1,0.6",
|
||||
"split_material_stacks",
|
||||
{
|
||||
pipeworks.button_off,
|
||||
pipeworks.button_on
|
||||
}
|
||||
).."label[0.9,3.51;Allow splitting incoming material (not fuel) stacks from tubes]"
|
||||
return formspec
|
||||
end
|
||||
|
||||
--
|
||||
-- Node callback functions that are the same for active and inactive furnace
|
||||
--
|
||||
|
||||
local function can_dig(pos, player)
|
||||
local meta = minetest.get_meta(pos);
|
||||
local inv = meta:get_inventory()
|
||||
return inv:is_empty("fuel") and inv:is_empty("dst") and inv:is_empty("src")
|
||||
end
|
||||
|
||||
local function allow_metadata_inventory_put(pos, listname, index, stack, player)
|
||||
if minetest.is_protected(pos, player:get_player_name()) then
|
||||
return 0
|
||||
end
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
if listname == "fuel" then
|
||||
if minetest.get_craft_result({method="fuel", width=1, items={stack}}).time ~= 0 then
|
||||
if inv:is_empty("src") then
|
||||
meta:set_string("infotext", "Furnace is empty")
|
||||
end
|
||||
return stack:get_count()
|
||||
else
|
||||
return 0
|
||||
end
|
||||
elseif listname == "src" then
|
||||
return stack:get_count()
|
||||
elseif listname == "dst" then
|
||||
return 0
|
||||
end
|
||||
end
|
||||
|
||||
local function allow_metadata_inventory_move(pos, from_list, from_index, to_list, to_index, count, player)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
local stack = inv:get_stack(from_list, from_index)
|
||||
return allow_metadata_inventory_put(pos, to_list, to_index, stack, player)
|
||||
end
|
||||
|
||||
local function allow_metadata_inventory_take(pos, listname, index, stack, player)
|
||||
if minetest.is_protected(pos, player:get_player_name()) then
|
||||
return 0
|
||||
end
|
||||
return stack:get_count()
|
||||
end
|
||||
|
||||
local function swap_node(pos, name)
|
||||
local node = minetest.get_node(pos)
|
||||
if node.name == name then
|
||||
return
|
||||
end
|
||||
node.name = name
|
||||
minetest.swap_node(pos, node)
|
||||
end
|
||||
|
||||
local function furnace_node_timer(pos, elapsed)
|
||||
--
|
||||
-- Inizialize metadata
|
||||
--
|
||||
local meta = minetest.get_meta(pos)
|
||||
local fuel_time = meta:get_float("fuel_time") or 0
|
||||
local src_time = meta:get_float("src_time") or 0
|
||||
local fuel_totaltime = meta:get_float("fuel_totaltime") or 0
|
||||
|
||||
local inv = meta:get_inventory()
|
||||
local srclist, fuellist
|
||||
|
||||
local cookable, cooked
|
||||
local fuel
|
||||
|
||||
local update = true
|
||||
while update do
|
||||
update = false
|
||||
|
||||
srclist = inv:get_list("src")
|
||||
fuellist = inv:get_list("fuel")
|
||||
|
||||
--
|
||||
-- Cooking
|
||||
--
|
||||
|
||||
-- Check if we have cookable content
|
||||
local aftercooked
|
||||
cooked, aftercooked = minetest.get_craft_result({method = "cooking", width = 1, items = srclist})
|
||||
cookable = cooked.time ~= 0
|
||||
|
||||
-- Check if we have enough fuel to burn
|
||||
if fuel_time < fuel_totaltime then
|
||||
-- The furnace is currently active and has enough fuel
|
||||
fuel_time = fuel_time + elapsed
|
||||
-- If there is a cookable item then check if it is ready yet
|
||||
if cookable then
|
||||
src_time = src_time + elapsed
|
||||
if src_time >= cooked.time then
|
||||
-- Place result in dst list if possible
|
||||
if inv:room_for_item("dst", cooked.item) then
|
||||
inv:add_item("dst", cooked.item)
|
||||
inv:set_stack("src", 1, aftercooked.items[1])
|
||||
src_time = src_time - cooked.time
|
||||
update = true
|
||||
end
|
||||
end
|
||||
end
|
||||
else
|
||||
-- Furnace ran out of fuel
|
||||
if cookable then
|
||||
-- We need to get new fuel
|
||||
local afterfuel
|
||||
fuel, afterfuel = minetest.get_craft_result({method = "fuel", width = 1, items = fuellist})
|
||||
|
||||
if fuel.time == 0 then
|
||||
-- No valid fuel in fuel list
|
||||
fuel_totaltime = 0
|
||||
src_time = 0
|
||||
else
|
||||
-- Take fuel from fuel list
|
||||
inv:set_stack("fuel", 1, afterfuel.items[1])
|
||||
update = true
|
||||
fuel_totaltime = fuel.time + (fuel_time - fuel_totaltime)
|
||||
src_time = src_time + elapsed
|
||||
end
|
||||
else
|
||||
-- We don't need to get new fuel since there is no cookable item
|
||||
fuel_totaltime = 0
|
||||
src_time = 0
|
||||
end
|
||||
fuel_time = 0
|
||||
end
|
||||
|
||||
elapsed = 0
|
||||
end
|
||||
|
||||
if fuel and fuel_totaltime > fuel.time then
|
||||
fuel_totaltime = fuel.time
|
||||
end
|
||||
if srclist[1]:is_empty() then
|
||||
src_time = 0
|
||||
end
|
||||
|
||||
--
|
||||
-- Update formspec, infotext and node
|
||||
--
|
||||
local formspec = inactive_formspec(pos, meta)
|
||||
local item_state
|
||||
local item_percent = 0
|
||||
if cookable then
|
||||
item_percent = math.floor(src_time / cooked.time * 100)
|
||||
if item_percent > 100 then
|
||||
item_state = "100% (output full)"
|
||||
else
|
||||
item_state = item_percent .. "%"
|
||||
end
|
||||
else
|
||||
if srclist[1]:is_empty() then
|
||||
item_state = "Empty"
|
||||
else
|
||||
item_state = "Not cookable"
|
||||
end
|
||||
end
|
||||
|
||||
local fuel_state = "Empty"
|
||||
local active = "inactive "
|
||||
local result = false
|
||||
|
||||
if fuel_totaltime ~= 0 then
|
||||
active = "active "
|
||||
local fuel_percent = math.floor(fuel_time / fuel_totaltime * 100)
|
||||
fuel_state = fuel_percent .. "%"
|
||||
formspec = active_formspec(fuel_percent, item_percent, pos, meta)
|
||||
swap_node(pos, "default:furnace_active")
|
||||
-- make sure timer restarts automatically
|
||||
result = true
|
||||
else
|
||||
if not fuellist[1]:is_empty() then
|
||||
fuel_state = "0%"
|
||||
end
|
||||
swap_node(pos, "default:furnace")
|
||||
-- stop timer on the inactive furnace
|
||||
minetest.get_node_timer(pos):stop()
|
||||
end
|
||||
|
||||
local infotext = "Furnace " .. active .. "(Item: " .. item_state .. "; Fuel: " .. fuel_state .. ")"
|
||||
|
||||
--
|
||||
-- Set meta values
|
||||
--
|
||||
meta:set_float("fuel_totaltime", fuel_totaltime)
|
||||
meta:set_float("fuel_time", fuel_time)
|
||||
meta:set_float("src_time", src_time)
|
||||
meta:set_string("formspec", formspec)
|
||||
meta:set_string("infotext", infotext)
|
||||
|
||||
return result
|
||||
end
|
||||
|
||||
--
|
||||
-- Node definitions
|
||||
--
|
||||
|
||||
minetest.register_node(":default:furnace", {
|
||||
description = "Furnace",
|
||||
tiles = {
|
||||
"default_furnace_top.png"..tube_entry,
|
||||
"default_furnace_bottom.png"..tube_entry,
|
||||
"default_furnace_side.png"..tube_entry,
|
||||
"default_furnace_side.png"..tube_entry,
|
||||
"default_furnace_side.png"..tube_entry,
|
||||
"default_furnace_front.png"
|
||||
},
|
||||
groups = {cracky = 2, tubedevice = 1, tubedevice_receiver = 1},
|
||||
tube = {
|
||||
insert_object = function(pos, node, stack, direction)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
local timer = minetest.get_node_timer(pos)
|
||||
if not timer:is_started() then
|
||||
timer:start(1.0)
|
||||
end
|
||||
if direction.y == 1 then
|
||||
return inv:add_item("fuel", stack)
|
||||
else
|
||||
return inv:add_item("src", stack)
|
||||
end
|
||||
end,
|
||||
can_insert = function(pos,node,stack,direction)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
if direction.y == 1 then
|
||||
return inv:room_for_item("fuel", stack)
|
||||
else
|
||||
if meta:get_int("split_material_stacks") == 1 then
|
||||
stack = stack:peek_item(1)
|
||||
end
|
||||
return inv:room_for_item("src", stack)
|
||||
end
|
||||
end,
|
||||
input_inventory = "dst",
|
||||
connect_sides = {left = 1, right = 1, back = 1, front = 1, bottom = 1, top = 1}
|
||||
},
|
||||
paramtype2 = "facedir",
|
||||
legacy_facedir_simple = true,
|
||||
is_ground_content = false,
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
|
||||
can_dig = can_dig,
|
||||
|
||||
on_timer = furnace_node_timer,
|
||||
|
||||
on_construct = function(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string("formspec", inactive_formspec(pos, meta))
|
||||
local inv = meta:get_inventory()
|
||||
inv:set_size('src', 1)
|
||||
inv:set_size('fuel', 1)
|
||||
inv:set_size('dst', 4)
|
||||
end,
|
||||
|
||||
on_metadata_inventory_move = function(pos)
|
||||
minetest.get_node_timer(pos):start(1.0)
|
||||
end,
|
||||
on_metadata_inventory_put = function(pos)
|
||||
-- start timer function, it will sort out whether furnace can burn or not.
|
||||
minetest.get_node_timer(pos):start(1.0)
|
||||
end,
|
||||
on_blast = function(pos)
|
||||
local drops = {}
|
||||
default.get_inventory_drops(pos, "src", drops)
|
||||
default.get_inventory_drops(pos, "fuel", drops)
|
||||
default.get_inventory_drops(pos, "dst", drops)
|
||||
drops[#drops+1] = "default:furnace"
|
||||
minetest.remove_node(pos)
|
||||
return drops
|
||||
end,
|
||||
allow_metadata_inventory_put = allow_metadata_inventory_put,
|
||||
allow_metadata_inventory_move = allow_metadata_inventory_move,
|
||||
allow_metadata_inventory_take = allow_metadata_inventory_take,
|
||||
on_receive_fields = function(pos, formname, fields, sender)
|
||||
if not pipeworks.may_configure(pos, sender) then return end
|
||||
fs_helpers.on_receive_fields(pos, fields)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local formspec = inactive_formspec(pos, meta)
|
||||
meta:set_string("formspec", formspec)
|
||||
end,
|
||||
after_place_node = pipeworks.after_place,
|
||||
after_dig_node = pipeworks.after_dig
|
||||
})
|
||||
|
||||
minetest.register_node(":default:furnace_active", {
|
||||
description = "Furnace",
|
||||
tiles = {
|
||||
"default_furnace_top.png"..tube_entry,
|
||||
"default_furnace_bottom.png"..tube_entry,
|
||||
"default_furnace_side.png"..tube_entry,
|
||||
"default_furnace_side.png"..tube_entry,
|
||||
"default_furnace_side.png"..tube_entry,
|
||||
{
|
||||
image = "default_furnace_front_active.png",
|
||||
backface_culling = false,
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
aspect_w = 16,
|
||||
aspect_h = 16,
|
||||
length = 1.5
|
||||
},
|
||||
}
|
||||
},
|
||||
groups = {cracky = 2, tubedevice = 1, tubedevice_receiver = 1, not_in_creative_inventory = 1},
|
||||
tube = {
|
||||
insert_object = function(pos,node,stack,direction)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
local timer = minetest.get_node_timer(pos)
|
||||
if not timer:is_started() then
|
||||
timer:start(1.0)
|
||||
end
|
||||
if direction.y == 1 then
|
||||
return inv:add_item("fuel", stack)
|
||||
else
|
||||
return inv:add_item("src", stack)
|
||||
end
|
||||
end,
|
||||
can_insert = function(pos, node, stack, direction)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
if direction.y == 1 then
|
||||
return inv:room_for_item("fuel", stack)
|
||||
else
|
||||
if meta:get_int("split_material_stacks") == 1 then
|
||||
stack = stack:peek_item(1)
|
||||
end
|
||||
return inv:room_for_item("src", stack)
|
||||
end
|
||||
end,
|
||||
input_inventory = "dst",
|
||||
connect_sides = {left = 1, right = 1, back = 1, front = 1, bottom = 1, top = 1}
|
||||
},
|
||||
paramtype2 = "facedir",
|
||||
light_source = 8,
|
||||
drop = "default:furnace",
|
||||
legacy_facedir_simple = true,
|
||||
is_ground_content = false,
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
on_timer = furnace_node_timer,
|
||||
|
||||
can_dig = can_dig,
|
||||
|
||||
allow_metadata_inventory_put = allow_metadata_inventory_put,
|
||||
allow_metadata_inventory_move = allow_metadata_inventory_move,
|
||||
allow_metadata_inventory_take = allow_metadata_inventory_take,
|
||||
on_receive_fields = function(pos, formname, fields, sender)
|
||||
if not pipeworks.may_configure(pos, sender) then return end
|
||||
fs_helpers.on_receive_fields(pos, fields)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local formspec = active_formspec(0, 0, pos, meta)
|
||||
meta:set_string("formspec", formspec)
|
||||
end,
|
||||
after_place_node = pipeworks.after_place,
|
||||
after_dig_node = pipeworks.after_dig
|
||||
})
|
||||
|
@ -1,153 +0,0 @@
|
||||
-- this bit of code modifies the default chests and furnaces to be compatible
|
||||
-- with pipeworks.
|
||||
|
||||
minetest.override_item("default:furnace", {
|
||||
tiles = {
|
||||
"default_furnace_top.png^pipeworks_tube_connection_stony.png",
|
||||
"default_furnace_bottom.png^pipeworks_tube_connection_stony.png",
|
||||
"default_furnace_side.png^pipeworks_tube_connection_stony.png",
|
||||
"default_furnace_side.png^pipeworks_tube_connection_stony.png",
|
||||
"default_furnace_side.png^pipeworks_tube_connection_stony.png",
|
||||
"default_furnace_front.png"
|
||||
},
|
||||
groups = {cracky = 2, tubedevice = 1, tubedevice_receiver = 1},
|
||||
tube = {
|
||||
insert_object = function(pos, node, stack, direction)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
local timer = minetest.get_node_timer(pos)
|
||||
if not timer:is_started() then
|
||||
timer:start(1.0)
|
||||
end
|
||||
if direction.y == 1 then
|
||||
return inv:add_item("fuel",stack)
|
||||
else
|
||||
return inv:add_item("src",stack)
|
||||
end
|
||||
end,
|
||||
can_insert = function(pos,node,stack,direction)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
if direction.y == 1 then
|
||||
return inv:room_for_item("fuel", stack)
|
||||
else
|
||||
return inv:room_for_item("src", stack)
|
||||
end
|
||||
end,
|
||||
input_inventory = "dst",
|
||||
connect_sides = {left = 1, right = 1, back = 1, front = 1, bottom = 1, top = 1}
|
||||
},
|
||||
after_place_node = pipeworks.after_place,
|
||||
after_dig_node = pipeworks.after_dig
|
||||
})
|
||||
|
||||
minetest.override_item("default:furnace_active", {
|
||||
tiles = {
|
||||
"default_furnace_top.png^pipeworks_tube_connection_stony.png",
|
||||
"default_furnace_bottom.png^pipeworks_tube_connection_stony.png",
|
||||
"default_furnace_side.png^pipeworks_tube_connection_stony.png",
|
||||
"default_furnace_side.png^pipeworks_tube_connection_stony.png",
|
||||
"default_furnace_side.png^pipeworks_tube_connection_stony.png",
|
||||
{
|
||||
image = "default_furnace_front_active.png",
|
||||
backface_culling = false,
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
aspect_w = 16,
|
||||
aspect_h = 16,
|
||||
length = 1.5
|
||||
},
|
||||
}
|
||||
},
|
||||
groups = {cracky = 2, tubedevice = 1, tubedevice_receiver = 1, not_in_creative_inventory = 1},
|
||||
tube = {
|
||||
insert_object = function(pos,node,stack,direction)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
local timer = minetest.get_node_timer(pos)
|
||||
if not timer:is_started() then
|
||||
timer:start(1.0)
|
||||
end
|
||||
if direction.y == 1 then
|
||||
return inv:add_item("fuel", stack)
|
||||
else
|
||||
return inv:add_item("src", stack)
|
||||
end
|
||||
end,
|
||||
can_insert = function(pos, node, stack, direction)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
if direction.y == 1 then
|
||||
return inv:room_for_item("fuel", stack)
|
||||
else
|
||||
return inv:room_for_item("src", stack)
|
||||
end
|
||||
end,
|
||||
input_inventory = "dst",
|
||||
connect_sides = {left = 1, right = 1, back = 1, front = 1, bottom = 1, top = 1}
|
||||
},
|
||||
after_place_node = pipeworks.after_place,
|
||||
after_dig_node = pipeworks.after_dig
|
||||
})
|
||||
|
||||
minetest.override_item("default:chest", {
|
||||
tiles = {
|
||||
"default_chest_top.png^pipeworks_tube_connection_wooden.png",
|
||||
"default_chest_top.png^pipeworks_tube_connection_wooden.png",
|
||||
"default_chest_side.png^pipeworks_tube_connection_wooden.png",
|
||||
"default_chest_side.png^pipeworks_tube_connection_wooden.png",
|
||||
"default_chest_side.png^pipeworks_tube_connection_wooden.png",
|
||||
"default_chest_front.png"
|
||||
},
|
||||
groups = {choppy = 2, oddly_breakable_by_hand = 2, tubedevice = 1, tubedevice_receiver = 1},
|
||||
tube = {
|
||||
insert_object = function(pos, node, stack, direction)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
return inv:add_item("main", stack)
|
||||
end,
|
||||
can_insert = function(pos, node, stack, direction)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
return inv:room_for_item("main", stack)
|
||||
end,
|
||||
input_inventory = "main",
|
||||
connect_sides = {left = 1, right = 1, back = 1, front = 1, bottom = 1, top = 1}
|
||||
},
|
||||
after_place_node = pipeworks.after_place,
|
||||
after_dig_node = pipeworks.after_dig
|
||||
})
|
||||
|
||||
minetest.override_item("default:chest_locked", {
|
||||
tiles = {
|
||||
"default_chest_top.png^pipeworks_tube_connection_wooden.png",
|
||||
"default_chest_top.png^pipeworks_tube_connection_wooden.png",
|
||||
"default_chest_side.png^pipeworks_tube_connection_wooden.png",
|
||||
"default_chest_side.png^pipeworks_tube_connection_wooden.png",
|
||||
"default_chest_side.png^pipeworks_tube_connection_wooden.png",
|
||||
"default_chest_lock.png"
|
||||
},
|
||||
groups = {choppy = 2, oddly_breakable_by_hand = 2, tubedevice = 1, tubedevice_receiver = 1},
|
||||
tube = {
|
||||
insert_object = function(pos, node, stack, direction)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
return inv:add_item("main", stack)
|
||||
end,
|
||||
can_insert = function(pos, node, stack, direction)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
return inv:room_for_item("main", stack)
|
||||
end,
|
||||
connect_sides = {left = 1, right = 1, back = 1, front = 1, bottom = 1, top = 1}
|
||||
},
|
||||
after_place_node = function (pos, placer)
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string("owner", placer:get_player_name() or "")
|
||||
meta:set_string("infotext", "Locked Chest (owned by "..
|
||||
meta:get_string("owner")..")")
|
||||
pipeworks.after_place(pos)
|
||||
end,
|
||||
after_dig_node = pipeworks.after_dig
|
||||
})
|
||||
|
40
mods/pipeworks/default_settings.lua
Normal file
@ -0,0 +1,40 @@
|
||||
-- Various settings
|
||||
|
||||
local prefix = "pipeworks_"
|
||||
|
||||
local settings = {
|
||||
enable_pipes = true,
|
||||
enable_autocrafter = true,
|
||||
enable_deployer = true,
|
||||
enable_dispenser = true,
|
||||
enable_node_breaker = true,
|
||||
enable_teleport_tube = true,
|
||||
enable_pipe_devices = true,
|
||||
enable_redefines = true,
|
||||
enable_mese_tube = true,
|
||||
enable_detector_tube = true,
|
||||
enable_digiline_detector_tube = true,
|
||||
enable_conductor_tube = true,
|
||||
enable_accelerator_tube = true,
|
||||
enable_crossing_tube = true,
|
||||
enable_sand_tube = true,
|
||||
enable_mese_sand_tube = true,
|
||||
enable_one_way_tube = true,
|
||||
enable_priority_tube = true,
|
||||
enable_cyclic_mode = true,
|
||||
drop_on_routing_fail = false,
|
||||
|
||||
delete_item_on_clearobject = true,
|
||||
}
|
||||
|
||||
for name, value in pairs(settings) do
|
||||
local setting_type = type(value)
|
||||
if setting_type == "boolean" then
|
||||
pipeworks[name] = minetest.setting_getbool(prefix..name)
|
||||
if pipeworks[name] == nil then
|
||||
pipeworks[name] = value
|
||||
end
|
||||
else
|
||||
pipeworks[name] = value
|
||||
end
|
||||
end
|
@ -1,23 +0,0 @@
|
||||
-- Various settings
|
||||
|
||||
pipeworks.enable_pipes = true
|
||||
pipeworks.enable_autocrafter = true
|
||||
pipeworks.enable_deployer = true
|
||||
pipeworks.enable_dispenser = true
|
||||
pipeworks.enable_node_breaker = true
|
||||
pipeworks.enable_teleport_tube = true
|
||||
pipeworks.enable_pipe_devices = true
|
||||
pipeworks.enable_redefines = true
|
||||
pipeworks.enable_mese_tube = true
|
||||
pipeworks.enable_detector_tube = true
|
||||
pipeworks.enable_digiline_detector_tube = true
|
||||
pipeworks.enable_conductor_tube = true
|
||||
pipeworks.enable_accelerator_tube = true
|
||||
pipeworks.enable_crossing_tube = true
|
||||
pipeworks.enable_sand_tube = true
|
||||
pipeworks.enable_mese_sand_tube = true
|
||||
pipeworks.enable_one_way_tube = true
|
||||
pipeworks.enable_priority_tube = true
|
||||
pipeworks.enable_cyclic_mode = true
|
||||
|
||||
pipeworks.delete_item_on_clearobject = true
|
@ -1 +1 @@
|
||||
This mod uses nodeboxes to supply a complete set of 3D pipes and tubes, along devices that work with them.
|
||||
This mod uses mesh nodes and nodeboxes to supply a complete set of 3D pipes and tubes, along with devices that work with them.
|
||||
|
@ -1,3 +1,84 @@
|
||||
|
||||
-- rotation handlers
|
||||
|
||||
function pipeworks.fix_after_rotation(pos, node, user, mode, new_param2)
|
||||
|
||||
if string.find(node.name, "spigot") then new_param2 = new_param2 % 4 end
|
||||
|
||||
newnode = string.gsub(node.name, "_on", "_off")
|
||||
minetest.swap_node(pos, { name = newnode, param2 = new_param2 })
|
||||
pipeworks.scan_for_pipe_objects(pos)
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
function pipeworks.rotate_on_place(itemstack, placer, pointed_thing)
|
||||
|
||||
local playername = placer:get_player_name()
|
||||
if not minetest.is_protected(pointed_thing.under, playername)
|
||||
and not minetest.is_protected(pointed_thing.above, playername) then
|
||||
|
||||
local node = minetest.get_node(pointed_thing.under)
|
||||
|
||||
if (not placer:get_player_control().sneak)
|
||||
and minetest.registered_nodes[node.name]
|
||||
and minetest.registered_nodes[node.name].on_rightclick then
|
||||
minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, placer, itemstack)
|
||||
else
|
||||
|
||||
local pitch = placer:get_look_pitch()
|
||||
local above = pointed_thing.above
|
||||
local under = pointed_thing.under
|
||||
local fdir = minetest.dir_to_facedir(placer:get_look_dir())
|
||||
local undernode = minetest.get_node(under)
|
||||
local abovenode = minetest.get_node(above)
|
||||
local uname = undernode.name
|
||||
local aname = abovenode.name
|
||||
local isabove = (above.x == under.x) and (above.z == under.z) and (pitch > 0)
|
||||
local pos1 = above
|
||||
|
||||
-- check if the object should be turned vertically
|
||||
if above.x == under.x
|
||||
and above.z == under.z
|
||||
and (
|
||||
string.find(uname, "pipeworks:pipe_")
|
||||
or string.find(uname, "pipeworks:storage_")
|
||||
or string.find(uname, "pipeworks:expansion_")
|
||||
or ( string.find(uname, "pipeworks:grating") and not isabove )
|
||||
or ( string.find(uname, "pipeworks:pump_") and not isabove )
|
||||
|
||||
or (
|
||||
( string.find(uname, "pipeworks:valve")
|
||||
or string.find(uname, "pipeworks:entry_panel")
|
||||
or string.find(uname, "pipeworks:flow_sensor") )
|
||||
and minetest.facedir_to_dir(undernode.param2).y ~= 0 )
|
||||
)
|
||||
then
|
||||
fdir = 17
|
||||
end
|
||||
|
||||
if minetest.registered_nodes[uname]
|
||||
and minetest.registered_nodes[uname]["buildable_to"] then
|
||||
pos1 = under
|
||||
end
|
||||
|
||||
if minetest.registered_nodes[minetest.get_node(pos1).name]
|
||||
and not minetest.registered_nodes[minetest.get_node(pos1).name]["buildable_to"] then return end
|
||||
|
||||
local placednode = string.gsub(itemstack:get_name(), "_loaded", "_empty")
|
||||
placednode = string.gsub(placednode, "_on", "_off")
|
||||
|
||||
minetest.add_node(pos1, {name = placednode, param2 = fdir })
|
||||
pipeworks.scan_for_pipe_objects(pos1)
|
||||
|
||||
if not pipeworks.expect_infinite_stacks then
|
||||
itemstack:take_item()
|
||||
end
|
||||
end
|
||||
end
|
||||
return itemstack
|
||||
end
|
||||
|
||||
-- List of devices that should participate in the autoplace algorithm
|
||||
|
||||
local pipereceptor_on = nil
|
||||
@ -58,6 +139,7 @@ for s in ipairs(states) do
|
||||
groups = dgroups,
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
walkable = true,
|
||||
pipe_connections = { top = 1 },
|
||||
after_place_node = function(pos)
|
||||
pipeworks.scan_for_pipe_objects(pos)
|
||||
end,
|
||||
@ -73,10 +155,11 @@ for s in ipairs(states) do
|
||||
minetest.add_node(pos,{name="pipeworks:pump_off", param2 = node.param2})
|
||||
end
|
||||
}},
|
||||
on_punch = function(pos, node, puncher)
|
||||
local fdir = minetest.get_node(pos).param2
|
||||
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
|
||||
local fdir = node.param2
|
||||
minetest.add_node(pos, { name = "pipeworks:pump_"..states[3-s], param2 = fdir })
|
||||
end
|
||||
end,
|
||||
on_rotate = screwdriver.rotate_simple
|
||||
})
|
||||
|
||||
minetest.register_node("pipeworks:valve_"..states[s].."_empty", {
|
||||
@ -89,22 +172,20 @@ for s in ipairs(states) do
|
||||
paramtype2 = "facedir",
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = { -8/16, -4/16, -5/16, 8/16, 5/16, 5/16 }
|
||||
fixed = { -5/16, -4/16, -8/16, 5/16, 5/16, 8/16 }
|
||||
},
|
||||
collision_box = {
|
||||
type = "fixed",
|
||||
fixed = { -8/16, -4/16, -5/16, 8/16, 5/16, 5/16 }
|
||||
fixed = { -5/16, -4/16, -8/16, 5/16, 5/16, 8/16 }
|
||||
},
|
||||
groups = dgroups,
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
walkable = true,
|
||||
after_place_node = function(pos)
|
||||
pipeworks.scan_for_pipe_objects(pos)
|
||||
end,
|
||||
on_place = pipeworks.rotate_on_place,
|
||||
after_dig_node = function(pos)
|
||||
pipeworks.scan_for_pipe_objects(pos)
|
||||
end,
|
||||
drop = "pipeworks:valve_off_empty",
|
||||
drop = "pipeworks:valve_off_empty",
|
||||
mesecons = {effector = {
|
||||
action_on = function (pos, node)
|
||||
minetest.add_node(pos,{name="pipeworks:valve_on_empty", param2 = node.param2})
|
||||
@ -113,10 +194,11 @@ for s in ipairs(states) do
|
||||
minetest.add_node(pos,{name="pipeworks:valve_off_empty", param2 = node.param2})
|
||||
end
|
||||
}},
|
||||
on_punch = function(pos, node, puncher)
|
||||
local fdir = minetest.get_node(pos).param2
|
||||
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
|
||||
local fdir = node.param2
|
||||
minetest.add_node(pos, { name = "pipeworks:valve_"..states[3-s].."_empty", param2 = fdir })
|
||||
end
|
||||
end,
|
||||
on_rotate = pipeworks.fix_after_rotation
|
||||
})
|
||||
end
|
||||
|
||||
@ -130,18 +212,16 @@ minetest.register_node("pipeworks:valve_on_loaded", {
|
||||
paramtype2 = "facedir",
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = { -8/16, -4/16, -5/16, 8/16, 5/16, 5/16 }
|
||||
fixed = { -5/16, -4/16, -8/16, 5/16, 5/16, 8/16 }
|
||||
},
|
||||
collision_box = {
|
||||
type = "fixed",
|
||||
fixed = { -8/16, -4/16, -5/16, 8/16, 5/16, 5/16 }
|
||||
fixed = { -5/16, -4/16, -8/16, 5/16, 5/16, 8/16 }
|
||||
},
|
||||
groups = {snappy=3, pipe=1, not_in_creative_inventory=1},
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
walkable = true,
|
||||
after_place_node = function(pos)
|
||||
pipeworks.scan_for_pipe_objects(pos)
|
||||
end,
|
||||
on_place = pipeworks.rotate_on_place,
|
||||
after_dig_node = function(pos)
|
||||
pipeworks.scan_for_pipe_objects(pos)
|
||||
end,
|
||||
@ -154,10 +234,11 @@ minetest.register_node("pipeworks:valve_on_loaded", {
|
||||
minetest.add_node(pos,{name="pipeworks:valve_off_empty", param2 = node.param2})
|
||||
end
|
||||
}},
|
||||
on_punch = function(pos, node, puncher)
|
||||
local fdir = minetest.get_node(pos).param2
|
||||
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
|
||||
local fdir = node.param2
|
||||
minetest.add_node(pos, { name = "pipeworks:valve_off_empty", param2 = fdir })
|
||||
end
|
||||
end,
|
||||
on_rotate = pipeworks.fix_after_rotation
|
||||
})
|
||||
|
||||
-- grating
|
||||
@ -172,17 +253,24 @@ minetest.register_node("pipeworks:grating", {
|
||||
"pipeworks_grating_sides.png",
|
||||
"pipeworks_grating_sides.png"
|
||||
},
|
||||
drawtype = "nodebox",
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = { -0.49, -0.49, -0.49, 0.49, 0.5, 0.49 }
|
||||
},
|
||||
sunlight_propagates = true,
|
||||
paramtype = "light",
|
||||
groups = {snappy=3, pipe=1},
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
walkable = true,
|
||||
pipe_connections = { top = 1 },
|
||||
after_place_node = function(pos)
|
||||
pipeworks.scan_for_pipe_objects(pos)
|
||||
end,
|
||||
after_dig_node = function(pos)
|
||||
pipeworks.scan_for_pipe_objects(pos)
|
||||
end,
|
||||
on_rotate = false
|
||||
})
|
||||
|
||||
-- outlet spigot
|
||||
@ -198,6 +286,8 @@ minetest.register_node("pipeworks:spigot", {
|
||||
groups = {snappy=3, pipe=1},
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
walkable = true,
|
||||
pipe_connections = { left=1, right=1, front=1, back=1,
|
||||
left_param2 = 3, right_param2 = 1, front_param2 = 2, back_param2 = 0 },
|
||||
after_place_node = function(pos)
|
||||
pipeworks.scan_for_pipe_objects(pos)
|
||||
end,
|
||||
@ -211,7 +301,8 @@ minetest.register_node("pipeworks:spigot", {
|
||||
collision_box = {
|
||||
type = "fixed",
|
||||
fixed = { -2/16, -6/16, -2/16, 2/16, 2/16, 8/16 }
|
||||
}
|
||||
},
|
||||
on_rotate = pipeworks.fix_after_rotation
|
||||
})
|
||||
|
||||
minetest.register_node("pipeworks:spigot_pouring", {
|
||||
@ -236,7 +327,10 @@ minetest.register_node("pipeworks:spigot_pouring", {
|
||||
groups = {snappy=3, pipe=1, not_in_creative_inventory=1},
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
walkable = true,
|
||||
pipe_connections = { left=1, right=1, front=1, back=1,
|
||||
left_param2 = 3, right_param2 = 1, front_param2 = 2, back_param2 = 0 },
|
||||
after_place_node = function(pos)
|
||||
minetest.set_node(pos, { name = "pipeworks:spigot", param2 = minetest.get_node(pos).param2 })
|
||||
pipeworks.scan_for_pipe_objects(pos)
|
||||
end,
|
||||
after_dig_node = function(pos)
|
||||
@ -251,6 +345,7 @@ minetest.register_node("pipeworks:spigot_pouring", {
|
||||
fixed = { -2/16, -6/16, -2/16, 2/16, 2/16, 8/16 }
|
||||
},
|
||||
drop = "pipeworks:spigot",
|
||||
on_rotate = pipeworks.fix_after_rotation
|
||||
})
|
||||
|
||||
-- sealed pipe entry/exit (horizontal pipe passing through a metal
|
||||
@ -274,66 +369,13 @@ minetest.register_node("pipeworks:entry_panel_empty", {
|
||||
groups = {snappy=3, pipe=1},
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
walkable = true,
|
||||
after_place_node = function(pos)
|
||||
pipeworks.scan_for_pipe_objects(pos)
|
||||
end,
|
||||
on_place = pipeworks.rotate_on_place,
|
||||
after_dig_node = function(pos)
|
||||
pipeworks.scan_for_pipe_objects(pos)
|
||||
end,
|
||||
selection_box = panel_cbox,
|
||||
collision_box = panel_cbox,
|
||||
on_place = function(itemstack, placer, pointed_thing)
|
||||
local playername = placer:get_player_name()
|
||||
if not minetest.is_protected(pointed_thing.under, playername)
|
||||
and not minetest.is_protected(pointed_thing.above, playername) then
|
||||
local node = minetest.get_node(pointed_thing.under)
|
||||
|
||||
if not minetest.registered_nodes[node.name]
|
||||
or not minetest.registered_nodes[node.name].on_rightclick then
|
||||
local pitch = placer:get_look_pitch()
|
||||
local above = pointed_thing.above
|
||||
local under = pointed_thing.under
|
||||
local fdir = minetest.dir_to_facedir(placer:get_look_dir())
|
||||
local undernode = minetest.get_node(under)
|
||||
local abovenode = minetest.get_node(above)
|
||||
local uname = undernode.name
|
||||
local aname = abovenode.name
|
||||
local isabove = (above.x == under.x) and (above.z == under.z) and (pitch > 0)
|
||||
local pos1 = above
|
||||
|
||||
if above.x == under.x
|
||||
and above.z == under.z
|
||||
and ( string.find(uname, "pipeworks:pipe_")
|
||||
or string.find(uname, "pipeworks:storage_")
|
||||
or string.find(uname, "pipeworks:expansion_")
|
||||
or ( string.find(uname, "pipeworks:grating") and not isabove )
|
||||
or ( string.find(uname, "pipeworks:pump_") and not isabove )
|
||||
or ( string.find(uname, "pipeworks:entry_panel")
|
||||
and undernode.param2 == 13 )
|
||||
)
|
||||
then
|
||||
fdir = 13
|
||||
end
|
||||
|
||||
if minetest.registered_nodes[uname]["buildable_to"] then
|
||||
pos1 = under
|
||||
end
|
||||
|
||||
if not minetest.registered_nodes[minetest.get_node(pos1).name]["buildable_to"] then return end
|
||||
|
||||
minetest.add_node(pos1, {name = "pipeworks:entry_panel_empty", param2 = fdir })
|
||||
pipeworks.scan_for_pipe_objects(pos1)
|
||||
|
||||
if not pipeworks.expect_infinite_stacks then
|
||||
itemstack:take_item()
|
||||
end
|
||||
|
||||
else
|
||||
minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, placer, itemstack)
|
||||
end
|
||||
end
|
||||
return itemstack
|
||||
end
|
||||
on_rotate = pipeworks.fix_after_rotation
|
||||
})
|
||||
|
||||
minetest.register_node("pipeworks:entry_panel_loaded", {
|
||||
@ -346,15 +388,14 @@ minetest.register_node("pipeworks:entry_panel_loaded", {
|
||||
groups = {snappy=3, pipe=1, not_in_creative_inventory=1},
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
walkable = true,
|
||||
after_place_node = function(pos)
|
||||
pipeworks.scan_for_pipe_objects(pos)
|
||||
end,
|
||||
on_place = pipeworks.rotate_on_place,
|
||||
after_dig_node = function(pos)
|
||||
pipeworks.scan_for_pipe_objects(pos)
|
||||
end,
|
||||
selection_box = panel_cbox,
|
||||
collision_box = panel_cbox,
|
||||
drop = "pipeworks:entry_panel_empty"
|
||||
drop = "pipeworks:entry_panel_empty",
|
||||
on_rotate = pipeworks.fix_after_rotation
|
||||
})
|
||||
|
||||
minetest.register_node("pipeworks:flow_sensor_empty", {
|
||||
@ -368,9 +409,7 @@ minetest.register_node("pipeworks:flow_sensor_empty", {
|
||||
groups = {snappy=3, pipe=1},
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
walkable = true,
|
||||
after_place_node = function(pos)
|
||||
pipeworks.scan_for_pipe_objects(pos)
|
||||
end,
|
||||
on_place = pipeworks.rotate_on_place,
|
||||
after_dig_node = function(pos)
|
||||
pipeworks.scan_for_pipe_objects(pos)
|
||||
end,
|
||||
@ -382,18 +421,19 @@ minetest.register_node("pipeworks:flow_sensor_empty", {
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{ -8/16, -2/16, -2/16, 8/16, 2/16, 2/16 },
|
||||
{ -4/16, -3/16, -3/16, 4/16, 3/16, 3/16 },
|
||||
{ -2/16, -2/16, -8/16, 2/16, 2/16, 8/16 },
|
||||
{ -3/16, -3/16, -4/16, 3/16, 3/16, 4/16 },
|
||||
}
|
||||
},
|
||||
collision_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{ -8/16, -2/16, -2/16, 8/16, 2/16, 2/16 },
|
||||
{ -4/16, -3/16, -3/16, 4/16, 3/16, 3/16 },
|
||||
{ -2/16, -2/16, -8/16, 2/16, 2/16, 8/16 },
|
||||
{ -3/16, -3/16, -4/16, 3/16, 3/16, 4/16 },
|
||||
}
|
||||
},
|
||||
mesecons = pipereceptor_off
|
||||
mesecons = pipereceptor_off,
|
||||
on_rotate = pipeworks.fix_after_rotation
|
||||
})
|
||||
|
||||
minetest.register_node("pipeworks:flow_sensor_loaded", {
|
||||
@ -407,9 +447,7 @@ minetest.register_node("pipeworks:flow_sensor_loaded", {
|
||||
groups = {snappy=3, pipe=1, not_in_creative_inventory=1},
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
walkable = true,
|
||||
after_place_node = function(pos)
|
||||
pipeworks.scan_for_pipe_objects(pos)
|
||||
end,
|
||||
on_place = pipeworks.rotate_on_place,
|
||||
after_dig_node = function(pos)
|
||||
pipeworks.scan_for_pipe_objects(pos)
|
||||
end,
|
||||
@ -421,19 +459,20 @@ minetest.register_node("pipeworks:flow_sensor_loaded", {
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{ -8/16, -2/16, -2/16, 8/16, 2/16, 2/16 },
|
||||
{ -4/16, -3/16, -3/16, 4/16, 3/16, 3/16 },
|
||||
{ -2/16, -2/16, -8/16, 2/16, 2/16, 8/16 },
|
||||
{ -3/16, -3/16, -4/16, 3/16, 3/16, 4/16 },
|
||||
}
|
||||
},
|
||||
collision_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{ -8/16, -2/16, -2/16, 8/16, 2/16, 2/16 },
|
||||
{ -4/16, -3/16, -3/16, 4/16, 3/16, 3/16 },
|
||||
{ -2/16, -2/16, -8/16, 2/16, 2/16, 8/16 },
|
||||
{ -3/16, -3/16, -4/16, 3/16, 3/16, 4/16 },
|
||||
}
|
||||
},
|
||||
drop = "pipeworks:flow_sensor_empty",
|
||||
mesecons = pipereceptor_on
|
||||
mesecons = pipereceptor_on,
|
||||
on_rotate = pipeworks.fix_after_rotation
|
||||
})
|
||||
|
||||
-- tanks
|
||||
@ -466,6 +505,7 @@ for fill = 0, 10 do
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
walkable = true,
|
||||
drop = "pipeworks:storage_tank_0",
|
||||
pipe_connections = { top = 1, bottom = 1},
|
||||
after_place_node = function(pos)
|
||||
pipeworks.look_for_stackable_tanks(pos)
|
||||
pipeworks.scan_for_pipe_objects(pos)
|
||||
@ -473,6 +513,7 @@ for fill = 0, 10 do
|
||||
after_dig_node = function(pos)
|
||||
pipeworks.scan_for_pipe_objects(pos)
|
||||
end,
|
||||
on_rotate = false
|
||||
})
|
||||
|
||||
minetest.register_node("pipeworks:storage_tank_"..fill, {
|
||||
@ -492,6 +533,7 @@ for fill = 0, 10 do
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
walkable = true,
|
||||
drop = "pipeworks:storage_tank_0",
|
||||
pipe_connections = { top = 1, bottom = 1},
|
||||
after_place_node = function(pos)
|
||||
pipeworks.look_for_stackable_tanks(pos)
|
||||
pipeworks.scan_for_pipe_objects(pos)
|
||||
@ -499,6 +541,7 @@ for fill = 0, 10 do
|
||||
after_dig_node = function(pos)
|
||||
pipeworks.scan_for_pipe_objects(pos)
|
||||
end,
|
||||
on_rotate = false
|
||||
})
|
||||
end
|
||||
|
||||
@ -514,6 +557,7 @@ minetest.register_node("pipeworks:fountainhead", {
|
||||
groups = {snappy=3, pipe=1},
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
walkable = true,
|
||||
pipe_connections = { bottom = 1 },
|
||||
after_place_node = function(pos)
|
||||
pipeworks.scan_for_pipe_objects(pos)
|
||||
end,
|
||||
@ -533,6 +577,7 @@ minetest.register_node("pipeworks:fountainhead", {
|
||||
type = "fixed",
|
||||
fixed = { -2/16, -8/16, -2/16, 2/16, 8/16, 2/16 }
|
||||
},
|
||||
on_rotate = false
|
||||
})
|
||||
|
||||
minetest.register_node("pipeworks:fountainhead_pouring", {
|
||||
@ -545,7 +590,9 @@ minetest.register_node("pipeworks:fountainhead_pouring", {
|
||||
groups = {snappy=3, pipe=1, not_in_creative_inventory=1},
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
walkable = true,
|
||||
pipe_connections = { bottom = 1 },
|
||||
after_place_node = function(pos)
|
||||
minetest.set_node(pos, { name = "pipeworks:fountainhead", param2 = minetest.get_node(pos).param2 })
|
||||
pipeworks.scan_for_pipe_objects(pos)
|
||||
end,
|
||||
after_dig_node = function(pos)
|
||||
@ -564,9 +611,28 @@ minetest.register_node("pipeworks:fountainhead_pouring", {
|
||||
type = "fixed",
|
||||
fixed = { -2/16, -8/16, -2/16, 2/16, 8/16, 2/16 }
|
||||
},
|
||||
drop = "pipeworks:fountainhead"
|
||||
drop = "pipeworks:fountainhead",
|
||||
on_rotate = false
|
||||
})
|
||||
|
||||
minetest.register_alias("pipeworks:valve_off_loaded", "pipeworks:valve_off_empty")
|
||||
minetest.register_alias("pipeworks:entry_panel", "pipeworks:entry_panel_empty")
|
||||
|
||||
minetest.register_lbm({
|
||||
name = "pipeworks:rotate_valves_flowsensors",
|
||||
label = "Flip pipeworks valves and flow sensors around X/Z",
|
||||
run_at_every_load = false,
|
||||
nodenames = {
|
||||
"pipeworks:flow_sensor_empty",
|
||||
"pipeworks:flow_sensor_loaded",
|
||||
"pipeworks:valve_off_empty",
|
||||
"pipeworks:valve_on_empty",
|
||||
"pipeworks:valve_off_loaded",
|
||||
},
|
||||
action = function(pos, node)
|
||||
local dir = minetest.facedir_to_dir(node.param2)
|
||||
local newdir = { x=dir.z, y=dir.y, z=dir.x }
|
||||
local newfdir = minetest.dir_to_facedir(newdir)
|
||||
minetest.swap_node(pos, { name = node.name, param2 = newfdir })
|
||||
end
|
||||
})
|
||||
|
@ -1,3 +1,5 @@
|
||||
local fs_helpers = pipeworks.fs_helpers
|
||||
|
||||
local function delay(x)
|
||||
return (function() return x end)
|
||||
end
|
||||
@ -45,20 +47,47 @@ local function set_filter_formspec(data, meta)
|
||||
"Sequence slots Randomly",
|
||||
"Sequence slots by Rotation"})..
|
||||
exmatch_button..
|
||||
"list[current_player;main;0,4.5;8,4;]"
|
||||
"list[current_player;main;0,4.5;8,4;]" ..
|
||||
"listring[]"
|
||||
end
|
||||
meta:set_string("formspec", formspec)
|
||||
end
|
||||
|
||||
-- todo SOON: this function has *way too many* parameters
|
||||
local function grabAndFire(data,slotseq_mode,exmatch_mode,filtmeta,frominv,frominvname,frompos,fromnode,filterfor,fromtube,fromdef,dir,fakePlayer,all)
|
||||
local function grabAndFire(data,slotseq_mode,exmatch_mode,filtmeta,frominv,frominvname,frompos,fromnode,filterfor,fromtube,fromdef,dir,fakePlayer,all,digiline)
|
||||
local sposes = {}
|
||||
for spos,stack in ipairs(frominv:get_list(frominvname)) do
|
||||
local matches
|
||||
if filterfor == "" then
|
||||
matches = stack:get_name() ~= ""
|
||||
else
|
||||
matches = stack:get_name() == filterfor.name
|
||||
local fname = filterfor.name
|
||||
local fgroup = filterfor.group
|
||||
local fwear = filterfor.wear
|
||||
local fmetadata = filterfor.metadata
|
||||
matches = (not fname -- If there's a name filter,
|
||||
or stack:get_name() == fname) -- it must match.
|
||||
|
||||
and (not fgroup -- If there's a group filter,
|
||||
or (type(fgroup) == "string" -- it must be a string
|
||||
and minetest.get_item_group( -- and it must match.
|
||||
stack:get_name(), fgroup) ~= 0))
|
||||
|
||||
and (not fwear -- If there's a wear filter:
|
||||
or (type(fwear) == "number" -- If it's a number,
|
||||
and stack:get_wear() == fwear) -- it must match.
|
||||
or (type(fwear) == "table" -- If it's a table:
|
||||
and (not fwear[1] -- If there's a lower bound,
|
||||
or (type(fwear[1]) == "number" -- it must be a number
|
||||
and fwear[1] <= stack:get_wear())) -- and it must be <= the actual wear.
|
||||
and (not fwear[2] -- If there's an upper bound
|
||||
or (type(fwear[2]) == "number" -- it must be a number
|
||||
and stack:get_wear() < fwear[2])))) -- and it must be > the actual wear.
|
||||
-- If the wear filter is of any other type, fail.
|
||||
--
|
||||
and (not fmetadata -- If there's a matadata filter,
|
||||
or (type(fmetadata) == "string" -- it must be a string
|
||||
and stack:get_metadata() == fmetadata)) -- and it must match.
|
||||
end
|
||||
if matches then table.insert(sposes, spos) end
|
||||
end
|
||||
@ -103,10 +132,11 @@ local function grabAndFire(data,slotseq_mode,exmatch_mode,filtmeta,frominv,fromi
|
||||
local count
|
||||
if all then
|
||||
count = math.min(stack:get_count(), doRemove)
|
||||
if filterfor.count and filterfor.count > 1 then
|
||||
if filterfor.count and (filterfor.count > 1 or digiline) then
|
||||
if exmatch_mode ~= 0 and filterfor.count > count then
|
||||
return false
|
||||
return false -- not enough, fail
|
||||
else
|
||||
-- limit quantity to filter amount
|
||||
count = math.min(filterfor.count, count)
|
||||
end
|
||||
end
|
||||
@ -139,14 +169,47 @@ local function punch_filter(data, filtpos, filtnode, msg)
|
||||
local fakePlayer = {
|
||||
get_player_name = delay(owner),
|
||||
is_fake_player = ":pipeworks",
|
||||
get_wielded_item = delay(ItemStack(nil))
|
||||
} -- TODO: use a mechanism as the wielder one
|
||||
local dir = minetest.facedir_to_right_dir(filtnode.param2)
|
||||
local dir = pipeworks.facedir_to_right_dir(filtnode.param2)
|
||||
local frompos = vector.subtract(filtpos, dir)
|
||||
local fromnode = minetest.get_node(frompos)
|
||||
if not fromnode then return end
|
||||
local fromdef = minetest.registered_nodes[fromnode.name]
|
||||
if not fromdef then return end
|
||||
local fromtube = fromdef.tube
|
||||
local input_special_cases = {
|
||||
["technic:mv_furnace"] = "dst",
|
||||
["technic:mv_furnace_active"] = "dst",
|
||||
["technic:mv_electric_furnace"] = "dst",
|
||||
["technic:mv_electric_furnace_active"] = "dst",
|
||||
["technic:mv_alloy_furnace"] = "dst",
|
||||
["technic:mv_alloy_furnace_active"] = "dst",
|
||||
["technic:mv_centrifuge"] = "dst",
|
||||
["technic:mv_centrifuge_active"] = "dst",
|
||||
["technic:mv_compressor"] = "dst",
|
||||
["technic:mv_compressor_active"] = "dst",
|
||||
["technic:mv_extractor"] = "dst",
|
||||
["technic:mv_extractor_active"] = "dst",
|
||||
["technic:mv_grinder"] = "dst",
|
||||
["technic:mv_grinder_active"] = "dst",
|
||||
["technic:tool_workshop"] = "src",
|
||||
}
|
||||
|
||||
-- make sure there's something appropriate to inject the item into
|
||||
local todir = pipeworks.facedir_to_right_dir(filtnode.param2)
|
||||
local topos = vector.add(filtpos, todir)
|
||||
local tonode = minetest.get_node(topos)
|
||||
local todef = minetest.registered_nodes[tonode.name]
|
||||
|
||||
if not todef
|
||||
or not (minetest.get_item_group(tonode.name, "tube") == 1
|
||||
or minetest.get_item_group(tonode.name, "tubedevice") == 1
|
||||
or minetest.get_item_group(tonode.name, "tubedevice_receiver") == 1) then
|
||||
return
|
||||
end
|
||||
|
||||
if fromtube then fromtube.input_inventory = input_special_cases[fromnode.name] or fromtube.input_inventory end
|
||||
if not (fromtube and fromtube.input_inventory) then return end
|
||||
|
||||
local slotseq_mode
|
||||
@ -154,6 +217,20 @@ local function punch_filter(data, filtpos, filtnode, msg)
|
||||
|
||||
local filters = {}
|
||||
if data.digiline then
|
||||
local function add_filter(name, group, count, wear, metadata)
|
||||
table.insert(filters, {name = name, group = group, count = count, wear = wear, metadata = metadata})
|
||||
end
|
||||
|
||||
local function add_itemstring_filter(filter)
|
||||
local filterstack = ItemStack(filter)
|
||||
local filtername = filterstack:get_name()
|
||||
local filtercount = filterstack:get_count()
|
||||
local filterwear = string.match(filter, "%S*:%S*%s%d%s(%d)") and filterstack:get_wear()
|
||||
local filtermetadata = string.match(filter, "%S*:%S*%s%d%s%d(%s.*)") and filterstack:get_metadata()
|
||||
|
||||
add_filter(filtername, nil, filtercount, filterwear, filtermetadata)
|
||||
end
|
||||
|
||||
local t_msg = type(msg)
|
||||
if t_msg == "table" then
|
||||
local slotseq = msg.slotseq
|
||||
@ -205,28 +282,22 @@ local function punch_filter(data, filtpos, filtnode, msg)
|
||||
return
|
||||
end
|
||||
|
||||
if type(msg.name) == "string" then
|
||||
table.insert(filters, {name = msg.name, count = tonumber(msg.count) or 1})
|
||||
if msg.name or msg.group or msg.count or msg.wear or msg.metadata then
|
||||
add_filter(msg.name, msg.group, msg.count, msg.wear, msg.metadata)
|
||||
else
|
||||
for _, filter in ipairs(msg) do
|
||||
local t_filter = type(filter)
|
||||
if t_filter == "table" then
|
||||
if type(filter.name) == "string" then
|
||||
table.insert(filters, {name = filter.name, count = tonumber(filter.count) or 1})
|
||||
if filter.name or filter.group or filter.count or filter.wear or filter.metadata then
|
||||
add_filter(filter.name, filter.group, filter.count, filter.wear, filter.metadata)
|
||||
end
|
||||
elseif t_filter == "string" then
|
||||
local filterstack = ItemStack(filter)
|
||||
local filtername = filterstack:get_name()
|
||||
local filtercount = filterstack:get_count()
|
||||
if filtername ~= "" then table.insert(filters, {name = filtername, count = filtercount}) end
|
||||
add_itemstring_filter(filter)
|
||||
end
|
||||
end
|
||||
end
|
||||
elseif t_msg == "string" then
|
||||
local filterstack = ItemStack(msg)
|
||||
local filtername = filterstack:get_name()
|
||||
local filtercount = filterstack:get_count()
|
||||
if filtername ~= "" then table.insert(filters, {name = filtername, count = filtercount}) end
|
||||
add_itemstring_filter(msg)
|
||||
end
|
||||
else
|
||||
for _, filterstack in ipairs(filtinv:get_list("main")) do
|
||||
@ -251,7 +322,7 @@ local function punch_filter(data, filtpos, filtnode, msg)
|
||||
for _, frominvname in ipairs(type(fromtube.input_inventory) == "table" and fromtube.input_inventory or {fromtube.input_inventory}) do
|
||||
local done = false
|
||||
for _, filterfor in ipairs(filters) do
|
||||
if grabAndFire(data, slotseq_mode, exact_match, filtmeta, frominv, frominvname, frompos, fromnode, filterfor, fromtube, fromdef, dir, fakePlayer, data.stackwise) then
|
||||
if grabAndFire(data, slotseq_mode, exact_match, filtmeta, frominv, frominvname, frompos, fromnode, filterfor, fromtube, fromdef, dir, fakePlayer, data.stackwise, data.digiline) then
|
||||
done = true
|
||||
break
|
||||
end
|
||||
|
@ -31,19 +31,32 @@ pipeworks.check_for_inflows = function(pos,node)
|
||||
{x=pos.x-1,y=pos.y,z=pos.z},
|
||||
{x=pos.x+1,y=pos.y,z=pos.z},
|
||||
{x=pos.x,y=pos.y,z=pos.z-1},
|
||||
{x=pos.x,y=pos.y,z=pos.z+1}, }
|
||||
{x=pos.x,y=pos.y,z=pos.z+1},
|
||||
}
|
||||
local newnode = false
|
||||
local source = false
|
||||
for i =1,6 do
|
||||
for i = 1, 6 do
|
||||
if newnode then break end
|
||||
local name = minetest.get_node(coords[i]).name
|
||||
local testnode = minetest.get_node(coords[i])
|
||||
local name = testnode.name
|
||||
if name and (name == "pipeworks:pump_on" and pipeworks.check_for_liquids(coords[i])) or string.find(name,"_loaded") then
|
||||
if string.find(name,"_loaded") then
|
||||
source = minetest.get_meta(coords[i]):get_string("source")
|
||||
if source == minetest.pos_to_string(pos) then break end
|
||||
end
|
||||
newnode = string.gsub(node.name,"empty","loaded")
|
||||
source = {x=coords[i].x,y=coords[i].y,z=coords[i].z}
|
||||
if string.find(name, "valve") or string.find(name, "sensor") then
|
||||
|
||||
if ((i == 3 or i == 4) and minetest.facedir_to_dir(testnode.param2).x ~= 0)
|
||||
or ((i == 5 or i == 6) and minetest.facedir_to_dir(testnode.param2).z ~= 0)
|
||||
or ((i == 1 or i == 2) and minetest.facedir_to_dir(testnode.param2).y ~= 0) then
|
||||
|
||||
newnode = string.gsub(node.name,"empty","loaded")
|
||||
source = {x=coords[i].x,y=coords[i].y,z=coords[i].z}
|
||||
end
|
||||
else
|
||||
newnode = string.gsub(node.name,"empty","loaded")
|
||||
source = {x=coords[i].x,y=coords[i].y,z=coords[i].z}
|
||||
end
|
||||
end
|
||||
end
|
||||
if newnode then
|
||||
|
@ -13,7 +13,7 @@ local DEBUG = false
|
||||
pipeworks.worldpath = minetest.get_worldpath()
|
||||
pipeworks.modpath = minetest.get_modpath("pipeworks")
|
||||
|
||||
dofile(pipeworks.modpath.."/default_settings.txt")
|
||||
dofile(pipeworks.modpath.."/default_settings.lua")
|
||||
|
||||
-- Read the external config file if it exists.
|
||||
local worldsettingspath = pipeworks.worldpath.."/pipeworks_settings.txt"
|
||||
@ -41,6 +41,11 @@ pipeworks.mesecons_rules={{x=0,y=0,z=1},{x=0,y=0,z=-1},{x=1,y=0,z=0},{x=-1,y=0,z
|
||||
|
||||
pipeworks.liquid_texture = "default_water.png"
|
||||
|
||||
pipeworks.button_off = {text="", texture="pipeworks_button_off.png", addopts="false;false;pipeworks_button_interm.png"}
|
||||
pipeworks.button_on = {text="", texture="pipeworks_button_on.png", addopts="false;false;pipeworks_button_interm.png"}
|
||||
pipeworks.button_base = "image_button[0,4.3;1,0.6"
|
||||
pipeworks.button_label = "label[0.9,4.31;Allow splitting incoming stacks from tubes]"
|
||||
|
||||
-- Helper functions
|
||||
|
||||
function pipeworks.fix_image_names(table, replacement)
|
||||
@ -94,6 +99,7 @@ dofile(pipeworks.modpath.."/autoplace_tubes.lua")
|
||||
dofile(pipeworks.modpath.."/luaentity.lua")
|
||||
dofile(pipeworks.modpath.."/item_transport.lua")
|
||||
dofile(pipeworks.modpath.."/flowing_logic.lua")
|
||||
dofile(pipeworks.modpath.."/crafts.lua")
|
||||
dofile(pipeworks.modpath.."/tube_registration.lua")
|
||||
dofile(pipeworks.modpath.."/routing_tubes.lua")
|
||||
dofile(pipeworks.modpath.."/sorting_tubes.lua")
|
||||
@ -107,11 +113,12 @@ dofile(pipeworks.modpath.."/wielder.lua")
|
||||
if pipeworks.enable_pipes then dofile(pipeworks.modpath.."/pipes.lua") end
|
||||
if pipeworks.enable_teleport_tube then dofile(pipeworks.modpath.."/teleport_tube.lua") end
|
||||
if pipeworks.enable_pipe_devices then dofile(pipeworks.modpath.."/devices.lua") end
|
||||
if pipeworks.enable_redefines then dofile(pipeworks.modpath.."/compat.lua") end
|
||||
if pipeworks.enable_redefines then
|
||||
dofile(pipeworks.modpath.."/compat-chests.lua")
|
||||
dofile(pipeworks.modpath.."/compat-furnaces.lua")
|
||||
end
|
||||
if pipeworks.enable_autocrafter then dofile(pipeworks.modpath.."/autocrafter.lua") end
|
||||
|
||||
dofile(pipeworks.modpath.."/crafts.lua")
|
||||
|
||||
minetest.register_alias("pipeworks:pipe", "pipeworks:pipe_110000_empty")
|
||||
|
||||
print("Pipeworks loaded!")
|
||||
|
@ -1,3 +1,8 @@
|
||||
local luaentity = pipeworks.luaentity
|
||||
local enable_max_limit = minetest.setting_get("pipeworks_enable_items_per_tube_limit")
|
||||
local max_tube_limit = tonumber(minetest.setting_get("pipeworks_max_items_per_tube")) or 30
|
||||
if enable_max_limit == nil then enable_max_limit = true end
|
||||
|
||||
function pipeworks.tube_item(pos, item)
|
||||
error("obsolete pipeworks.tube_item() called; change caller to use pipeworks.tube_inject_item() instead")
|
||||
end
|
||||
@ -29,6 +34,21 @@ function pipeworks.notvel(tbl, vel)
|
||||
return tbl2
|
||||
end
|
||||
|
||||
local tube_item_count = {}
|
||||
|
||||
minetest.register_globalstep(function(dtime)
|
||||
if not luaentity.entities then
|
||||
return
|
||||
end
|
||||
tube_item_count = {}
|
||||
for id, entity in pairs(luaentity.entities) do
|
||||
if entity.name == "pipeworks:tubed_item" then
|
||||
local h = minetest.hash_node_position(vector.round(entity._pos))
|
||||
tube_item_count[h] = (tube_item_count[h] or 0) + 1
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
local function go_next(pos, velocity, stack)
|
||||
local next_positions = {}
|
||||
local max_priority = 0
|
||||
@ -55,7 +75,7 @@ local function go_next(pos, velocity, stack)
|
||||
end
|
||||
for _, vect in ipairs(can_go) do
|
||||
local npos = vector.add(pos, vect)
|
||||
minetest.load_position(npos)
|
||||
pipeworks.load_position(npos)
|
||||
local node = minetest.get_node(npos)
|
||||
local reg_node = minetest.registered_nodes[node.name]
|
||||
if reg_node then
|
||||
@ -75,6 +95,17 @@ local function go_next(pos, velocity, stack)
|
||||
end
|
||||
end
|
||||
|
||||
if enable_max_limit then
|
||||
local h = minetest.hash_node_position(pos)
|
||||
local itemcount = tube_item_count[h] or 0
|
||||
if itemcount > max_tube_limit then
|
||||
cmeta:set_string("the_tube_was", minetest.serialize(cnode))
|
||||
print("[Pipeworks] Warning - a tube at "..minetest.pos_to_string(pos).." broke due to too many items ("..itemcount..")")
|
||||
minetest.swap_node(pos, {name = "pipeworks:broken_tube_1"})
|
||||
pipeworks.scan_for_tube_objects(pos)
|
||||
end
|
||||
end
|
||||
|
||||
if not next_positions[1] then
|
||||
return false, nil
|
||||
end
|
||||
@ -200,15 +231,13 @@ luaentity.register_entity("pipeworks:tubed_item", {
|
||||
end,
|
||||
|
||||
on_step = function(self, dtime)
|
||||
local pos = self:getpos()
|
||||
if self.start_pos == nil then
|
||||
local pos = self:getpos()
|
||||
self.start_pos = vector.round(pos)
|
||||
self:setpos(pos)
|
||||
end
|
||||
|
||||
local pos = self:getpos()
|
||||
local stack = ItemStack(self.itemstring)
|
||||
local drop_pos
|
||||
|
||||
local velocity = self:getvelocity()
|
||||
|
||||
@ -219,13 +248,14 @@ luaentity.register_entity("pipeworks:tubed_item", {
|
||||
moved = true
|
||||
end
|
||||
local vel = {x = velocity.x / speed, y = velocity.y / speed, z = velocity.z / speed, speed = speed}
|
||||
local moved_by = vector.distance(pos, self.start_pos)
|
||||
|
||||
if vector.distance(pos, self.start_pos) >= 1 then
|
||||
if moved_by >= 1 then
|
||||
self.start_pos = vector.add(self.start_pos, vel)
|
||||
moved = true
|
||||
end
|
||||
|
||||
minetest.load_position(self.start_pos)
|
||||
pipeworks.load_position(self.start_pos)
|
||||
local node = minetest.get_node(self.start_pos)
|
||||
if moved and minetest.get_item_group(node.name, "tubedevice_receiver") == 1 then
|
||||
local leftover
|
||||
@ -239,6 +269,7 @@ luaentity.register_entity("pipeworks:tubed_item", {
|
||||
return
|
||||
end
|
||||
velocity = vector.multiply(velocity, -1)
|
||||
self:setpos(vector.subtract(self.start_pos, vector.multiply(vel, moved_by - 1)))
|
||||
self:setvelocity(velocity)
|
||||
self:set_item(leftover:to_string())
|
||||
return
|
||||
@ -246,20 +277,30 @@ luaentity.register_entity("pipeworks:tubed_item", {
|
||||
|
||||
if moved then
|
||||
local found_next, new_velocity = go_next(self.start_pos, velocity, stack) -- todo: color
|
||||
local rev_vel = vector.multiply(velocity, -1)
|
||||
local rev_dir = vector.direction(self.start_pos,vector.add(self.start_pos,rev_vel))
|
||||
local rev_node = minetest.get_node(vector.round(vector.add(self.start_pos,rev_dir)))
|
||||
local tube_present = minetest.get_item_group(rev_node.name,"tubedevice") == 1
|
||||
if not found_next then
|
||||
drop_pos = minetest.find_node_near(vector.add(self.start_pos, velocity), 1, "air")
|
||||
if drop_pos then
|
||||
if pipeworks.drop_on_routing_fail or not tube_present or
|
||||
minetest.get_item_group(rev_node.name,"tube") ~= 1 then
|
||||
-- Using add_item instead of item_drop since this makes pipeworks backward
|
||||
-- compatible with Minetest 0.4.13.
|
||||
-- Using item_drop here makes Minetest 0.4.13 crash.
|
||||
minetest.add_item(drop_pos, stack)
|
||||
local dropped_item = minetest.add_item(self.start_pos, stack)
|
||||
dropped_item:setvelocity(vector.multiply(velocity, 5))
|
||||
self:remove()
|
||||
return
|
||||
else
|
||||
velocity = vector.multiply(velocity, -1)
|
||||
self:setpos(vector.subtract(self.start_pos, vector.multiply(vel, moved_by - 1)))
|
||||
self:setvelocity(velocity)
|
||||
end
|
||||
end
|
||||
|
||||
if new_velocity and not vector.equals(velocity, new_velocity) then
|
||||
self:setpos(self.start_pos)
|
||||
local nvelr = math.abs(new_velocity.x + new_velocity.y + new_velocity.z)
|
||||
self:setpos(vector.add(self.start_pos, vector.multiply(new_velocity, (moved_by - 1) / nvelr)))
|
||||
self:setvelocity(new_velocity)
|
||||
end
|
||||
end
|
||||
|
@ -1,6 +1,7 @@
|
||||
local max_entity_id = 1000000000000 -- If you need more, there's a problem with your code
|
||||
|
||||
luaentity = {}
|
||||
local luaentity = {}
|
||||
pipeworks.luaentity = luaentity
|
||||
|
||||
luaentity.registered_entities = {}
|
||||
|
||||
@ -23,6 +24,22 @@ end
|
||||
local function read_entities()
|
||||
local t = read_file()
|
||||
for _, entity in pairs(t) do
|
||||
|
||||
local x=entity.start_pos.x
|
||||
local y=entity.start_pos.y
|
||||
local z=entity.start_pos.z
|
||||
|
||||
x=math.max(-30912,x)
|
||||
y=math.max(-30912,y)
|
||||
z=math.max(-30912,z)
|
||||
x=math.min(30927,x)
|
||||
y=math.min(30927,y)
|
||||
z=math.min(30927,z)
|
||||
|
||||
entity.start_pos.x = x
|
||||
entity.start_pos.y = y
|
||||
entity.start_pos.z = z
|
||||
|
||||
setmetatable(entity, luaentity.registered_entities[entity.name])
|
||||
end
|
||||
return t
|
||||
@ -52,32 +69,27 @@ local function get_blockpos(pos)
|
||||
end
|
||||
|
||||
local active_blocks = {} -- These only contain active blocks near players (i.e., not forceloaded ones)
|
||||
local handle_active_blocks_step = 2
|
||||
local handle_active_blocks_timer = 0
|
||||
minetest.register_globalstep(function(dtime)
|
||||
handle_active_blocks_timer = handle_active_blocks_timer + dtime
|
||||
if handle_active_blocks_timer >= handle_active_blocks_step then
|
||||
handle_active_blocks_timer = handle_active_blocks_timer - handle_active_blocks_step
|
||||
local active_block_range = tonumber(minetest.setting_get("active_block_range")) or 2
|
||||
local new_active_blocks = {}
|
||||
for _, player in ipairs(minetest.get_connected_players()) do
|
||||
local blockpos = get_blockpos(player:getpos())
|
||||
local minp = vector.subtract(blockpos, active_block_range)
|
||||
local maxp = vector.add(blockpos, active_block_range)
|
||||
|
||||
for x = minp.x, maxp.x do
|
||||
for y = minp.y, maxp.y do
|
||||
for z = minp.z, maxp.z do
|
||||
local pos = {x = x, y = y, z = z}
|
||||
new_active_blocks[minetest.hash_node_position(pos)] = pos
|
||||
end
|
||||
end
|
||||
end
|
||||
local move_entities_globalstep_part1 = function(dtime)
|
||||
local active_block_range = tonumber(minetest.setting_get("active_block_range")) or 2
|
||||
local new_active_blocks = {}
|
||||
for _, player in ipairs(minetest.get_connected_players()) do
|
||||
local blockpos = get_blockpos(player:getpos())
|
||||
local minp = vector.subtract(blockpos, active_block_range)
|
||||
local maxp = vector.add(blockpos, active_block_range)
|
||||
|
||||
for x = minp.x, maxp.x do
|
||||
for y = minp.y, maxp.y do
|
||||
for z = minp.z, maxp.z do
|
||||
local pos = {x = x, y = y, z = z}
|
||||
new_active_blocks[minetest.hash_node_position(pos)] = pos
|
||||
end
|
||||
end
|
||||
end
|
||||
active_blocks = new_active_blocks
|
||||
-- todo: callbacks on block load/unload
|
||||
end
|
||||
end)
|
||||
active_blocks = new_active_blocks
|
||||
-- todo: callbacks on block load/unload
|
||||
end
|
||||
|
||||
local function is_active(pos)
|
||||
return active_blocks[minetest.hash_node_position(get_blockpos(pos))] ~= nil
|
||||
@ -309,7 +321,7 @@ function luaentity.get_objects_inside_radius(pos, radius)
|
||||
end
|
||||
end
|
||||
|
||||
minetest.register_globalstep(function(dtime)
|
||||
local move_entities_globalstep_part2 = function(dtime)
|
||||
if not luaentity.entities then
|
||||
luaentity.entities = read_entities()
|
||||
end
|
||||
@ -348,4 +360,16 @@ minetest.register_globalstep(function(dtime)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local handle_active_blocks_step = 0.2
|
||||
local handle_active_blocks_timer = 0.1
|
||||
|
||||
minetest.register_globalstep(function(dtime)
|
||||
handle_active_blocks_timer = handle_active_blocks_timer + dtime
|
||||
if handle_active_blocks_timer >= handle_active_blocks_step then
|
||||
handle_active_blocks_timer = handle_active_blocks_timer - handle_active_blocks_step
|
||||
move_entities_globalstep_part1(dtime)
|
||||
move_entities_globalstep_part2(dtime)
|
||||
end
|
||||
end)
|
||||
|
@ -1,114 +1,114 @@
|
||||
# Blender v2.69 (sub 0) OBJ File: 'pipe-flow-sensor.blend'
|
||||
# Blender v2.72 (sub 0) OBJ File: 'pipe-flow-sensor.blend'
|
||||
# www.blender.org
|
||||
o Cube.001
|
||||
v -0.468750 -0.153248 -0.030483
|
||||
v -0.500000 -0.153248 -0.030483
|
||||
v -0.468750 -0.153248 0.030483
|
||||
v -0.500000 -0.153248 0.030483
|
||||
v -0.468750 -0.129917 0.086808
|
||||
v -0.500000 -0.129917 0.086808
|
||||
v -0.468750 -0.086808 0.129917
|
||||
v -0.500000 -0.086808 0.129917
|
||||
v -0.468750 -0.030483 0.153248
|
||||
v -0.500000 -0.030483 0.153248
|
||||
v -0.468750 0.030483 0.153248
|
||||
v -0.500000 0.030483 0.153248
|
||||
v -0.468750 0.086808 0.129917
|
||||
v -0.500000 0.086808 0.129917
|
||||
v -0.468750 0.129917 0.086808
|
||||
v -0.500000 0.129917 0.086808
|
||||
v -0.468750 0.153248 0.030483
|
||||
v -0.500000 0.153247 0.030483
|
||||
v -0.468750 0.153248 -0.030483
|
||||
v -0.500000 0.153248 -0.030483
|
||||
v -0.468750 0.129917 -0.086808
|
||||
v -0.500000 0.129917 -0.086808
|
||||
v -0.468750 0.086808 -0.129917
|
||||
v -0.500000 0.086808 -0.129917
|
||||
v -0.468750 0.030483 -0.153248
|
||||
v -0.500000 0.030483 -0.153248
|
||||
v -0.468750 -0.030483 -0.153248
|
||||
v -0.500000 -0.030483 -0.153248
|
||||
v -0.468750 -0.086808 -0.129917
|
||||
v -0.500000 -0.086808 -0.129917
|
||||
v -0.468750 -0.129917 -0.086808
|
||||
v -0.500000 -0.129917 -0.086808
|
||||
v -0.468750 -0.122598 -0.024386
|
||||
v -0.468750 -0.122598 0.024386
|
||||
v -0.468750 -0.103934 0.069446
|
||||
v -0.468750 -0.069446 0.103934
|
||||
v -0.468750 -0.024386 0.122598
|
||||
v -0.468750 0.024386 0.122598
|
||||
v -0.468750 0.069446 0.103934
|
||||
v -0.468750 0.103934 0.069446
|
||||
v -0.468750 0.122598 0.024386
|
||||
v -0.468750 0.122598 -0.024386
|
||||
v -0.468750 0.103934 -0.069446
|
||||
v -0.468750 0.069446 -0.103934
|
||||
v -0.468750 0.024386 -0.122598
|
||||
v -0.468750 -0.024387 -0.122598
|
||||
v -0.468750 -0.069447 -0.103934
|
||||
v -0.468750 -0.103934 -0.069446
|
||||
v -0.468750 -0.000000 -0.000000
|
||||
v -0.500000 -0.000000 -0.000000
|
||||
v 0.468750 -0.069446 0.103934
|
||||
v 0.468750 -0.103933 0.069447
|
||||
v 0.468750 -0.122598 0.024387
|
||||
v 0.468750 -0.122598 -0.024386
|
||||
v 0.500000 -0.129917 -0.086807
|
||||
v 0.468750 -0.129917 -0.086807
|
||||
v 0.500000 -0.086808 -0.129917
|
||||
v 0.468750 -0.086808 -0.129917
|
||||
v 0.500000 -0.030483 -0.153247
|
||||
v 0.468750 -0.030483 -0.153247
|
||||
v 0.500000 0.030483 -0.153247
|
||||
v 0.468750 0.030483 -0.153247
|
||||
v 0.500000 0.086808 -0.129917
|
||||
v 0.468750 0.086808 -0.129917
|
||||
v 0.500000 0.129917 -0.086808
|
||||
v 0.468750 0.129917 -0.086808
|
||||
v 0.500000 0.153248 -0.030483
|
||||
v 0.468750 0.153248 -0.030483
|
||||
v 0.500000 0.153248 0.030483
|
||||
v 0.468750 0.153248 0.030483
|
||||
v 0.500000 0.129917 0.086808
|
||||
v 0.468750 0.129917 0.086808
|
||||
v 0.500000 0.086808 0.129917
|
||||
v 0.468750 0.086808 0.129917
|
||||
v 0.500000 0.030483 0.153248
|
||||
v 0.468750 0.030483 0.153248
|
||||
v 0.500000 -0.030483 0.153248
|
||||
v 0.468750 -0.030483 0.153248
|
||||
v 0.500000 -0.086808 0.129917
|
||||
v 0.468750 -0.086808 0.129917
|
||||
v 0.500000 -0.129917 0.086808
|
||||
v 0.468750 -0.129917 0.086808
|
||||
v 0.500000 -0.153247 0.030483
|
||||
v 0.468750 -0.153247 0.030483
|
||||
v 0.500000 -0.153247 -0.030483
|
||||
v 0.468750 -0.153247 -0.030483
|
||||
v 0.468750 -0.024386 0.122598
|
||||
v 0.468750 0.024387 0.122598
|
||||
v 0.468750 0.069447 0.103934
|
||||
v 0.468750 0.103934 0.069447
|
||||
v 0.468750 0.122598 0.024387
|
||||
v 0.468750 0.122598 -0.024386
|
||||
v 0.468750 0.103934 -0.069446
|
||||
v 0.468750 0.069447 -0.103933
|
||||
v 0.468750 0.024387 -0.122598
|
||||
v 0.468750 -0.024386 -0.122598
|
||||
v 0.468750 -0.069446 -0.103933
|
||||
v 0.468750 -0.103933 -0.069446
|
||||
v 0.468750 0.000000 0.000000
|
||||
v 0.500000 0.000000 0.000000
|
||||
v 0.250000 -0.187500 0.187500
|
||||
v -0.250000 -0.187500 0.187500
|
||||
v -0.250000 -0.187500 -0.187500
|
||||
v 0.250000 -0.187500 -0.187500
|
||||
v 0.250000 0.187500 0.187500
|
||||
v -0.250000 0.187500 0.187500
|
||||
v -0.250000 0.187500 -0.187500
|
||||
v 0.250000 0.187500 -0.187500
|
||||
v -0.030483 -0.153248 0.468750
|
||||
v -0.030483 -0.153248 0.500000
|
||||
v 0.030483 -0.153248 0.468750
|
||||
v 0.030483 -0.153248 0.500000
|
||||
v 0.086808 -0.129917 0.468750
|
||||
v 0.086808 -0.129917 0.500000
|
||||
v 0.129917 -0.086808 0.468750
|
||||
v 0.129917 -0.086808 0.500000
|
||||
v 0.153248 -0.030483 0.468750
|
||||
v 0.153248 -0.030483 0.500000
|
||||
v 0.153248 0.030483 0.468750
|
||||
v 0.153248 0.030483 0.500000
|
||||
v 0.129917 0.086808 0.468750
|
||||
v 0.129917 0.086808 0.500000
|
||||
v 0.086808 0.129917 0.468750
|
||||
v 0.086808 0.129917 0.500000
|
||||
v 0.030483 0.153248 0.468750
|
||||
v 0.030483 0.153247 0.500000
|
||||
v -0.030483 0.153248 0.468750
|
||||
v -0.030483 0.153248 0.500000
|
||||
v -0.086808 0.129917 0.468750
|
||||
v -0.086808 0.129917 0.500000
|
||||
v -0.129917 0.086808 0.468750
|
||||
v -0.129917 0.086808 0.500000
|
||||
v -0.153248 0.030483 0.468750
|
||||
v -0.153248 0.030483 0.500000
|
||||
v -0.153248 -0.030483 0.468750
|
||||
v -0.153248 -0.030483 0.500000
|
||||
v -0.129917 -0.086808 0.468750
|
||||
v -0.129917 -0.086808 0.500000
|
||||
v -0.086808 -0.129917 0.468750
|
||||
v -0.086808 -0.129917 0.500000
|
||||
v -0.024386 -0.122598 0.468750
|
||||
v 0.024386 -0.122598 0.468750
|
||||
v 0.069446 -0.103934 0.468750
|
||||
v 0.103934 -0.069446 0.468750
|
||||
v 0.122598 -0.024386 0.468750
|
||||
v 0.122598 0.024386 0.468750
|
||||
v 0.103934 0.069446 0.468750
|
||||
v 0.069446 0.103934 0.468750
|
||||
v 0.024386 0.122598 0.468750
|
||||
v -0.024386 0.122598 0.468750
|
||||
v -0.069446 0.103934 0.468750
|
||||
v -0.103934 0.069446 0.468750
|
||||
v -0.122598 0.024386 0.468750
|
||||
v -0.122598 -0.024387 0.468750
|
||||
v -0.103934 -0.069447 0.468750
|
||||
v -0.069446 -0.103934 0.468750
|
||||
v -0.000000 -0.000000 0.468750
|
||||
v -0.000000 -0.000000 0.500000
|
||||
v 0.103934 -0.069446 -0.468750
|
||||
v 0.069446 -0.103933 -0.468750
|
||||
v 0.024386 -0.122598 -0.468750
|
||||
v -0.024386 -0.122598 -0.468750
|
||||
v -0.086808 -0.129917 -0.500000
|
||||
v -0.086808 -0.129917 -0.468750
|
||||
v -0.129917 -0.086808 -0.500000
|
||||
v -0.129917 -0.086808 -0.468750
|
||||
v -0.153248 -0.030483 -0.500000
|
||||
v -0.153248 -0.030483 -0.468750
|
||||
v -0.153248 0.030483 -0.500000
|
||||
v -0.153248 0.030483 -0.468750
|
||||
v -0.129917 0.086808 -0.500000
|
||||
v -0.129917 0.086808 -0.468750
|
||||
v -0.086808 0.129917 -0.500000
|
||||
v -0.086808 0.129917 -0.468750
|
||||
v -0.030483 0.153248 -0.500000
|
||||
v -0.030483 0.153248 -0.468750
|
||||
v 0.030483 0.153248 -0.500000
|
||||
v 0.030483 0.153248 -0.468750
|
||||
v 0.086808 0.129917 -0.500000
|
||||
v 0.086808 0.129917 -0.468750
|
||||
v 0.129917 0.086808 -0.500000
|
||||
v 0.129917 0.086808 -0.468750
|
||||
v 0.153248 0.030483 -0.500000
|
||||
v 0.153248 0.030483 -0.468750
|
||||
v 0.153248 -0.030483 -0.500000
|
||||
v 0.153248 -0.030483 -0.468750
|
||||
v 0.129917 -0.086808 -0.500000
|
||||
v 0.129917 -0.086808 -0.468750
|
||||
v 0.086808 -0.129917 -0.500000
|
||||
v 0.086808 -0.129917 -0.468750
|
||||
v 0.030483 -0.153247 -0.500000
|
||||
v 0.030483 -0.153247 -0.468750
|
||||
v -0.030483 -0.153247 -0.500000
|
||||
v -0.030483 -0.153247 -0.468750
|
||||
v 0.122598 -0.024386 -0.468750
|
||||
v 0.122598 0.024387 -0.468750
|
||||
v 0.103934 0.069447 -0.468750
|
||||
v 0.069446 0.103934 -0.468750
|
||||
v 0.024386 0.122598 -0.468750
|
||||
v -0.024386 0.122598 -0.468750
|
||||
v -0.069446 0.103934 -0.468750
|
||||
v -0.103934 0.069447 -0.468750
|
||||
v -0.122598 0.024387 -0.468750
|
||||
v -0.122598 -0.024386 -0.468750
|
||||
v -0.103934 -0.069446 -0.468750
|
||||
v -0.069446 -0.103933 -0.468750
|
||||
v 0.000000 0.000000 -0.468750
|
||||
v 0.000000 0.000000 -0.500000
|
||||
v 0.187500 -0.187500 -0.250000
|
||||
v 0.187500 -0.187500 0.250000
|
||||
v -0.187500 -0.187500 0.250000
|
||||
v -0.187500 -0.187500 -0.250000
|
||||
v 0.187500 0.187500 -0.250000
|
||||
v 0.187500 0.187500 0.250000
|
||||
v -0.187500 0.187500 0.250000
|
||||
v -0.187500 0.187500 -0.250000
|
||||
vt 0.813725 0.460784
|
||||
vt 0.774510 0.460784
|
||||
vt 0.774510 0.500000
|
||||
@ -181,40 +181,11 @@ vt 0.460784 0.441176
|
||||
vt 0.460784 0.127451
|
||||
vt 0.500000 0.127451
|
||||
vt 0.500000 0.441176
|
||||
vt 0.402558 0.546671
|
||||
vt 0.440212 0.531167
|
||||
vt 0.460591 0.633009
|
||||
vt 0.373738 0.575320
|
||||
vt 0.358141 0.612752
|
||||
vt 0.358141 0.653267
|
||||
vt 0.373738 0.690699
|
||||
vt 0.402558 0.719348
|
||||
vt 0.440212 0.734852
|
||||
vt 0.480969 0.734852
|
||||
vt 0.518623 0.719348
|
||||
vt 0.547443 0.690699
|
||||
vt 0.563040 0.653267
|
||||
vt 0.563040 0.612752
|
||||
vt 0.547443 0.575320
|
||||
vt 0.518623 0.546671
|
||||
vt 0.480969 0.531167
|
||||
vt 0.639882 0.546671
|
||||
vt 0.677537 0.531167
|
||||
vt 0.697915 0.633009
|
||||
vt 0.611063 0.575320
|
||||
vt 0.595466 0.612752
|
||||
vt 0.595466 0.653267
|
||||
vt 0.611063 0.690699
|
||||
vt 0.639882 0.719347
|
||||
vt 0.677537 0.734852
|
||||
vt 0.718293 0.734852
|
||||
vt 0.755947 0.719347
|
||||
vt 0.784767 0.690699
|
||||
vt 0.800364 0.653267
|
||||
vt 0.800364 0.612752
|
||||
vt 0.784767 0.575320
|
||||
vt 0.755948 0.546671
|
||||
vt 0.718293 0.531167
|
||||
vt 0.892157 0.441176
|
||||
vt 0.892157 0.127451
|
||||
vt 0.931373 0.127451
|
||||
@ -269,122 +240,141 @@ vt 0.009804 0.254902
|
||||
vt 0.323529 0.254902
|
||||
vt 0.323529 0.490196
|
||||
vt 0.009804 0.490196
|
||||
vn 0.000000 -1.000000 -0.000000
|
||||
vn 0.382700 -0.923900 -0.000000
|
||||
vn 0.707100 -0.707100 -0.000000
|
||||
vn 0.923900 -0.382700 -0.000000
|
||||
vn 1.000000 0.000000 0.000000
|
||||
vn 0.923900 0.382700 0.000000
|
||||
vn 0.707100 0.707100 0.000000
|
||||
vn 0.382700 0.923900 0.000000
|
||||
vn 0.000000 1.000000 0.000000
|
||||
vn -0.382700 0.923900 0.000000
|
||||
vn -0.707100 0.707100 0.000000
|
||||
vn -0.923900 0.382700 0.000000
|
||||
vn -1.000000 -0.000000 0.000000
|
||||
vn -0.923900 -0.382700 -0.000000
|
||||
vn -0.382700 -0.923900 -0.000000
|
||||
vn -0.707100 -0.707100 -0.000000
|
||||
vn 0.000000 -0.000000 1.000000
|
||||
vn 0.000000 0.000000 -1.000000
|
||||
g Cube.001_Cube.001_None
|
||||
s off
|
||||
f 1/1 3/2 4/3 2/4
|
||||
f 3/2 5/5 6/6 4/3
|
||||
f 5/5 7/7 8/8 6/6
|
||||
f 7/7 9/9 10/10 8/8
|
||||
f 9/9 11/11 12/12 10/10
|
||||
f 11/11 13/13 14/14 12/12
|
||||
f 13/13 15/15 16/16 14/14
|
||||
f 15/15 17/17 18/18 16/16
|
||||
f 17/17 19/19 20/20 18/18
|
||||
f 19/19 21/21 22/22 20/20
|
||||
f 21/21 23/23 24/24 22/22
|
||||
f 23/23 25/25 26/26 24/24
|
||||
f 25/27 27/28 28/29 26/30
|
||||
f 27/28 29/31 30/32 28/29
|
||||
f 31/33 1/1 2/4 32/34
|
||||
f 29/31 31/33 32/34 30/32
|
||||
f 4/35 50/36 2/37
|
||||
f 1/38 49/39 3/40
|
||||
f 3/40 49/39 5/41
|
||||
f 5/41 49/39 7/42
|
||||
f 7/42 49/39 9/43
|
||||
f 9/43 49/39 11/44
|
||||
f 11/44 49/39 13/45
|
||||
f 13/45 49/39 15/46
|
||||
f 15/46 49/39 17/47
|
||||
f 17/47 49/39 19/48
|
||||
f 19/48 49/39 21/49
|
||||
f 21/49 49/39 23/50
|
||||
f 23/50 49/39 25/51
|
||||
f 25/51 49/39 27/52
|
||||
f 27/52 49/39 29/53
|
||||
f 29/53 49/39 31/54
|
||||
f 31/54 49/39 1/38
|
||||
f 2/37 50/36 32/55
|
||||
f 32/55 50/36 30/56
|
||||
f 30/56 50/36 28/57
|
||||
f 28/57 50/36 26/58
|
||||
f 26/58 50/36 24/59
|
||||
f 24/59 50/36 22/60
|
||||
f 22/60 50/36 20/61
|
||||
f 20/61 50/36 18/62
|
||||
f 18/62 50/36 16/63
|
||||
f 16/63 50/36 14/64
|
||||
f 14/64 50/36 12/65
|
||||
f 12/65 50/36 10/66
|
||||
f 10/66 50/36 8/67
|
||||
f 8/67 50/36 6/68
|
||||
f 6/68 50/36 4/35
|
||||
f 41/69 91/70 92/71 42/72
|
||||
f 81/73 83/74 100/75
|
||||
f 79/76 81/73 100/75
|
||||
f 77/77 79/76 100/75
|
||||
f 75/78 77/77 100/75
|
||||
f 73/79 75/78 100/75
|
||||
f 71/80 73/79 100/75
|
||||
f 69/81 71/80 100/75
|
||||
f 67/82 69/81 100/75
|
||||
f 65/83 67/82 100/75
|
||||
f 63/84 65/83 100/75
|
||||
f 61/85 63/84 100/75
|
||||
f 59/86 61/85 100/75
|
||||
f 57/87 59/86 100/75
|
||||
f 55/88 57/87 100/75
|
||||
f 85/89 55/88 100/75
|
||||
f 56/90 86/91 99/92
|
||||
f 58/93 56/90 99/92
|
||||
f 60/94 58/93 99/92
|
||||
f 62/95 60/94 99/92
|
||||
f 64/96 62/95 99/92
|
||||
f 66/97 64/96 99/92
|
||||
f 68/98 66/97 99/92
|
||||
f 70/99 68/98 99/92
|
||||
f 72/100 70/99 99/92
|
||||
f 74/101 72/100 99/92
|
||||
f 76/102 74/101 99/92
|
||||
f 78/103 76/102 99/92
|
||||
f 80/104 78/103 99/92
|
||||
f 82/105 80/104 99/92
|
||||
f 84/106 82/105 99/92
|
||||
f 86/91 84/106 99/92
|
||||
f 83/74 85/89 100/75
|
||||
f 58/22 57/21 55/19 56/20
|
||||
f 56/20 55/19 85/17 86/18
|
||||
f 60/24 59/23 57/21 58/22
|
||||
f 62/26 61/25 59/23 60/24
|
||||
f 64/29 63/28 61/27 62/30
|
||||
f 66/32 65/31 63/28 64/29
|
||||
f 68/34 67/33 65/31 66/32
|
||||
f 70/4 69/1 67/33 68/34
|
||||
f 72/3 71/2 69/1 70/4
|
||||
f 74/6 73/5 71/2 72/3
|
||||
f 76/8 75/7 73/5 74/6
|
||||
f 78/10 77/9 75/7 76/8
|
||||
f 80/12 79/11 77/9 78/10
|
||||
f 82/14 81/13 79/11 80/12
|
||||
f 84/16 83/15 81/13 82/14
|
||||
f 86/18 85/17 83/15 84/16
|
||||
f 36/107 51/108 87/109 37/110
|
||||
f 34/111 53/112 52/113 35/114
|
||||
f 47/115 97/116 98/117 48/118
|
||||
f 33/119 54/120 53/112 34/111
|
||||
f 35/114 52/113 51/108 36/107
|
||||
f 48/118 98/117 54/120 33/119
|
||||
f 46/121 96/122 97/116 47/115
|
||||
f 45/123 95/124 96/122 46/121
|
||||
f 44/125 94/126 95/124 45/123
|
||||
f 43/127 93/128 94/126 44/125
|
||||
f 42/72 92/71 93/128 43/127
|
||||
f 40/129 90/130 91/70 41/69
|
||||
f 39/131 89/132 90/130 40/129
|
||||
f 38/133 88/134 89/132 39/131
|
||||
f 37/110 87/109 88/135 38/136
|
||||
f 105/137 106/138 102/139 101/140
|
||||
f 106/141 107/142 103/143 102/144
|
||||
f 107/145 108/146 104/147 103/148
|
||||
f 108/149 105/150 101/151 104/152
|
||||
f 101/153 102/154 103/155 104/156
|
||||
f 108/157 107/158 106/159 105/160
|
||||
f 1/1/1 3/2/1 4/3/1 2/4/1
|
||||
f 3/2/2 5/5/2 6/6/2 4/3/2
|
||||
f 5/5/3 7/7/3 8/8/3 6/6/3
|
||||
f 7/7/4 9/9/4 10/10/4 8/8/4
|
||||
f 9/9/5 11/11/5 12/12/5 10/10/5
|
||||
f 11/11/6 13/13/6 14/14/6 12/12/6
|
||||
f 13/13/7 15/15/7 16/16/7 14/14/7
|
||||
f 15/15/8 17/17/8 18/18/8 16/16/8
|
||||
f 17/17/9 19/19/9 20/20/9 18/18/9
|
||||
f 19/19/10 21/21/10 22/22/10 20/20/10
|
||||
f 21/21/11 23/23/11 24/24/11 22/22/11
|
||||
f 23/23/12 25/25/12 26/26/12 24/24/12
|
||||
f 25/27/13 27/28/13 28/29/13 26/30/13
|
||||
f 27/28/14 29/31/14 30/32/14 28/29/14
|
||||
f 31/33/15 1/1/15 2/4/15 32/34/15
|
||||
f 29/31/16 31/33/16 32/34/16 30/32/16
|
||||
f 4/35/17 50/36/17 2/37/17
|
||||
f 1/38/18 49/39/18 3/40/18
|
||||
f 3/40/18 49/39/18 5/41/18
|
||||
f 5/41/18 49/39/18 7/42/18
|
||||
f 7/42/18 49/39/18 9/43/18
|
||||
f 9/43/18 49/39/18 11/44/18
|
||||
f 11/44/18 49/39/18 13/45/18
|
||||
f 13/45/18 49/39/18 15/46/18
|
||||
f 15/46/18 49/39/18 17/47/18
|
||||
f 17/47/18 49/39/18 19/48/18
|
||||
f 19/48/18 49/39/18 21/49/18
|
||||
f 21/49/18 49/39/18 23/50/18
|
||||
f 23/50/18 49/39/18 25/51/18
|
||||
f 25/51/18 49/39/18 27/52/18
|
||||
f 27/52/18 49/39/18 29/53/18
|
||||
f 29/53/18 49/39/18 31/54/18
|
||||
f 31/54/18 49/39/18 1/38/18
|
||||
f 2/37/17 50/36/17 32/55/17
|
||||
f 32/55/17 50/36/17 30/56/17
|
||||
f 30/56/17 50/36/17 28/57/17
|
||||
f 28/57/17 50/36/17 26/58/17
|
||||
f 26/58/17 50/36/17 24/59/17
|
||||
f 24/59/17 50/36/17 22/60/17
|
||||
f 22/60/17 50/36/17 20/61/17
|
||||
f 20/61/17 50/36/17 18/62/17
|
||||
f 18/62/17 50/36/17 16/63/17
|
||||
f 16/63/17 50/36/17 14/64/17
|
||||
f 14/64/17 50/36/17 12/65/17
|
||||
f 12/65/17 50/36/17 10/66/17
|
||||
f 10/66/17 50/36/17 8/67/17
|
||||
f 8/67/17 50/36/17 6/68/17
|
||||
f 6/68/17 50/36/17 4/35/17
|
||||
f 41/69/9 91/70/9 92/71/9 42/72/9
|
||||
f 81/55/18 83/37/18 100/36/18
|
||||
f 79/56/18 81/55/18 100/36/18
|
||||
f 77/57/18 79/56/18 100/36/18
|
||||
f 75/58/18 77/57/18 100/36/18
|
||||
f 73/59/18 75/58/18 100/36/18
|
||||
f 71/73/18 73/59/18 100/36/18
|
||||
f 69/61/18 71/73/18 100/36/18
|
||||
f 67/62/18 69/61/18 100/36/18
|
||||
f 65/74/18 67/62/18 100/36/18
|
||||
f 63/64/18 65/74/18 100/36/18
|
||||
f 61/65/18 63/64/18 100/36/18
|
||||
f 59/66/18 61/65/18 100/36/18
|
||||
f 57/67/18 59/66/18 100/36/18
|
||||
f 55/68/18 57/67/18 100/36/18
|
||||
f 85/35/18 55/68/18 100/36/18
|
||||
f 56/54/17 86/38/17 99/39/17
|
||||
f 58/53/17 56/54/17 99/39/17
|
||||
f 60/52/17 58/53/17 99/39/17
|
||||
f 62/51/17 60/52/17 99/39/17
|
||||
f 64/50/17 62/51/17 99/39/17
|
||||
f 66/75/17 64/50/17 99/39/17
|
||||
f 68/48/17 66/75/17 99/39/17
|
||||
f 70/47/17 68/48/17 99/39/17
|
||||
f 72/76/17 70/47/17 99/39/17
|
||||
f 74/45/17 72/76/17 99/39/17
|
||||
f 76/44/17 74/45/17 99/39/17
|
||||
f 78/43/17 76/44/17 99/39/17
|
||||
f 80/42/17 78/43/17 99/39/17
|
||||
f 82/77/17 80/42/17 99/39/17
|
||||
f 84/40/17 82/77/17 99/39/17
|
||||
f 86/38/17 84/40/17 99/39/17
|
||||
f 83/37/18 85/35/18 100/36/18
|
||||
f 58/22/16 57/21/16 55/19/16 56/20/16
|
||||
f 56/20/15 55/19/15 85/17/15 86/18/15
|
||||
f 60/24/14 59/23/14 57/21/14 58/22/14
|
||||
f 62/26/13 61/25/13 59/23/13 60/24/13
|
||||
f 64/29/12 63/28/12 61/27/12 62/30/12
|
||||
f 66/32/11 65/31/11 63/28/11 64/29/11
|
||||
f 68/34/10 67/33/10 65/31/10 66/32/10
|
||||
f 70/4/9 69/1/9 67/33/9 68/34/9
|
||||
f 72/3/8 71/2/8 69/1/8 70/4/8
|
||||
f 74/6/7 73/5/7 71/2/7 72/3/7
|
||||
f 76/8/6 75/7/6 73/5/6 74/6/6
|
||||
f 78/10/5 77/9/5 75/7/5 76/8/5
|
||||
f 80/12/4 79/11/4 77/9/4 78/10/4
|
||||
f 82/14/3 81/13/3 79/11/3 80/12/3
|
||||
f 84/16/2 83/15/2 81/13/2 82/14/2
|
||||
f 86/18/1 85/17/1 83/15/1 84/16/1
|
||||
f 36/78/4 51/79/4 87/80/4 37/81/4
|
||||
f 34/82/2 53/83/2 52/84/2 35/85/2
|
||||
f 47/86/16 97/87/16 98/88/16 48/89/16
|
||||
f 33/90/1 54/91/1 53/83/1 34/82/1
|
||||
f 35/85/3 52/84/3 51/79/3 36/78/3
|
||||
f 48/89/15 98/88/15 54/91/15 33/90/15
|
||||
f 46/92/14 96/93/14 97/87/14 47/86/14
|
||||
f 45/94/13 95/95/13 96/93/13 46/92/13
|
||||
f 44/96/12 94/97/12 95/95/12 45/94/12
|
||||
f 43/98/11 93/99/11 94/97/11 44/96/11
|
||||
f 42/72/10 92/71/10 93/99/10 43/98/10
|
||||
f 40/100/8 90/101/8 91/70/8 41/69/8
|
||||
f 39/102/7 89/103/7 90/101/7 40/100/7
|
||||
f 38/104/6 88/105/6 89/103/6 39/102/6
|
||||
f 37/81/5 87/80/5 88/106/5 38/107/5
|
||||
f 105/108/5 106/109/5 102/110/5 101/111/5
|
||||
f 106/112/17 107/113/17 103/114/17 102/115/17
|
||||
f 107/116/13 108/117/13 104/118/13 103/119/13
|
||||
f 108/120/18 105/121/18 101/122/18 104/123/18
|
||||
f 101/124/1 102/125/1 103/126/1 104/127/1
|
||||
f 108/128/9 107/129/9 106/130/9 105/131/9
|
||||
|
@ -1,131 +1,130 @@
|
||||
# Blender v2.69 (sub 0) OBJ File: 'pipe-valve-off.blend'
|
||||
# Blender v2.72 (sub 0) OBJ File: 'pipe-valve-off.blend'
|
||||
# www.blender.org
|
||||
mtllib pipeworks_valve_off.mtl
|
||||
o Cube.003
|
||||
v 0.062500 0.281250 -0.312500
|
||||
v 0.062500 0.281250 0.093750
|
||||
v -0.062500 0.281250 0.093750
|
||||
v -0.062500 0.281250 -0.312500
|
||||
v 0.062500 0.343750 -0.312500
|
||||
v 0.062500 0.343750 0.093750
|
||||
v -0.062500 0.343750 0.093750
|
||||
v -0.062500 0.343750 -0.312500
|
||||
v -0.312500 0.281250 -0.062500
|
||||
v 0.093750 0.281250 -0.062500
|
||||
v 0.093750 0.281250 0.062500
|
||||
v -0.312500 0.281250 0.062500
|
||||
v -0.312500 0.343750 -0.062500
|
||||
v 0.093750 0.343750 -0.062500
|
||||
v 0.093750 0.343750 0.062500
|
||||
v -0.312500 0.343750 0.062500
|
||||
v -0.031250 0.250000 -0.031250
|
||||
v 0.031250 0.250000 -0.031250
|
||||
v 0.031250 0.250000 0.031250
|
||||
v -0.031250 0.250000 0.031250
|
||||
v -0.031250 0.250000 -0.031250
|
||||
v -0.031250 0.281250 -0.031250
|
||||
v 0.031250 0.281250 -0.031250
|
||||
v 0.031250 0.281250 0.031250
|
||||
v -0.031250 0.281250 0.031250
|
||||
v -0.031250 0.281250 -0.031250
|
||||
v -0.250000 -0.250000 -0.250000
|
||||
v 0.250000 -0.250000 -0.250000
|
||||
v 0.250000 -0.250000 0.250000
|
||||
v -0.250000 -0.250000 0.250000
|
||||
v -0.250000 -0.250000 -0.250000
|
||||
v -0.250000 0.250000 -0.250000
|
||||
v 0.250000 0.250000 -0.250000
|
||||
v 0.250000 0.250000 0.250000
|
||||
v -0.250000 0.250000 0.250000
|
||||
v -0.250000 0.250000 -0.250000
|
||||
v -0.468750 -0.153248 -0.030483
|
||||
v -0.500000 -0.153248 -0.030483
|
||||
v -0.468750 -0.153248 0.030483
|
||||
v -0.500000 -0.153248 0.030483
|
||||
v -0.468750 -0.129917 0.086808
|
||||
v -0.500000 -0.129917 0.086808
|
||||
v -0.468750 -0.086808 0.129917
|
||||
v -0.500000 -0.086808 0.129917
|
||||
v -0.468750 -0.030483 0.153248
|
||||
v -0.500000 -0.030483 0.153248
|
||||
v -0.468750 0.030483 0.153248
|
||||
v -0.500000 0.030483 0.153248
|
||||
v -0.468750 0.086808 0.129917
|
||||
v -0.500000 0.086808 0.129917
|
||||
v -0.468750 0.129917 0.086808
|
||||
v -0.500000 0.129917 0.086808
|
||||
v -0.468750 0.153248 0.030483
|
||||
v -0.500000 0.153247 0.030483
|
||||
v -0.468750 0.153248 -0.030483
|
||||
v -0.500000 0.153248 -0.030483
|
||||
v -0.468750 0.129917 -0.086808
|
||||
v -0.500000 0.129917 -0.086808
|
||||
v -0.468750 0.086808 -0.129917
|
||||
v -0.500000 0.086808 -0.129917
|
||||
v -0.468750 0.030483 -0.153248
|
||||
v -0.500000 0.030483 -0.153248
|
||||
v -0.468750 -0.030483 -0.153248
|
||||
v -0.500000 -0.030483 -0.153248
|
||||
v -0.468750 -0.086808 -0.129917
|
||||
v -0.500000 -0.086808 -0.129917
|
||||
v -0.468750 -0.129917 -0.086808
|
||||
v -0.500000 -0.129917 -0.086808
|
||||
v -0.468750 -0.122598 -0.024386
|
||||
v -0.468750 -0.122598 0.024386
|
||||
v -0.468750 -0.103934 0.069446
|
||||
v -0.468750 -0.069446 0.103934
|
||||
v -0.468750 -0.024386 0.122598
|
||||
v -0.468750 0.024386 0.122598
|
||||
v -0.468750 0.069446 0.103934
|
||||
v -0.468750 0.103934 0.069446
|
||||
v -0.468750 0.122598 0.024386
|
||||
v -0.468750 0.122598 -0.024386
|
||||
v -0.468750 0.103934 -0.069446
|
||||
v -0.468750 0.069446 -0.103934
|
||||
v -0.468750 0.024386 -0.122598
|
||||
v -0.468750 -0.024387 -0.122598
|
||||
v -0.468750 -0.069447 -0.103934
|
||||
v -0.468750 -0.103934 -0.069446
|
||||
v -0.468750 -0.000000 -0.000000
|
||||
v -0.500000 -0.000000 -0.000000
|
||||
v 0.468750 -0.069446 0.103934
|
||||
v 0.468750 -0.103933 0.069447
|
||||
v 0.468750 -0.122598 0.024387
|
||||
v 0.468750 -0.122598 -0.024386
|
||||
v 0.500000 -0.129917 -0.086807
|
||||
v 0.468750 -0.129917 -0.086807
|
||||
v 0.500000 -0.086808 -0.129917
|
||||
v 0.468750 -0.086808 -0.129917
|
||||
v 0.500000 -0.030483 -0.153247
|
||||
v 0.468750 -0.030483 -0.153247
|
||||
v 0.500000 0.030483 -0.153247
|
||||
v 0.468750 0.030483 -0.153247
|
||||
v 0.500000 0.086808 -0.129917
|
||||
v 0.468750 0.086808 -0.129917
|
||||
v 0.500000 0.129917 -0.086808
|
||||
v 0.468750 0.129917 -0.086808
|
||||
v 0.500000 0.153248 -0.030483
|
||||
v 0.468750 0.153248 -0.030483
|
||||
v 0.500000 0.153248 0.030483
|
||||
v 0.468750 0.153248 0.030483
|
||||
v 0.500000 0.129917 0.086808
|
||||
v 0.468750 0.129917 0.086808
|
||||
v 0.500000 0.086808 0.129917
|
||||
v 0.468750 0.086808 0.129917
|
||||
v 0.500000 0.030483 0.153248
|
||||
v 0.468750 0.030483 0.153248
|
||||
v 0.500000 -0.030483 0.153248
|
||||
v 0.468750 -0.030483 0.153248
|
||||
v 0.500000 -0.086807 0.129917
|
||||
v 0.468750 -0.086808 0.129917
|
||||
v 0.500000 -0.129917 0.086808
|
||||
v 0.468750 -0.129917 0.086808
|
||||
v 0.500000 -0.153247 0.030483
|
||||
v 0.468750 -0.153247 0.030483
|
||||
v 0.500000 -0.153247 -0.030483
|
||||
v 0.468750 -0.153247 -0.030483
|
||||
v 0.468750 -0.024386 0.122598
|
||||
v 0.468750 0.024387 0.122598
|
||||
v 0.468750 0.069447 0.103934
|
||||
v 0.468750 0.103934 0.069447
|
||||
v 0.468750 0.122598 0.024387
|
||||
v 0.468750 0.122598 -0.024386
|
||||
v 0.468750 0.103934 -0.069446
|
||||
v 0.468750 0.069447 -0.103933
|
||||
v 0.468750 0.024387 -0.122598
|
||||
v 0.468750 -0.024386 -0.122598
|
||||
v 0.468750 -0.069446 -0.103933
|
||||
v 0.468750 -0.103933 -0.069446
|
||||
v 0.468750 0.000000 0.000000
|
||||
v 0.500000 0.000000 0.000000
|
||||
v -0.030483 -0.153248 0.468750
|
||||
v -0.030483 -0.153248 0.500000
|
||||
v 0.030483 -0.153248 0.468750
|
||||
v 0.030483 -0.153248 0.500000
|
||||
v 0.086808 -0.129917 0.468750
|
||||
v 0.086808 -0.129917 0.500000
|
||||
v 0.129917 -0.086808 0.468750
|
||||
v 0.129917 -0.086808 0.500000
|
||||
v 0.153248 -0.030483 0.468750
|
||||
v 0.153248 -0.030483 0.500000
|
||||
v 0.153248 0.030483 0.468750
|
||||
v 0.153248 0.030483 0.500000
|
||||
v 0.129917 0.086808 0.468750
|
||||
v 0.129917 0.086808 0.500000
|
||||
v 0.086808 0.129917 0.468750
|
||||
v 0.086808 0.129917 0.500000
|
||||
v 0.030483 0.153248 0.468750
|
||||
v 0.030483 0.153247 0.500000
|
||||
v -0.030483 0.153248 0.468750
|
||||
v -0.030483 0.153248 0.500000
|
||||
v -0.086808 0.129917 0.468750
|
||||
v -0.086808 0.129917 0.500000
|
||||
v -0.129917 0.086808 0.468750
|
||||
v -0.129917 0.086808 0.500000
|
||||
v -0.153248 0.030483 0.468750
|
||||
v -0.153248 0.030483 0.500000
|
||||
v -0.153248 -0.030483 0.468750
|
||||
v -0.153248 -0.030483 0.500000
|
||||
v -0.129917 -0.086808 0.468750
|
||||
v -0.129917 -0.086808 0.500000
|
||||
v -0.086808 -0.129917 0.468750
|
||||
v -0.086808 -0.129917 0.500000
|
||||
v -0.024386 -0.122598 0.468750
|
||||
v 0.024386 -0.122598 0.468750
|
||||
v 0.069446 -0.103934 0.468750
|
||||
v 0.103934 -0.069446 0.468750
|
||||
v 0.122598 -0.024386 0.468750
|
||||
v 0.122598 0.024386 0.468750
|
||||
v 0.103934 0.069446 0.468750
|
||||
v 0.069446 0.103934 0.468750
|
||||
v 0.024386 0.122598 0.468750
|
||||
v -0.024386 0.122598 0.468750
|
||||
v -0.069446 0.103934 0.468750
|
||||
v -0.103934 0.069446 0.468750
|
||||
v -0.122598 0.024386 0.468750
|
||||
v -0.122598 -0.024387 0.468750
|
||||
v -0.103934 -0.069447 0.468750
|
||||
v -0.069446 -0.103934 0.468750
|
||||
v -0.000000 -0.000000 0.468750
|
||||
v -0.000000 -0.000000 0.500000
|
||||
v 0.103934 -0.069446 -0.468750
|
||||
v 0.069447 -0.103933 -0.468750
|
||||
v 0.024387 -0.122598 -0.468750
|
||||
v -0.024386 -0.122598 -0.468750
|
||||
v -0.086808 -0.129917 -0.500000
|
||||
v -0.086808 -0.129917 -0.468750
|
||||
v -0.129917 -0.086808 -0.500000
|
||||
v -0.129917 -0.086808 -0.468750
|
||||
v -0.153247 -0.030483 -0.500000
|
||||
v -0.153247 -0.030483 -0.468750
|
||||
v -0.153247 0.030483 -0.500000
|
||||
v -0.153247 0.030483 -0.468750
|
||||
v -0.129917 0.086808 -0.500000
|
||||
v -0.129917 0.086808 -0.468750
|
||||
v -0.086808 0.129917 -0.500000
|
||||
v -0.086808 0.129917 -0.468750
|
||||
v -0.030483 0.153248 -0.500000
|
||||
v -0.030483 0.153248 -0.468750
|
||||
v 0.030483 0.153248 -0.500000
|
||||
v 0.030483 0.153248 -0.468750
|
||||
v 0.086808 0.129917 -0.500000
|
||||
v 0.086808 0.129917 -0.468750
|
||||
v 0.129917 0.086808 -0.500000
|
||||
v 0.129917 0.086808 -0.468750
|
||||
v 0.153248 0.030483 -0.500000
|
||||
v 0.153248 0.030483 -0.468750
|
||||
v 0.153248 -0.030483 -0.500000
|
||||
v 0.153248 -0.030483 -0.468750
|
||||
v 0.129917 -0.086807 -0.500000
|
||||
v 0.129917 -0.086808 -0.468750
|
||||
v 0.086808 -0.129917 -0.500000
|
||||
v 0.086808 -0.129917 -0.468750
|
||||
v 0.030483 -0.153247 -0.500000
|
||||
v 0.030483 -0.153247 -0.468750
|
||||
v -0.030483 -0.153247 -0.500000
|
||||
v -0.030483 -0.153247 -0.468750
|
||||
v 0.122598 -0.024386 -0.468750
|
||||
v 0.122598 0.024387 -0.468750
|
||||
v 0.103934 0.069447 -0.468750
|
||||
v 0.069447 0.103934 -0.468750
|
||||
v 0.024387 0.122598 -0.468750
|
||||
v -0.024386 0.122598 -0.468750
|
||||
v -0.069446 0.103934 -0.468750
|
||||
v -0.103933 0.069447 -0.468750
|
||||
v -0.122598 0.024387 -0.468750
|
||||
v -0.122598 -0.024386 -0.468750
|
||||
v -0.103933 -0.069446 -0.468750
|
||||
v -0.069446 -0.103933 -0.468750
|
||||
v 0.000000 0.000000 -0.468750
|
||||
v 0.000000 0.000000 -0.500000
|
||||
vt 0.265625 0.234375
|
||||
vt 0.468750 0.234375
|
||||
vt 0.468750 0.265625
|
||||
@ -262,40 +261,6 @@ vt 0.585938 0.257812
|
||||
vt 0.585938 0.007812
|
||||
vt 0.617188 0.007812
|
||||
vt 0.617188 0.257812
|
||||
vt 0.538433 0.340928
|
||||
vt 0.568449 0.328495
|
||||
vt 0.584693 0.410160
|
||||
vt 0.515460 0.363901
|
||||
vt 0.503028 0.393916
|
||||
vt 0.503028 0.426405
|
||||
vt 0.515460 0.456420
|
||||
vt 0.538433 0.479393
|
||||
vt 0.568449 0.491826
|
||||
vt 0.600937 0.491826
|
||||
vt 0.630952 0.479393
|
||||
vt 0.653925 0.456420
|
||||
vt 0.666358 0.426405
|
||||
vt 0.666358 0.393916
|
||||
vt 0.653925 0.363901
|
||||
vt 0.630952 0.340928
|
||||
vt 0.600937 0.328495
|
||||
vt 0.727611 0.340928
|
||||
vt 0.757626 0.328495
|
||||
vt 0.773870 0.410160
|
||||
vt 0.704638 0.363901
|
||||
vt 0.692205 0.393916
|
||||
vt 0.692205 0.426405
|
||||
vt 0.704638 0.456420
|
||||
vt 0.727611 0.479393
|
||||
vt 0.757626 0.491826
|
||||
vt 0.790115 0.491826
|
||||
vt 0.820130 0.479393
|
||||
vt 0.843103 0.456420
|
||||
vt 0.855535 0.426405
|
||||
vt 0.855535 0.393916
|
||||
vt 0.843103 0.363901
|
||||
vt 0.820130 0.340928
|
||||
vt 0.790115 0.328495
|
||||
vt 0.929688 0.257812
|
||||
vt 0.929688 0.007812
|
||||
vt 0.960938 0.007812
|
||||
@ -326,133 +291,151 @@ vt 0.492188 0.257812
|
||||
vt 0.492188 0.007812
|
||||
vt 0.992188 0.007812
|
||||
vt 0.992188 0.257812
|
||||
usemtl None
|
||||
vn 0.000000 0.000000 -1.000000
|
||||
vn 1.000000 0.000000 0.000000
|
||||
vn -0.000000 0.000000 1.000000
|
||||
vn -1.000000 0.000000 -0.000000
|
||||
vn 0.000000 -1.000000 0.000000
|
||||
vn 0.000000 1.000000 0.000000
|
||||
vn 0.382700 -0.923900 -0.000000
|
||||
vn 0.707100 -0.707100 -0.000000
|
||||
vn 0.923900 -0.382700 0.000000
|
||||
vn 0.923900 0.382700 0.000000
|
||||
vn 0.707100 0.707100 0.000000
|
||||
vn 0.382700 0.923900 0.000000
|
||||
vn -0.382700 0.923900 0.000000
|
||||
vn -0.707100 0.707100 0.000000
|
||||
vn -0.923900 0.382700 -0.000000
|
||||
vn -0.923900 -0.382700 -0.000000
|
||||
vn -0.382700 -0.923900 -0.000000
|
||||
vn -0.707100 -0.707100 -0.000000
|
||||
g Cube.003_Cube.003_None
|
||||
s off
|
||||
f 5/1 6/2 2/3 1/4
|
||||
f 6/5 7/6 3/7 2/8
|
||||
f 7/9 8/10 4/11 3/12
|
||||
f 8/13 5/14 1/15 4/16
|
||||
f 1/17 2/18 3/19 4/20
|
||||
f 8/21 7/22 6/23 5/24
|
||||
f 13/25 14/26 10/27 9/28
|
||||
f 14/29 15/30 11/31 10/32
|
||||
f 15/33 16/34 12/35 11/36
|
||||
f 16/37 13/38 9/39 12/40
|
||||
f 21/41 22/42 18/43 17/44
|
||||
f 22/45 23/46 19/47 18/48
|
||||
f 23/49 24/50 20/51 19/52
|
||||
f 24/53 21/54 17/55 20/56
|
||||
f 17/57 18/58 19/59 20/60
|
||||
f 24/61 23/62 22/63 21/64
|
||||
f 25/65 27/66 28/67 26/68
|
||||
f 27/66 29/69 30/70 28/67
|
||||
f 29/69 31/71 32/72 30/70
|
||||
f 31/71 33/73 34/74 32/72
|
||||
f 33/73 35/75 36/76 34/74
|
||||
f 35/75 37/77 38/78 36/76
|
||||
f 37/77 39/79 40/80 38/78
|
||||
f 39/79 41/81 42/82 40/80
|
||||
f 41/81 43/83 44/84 42/82
|
||||
f 43/83 45/85 46/86 44/84
|
||||
f 45/85 47/87 48/88 46/86
|
||||
f 47/87 49/89 50/90 48/88
|
||||
f 49/91 51/92 52/93 50/94
|
||||
f 51/92 53/95 54/96 52/93
|
||||
f 55/97 25/65 26/68 56/98
|
||||
f 53/95 55/97 56/98 54/96
|
||||
f 28/99 74/100 26/101
|
||||
f 25/102 73/103 27/104
|
||||
f 27/104 73/103 29/105
|
||||
f 29/105 73/103 31/106
|
||||
f 31/106 73/103 33/107
|
||||
f 33/107 73/103 35/108
|
||||
f 35/108 73/103 37/109
|
||||
f 37/109 73/103 39/110
|
||||
f 39/110 73/103 41/111
|
||||
f 41/111 73/103 43/112
|
||||
f 43/112 73/103 45/113
|
||||
f 45/113 73/103 47/114
|
||||
f 47/114 73/103 49/115
|
||||
f 49/115 73/103 51/116
|
||||
f 51/116 73/103 53/117
|
||||
f 53/117 73/103 55/118
|
||||
f 55/118 73/103 25/102
|
||||
f 26/101 74/100 56/119
|
||||
f 56/119 74/100 54/120
|
||||
f 54/120 74/100 52/121
|
||||
f 52/121 74/100 50/122
|
||||
f 50/122 74/100 48/123
|
||||
f 48/123 74/100 46/124
|
||||
f 46/124 74/100 44/125
|
||||
f 44/125 74/100 42/126
|
||||
f 42/126 74/100 40/127
|
||||
f 40/127 74/100 38/128
|
||||
f 38/128 74/100 36/129
|
||||
f 36/129 74/100 34/130
|
||||
f 34/130 74/100 32/131
|
||||
f 32/131 74/100 30/132
|
||||
f 30/132 74/100 28/99
|
||||
f 65/133 115/134 116/135 66/136
|
||||
f 105/137 107/138 124/139
|
||||
f 103/140 105/137 124/139
|
||||
f 101/141 103/140 124/139
|
||||
f 99/142 101/141 124/139
|
||||
f 97/143 99/142 124/139
|
||||
f 95/144 97/143 124/139
|
||||
f 93/145 95/144 124/139
|
||||
f 91/146 93/145 124/139
|
||||
f 89/147 91/146 124/139
|
||||
f 87/148 89/147 124/139
|
||||
f 85/149 87/148 124/139
|
||||
f 83/150 85/149 124/139
|
||||
f 81/151 83/150 124/139
|
||||
f 79/152 81/151 124/139
|
||||
f 109/153 79/152 124/139
|
||||
f 80/154 110/155 123/156
|
||||
f 82/157 80/154 123/156
|
||||
f 84/158 82/157 123/156
|
||||
f 86/159 84/158 123/156
|
||||
f 88/160 86/159 123/156
|
||||
f 90/161 88/160 123/156
|
||||
f 92/162 90/161 123/156
|
||||
f 94/163 92/162 123/156
|
||||
f 96/164 94/163 123/156
|
||||
f 98/165 96/164 123/156
|
||||
f 100/166 98/165 123/156
|
||||
f 102/167 100/166 123/156
|
||||
f 104/168 102/167 123/156
|
||||
f 106/169 104/168 123/156
|
||||
f 108/170 106/169 123/156
|
||||
f 110/155 108/170 123/156
|
||||
f 107/138 109/153 124/139
|
||||
f 82/86 81/85 79/83 80/84
|
||||
f 80/84 79/83 109/81 110/82
|
||||
f 84/88 83/87 81/85 82/86
|
||||
f 86/90 85/89 83/87 84/88
|
||||
f 88/93 87/92 85/91 86/94
|
||||
f 90/96 89/95 87/92 88/93
|
||||
f 92/98 91/97 89/95 90/96
|
||||
f 94/68 93/65 91/97 92/98
|
||||
f 96/67 95/66 93/65 94/68
|
||||
f 98/70 97/69 95/66 96/67
|
||||
f 100/72 99/71 97/69 98/70
|
||||
f 102/74 101/73 99/71 100/72
|
||||
f 104/76 103/75 101/73 102/74
|
||||
f 106/78 105/77 103/75 104/76
|
||||
f 108/80 107/79 105/77 106/78
|
||||
f 110/82 109/81 107/79 108/80
|
||||
f 60/171 75/172 111/173 61/174
|
||||
f 58/175 77/176 76/177 59/178
|
||||
f 71/179 121/180 122/181 72/182
|
||||
f 57/183 78/184 77/176 58/175
|
||||
f 59/178 76/177 75/172 60/171
|
||||
f 72/182 122/181 78/184 57/183
|
||||
f 70/185 120/186 121/180 71/179
|
||||
f 69/187 119/188 120/186 70/185
|
||||
f 68/189 118/190 119/188 69/187
|
||||
f 67/191 117/192 118/190 68/189
|
||||
f 66/136 116/135 117/192 67/191
|
||||
f 64/193 114/194 115/134 65/133
|
||||
f 63/195 113/196 114/194 64/193
|
||||
f 62/197 112/198 113/196 63/195
|
||||
f 61/174 111/173 112/199 62/200
|
||||
f 5/1/1 6/2/1 2/3/1 1/4/1
|
||||
f 6/5/2 7/6/2 3/7/2 2/8/2
|
||||
f 7/9/3 8/10/3 4/11/3 3/12/3
|
||||
f 8/13/4 5/14/4 1/15/4 4/16/4
|
||||
f 1/17/5 2/18/5 3/19/5 4/20/5
|
||||
f 8/21/6 7/22/6 6/23/6 5/24/6
|
||||
f 13/25/1 14/26/1 10/27/1 9/28/1
|
||||
f 14/29/2 15/30/2 11/31/2 10/32/2
|
||||
f 15/33/3 16/34/3 12/35/3 11/36/3
|
||||
f 16/37/4 13/38/4 9/39/4 12/40/4
|
||||
f 21/41/1 22/42/1 18/43/1 17/44/1
|
||||
f 22/45/2 23/46/2 19/47/2 18/48/2
|
||||
f 23/49/3 24/50/3 20/51/3 19/52/3
|
||||
f 24/53/4 21/54/4 17/55/4 20/56/4
|
||||
f 17/57/5 18/58/5 19/59/5 20/60/5
|
||||
f 24/61/6 23/62/6 22/63/6 21/64/6
|
||||
f 25/65/5 27/66/5 28/67/5 26/68/5
|
||||
f 27/66/7 29/69/7 30/70/7 28/67/7
|
||||
f 29/69/8 31/71/8 32/72/8 30/70/8
|
||||
f 31/71/9 33/73/9 34/74/9 32/72/9
|
||||
f 33/73/2 35/75/2 36/76/2 34/74/2
|
||||
f 35/75/10 37/77/10 38/78/10 36/76/10
|
||||
f 37/77/11 39/79/11 40/80/11 38/78/11
|
||||
f 39/79/12 41/81/12 42/82/12 40/80/12
|
||||
f 41/81/6 43/83/6 44/84/6 42/82/6
|
||||
f 43/83/13 45/85/13 46/86/13 44/84/13
|
||||
f 45/85/14 47/87/14 48/88/14 46/86/14
|
||||
f 47/87/15 49/89/15 50/90/15 48/88/15
|
||||
f 49/91/4 51/92/4 52/93/4 50/94/4
|
||||
f 51/92/16 53/95/16 54/96/16 52/93/16
|
||||
f 55/97/17 25/65/17 26/68/17 56/98/17
|
||||
f 53/95/18 55/97/18 56/98/18 54/96/18
|
||||
f 28/99/3 74/100/3 26/101/3
|
||||
f 25/102/1 73/103/1 27/104/1
|
||||
f 27/104/1 73/103/1 29/105/1
|
||||
f 29/105/1 73/103/1 31/106/1
|
||||
f 31/106/1 73/103/1 33/107/1
|
||||
f 33/107/1 73/103/1 35/108/1
|
||||
f 35/108/1 73/103/1 37/109/1
|
||||
f 37/109/1 73/103/1 39/110/1
|
||||
f 39/110/1 73/103/1 41/111/1
|
||||
f 41/111/1 73/103/1 43/112/1
|
||||
f 43/112/1 73/103/1 45/113/1
|
||||
f 45/113/1 73/103/1 47/114/1
|
||||
f 47/114/1 73/103/1 49/115/1
|
||||
f 49/115/1 73/103/1 51/116/1
|
||||
f 51/116/1 73/103/1 53/117/1
|
||||
f 53/117/1 73/103/1 55/118/1
|
||||
f 55/118/1 73/103/1 25/102/1
|
||||
f 26/101/3 74/100/3 56/119/3
|
||||
f 56/119/3 74/100/3 54/120/3
|
||||
f 54/120/3 74/100/3 52/121/3
|
||||
f 52/121/3 74/100/3 50/122/3
|
||||
f 50/122/3 74/100/3 48/123/3
|
||||
f 48/123/3 74/100/3 46/124/3
|
||||
f 46/124/3 74/100/3 44/125/3
|
||||
f 44/125/3 74/100/3 42/126/3
|
||||
f 42/126/3 74/100/3 40/127/3
|
||||
f 40/127/3 74/100/3 38/128/3
|
||||
f 38/128/3 74/100/3 36/129/3
|
||||
f 36/129/3 74/100/3 34/130/3
|
||||
f 34/130/3 74/100/3 32/131/3
|
||||
f 32/131/3 74/100/3 30/132/3
|
||||
f 30/132/3 74/100/3 28/99/3
|
||||
f 65/133/6 115/134/6 116/135/6 66/136/6
|
||||
f 105/119/1 107/101/1 124/100/1
|
||||
f 103/120/1 105/119/1 124/100/1
|
||||
f 101/121/1 103/120/1 124/100/1
|
||||
f 99/122/1 101/121/1 124/100/1
|
||||
f 97/123/1 99/122/1 124/100/1
|
||||
f 95/124/1 97/123/1 124/100/1
|
||||
f 93/125/1 95/124/1 124/100/1
|
||||
f 91/126/1 93/125/1 124/100/1
|
||||
f 89/127/1 91/126/1 124/100/1
|
||||
f 87/128/1 89/127/1 124/100/1
|
||||
f 85/129/1 87/128/1 124/100/1
|
||||
f 83/130/1 85/129/1 124/100/1
|
||||
f 81/131/1 83/130/1 124/100/1
|
||||
f 79/132/1 81/131/1 124/100/1
|
||||
f 109/99/1 79/132/1 124/100/1
|
||||
f 80/118/3 110/102/3 123/103/3
|
||||
f 82/117/3 80/118/3 123/103/3
|
||||
f 84/116/3 82/117/3 123/103/3
|
||||
f 86/115/3 84/116/3 123/103/3
|
||||
f 88/114/3 86/115/3 123/103/3
|
||||
f 90/113/3 88/114/3 123/103/3
|
||||
f 92/112/3 90/113/3 123/103/3
|
||||
f 94/111/3 92/112/3 123/103/3
|
||||
f 96/110/3 94/111/3 123/103/3
|
||||
f 98/109/3 96/110/3 123/103/3
|
||||
f 100/108/3 98/109/3 123/103/3
|
||||
f 102/107/3 100/108/3 123/103/3
|
||||
f 104/106/3 102/107/3 123/103/3
|
||||
f 106/105/3 104/106/3 123/103/3
|
||||
f 108/104/3 106/105/3 123/103/3
|
||||
f 110/102/3 108/104/3 123/103/3
|
||||
f 107/101/1 109/99/1 124/100/1
|
||||
f 82/86/18 81/85/18 79/83/18 80/84/18
|
||||
f 80/84/17 79/83/17 109/81/17 110/82/17
|
||||
f 84/88/16 83/87/16 81/85/16 82/86/16
|
||||
f 86/90/4 85/89/4 83/87/4 84/88/4
|
||||
f 88/93/15 87/92/15 85/91/15 86/94/15
|
||||
f 90/96/14 89/95/14 87/92/14 88/93/14
|
||||
f 92/98/13 91/97/13 89/95/13 90/96/13
|
||||
f 94/68/6 93/65/6 91/97/6 92/98/6
|
||||
f 96/67/12 95/66/12 93/65/12 94/68/12
|
||||
f 98/70/11 97/69/11 95/66/11 96/67/11
|
||||
f 100/72/10 99/71/10 97/69/10 98/70/10
|
||||
f 102/74/2 101/73/2 99/71/2 100/72/2
|
||||
f 104/76/9 103/75/9 101/73/9 102/74/9
|
||||
f 106/78/8 105/77/8 103/75/8 104/76/8
|
||||
f 108/80/7 107/79/7 105/77/7 106/78/7
|
||||
f 110/82/5 109/81/5 107/79/5 108/80/5
|
||||
f 60/137/9 75/138/9 111/139/9 61/140/9
|
||||
f 58/141/7 77/142/7 76/143/7 59/144/7
|
||||
f 71/145/18 121/146/18 122/147/18 72/148/18
|
||||
f 57/149/5 78/150/5 77/142/5 58/141/5
|
||||
f 59/144/8 76/143/8 75/138/8 60/137/8
|
||||
f 72/148/17 122/147/17 78/150/17 57/149/17
|
||||
f 70/151/16 120/152/16 121/146/16 71/145/16
|
||||
f 69/153/4 119/154/4 120/152/4 70/151/4
|
||||
f 68/155/15 118/156/15 119/154/15 69/153/15
|
||||
f 67/157/14 117/158/14 118/156/14 68/155/14
|
||||
f 66/136/13 116/135/13 117/158/13 67/157/13
|
||||
f 64/159/12 114/160/12 115/134/12 65/133/12
|
||||
f 63/161/11 113/162/11 114/160/11 64/159/11
|
||||
f 62/163/10 112/164/10 113/162/10 63/161/10
|
||||
f 61/140/2 111/139/2 112/165/2 62/166/2
|
||||
|
@ -1,131 +1,130 @@
|
||||
# Blender v2.69 (sub 0) OBJ File: 'pipe-valve-on.blend'
|
||||
# Blender v2.72 (sub 0) OBJ File: 'pipe-valve-on.blend'
|
||||
# www.blender.org
|
||||
mtllib pipeworks_valve_on.mtl
|
||||
o Cube.003
|
||||
v 0.312500 0.281250 0.062500
|
||||
v -0.093750 0.281250 0.062500
|
||||
v -0.093750 0.281250 -0.062500
|
||||
v 0.312500 0.281250 -0.062500
|
||||
v 0.312500 0.343750 0.062500
|
||||
v -0.093750 0.343750 0.062500
|
||||
v -0.093750 0.343750 -0.062500
|
||||
v 0.312500 0.343750 -0.062500
|
||||
v 0.062500 0.281250 -0.312500
|
||||
v 0.062500 0.281250 0.093750
|
||||
v -0.062500 0.281250 0.093750
|
||||
v -0.062500 0.281250 -0.312500
|
||||
v 0.062500 0.343750 -0.312500
|
||||
v 0.062500 0.343750 0.093750
|
||||
v -0.062500 0.343750 0.093750
|
||||
v -0.062500 0.343750 -0.312500
|
||||
v -0.031250 0.250000 -0.031250
|
||||
v 0.031250 0.250000 -0.031250
|
||||
v 0.031250 0.250000 0.031250
|
||||
v -0.031250 0.250000 0.031250
|
||||
v -0.031250 0.250000 -0.031250
|
||||
v -0.031250 0.281250 -0.031250
|
||||
v 0.031250 0.281250 -0.031250
|
||||
v 0.031250 0.281250 0.031250
|
||||
v -0.031250 0.281250 0.031250
|
||||
v -0.031250 0.281250 -0.031250
|
||||
v -0.250000 -0.250000 -0.250000
|
||||
v 0.250000 -0.250000 -0.250000
|
||||
v 0.250000 -0.250000 0.250000
|
||||
v -0.250000 -0.250000 0.250000
|
||||
v -0.250000 -0.250000 -0.250000
|
||||
v -0.250000 0.250000 -0.250000
|
||||
v 0.250000 0.250000 -0.250000
|
||||
v 0.250000 0.250000 0.250000
|
||||
v -0.250000 0.250000 0.250000
|
||||
v -0.250000 0.250000 -0.250000
|
||||
v -0.468750 -0.153248 -0.030483
|
||||
v -0.500000 -0.153248 -0.030483
|
||||
v -0.468750 -0.153248 0.030483
|
||||
v -0.500000 -0.153248 0.030483
|
||||
v -0.468750 -0.129917 0.086808
|
||||
v -0.500000 -0.129917 0.086808
|
||||
v -0.468750 -0.086808 0.129917
|
||||
v -0.500000 -0.086808 0.129917
|
||||
v -0.468750 -0.030483 0.153248
|
||||
v -0.500000 -0.030483 0.153248
|
||||
v -0.468750 0.030483 0.153248
|
||||
v -0.500000 0.030483 0.153248
|
||||
v -0.468750 0.086808 0.129917
|
||||
v -0.500000 0.086808 0.129917
|
||||
v -0.468750 0.129917 0.086808
|
||||
v -0.500000 0.129917 0.086808
|
||||
v -0.468750 0.153248 0.030483
|
||||
v -0.500000 0.153247 0.030483
|
||||
v -0.468750 0.153248 -0.030483
|
||||
v -0.500000 0.153248 -0.030483
|
||||
v -0.468750 0.129917 -0.086808
|
||||
v -0.500000 0.129917 -0.086808
|
||||
v -0.468750 0.086808 -0.129917
|
||||
v -0.500000 0.086808 -0.129917
|
||||
v -0.468750 0.030483 -0.153248
|
||||
v -0.500000 0.030483 -0.153248
|
||||
v -0.468750 -0.030483 -0.153248
|
||||
v -0.500000 -0.030483 -0.153248
|
||||
v -0.468750 -0.086808 -0.129917
|
||||
v -0.500000 -0.086808 -0.129917
|
||||
v -0.468750 -0.129917 -0.086808
|
||||
v -0.500000 -0.129917 -0.086808
|
||||
v -0.468750 -0.122598 -0.024386
|
||||
v -0.468750 -0.122598 0.024386
|
||||
v -0.468750 -0.103934 0.069446
|
||||
v -0.468750 -0.069446 0.103934
|
||||
v -0.468750 -0.024386 0.122598
|
||||
v -0.468750 0.024386 0.122598
|
||||
v -0.468750 0.069446 0.103934
|
||||
v -0.468750 0.103934 0.069446
|
||||
v -0.468750 0.122598 0.024386
|
||||
v -0.468750 0.122598 -0.024386
|
||||
v -0.468750 0.103934 -0.069446
|
||||
v -0.468750 0.069446 -0.103934
|
||||
v -0.468750 0.024386 -0.122598
|
||||
v -0.468750 -0.024387 -0.122598
|
||||
v -0.468750 -0.069447 -0.103934
|
||||
v -0.468750 -0.103934 -0.069446
|
||||
v -0.468750 -0.000000 -0.000000
|
||||
v -0.500000 -0.000000 -0.000000
|
||||
v 0.468750 -0.069446 0.103934
|
||||
v 0.468750 -0.103933 0.069447
|
||||
v 0.468750 -0.122598 0.024387
|
||||
v 0.468750 -0.122598 -0.024386
|
||||
v 0.500000 -0.129917 -0.086807
|
||||
v 0.468750 -0.129917 -0.086807
|
||||
v 0.500000 -0.086808 -0.129917
|
||||
v 0.468750 -0.086808 -0.129917
|
||||
v 0.500000 -0.030483 -0.153247
|
||||
v 0.468750 -0.030483 -0.153247
|
||||
v 0.500000 0.030483 -0.153247
|
||||
v 0.468750 0.030483 -0.153247
|
||||
v 0.500000 0.086808 -0.129917
|
||||
v 0.468750 0.086808 -0.129917
|
||||
v 0.500000 0.129917 -0.086808
|
||||
v 0.468750 0.129917 -0.086808
|
||||
v 0.500000 0.153248 -0.030483
|
||||
v 0.468750 0.153248 -0.030483
|
||||
v 0.500000 0.153248 0.030483
|
||||
v 0.468750 0.153248 0.030483
|
||||
v 0.500000 0.129917 0.086808
|
||||
v 0.468750 0.129917 0.086808
|
||||
v 0.500000 0.086808 0.129917
|
||||
v 0.468750 0.086808 0.129917
|
||||
v 0.500000 0.030483 0.153248
|
||||
v 0.468750 0.030483 0.153248
|
||||
v 0.500000 -0.030483 0.153248
|
||||
v 0.468750 -0.030483 0.153248
|
||||
v 0.500000 -0.086807 0.129917
|
||||
v 0.468750 -0.086808 0.129917
|
||||
v 0.500000 -0.129917 0.086808
|
||||
v 0.468750 -0.129917 0.086808
|
||||
v 0.500000 -0.153247 0.030483
|
||||
v 0.468750 -0.153247 0.030483
|
||||
v 0.500000 -0.153247 -0.030483
|
||||
v 0.468750 -0.153247 -0.030483
|
||||
v 0.468750 -0.024386 0.122598
|
||||
v 0.468750 0.024387 0.122598
|
||||
v 0.468750 0.069447 0.103934
|
||||
v 0.468750 0.103934 0.069447
|
||||
v 0.468750 0.122598 0.024387
|
||||
v 0.468750 0.122598 -0.024386
|
||||
v 0.468750 0.103934 -0.069446
|
||||
v 0.468750 0.069447 -0.103933
|
||||
v 0.468750 0.024387 -0.122598
|
||||
v 0.468750 -0.024386 -0.122598
|
||||
v 0.468750 -0.069446 -0.103933
|
||||
v 0.468750 -0.103933 -0.069446
|
||||
v 0.468750 0.000000 0.000000
|
||||
v 0.500000 0.000000 0.000000
|
||||
v -0.030483 -0.153248 0.468750
|
||||
v -0.030483 -0.153248 0.500000
|
||||
v 0.030483 -0.153248 0.468750
|
||||
v 0.030483 -0.153248 0.500000
|
||||
v 0.086808 -0.129917 0.468750
|
||||
v 0.086808 -0.129917 0.500000
|
||||
v 0.129917 -0.086808 0.468750
|
||||
v 0.129917 -0.086808 0.500000
|
||||
v 0.153248 -0.030483 0.468750
|
||||
v 0.153248 -0.030483 0.500000
|
||||
v 0.153248 0.030483 0.468750
|
||||
v 0.153248 0.030483 0.500000
|
||||
v 0.129917 0.086808 0.468750
|
||||
v 0.129917 0.086808 0.500000
|
||||
v 0.086808 0.129917 0.468750
|
||||
v 0.086808 0.129917 0.500000
|
||||
v 0.030483 0.153248 0.468750
|
||||
v 0.030483 0.153247 0.500000
|
||||
v -0.030483 0.153248 0.468750
|
||||
v -0.030483 0.153248 0.500000
|
||||
v -0.086808 0.129917 0.468750
|
||||
v -0.086808 0.129917 0.500000
|
||||
v -0.129917 0.086808 0.468750
|
||||
v -0.129917 0.086808 0.500000
|
||||
v -0.153248 0.030483 0.468750
|
||||
v -0.153248 0.030483 0.500000
|
||||
v -0.153248 -0.030483 0.468750
|
||||
v -0.153248 -0.030483 0.500000
|
||||
v -0.129917 -0.086808 0.468750
|
||||
v -0.129917 -0.086808 0.500000
|
||||
v -0.086808 -0.129917 0.468750
|
||||
v -0.086808 -0.129917 0.500000
|
||||
v -0.024386 -0.122598 0.468750
|
||||
v 0.024386 -0.122598 0.468750
|
||||
v 0.069446 -0.103934 0.468750
|
||||
v 0.103934 -0.069446 0.468750
|
||||
v 0.122598 -0.024386 0.468750
|
||||
v 0.122598 0.024386 0.468750
|
||||
v 0.103934 0.069446 0.468750
|
||||
v 0.069446 0.103934 0.468750
|
||||
v 0.024386 0.122598 0.468750
|
||||
v -0.024386 0.122598 0.468750
|
||||
v -0.069446 0.103934 0.468750
|
||||
v -0.103934 0.069446 0.468750
|
||||
v -0.122598 0.024386 0.468750
|
||||
v -0.122598 -0.024387 0.468750
|
||||
v -0.103934 -0.069447 0.468750
|
||||
v -0.069446 -0.103934 0.468750
|
||||
v -0.000000 -0.000000 0.468750
|
||||
v -0.000000 -0.000000 0.500000
|
||||
v 0.103934 -0.069446 -0.468750
|
||||
v 0.069447 -0.103933 -0.468750
|
||||
v 0.024387 -0.122598 -0.468750
|
||||
v -0.024386 -0.122598 -0.468750
|
||||
v -0.086808 -0.129917 -0.500000
|
||||
v -0.086808 -0.129917 -0.468750
|
||||
v -0.129917 -0.086808 -0.500000
|
||||
v -0.129917 -0.086808 -0.468750
|
||||
v -0.153247 -0.030483 -0.500000
|
||||
v -0.153247 -0.030483 -0.468750
|
||||
v -0.153247 0.030483 -0.500000
|
||||
v -0.153247 0.030483 -0.468750
|
||||
v -0.129917 0.086808 -0.500000
|
||||
v -0.129917 0.086808 -0.468750
|
||||
v -0.086808 0.129917 -0.500000
|
||||
v -0.086808 0.129917 -0.468750
|
||||
v -0.030483 0.153248 -0.500000
|
||||
v -0.030483 0.153248 -0.468750
|
||||
v 0.030483 0.153248 -0.500000
|
||||
v 0.030483 0.153248 -0.468750
|
||||
v 0.086808 0.129917 -0.500000
|
||||
v 0.086808 0.129917 -0.468750
|
||||
v 0.129917 0.086808 -0.500000
|
||||
v 0.129917 0.086808 -0.468750
|
||||
v 0.153248 0.030483 -0.500000
|
||||
v 0.153248 0.030483 -0.468750
|
||||
v 0.153248 -0.030483 -0.500000
|
||||
v 0.153248 -0.030483 -0.468750
|
||||
v 0.129917 -0.086807 -0.500000
|
||||
v 0.129917 -0.086808 -0.468750
|
||||
v 0.086808 -0.129917 -0.500000
|
||||
v 0.086808 -0.129917 -0.468750
|
||||
v 0.030483 -0.153247 -0.500000
|
||||
v 0.030483 -0.153247 -0.468750
|
||||
v -0.030483 -0.153247 -0.500000
|
||||
v -0.030483 -0.153247 -0.468750
|
||||
v 0.122598 -0.024386 -0.468750
|
||||
v 0.122598 0.024387 -0.468750
|
||||
v 0.103934 0.069447 -0.468750
|
||||
v 0.069447 0.103934 -0.468750
|
||||
v 0.024387 0.122598 -0.468750
|
||||
v -0.024386 0.122598 -0.468750
|
||||
v -0.069446 0.103934 -0.468750
|
||||
v -0.103933 0.069447 -0.468750
|
||||
v -0.122598 0.024387 -0.468750
|
||||
v -0.122598 -0.024386 -0.468750
|
||||
v -0.103933 -0.069446 -0.468750
|
||||
v -0.069446 -0.103933 -0.468750
|
||||
v 0.000000 0.000000 -0.468750
|
||||
v 0.000000 0.000000 -0.500000
|
||||
vt 0.265625 0.234375
|
||||
vt 0.468750 0.234375
|
||||
vt 0.468750 0.265625
|
||||
@ -262,40 +261,6 @@ vt 0.585938 0.257812
|
||||
vt 0.585938 0.007812
|
||||
vt 0.617188 0.007812
|
||||
vt 0.617188 0.257812
|
||||
vt 0.538433 0.340928
|
||||
vt 0.568449 0.328495
|
||||
vt 0.584693 0.410160
|
||||
vt 0.515460 0.363901
|
||||
vt 0.503028 0.393916
|
||||
vt 0.503028 0.426405
|
||||
vt 0.515460 0.456420
|
||||
vt 0.538433 0.479393
|
||||
vt 0.568449 0.491826
|
||||
vt 0.600937 0.491826
|
||||
vt 0.630952 0.479393
|
||||
vt 0.653925 0.456420
|
||||
vt 0.666358 0.426405
|
||||
vt 0.666358 0.393916
|
||||
vt 0.653925 0.363901
|
||||
vt 0.630952 0.340928
|
||||
vt 0.600937 0.328495
|
||||
vt 0.727611 0.340928
|
||||
vt 0.757626 0.328495
|
||||
vt 0.773870 0.410160
|
||||
vt 0.704638 0.363901
|
||||
vt 0.692205 0.393916
|
||||
vt 0.692205 0.426405
|
||||
vt 0.704638 0.456420
|
||||
vt 0.727611 0.479393
|
||||
vt 0.757626 0.491826
|
||||
vt 0.790115 0.491826
|
||||
vt 0.820130 0.479393
|
||||
vt 0.843103 0.456420
|
||||
vt 0.855535 0.426405
|
||||
vt 0.855535 0.393916
|
||||
vt 0.843103 0.363901
|
||||
vt 0.820130 0.340928
|
||||
vt 0.790115 0.328495
|
||||
vt 0.929688 0.257812
|
||||
vt 0.929688 0.007812
|
||||
vt 0.960938 0.007812
|
||||
@ -326,133 +291,151 @@ vt 0.492188 0.257812
|
||||
vt 0.492188 0.007812
|
||||
vt 0.992188 0.007812
|
||||
vt 0.992188 0.257812
|
||||
usemtl None
|
||||
vn 1.000000 0.000000 0.000000
|
||||
vn -0.000000 0.000000 1.000000
|
||||
vn -1.000000 0.000000 -0.000000
|
||||
vn 0.000000 0.000000 -1.000000
|
||||
vn 0.000000 -1.000000 -0.000000
|
||||
vn 0.000000 1.000000 -0.000000
|
||||
vn 0.382700 -0.923900 -0.000000
|
||||
vn 0.707100 -0.707100 -0.000000
|
||||
vn 0.923900 -0.382700 0.000000
|
||||
vn 0.923900 0.382700 0.000000
|
||||
vn 0.707100 0.707100 0.000000
|
||||
vn 0.382700 0.923900 0.000000
|
||||
vn -0.382700 0.923900 0.000000
|
||||
vn -0.707100 0.707100 0.000000
|
||||
vn -0.923900 0.382700 -0.000000
|
||||
vn -0.923900 -0.382700 -0.000000
|
||||
vn -0.382700 -0.923900 -0.000000
|
||||
vn -0.707100 -0.707100 -0.000000
|
||||
g Cube.003_Cube.003_None
|
||||
s off
|
||||
f 5/1 6/2 2/3 1/4
|
||||
f 6/5 7/6 3/7 2/8
|
||||
f 7/9 8/10 4/11 3/12
|
||||
f 8/13 5/14 1/15 4/16
|
||||
f 1/17 2/18 3/19 4/20
|
||||
f 8/21 7/22 6/23 5/24
|
||||
f 13/25 14/26 10/27 9/28
|
||||
f 14/29 15/30 11/31 10/32
|
||||
f 15/33 16/34 12/35 11/36
|
||||
f 16/37 13/38 9/39 12/40
|
||||
f 21/41 22/42 18/43 17/44
|
||||
f 22/45 23/46 19/47 18/48
|
||||
f 23/49 24/50 20/51 19/52
|
||||
f 24/53 21/54 17/55 20/56
|
||||
f 17/57 18/58 19/59 20/60
|
||||
f 24/61 23/62 22/63 21/64
|
||||
f 25/65 27/66 28/67 26/68
|
||||
f 27/66 29/69 30/70 28/67
|
||||
f 29/69 31/71 32/72 30/70
|
||||
f 31/71 33/73 34/74 32/72
|
||||
f 33/73 35/75 36/76 34/74
|
||||
f 35/75 37/77 38/78 36/76
|
||||
f 37/77 39/79 40/80 38/78
|
||||
f 39/79 41/81 42/82 40/80
|
||||
f 41/81 43/83 44/84 42/82
|
||||
f 43/83 45/85 46/86 44/84
|
||||
f 45/85 47/87 48/88 46/86
|
||||
f 47/87 49/89 50/90 48/88
|
||||
f 49/91 51/92 52/93 50/94
|
||||
f 51/92 53/95 54/96 52/93
|
||||
f 55/97 25/65 26/68 56/98
|
||||
f 53/95 55/97 56/98 54/96
|
||||
f 28/99 74/100 26/101
|
||||
f 25/102 73/103 27/104
|
||||
f 27/104 73/103 29/105
|
||||
f 29/105 73/103 31/106
|
||||
f 31/106 73/103 33/107
|
||||
f 33/107 73/103 35/108
|
||||
f 35/108 73/103 37/109
|
||||
f 37/109 73/103 39/110
|
||||
f 39/110 73/103 41/111
|
||||
f 41/111 73/103 43/112
|
||||
f 43/112 73/103 45/113
|
||||
f 45/113 73/103 47/114
|
||||
f 47/114 73/103 49/115
|
||||
f 49/115 73/103 51/116
|
||||
f 51/116 73/103 53/117
|
||||
f 53/117 73/103 55/118
|
||||
f 55/118 73/103 25/102
|
||||
f 26/101 74/100 56/119
|
||||
f 56/119 74/100 54/120
|
||||
f 54/120 74/100 52/121
|
||||
f 52/121 74/100 50/122
|
||||
f 50/122 74/100 48/123
|
||||
f 48/123 74/100 46/124
|
||||
f 46/124 74/100 44/125
|
||||
f 44/125 74/100 42/126
|
||||
f 42/126 74/100 40/127
|
||||
f 40/127 74/100 38/128
|
||||
f 38/128 74/100 36/129
|
||||
f 36/129 74/100 34/130
|
||||
f 34/130 74/100 32/131
|
||||
f 32/131 74/100 30/132
|
||||
f 30/132 74/100 28/99
|
||||
f 65/133 115/134 116/135 66/136
|
||||
f 105/137 107/138 124/139
|
||||
f 103/140 105/137 124/139
|
||||
f 101/141 103/140 124/139
|
||||
f 99/142 101/141 124/139
|
||||
f 97/143 99/142 124/139
|
||||
f 95/144 97/143 124/139
|
||||
f 93/145 95/144 124/139
|
||||
f 91/146 93/145 124/139
|
||||
f 89/147 91/146 124/139
|
||||
f 87/148 89/147 124/139
|
||||
f 85/149 87/148 124/139
|
||||
f 83/150 85/149 124/139
|
||||
f 81/151 83/150 124/139
|
||||
f 79/152 81/151 124/139
|
||||
f 109/153 79/152 124/139
|
||||
f 80/154 110/155 123/156
|
||||
f 82/157 80/154 123/156
|
||||
f 84/158 82/157 123/156
|
||||
f 86/159 84/158 123/156
|
||||
f 88/160 86/159 123/156
|
||||
f 90/161 88/160 123/156
|
||||
f 92/162 90/161 123/156
|
||||
f 94/163 92/162 123/156
|
||||
f 96/164 94/163 123/156
|
||||
f 98/165 96/164 123/156
|
||||
f 100/166 98/165 123/156
|
||||
f 102/167 100/166 123/156
|
||||
f 104/168 102/167 123/156
|
||||
f 106/169 104/168 123/156
|
||||
f 108/170 106/169 123/156
|
||||
f 110/155 108/170 123/156
|
||||
f 107/138 109/153 124/139
|
||||
f 82/86 81/85 79/83 80/84
|
||||
f 80/84 79/83 109/81 110/82
|
||||
f 84/88 83/87 81/85 82/86
|
||||
f 86/90 85/89 83/87 84/88
|
||||
f 88/93 87/92 85/91 86/94
|
||||
f 90/96 89/95 87/92 88/93
|
||||
f 92/98 91/97 89/95 90/96
|
||||
f 94/68 93/65 91/97 92/98
|
||||
f 96/67 95/66 93/65 94/68
|
||||
f 98/70 97/69 95/66 96/67
|
||||
f 100/72 99/71 97/69 98/70
|
||||
f 102/74 101/73 99/71 100/72
|
||||
f 104/76 103/75 101/73 102/74
|
||||
f 106/78 105/77 103/75 104/76
|
||||
f 108/80 107/79 105/77 106/78
|
||||
f 110/82 109/81 107/79 108/80
|
||||
f 60/171 75/172 111/173 61/174
|
||||
f 58/175 77/176 76/177 59/178
|
||||
f 71/179 121/180 122/181 72/182
|
||||
f 57/183 78/184 77/176 58/175
|
||||
f 59/178 76/177 75/172 60/171
|
||||
f 72/182 122/181 78/184 57/183
|
||||
f 70/185 120/186 121/180 71/179
|
||||
f 69/187 119/188 120/186 70/185
|
||||
f 68/189 118/190 119/188 69/187
|
||||
f 67/191 117/192 118/190 68/189
|
||||
f 66/136 116/135 117/192 67/191
|
||||
f 64/193 114/194 115/134 65/133
|
||||
f 63/195 113/196 114/194 64/193
|
||||
f 62/197 112/198 113/196 63/195
|
||||
f 61/174 111/173 112/199 62/200
|
||||
f 5/1/1 6/2/1 2/3/1 1/4/1
|
||||
f 6/5/2 7/6/2 3/7/2 2/8/2
|
||||
f 7/9/3 8/10/3 4/11/3 3/12/3
|
||||
f 8/13/4 5/14/4 1/15/4 4/16/4
|
||||
f 1/17/5 2/18/5 3/19/5 4/20/5
|
||||
f 8/21/6 7/22/6 6/23/6 5/24/6
|
||||
f 13/25/4 14/26/4 10/27/4 9/28/4
|
||||
f 14/29/1 15/30/1 11/31/1 10/32/1
|
||||
f 15/33/2 16/34/2 12/35/2 11/36/2
|
||||
f 16/37/3 13/38/3 9/39/3 12/40/3
|
||||
f 21/41/4 22/42/4 18/43/4 17/44/4
|
||||
f 22/45/1 23/46/1 19/47/1 18/48/1
|
||||
f 23/49/2 24/50/2 20/51/2 19/52/2
|
||||
f 24/53/3 21/54/3 17/55/3 20/56/3
|
||||
f 17/57/5 18/58/5 19/59/5 20/60/5
|
||||
f 24/61/6 23/62/6 22/63/6 21/64/6
|
||||
f 25/65/5 27/66/5 28/67/5 26/68/5
|
||||
f 27/66/7 29/69/7 30/70/7 28/67/7
|
||||
f 29/69/8 31/71/8 32/72/8 30/70/8
|
||||
f 31/71/9 33/73/9 34/74/9 32/72/9
|
||||
f 33/73/1 35/75/1 36/76/1 34/74/1
|
||||
f 35/75/10 37/77/10 38/78/10 36/76/10
|
||||
f 37/77/11 39/79/11 40/80/11 38/78/11
|
||||
f 39/79/12 41/81/12 42/82/12 40/80/12
|
||||
f 41/81/6 43/83/6 44/84/6 42/82/6
|
||||
f 43/83/13 45/85/13 46/86/13 44/84/13
|
||||
f 45/85/14 47/87/14 48/88/14 46/86/14
|
||||
f 47/87/15 49/89/15 50/90/15 48/88/15
|
||||
f 49/91/3 51/92/3 52/93/3 50/94/3
|
||||
f 51/92/16 53/95/16 54/96/16 52/93/16
|
||||
f 55/97/17 25/65/17 26/68/17 56/98/17
|
||||
f 53/95/18 55/97/18 56/98/18 54/96/18
|
||||
f 28/99/2 74/100/2 26/101/2
|
||||
f 25/102/4 73/103/4 27/104/4
|
||||
f 27/104/4 73/103/4 29/105/4
|
||||
f 29/105/4 73/103/4 31/106/4
|
||||
f 31/106/4 73/103/4 33/107/4
|
||||
f 33/107/4 73/103/4 35/108/4
|
||||
f 35/108/4 73/103/4 37/109/4
|
||||
f 37/109/4 73/103/4 39/110/4
|
||||
f 39/110/4 73/103/4 41/111/4
|
||||
f 41/111/4 73/103/4 43/112/4
|
||||
f 43/112/4 73/103/4 45/113/4
|
||||
f 45/113/4 73/103/4 47/114/4
|
||||
f 47/114/4 73/103/4 49/115/4
|
||||
f 49/115/4 73/103/4 51/116/4
|
||||
f 51/116/4 73/103/4 53/117/4
|
||||
f 53/117/4 73/103/4 55/118/4
|
||||
f 55/118/4 73/103/4 25/102/4
|
||||
f 26/101/2 74/100/2 56/119/2
|
||||
f 56/119/2 74/100/2 54/120/2
|
||||
f 54/120/2 74/100/2 52/121/2
|
||||
f 52/121/2 74/100/2 50/122/2
|
||||
f 50/122/2 74/100/2 48/123/2
|
||||
f 48/123/2 74/100/2 46/124/2
|
||||
f 46/124/2 74/100/2 44/125/2
|
||||
f 44/125/2 74/100/2 42/126/2
|
||||
f 42/126/2 74/100/2 40/127/2
|
||||
f 40/127/2 74/100/2 38/128/2
|
||||
f 38/128/2 74/100/2 36/129/2
|
||||
f 36/129/2 74/100/2 34/130/2
|
||||
f 34/130/2 74/100/2 32/131/2
|
||||
f 32/131/2 74/100/2 30/132/2
|
||||
f 30/132/2 74/100/2 28/99/2
|
||||
f 65/133/6 115/134/6 116/135/6 66/136/6
|
||||
f 105/119/4 107/101/4 124/100/4
|
||||
f 103/120/4 105/119/4 124/100/4
|
||||
f 101/121/4 103/120/4 124/100/4
|
||||
f 99/122/4 101/121/4 124/100/4
|
||||
f 97/123/4 99/122/4 124/100/4
|
||||
f 95/124/4 97/123/4 124/100/4
|
||||
f 93/125/4 95/124/4 124/100/4
|
||||
f 91/126/4 93/125/4 124/100/4
|
||||
f 89/127/4 91/126/4 124/100/4
|
||||
f 87/128/4 89/127/4 124/100/4
|
||||
f 85/129/4 87/128/4 124/100/4
|
||||
f 83/130/4 85/129/4 124/100/4
|
||||
f 81/131/4 83/130/4 124/100/4
|
||||
f 79/132/4 81/131/4 124/100/4
|
||||
f 109/99/4 79/132/4 124/100/4
|
||||
f 80/118/2 110/102/2 123/103/2
|
||||
f 82/117/2 80/118/2 123/103/2
|
||||
f 84/116/2 82/117/2 123/103/2
|
||||
f 86/115/2 84/116/2 123/103/2
|
||||
f 88/114/2 86/115/2 123/103/2
|
||||
f 90/113/2 88/114/2 123/103/2
|
||||
f 92/112/2 90/113/2 123/103/2
|
||||
f 94/111/2 92/112/2 123/103/2
|
||||
f 96/110/2 94/111/2 123/103/2
|
||||
f 98/109/2 96/110/2 123/103/2
|
||||
f 100/108/2 98/109/2 123/103/2
|
||||
f 102/107/2 100/108/2 123/103/2
|
||||
f 104/106/2 102/107/2 123/103/2
|
||||
f 106/105/2 104/106/2 123/103/2
|
||||
f 108/104/2 106/105/2 123/103/2
|
||||
f 110/102/2 108/104/2 123/103/2
|
||||
f 107/101/4 109/99/4 124/100/4
|
||||
f 82/86/18 81/85/18 79/83/18 80/84/18
|
||||
f 80/84/17 79/83/17 109/81/17 110/82/17
|
||||
f 84/88/16 83/87/16 81/85/16 82/86/16
|
||||
f 86/90/3 85/89/3 83/87/3 84/88/3
|
||||
f 88/93/15 87/92/15 85/91/15 86/94/15
|
||||
f 90/96/14 89/95/14 87/92/14 88/93/14
|
||||
f 92/98/13 91/97/13 89/95/13 90/96/13
|
||||
f 94/68/6 93/65/6 91/97/6 92/98/6
|
||||
f 96/67/12 95/66/12 93/65/12 94/68/12
|
||||
f 98/70/11 97/69/11 95/66/11 96/67/11
|
||||
f 100/72/10 99/71/10 97/69/10 98/70/10
|
||||
f 102/74/1 101/73/1 99/71/1 100/72/1
|
||||
f 104/76/9 103/75/9 101/73/9 102/74/9
|
||||
f 106/78/8 105/77/8 103/75/8 104/76/8
|
||||
f 108/80/7 107/79/7 105/77/7 106/78/7
|
||||
f 110/82/5 109/81/5 107/79/5 108/80/5
|
||||
f 60/137/9 75/138/9 111/139/9 61/140/9
|
||||
f 58/141/7 77/142/7 76/143/7 59/144/7
|
||||
f 71/145/18 121/146/18 122/147/18 72/148/18
|
||||
f 57/149/5 78/150/5 77/142/5 58/141/5
|
||||
f 59/144/8 76/143/8 75/138/8 60/137/8
|
||||
f 72/148/17 122/147/17 78/150/17 57/149/17
|
||||
f 70/151/16 120/152/16 121/146/16 71/145/16
|
||||
f 69/153/3 119/154/3 120/152/3 70/151/3
|
||||
f 68/155/15 118/156/15 119/154/15 69/153/15
|
||||
f 67/157/14 117/158/14 118/156/14 68/155/14
|
||||
f 66/136/13 116/135/13 117/158/13 67/157/13
|
||||
f 64/159/12 114/160/12 115/134/12 65/133/12
|
||||
f 63/161/11 113/162/11 114/160/11 64/159/11
|
||||
f 62/163/10 112/164/10 113/162/10 63/161/10
|
||||
f 61/140/1 111/139/1 112/165/1 62/166/1
|
||||
|
@ -80,7 +80,8 @@ for index, connects in ipairs(cconnects) do
|
||||
end,
|
||||
after_dig_node = function(pos)
|
||||
pipeworks.scan_for_pipe_objects(pos)
|
||||
end
|
||||
end,
|
||||
on_rotate = false
|
||||
})
|
||||
|
||||
local pgroups = {snappy = 3, pipe = 1, not_in_creative_inventory = 1}
|
||||
@ -106,11 +107,13 @@ for index, connects in ipairs(cconnects) do
|
||||
walkable = true,
|
||||
drop = "pipeworks:pipe_1_empty",
|
||||
after_place_node = function(pos)
|
||||
minetest.set_node(pos, { name = "pipeworks:pipe_"..index.."_empty" })
|
||||
pipeworks.scan_for_pipe_objects(pos)
|
||||
end,
|
||||
after_dig_node = function(pos)
|
||||
pipeworks.scan_for_pipe_objects(pos)
|
||||
end
|
||||
end,
|
||||
on_rotate = false
|
||||
})
|
||||
|
||||
table.insert(pipes_empty_nodenames, "pipeworks:pipe_"..index.."_empty")
|
||||
@ -134,6 +137,8 @@ if REGISTER_COMPATIBILITY then
|
||||
after_place_node = function(pos)
|
||||
pipeworks.scan_for_pipe_objects(pos)
|
||||
end,
|
||||
on_rotate = false
|
||||
|
||||
})
|
||||
minetest.register_node(cloaded, {
|
||||
drawtype = "airlike",
|
||||
@ -145,6 +150,8 @@ if REGISTER_COMPATIBILITY then
|
||||
after_place_node = function(pos)
|
||||
pipeworks.scan_for_pipe_objects(pos)
|
||||
end,
|
||||
on_rotate = false
|
||||
|
||||
})
|
||||
for xm = 0, 1 do
|
||||
for xp = 0, 1 do
|
||||
|
@ -1,3 +1,4 @@
|
||||
|
||||
-- the default tube and default textures
|
||||
pipeworks.register_tube("pipeworks:tube", "Pneumatic tube segment")
|
||||
minetest.register_craft( {
|
||||
@ -9,18 +10,70 @@ minetest.register_craft( {
|
||||
},
|
||||
})
|
||||
|
||||
pipeworks.register_tube("pipeworks:broken_tube", {
|
||||
description = "Broken Tube (you hacker you)",
|
||||
plain = { { name = "pipeworks_broken_tube_plain.png", backface_culling = false, color = nodecolor } },
|
||||
noctr = { { name = "pipeworks_broken_tube_plain.png", backface_culling = false, color = nodecolor } },
|
||||
ends = { { name = "pipeworks_broken_tube_end.png", color = nodecolor } },
|
||||
short = { name = "pipeworks_broken_tube_short.png", color = nodecolor },
|
||||
node_def = {
|
||||
drop = "pipeworks:tube_1",
|
||||
groups = {not_in_creative_inventory = 1, tubedevice_receiver = 1},
|
||||
tube = {
|
||||
insert_object = function(pos, node, stack, direction)
|
||||
minetest.item_drop(stack, nil, pos)
|
||||
return ItemStack("")
|
||||
end,
|
||||
can_insert = function(pos,node,stack,direction)
|
||||
return true
|
||||
end,
|
||||
priority = 50,
|
||||
},
|
||||
on_punch = function(pos, node, puncher, pointed_thing)
|
||||
local itemstack = puncher:get_wielded_item()
|
||||
local wieldname = itemstack:get_name()
|
||||
local playername = puncher:get_player_name()
|
||||
print("[Pipeworks] "..playername.." struck a broken tube at "..minetest.pos_to_string(pos))
|
||||
if wieldname == "anvil:hammer"
|
||||
or wieldname == "cottages:hammer"
|
||||
or wieldname == "glooptest:hammer_steel"
|
||||
or wieldname == "glooptest:hammer_bronze"
|
||||
or wieldname == "glooptest:hammer_diamond"
|
||||
or wieldname == "glooptest:hammer_mese"
|
||||
or wieldname == "glooptest:hammer_alatro"
|
||||
or wieldname == "glooptest:hammer_arol" then
|
||||
local meta = minetest.get_meta(pos)
|
||||
local was_node = minetest.deserialize(meta:get_string("the_tube_was"))
|
||||
if was_node and was_node ~= "" then
|
||||
print(" with "..wieldname.." to repair it.")
|
||||
minetest.swap_node(pos, { name = was_node.name, param2 = was_node.param2 })
|
||||
pipeworks.scan_for_tube_objects(pos)
|
||||
itemstack:add_wear(1000)
|
||||
puncher:set_wielded_item(itemstack)
|
||||
return itemstack
|
||||
else
|
||||
print(" but it can't be repaired.")
|
||||
end
|
||||
else
|
||||
print(" with "..wieldname.." but that tool is too weak.")
|
||||
end
|
||||
end
|
||||
}
|
||||
})
|
||||
|
||||
-- the high priority tube is a low-cpu replacement for sorting tubes in situations
|
||||
-- where players would use them for simple routing (turning off paths)
|
||||
-- without doing actual sorting, like at outputs of tubedevices that might both accept and eject items
|
||||
if pipeworks.enable_priority_tube then
|
||||
local color = "#ff3030:128"
|
||||
local nodecolor = 0xffff3030
|
||||
pipeworks.register_tube("pipeworks:priority_tube", {
|
||||
description = "High Priority Tube Segment",
|
||||
inventory_image = "pipeworks_tube_inv.png^[colorize:" .. color,
|
||||
plain = { "pipeworks_tube_plain.png^[colorize:" .. color },
|
||||
noctr = { "pipeworks_tube_noctr.png^[colorize:" .. color },
|
||||
ends = { "pipeworks_tube_end.png^[colorize:" .. color },
|
||||
short = "pipeworks_tube_short.png^[colorize:" .. color,
|
||||
plain = { { name = "pipeworks_tube_plain.png", color = nodecolor } },
|
||||
noctr = { { name = "pipeworks_tube_noctr.png", color = nodecolor } },
|
||||
ends = { { name = "pipeworks_tube_end.png", color = nodecolor } },
|
||||
short = { name = "pipeworks_tube_short.png", color = nodecolor },
|
||||
node_def = {
|
||||
tube = { priority = 150 } -- higher than tubedevices (100)
|
||||
},
|
||||
@ -100,7 +153,7 @@ if pipeworks.enable_one_way_tube then
|
||||
return {velocity}
|
||||
end,
|
||||
can_insert = function(pos, node, stack, direction)
|
||||
local dir = minetest.facedir_to_right_dir(node.param2)
|
||||
local dir = pipeworks.facedir_to_right_dir(node.param2)
|
||||
return vector.equals(dir, direction)
|
||||
end,
|
||||
priority = 75 -- Higher than normal tubes, but lower than receivers
|
||||
|
70
mods/pipeworks/settingtypes.txt
Normal file
@ -0,0 +1,70 @@
|
||||
#Enable pipes.
|
||||
pipeworks_enable_pipes (Enable Pipes) bool true
|
||||
|
||||
#Enable autocrafter.
|
||||
pipeworks_enable_autocrafter (Enable Autocrafter) bool true
|
||||
|
||||
#Enable deployer.
|
||||
pipeworks_enable_deployer (Enable Deployer) bool true
|
||||
|
||||
#Enable dispenser.
|
||||
pipeworks_enable_dispenser (Enable Dispenser) bool true
|
||||
|
||||
#Enable node breaker.
|
||||
pipeworks_enable_node_breaker (Enable Node Breaker) bool true
|
||||
|
||||
#Enable teleport tube.
|
||||
pipeworks_enable_teleport_tube (Enable Teleport Tube) bool true
|
||||
|
||||
#Enable pipe devices.
|
||||
pipeworks_enable_pipe_devices (Enable Pipe Devices) bool true
|
||||
|
||||
#Enable redefines.
|
||||
pipeworks_enable_redefines (Enable Node Redefines) bool true
|
||||
|
||||
#Enable sorting tube.
|
||||
pipeworks_enable_mese_tube (Enable Sorting Tube) bool true
|
||||
|
||||
#Enable detector tube.
|
||||
pipeworks_enable_detector_tube (Enable Detector Tube) bool true
|
||||
|
||||
#Enable digiline detector tube.
|
||||
pipeworks_enable_digiline_detector_tube (Enable Digiline Detector Tube) bool true
|
||||
|
||||
#Enable mesecon signal conducting tube.
|
||||
pipeworks_enable_conductor_tube (Enable Conductor Tube) bool true
|
||||
|
||||
#Enable accelerator tube.
|
||||
pipeworks_enable_accelerator_tube (Enable Accelerator Tube) bool true
|
||||
|
||||
#Enable crossing tube.
|
||||
#It sends all incoming items to the other side, or if there is no other tube, it sends them back.
|
||||
pipeworks_enable_crossing_tube (Enable Crossing Tube) bool true
|
||||
|
||||
#Enable vacuum tube.
|
||||
#It picks up all items that lay around next to it.
|
||||
pipeworks_enable_sand_tube (Enable Vacuum Tube) bool true
|
||||
|
||||
#Enable mese vacuum tube.
|
||||
#It's like the normal vacuum tube with the
|
||||
#differance that you can set the radius up to 8 nodes.
|
||||
pipeworks_enable_mese_sand_tube (Enable Mese Vacuum Tube) bool true
|
||||
|
||||
#Enable one way tube.
|
||||
#It sends items only in one direction.
|
||||
#Use it to drop items out of tubes.
|
||||
pipeworks_enable_one_way_tube (Enable One Way Tube) bool true
|
||||
|
||||
#Enable high priority tube.
|
||||
#It has a very high priority and so, on crossings, the items will
|
||||
#always go to it if there are multible ways.
|
||||
pipeworks_enable_priority_tube (Enable High Priority Tube) bool true
|
||||
|
||||
#Enable cyclic mode.
|
||||
pipeworks_enable_cyclic_mode (Enable Cyclic Mode) bool true
|
||||
|
||||
#Drop on routing fail.
|
||||
pipeworks_drop_on_routing_fail (Drop On Routing Fail) bool false
|
||||
|
||||
#Delete item on clearobject.
|
||||
pipeworks_delete_item_on_clearobject (Delete Item On Clearobject) bool true
|
@ -1,5 +1,5 @@
|
||||
if pipeworks.enable_detector_tube then
|
||||
local detector_tube_step = 2 * tonumber(minetest.setting_get("dedicated_server_step"))
|
||||
local detector_tube_step = 5 * tonumber(minetest.setting_get("dedicated_server_step"))
|
||||
pipeworks.register_tube("pipeworks:detector_tube_on", {
|
||||
description = "Detecting Pneumatic Tube Segment on (you hacker you)",
|
||||
inventory_image = "pipeworks_detector_tube_inv.png",
|
||||
|
@ -1,3 +1,5 @@
|
||||
local fs_helpers = pipeworks.fs_helpers
|
||||
|
||||
if pipeworks.enable_mese_tube then
|
||||
local function update_formspec(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
@ -13,8 +15,12 @@ if pipeworks.enable_mese_tube then
|
||||
local buttons_formspec = ""
|
||||
for i = 0, 5 do
|
||||
buttons_formspec = buttons_formspec .. fs_helpers.cycling_button(meta,
|
||||
"image_button[7,"..(i)..";1,1", "l"..(i+1).."s",
|
||||
{{text="",texture="pipeworks_button_off.png", addopts="false;false;pipeworks_button_interm.png"}, {text="",texture="pipeworks_button_on.png", addopts="false;false;pipeworks_button_interm.png"}})
|
||||
"image_button[7,"..(i+0.2)..";1,0.6", "l"..(i+1).."s",
|
||||
{
|
||||
pipeworks.button_off,
|
||||
pipeworks.button_on
|
||||
}
|
||||
)
|
||||
end
|
||||
meta:set_string("formspec",
|
||||
"size[8,11]"..
|
||||
@ -31,7 +37,21 @@ if pipeworks.enable_mese_tube then
|
||||
"image[0,4;1,1;pipeworks_blue.png]"..
|
||||
"image[0,5;1,1;pipeworks_red.png]"..
|
||||
buttons_formspec..
|
||||
"list[current_player;main;0,7;8,4;]")
|
||||
"list[current_player;main;0,7;8,4;]" ..
|
||||
"listring[current_player;main]" ..
|
||||
"listring[current_player;main]" ..
|
||||
"listring[context;line1]" ..
|
||||
"listring[current_player;main]" ..
|
||||
"listring[context;line2]" ..
|
||||
"listring[current_player;main]" ..
|
||||
"listring[context;line3]" ..
|
||||
"listring[current_player;main]" ..
|
||||
"listring[context;line4]" ..
|
||||
"listring[current_player;main]" ..
|
||||
"listring[context;line5]" ..
|
||||
"listring[current_player;main]" ..
|
||||
"listring[context;line6]"
|
||||
)
|
||||
end
|
||||
|
||||
pipeworks.register_tube("pipeworks:mese_tube", {
|
||||
@ -119,8 +139,13 @@ if pipeworks.enable_mese_tube then
|
||||
if not pipeworks.may_configure(pos, player) then return 0 end
|
||||
update_formspec(pos) -- For old tubes
|
||||
local inv = minetest.get_meta(pos):get_inventory()
|
||||
inv:set_stack(from_list, from_index, ItemStack(""))
|
||||
return 0
|
||||
|
||||
if from_list:match("line%d") and to_list:match("line%d") then
|
||||
return count
|
||||
else
|
||||
inv:set_stack(from_list, from_index, ItemStack(""))
|
||||
return 0
|
||||
end
|
||||
end,
|
||||
},
|
||||
})
|
||||
|
@ -111,7 +111,7 @@ local function update_meta(meta, can_receive)
|
||||
meta:set_string("formspec","size[8.6,2.2]"..
|
||||
"field[0.6,0.6;7,1;channel;Channel:;${channel}]"..
|
||||
"label[7.3,0;Receive]"..
|
||||
"image_button[7.3,0.3;1,1;pipeworks_button_" .. cr_state .. ".png;cr" .. (can_receive and 0 or 1) .. ";;;false;pipeworks_button_interm.png]"..
|
||||
"image_button[7.3,0.3;1,0.6;pipeworks_button_" .. cr_state .. ".png;cr" .. (can_receive and 0 or 1) .. ";;;false;pipeworks_button_interm.png]"..
|
||||
"image[0.3,1.3;1,1;pipeworks_teleport_tube_inv.png]"..
|
||||
"label[1.6,1.2;channels are public by default]" ..
|
||||
"label[1.6,1.5;use <player>:<channel> for fully private channels]" ..
|
||||
|
BIN
mods/pipeworks/textures/pipeworks_broken_tube_end.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
BIN
mods/pipeworks/textures/pipeworks_broken_tube_inv.png
Normal file
After Width: | Height: | Size: 923 B |
BIN
mods/pipeworks/textures/pipeworks_broken_tube_noctr.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
BIN
mods/pipeworks/textures/pipeworks_broken_tube_plain.png
Normal file
After Width: | Height: | Size: 1.8 KiB |
BIN
mods/pipeworks/textures/pipeworks_broken_tube_short.png
Normal file
After Width: | Height: | Size: 830 B |
Before Width: | Height: | Size: 5.3 KiB After Width: | Height: | Size: 5.5 KiB |
Before Width: | Height: | Size: 5.8 KiB After Width: | Height: | Size: 6.2 KiB |
Before Width: | Height: | Size: 5.9 KiB After Width: | Height: | Size: 6.0 KiB |
@ -28,7 +28,8 @@ minetest.register_node("pipeworks:trashcan", {
|
||||
default.gui_bg_img..
|
||||
default.gui_slots..
|
||||
default.get_hotbar_bg(0,3) ..
|
||||
"list[current_player;main;0,3;8,4;]")
|
||||
"list[current_player;main;0,3;8,4;]" ..
|
||||
"listring[]")
|
||||
meta:set_string("infotext", "Trash Can")
|
||||
meta:get_inventory():set_size("trash", 1)
|
||||
end,
|
||||
|
@ -38,13 +38,13 @@ local register_one_tube = function(name, tname, dropname, desc, plain, noctrs, e
|
||||
local outboxes = {}
|
||||
local outsel = {}
|
||||
local outimgs = {}
|
||||
|
||||
|
||||
for i = 1, 6 do
|
||||
outimgs[vti[i]] = plain[i]
|
||||
end
|
||||
|
||||
|
||||
for _, v in ipairs(connects) do
|
||||
table.extend(outboxes, pipeworks.tube_boxes[v])
|
||||
pipeworks.table_extend(outboxes, pipeworks.tube_boxes[v])
|
||||
table.insert(outsel, pipeworks.tube_selectboxes[v])
|
||||
outimgs[vti[v]] = noctrs[v]
|
||||
end
|
||||
@ -73,10 +73,10 @@ local register_one_tube = function(name, tname, dropname, desc, plain, noctrs, e
|
||||
outsel = { -24/64, -10/64, -10/64, 24/64, 10/64, 10/64 }
|
||||
wscale = {x = 1, y = 1, z = 0.01}
|
||||
end
|
||||
|
||||
|
||||
local rname = string.format("%s_%s", name, tname)
|
||||
table.insert(tubenodes, rname)
|
||||
|
||||
|
||||
local nodedef = {
|
||||
description = tubedesc,
|
||||
drawtype = "nodebox",
|
||||
@ -107,12 +107,20 @@ local register_one_tube = function(name, tname, dropname, desc, plain, noctrs, e
|
||||
priority = 50
|
||||
},
|
||||
after_place_node = pipeworks.after_place,
|
||||
after_dig_node = pipeworks.after_dig
|
||||
after_dig_node = pipeworks.after_dig,
|
||||
on_blast = function(pos, intensity)
|
||||
if intensity > 1 + 3^0.5 then
|
||||
minetest.remove_node(pos)
|
||||
return {string.format("%s_%s", name, dropname)}
|
||||
end
|
||||
minetest.swap_node(pos, {name = "pipeworks:broken_tube_1"})
|
||||
pipeworks.scan_for_tube_objects(pos)
|
||||
end
|
||||
}
|
||||
if style == "6d" then
|
||||
nodedef.paramtype2 = "facedir"
|
||||
end
|
||||
|
||||
|
||||
if special == nil then special = {} end
|
||||
|
||||
for key, value in pairs(special) do
|
||||
@ -127,7 +135,7 @@ local register_one_tube = function(name, tname, dropname, desc, plain, noctrs, e
|
||||
nodedef.tube[key] = val
|
||||
end
|
||||
else
|
||||
nodedef[key] = table.recursive_replace(value, "#id", tname)
|
||||
nodedef[key] = pipeworks.table_recursive_replace(value, "#id", tname)
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -1,27 +1,27 @@
|
||||
if pipeworks.enable_sand_tube then
|
||||
pipeworks.register_tube("pipeworks:sand_tube", {
|
||||
description = "Vacuuming Pneumatic Tube Segment",
|
||||
inventory_image = "pipeworks_sand_tube_inv.png",
|
||||
short = "pipeworks_sand_tube_short.png",
|
||||
noctr = { "pipeworks_sand_tube_noctr.png" },
|
||||
plain = { "pipeworks_sand_tube_plain.png" },
|
||||
ends = { "pipeworks_sand_tube_end.png" },
|
||||
node_def = { groups = {vacuum_tube = 1}},
|
||||
description = "Vacuuming Pneumatic Tube Segment",
|
||||
inventory_image = "pipeworks_sand_tube_inv.png",
|
||||
short = "pipeworks_sand_tube_short.png",
|
||||
noctr = {"pipeworks_sand_tube_noctr.png"},
|
||||
plain = {"pipeworks_sand_tube_plain.png"},
|
||||
ends = {"pipeworks_sand_tube_end.png"},
|
||||
node_def = {groups = {vacuum_tube = 1}},
|
||||
})
|
||||
|
||||
minetest.register_craft( {
|
||||
output = "pipeworks:sand_tube_1 2",
|
||||
recipe = {
|
||||
{ "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" },
|
||||
{ "group:sand", "group:sand", "group:sand" },
|
||||
{ "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" }
|
||||
{"homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting"},
|
||||
{"group:sand", "group:sand", "group:sand"},
|
||||
{"homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting"}
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_craft( {
|
||||
output = "pipeworks:sand_tube_1",
|
||||
recipe = {
|
||||
{ "group:sand", "pipeworks:tube_1", "group:sand" },
|
||||
{"group:sand", "pipeworks:tube_1", "group:sand"},
|
||||
},
|
||||
})
|
||||
end
|
||||
@ -31,9 +31,9 @@ if pipeworks.enable_mese_sand_tube then
|
||||
description = "Adjustable Vacuuming Pneumatic Tube Segment",
|
||||
inventory_image = "pipeworks_mese_sand_tube_inv.png",
|
||||
short = "pipeworks_mese_sand_tube_short.png",
|
||||
noctr = { "pipeworks_mese_sand_tube_noctr.png" },
|
||||
plain = { "pipeworks_mese_sand_tube_plain.png" },
|
||||
ends = { "pipeworks_mese_sand_tube_end.png" },
|
||||
noctr = {"pipeworks_mese_sand_tube_noctr.png"},
|
||||
plain = {"pipeworks_mese_sand_tube_plain.png"},
|
||||
ends = {"pipeworks_mese_sand_tube_end.png"},
|
||||
node_def = {
|
||||
groups = {vacuum_tube = 1},
|
||||
on_construct = function(pos)
|
||||
@ -63,9 +63,9 @@ if pipeworks.enable_mese_sand_tube then
|
||||
minetest.register_craft( {
|
||||
output = "pipeworks:mese_sand_tube_1 2",
|
||||
recipe = {
|
||||
{ "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" },
|
||||
{ "group:sand", "default:mese_crystal", "group:sand" },
|
||||
{ "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" }
|
||||
{"homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" },
|
||||
{"group:sand", "default:mese_crystal", "group:sand" },
|
||||
{"homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" }
|
||||
},
|
||||
})
|
||||
|
||||
@ -82,23 +82,19 @@ if pipeworks.enable_mese_sand_tube then
|
||||
})
|
||||
end
|
||||
|
||||
local sqrt_3 = math.sqrt(3)
|
||||
local tube_inject_item = pipeworks.tube_inject_item
|
||||
local get_objects_inside_radius = minetest.get_objects_inside_radius
|
||||
local function vacuum(pos, radius)
|
||||
radius = radius + 0.5
|
||||
for _, object in pairs(get_objects_inside_radius(pos, sqrt_3 * radius)) do
|
||||
for _, object in pairs(minetest.get_objects_inside_radius(pos, math.sqrt(3) * radius)) do
|
||||
local lua_entity = object:get_luaentity()
|
||||
if not object:is_player() and lua_entity and lua_entity.name == "__builtin:item" then
|
||||
local obj_pos = object:getpos()
|
||||
local x1, y1, z1 = pos.x, pos.y, pos.z
|
||||
local x2, y2, z2 = obj_pos.x, obj_pos.y, obj_pos.z
|
||||
|
||||
if x1 - radius <= x2 and x2 <= x1 + radius
|
||||
and y1 - radius <= y2 and y2 <= y1 + radius
|
||||
and z1 - radius <= z2 and z2 <= z1 + radius then
|
||||
local minpos = vector.subtract(pos, radius)
|
||||
local maxpos = vector.add(pos, radius)
|
||||
if obj_pos.x >= minpos.x and obj_pos.x <= maxpos.x
|
||||
and obj_pos.y >= minpos.y and obj_pos.y <= maxpos.y
|
||||
and obj_pos.z >= minpos.z and obj_pos.z <= maxpos.z then
|
||||
if lua_entity.itemstring ~= "" then
|
||||
tube_inject_item(pos, pos, vector.new(0, 0, 0), lua_entity.itemstring)
|
||||
pipeworks.tube_inject_item(pos, pos, vector.new(0, 0, 0), lua_entity.itemstring)
|
||||
lua_entity.itemstring = ""
|
||||
end
|
||||
object:remove()
|
||||
@ -108,15 +104,15 @@ local function vacuum(pos, radius)
|
||||
end
|
||||
|
||||
minetest.register_abm({nodenames = {"group:vacuum_tube"},
|
||||
interval = 1,
|
||||
chance = 1,
|
||||
label = "Vacuum tubes",
|
||||
action = function(pos, node, active_object_count, active_object_count_wider)
|
||||
if node.name:find("pipeworks:sand_tube") then
|
||||
vacuum(pos, 2)
|
||||
else
|
||||
local radius = minetest.get_meta(pos):get_int("dist")
|
||||
vacuum(pos, radius)
|
||||
end
|
||||
end
|
||||
interval = 1,
|
||||
chance = 1,
|
||||
label = "Vacuum tubes",
|
||||
action = function(pos, node, active_object_count, active_object_count_wider)
|
||||
if node.name:find("pipeworks:sand_tube") then
|
||||
vacuum(pos, 2)
|
||||
else
|
||||
local radius = minetest.get_meta(pos):get_int("dist")
|
||||
vacuum(pos, radius)
|
||||
end
|
||||
end
|
||||
})
|
||||
|
@ -14,7 +14,8 @@ local function set_wielder_formspec(data, meta)
|
||||
"item_image[0,0;1,1;"..data.name_base.."_off]"..
|
||||
"label[1,0;"..minetest.formspec_escape(data.description).."]"..
|
||||
"list[current_name;"..minetest.formspec_escape(data.wield_inv_name)..";"..((8-data.wield_inv_width)*0.5)..",1;"..data.wield_inv_width..","..data.wield_inv_height..";]"..
|
||||
"list[current_player;main;0,"..(2+data.wield_inv_height)..";8,4;]")
|
||||
"list[current_player;main;0,"..(2+data.wield_inv_height)..";8,4;]" ..
|
||||
"listring[]")
|
||||
meta:set_string("infotext", data.description)
|
||||
end
|
||||
|
||||
|