v0.3 further improvements

This commit is contained in:
Joachim Stolberg 2018-10-28 18:45:07 +01:00
parent d3ec70e7e0
commit 92f6d8ce55
5 changed files with 60 additions and 39 deletions

@ -63,4 +63,4 @@ default
## History
- 2018-10-20 v0.1 * Tested against hyperloop elevator.
- 2018-10-27 v0.2 * Tested against and enhanced for the hyperloop mod.
- 2018-10-27 v0.3 * Further improvements.

@ -33,8 +33,9 @@ function Tube:convert_tube_line(pos, dir)
local npos, node = self:get_next_node(pos, dir)
local dir1, dir2, num = self.convert_tube_clbk(npos, node.name, node.param2)
if dir1 then
self.clbk_after_place_tube(self:tube_data_to_table(npos, dir1, dir2 or tubelib2.Turn180Deg[dir1], num))
dir2 = dir2 or tubelib2.Turn180Deg[dir1]
self.clbk_after_place_tube(
self:tube_data_to_table(npos, dir1, dir2, num), {convert = true})
if tubelib2.Turn180Deg[dir] == dir1 then
return npos, dir2
else
@ -53,3 +54,11 @@ function Tube:convert_tube_line(pos, dir)
end
return pos, dir, cnt
end
function Tube:set_pairing(pos, peer_pos)
local tube_dir1 = self:store_teleport_data(pos, peer_pos)
local tube_dir2 = self:store_teleport_data(peer_pos, pos)
self:delete_tube_meta_data(pos, tube_dir1)
self:delete_tube_meta_data(peer_pos, tube_dir2)
end

@ -2,5 +2,6 @@ tubelib2 = {}
dofile(minetest.get_modpath("tubelib2") .. "/tube_api.lua")
dofile(minetest.get_modpath("tubelib2") .. "/internal.lua")
dofile(minetest.get_modpath("tubelib2") .. "/tube_test.lua")
dofile(minetest.get_modpath("tubelib2") .. "/convert.lua")
-- Only for testing/demo purposes
--dofile(minetest.get_modpath("tubelib2") .. "/tube_test.lua")

@ -13,7 +13,7 @@
]]--
-- Version for compatibility checks, see readme.md/history
tubelib2.version = 0.2
tubelib2.version = 0.3
-- for lazy programmers
local M = minetest.get_meta
@ -32,6 +32,32 @@ local function Tbl(list)
return tbl
end
local function after_place_node(self, pos)
-- Check all valid positions
for dir = 1,6 do
if self.allowed_6d_dirs[dir] then
self:delete_tube_meta_data(pos, dir)
local npos, d1, d2, num = self:add_tube_dir(pos, dir)
if npos then
self.clbk_after_place_tube(self:tube_data_to_table(npos, d1, d2, num))
end
end
end
end
local function after_dig_node(self, pos)
-- Check all valid positions
for dir = 1,6 do
if self.allowed_6d_dirs[dir] then
self:delete_tube_meta_data(pos, dir)
local npos, d1, d2, num = self:del_tube_dir(pos, dir)
if npos then
self.clbk_after_place_tube(self:tube_data_to_table(npos, d1, d2, num))
end
end
end
end
--
-- API Functions
--
@ -129,6 +155,11 @@ end
-- To be called after a secondary node is placed.
function Tube:after_place_node(pos, dir1, dir2)
if not dir1 and not dir2 then
after_place_node(self, pos)
return
end
self:delete_tube_meta_data(pos, dir1, dir2)
if dir1 then
@ -146,19 +177,6 @@ function Tube:after_place_node(pos, dir1, dir2)
end
end
-- To be called after a crossing node is placed.
function Tube:after_place_crossing_node(pos)
-- Check all valid positions
for dir = 1,6 do
if self.allowed_6d_dirs[dir] then
self:delete_tube_meta_data(pos, dir)
local npos, d1, d2, num = self:add_tube_dir(pos, dir)
if npos then
self.clbk_after_place_tube(self:tube_data_to_table(npos, d1, d2, num))
end
end
end
end
-- To be called after a tube/primary node is placed.
function Tube:after_place_tube(pos, placer, pointed_thing)
@ -191,6 +209,11 @@ end
-- To be called after a secondary node is removed.
function Tube:after_dig_node(pos, dir1, dir2)
if not dir1 and not dir2 then
after_dig_node(self, pos)
return
end
self:delete_tube_meta_data(pos, dir1, dir2)
local npos, d1, d2, num = self:del_tube_dir(pos, dir1)
@ -204,21 +227,6 @@ function Tube:after_dig_node(pos, dir1, dir2)
end
end
-- To be called after a crossing node is removed.
function Tube:after_dig_crossing_node(pos)
-- Check all valid positions
for dir = 1,6 do
if self.allowed_6d_dirs[dir] then
self:delete_tube_meta_data(pos, dir)
local npos, d1, d2, num = self:del_tube_dir(pos, dir)
if npos then
self.clbk_after_place_tube(self:tube_data_to_table(npos, d1, d2, num))
end
end
end
end
-- To be called after a tube node is removed.
function Tube:after_dig_tube(pos, oldnode, oldmetadata)
local dir1, dir2, num_tubes = self:decode_param2(oldnode.param2)

@ -30,13 +30,16 @@ local Tube = tubelib2.Tube:new({
primary_node_names = {"tubelib2:tubeS", "tubelib2:tubeA"},
secondary_node_names = {"default:chest", "default:chest_open",
"tubelib2:source", "tubelib2:teleporter"},
after_place_tube = function(pos, param2, tube_type, num_tubes)
after_place_tube = function(pos, param2, tube_type, num_tubes, tbl)
minetest.set_node(pos, {name = "tubelib2:tube"..tube_type, param2 = param2})
minetest.sound_play({
name="default_place_node_glass"},{
gain=1,
max_hear_distance=5,
loop=false})
if not tbl.convert then
minetest.sound_play({
name="default_place_node_glass"},{
gain=1,
max_hear_distance=5,
loop=false})
end
end,
})