Fix laser shutoff bug
This commit is contained in:
parent
ae4e687363
commit
3aed046eb7
@ -34,9 +34,12 @@ local function get_positions(pos, mem, dir)
|
|||||||
mem.peer_node_pos = pos3
|
mem.peer_node_pos = pos3
|
||||||
local dist = vector.distance(pos1, pos3)
|
local dist = vector.distance(pos1, pos3)
|
||||||
if dist > GAP_MIN and dist <= GAP_MAX then
|
if dist > GAP_MIN and dist <= GAP_MAX then
|
||||||
return pos1, pos3
|
return true, pos1, pos3 -- new values
|
||||||
|
else
|
||||||
|
return false -- invalid values
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
return true -- no new values
|
||||||
end
|
end
|
||||||
|
|
||||||
-- return both both laser entities the pos and length
|
-- return both both laser entities the pos and length
|
||||||
@ -119,15 +122,15 @@ function techage.renew_laser(pos, force)
|
|||||||
end
|
end
|
||||||
mem.param2 = mem.param2 or minetest.get_node(pos).param2
|
mem.param2 = mem.param2 or minetest.get_node(pos).param2
|
||||||
local dir = minetest.facedir_to_dir(mem.param2)
|
local dir = minetest.facedir_to_dir(mem.param2)
|
||||||
local pos1, pos2 = get_positions(pos, mem, dir)
|
local res, pos1, pos2 = get_positions(pos, mem, dir)
|
||||||
if pos1 then
|
if pos1 then
|
||||||
local size, pos3, pos4 = get_laser_length_and_pos(pos1, pos2, dir)
|
local size, pos3, pos4 = get_laser_length_and_pos(pos1, pos2, dir)
|
||||||
if size then
|
if size then
|
||||||
add_laser(pos, pos3, pos4, size, mem.param2)
|
add_laser(pos, pos3, pos4, size, mem.param2)
|
||||||
return pos1, pos2
|
return res, pos1, pos2
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
return res
|
||||||
end
|
end
|
||||||
|
|
||||||
-- techage.del_laser(pos)
|
-- techage.del_laser(pos)
|
||||||
|
@ -39,7 +39,7 @@ minetest.register_node("techage:ta4_laser_emitter", {
|
|||||||
Cable:prepare_pairing(pos, tube_dir, "")
|
Cable:prepare_pairing(pos, tube_dir, "")
|
||||||
Cable:after_place_node(pos, {tube_dir})
|
Cable:after_place_node(pos, {tube_dir})
|
||||||
|
|
||||||
local pos1, pos2 = techage.renew_laser(pos, true)
|
local res, pos1, pos2 = techage.renew_laser(pos, true)
|
||||||
if pos1 then
|
if pos1 then
|
||||||
local node = techage.get_node_lvm(pos2)
|
local node = techage.get_node_lvm(pos2)
|
||||||
if node.name == "techage:ta4_laser_receiver" then
|
if node.name == "techage:ta4_laser_receiver" then
|
||||||
@ -57,13 +57,24 @@ minetest.register_node("techage:ta4_laser_emitter", {
|
|||||||
end,
|
end,
|
||||||
|
|
||||||
on_timer = function(pos, elapsed)
|
on_timer = function(pos, elapsed)
|
||||||
local pos1, pos2 = techage.renew_laser(pos)
|
local res, pos1, pos2 = techage.renew_laser(pos)
|
||||||
if pos1 then
|
if pos1 then
|
||||||
local node = techage.get_node_lvm(pos2)
|
local node = techage.get_node_lvm(pos2)
|
||||||
if node.name == "techage:ta4_laser_receiver" then
|
if node.name == "techage:ta4_laser_receiver" then
|
||||||
Cable:pairing(pos2, "laser")
|
Cable:pairing(pos2, "laser")
|
||||||
Cable:pairing(pos, "laser")
|
Cable:pairing(pos, "laser")
|
||||||
|
else
|
||||||
|
local metadata = M(pos):to_table()
|
||||||
|
Cable:stop_pairing(pos, metadata, "")
|
||||||
|
local tube_dir = tonumber(metadata.fields.tube_dir or 0)
|
||||||
|
Cable:after_dig_node(pos, {tube_dir})
|
||||||
end
|
end
|
||||||
|
elseif not res then
|
||||||
|
techage.del_laser(pos)
|
||||||
|
local metadata = M(pos):to_table()
|
||||||
|
Cable:stop_pairing(pos, metadata, "")
|
||||||
|
local tube_dir = tonumber(metadata.fields.tube_dir or 0)
|
||||||
|
Cable:after_dig_node(pos, {tube_dir})
|
||||||
end
|
end
|
||||||
return true
|
return true
|
||||||
end,
|
end,
|
||||||
|
Loading…
Reference in New Issue
Block a user