From 92f6d8ce5577cc89191a58a2d65ee53c05e4deb5 Mon Sep 17 00:00:00 2001 From: Joachim Stolberg Date: Sun, 28 Oct 2018 18:45:07 +0100 Subject: [PATCH] v0.3 further improvements --- README.md | 2 +- convert.lua | 13 ++++++++-- init.lua | 3 ++- tube_api.lua | 66 +++++++++++++++++++++++++++++---------------------- tube_test.lua | 15 +++++++----- 5 files changed, 60 insertions(+), 39 deletions(-) diff --git a/README.md b/README.md index ff64a9b..35cf992 100644 --- a/README.md +++ b/README.md @@ -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. diff --git a/convert.lua b/convert.lua index 29ca8c5..be4ce9c 100644 --- a/convert.lua +++ b/convert.lua @@ -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 diff --git a/init.lua b/init.lua index 70d352f..d57ea09 100644 --- a/init.lua +++ b/init.lua @@ -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") diff --git a/tube_api.lua b/tube_api.lua index 79e7c19..16b7f86 100644 --- a/tube_api.lua +++ b/tube_api.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) diff --git a/tube_test.lua b/tube_test.lua index de8a716..8e32b06 100644 --- a/tube_test.lua +++ b/tube_test.lua @@ -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, })