mirror of
https://github.com/D00Med/scifi_nodes.git
synced 2024-12-22 16:10:18 +01:00
fix: only open second door next to this door
This commit is contained in:
parent
d48c185f34
commit
6010bad2e9
115
doors.lua
115
doors.lua
@ -124,6 +124,37 @@ for _, current_door in ipairs(doors) do
|
||||
minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z},{name="air"})
|
||||
end
|
||||
|
||||
local function change_adjacent(target, pos, node)
|
||||
local target_opposite, target_top
|
||||
if target == opened then
|
||||
target_top = opened_top
|
||||
target_opposite = closed
|
||||
else
|
||||
target_top = closed_top
|
||||
target_opposite = opened
|
||||
end
|
||||
|
||||
for offset = -1,1,2 do
|
||||
local x = pos.x
|
||||
local y = pos.y
|
||||
local z = pos.z
|
||||
|
||||
-- match param2=0 or param2=2
|
||||
if node.param2 % 2 == 0 then
|
||||
x = x + offset
|
||||
else
|
||||
z = z + offset
|
||||
end
|
||||
|
||||
local adjacent = minetest.get_node({x=x, y=y, z=z})
|
||||
if adjacent.name == target_opposite then
|
||||
minetest.set_node({x=x, y=y, z=z}, {name=target, param2 = adjacent.param2})
|
||||
minetest.set_node({x=x, y=y+1, z=z}, {name=target_top, param2 = adjacent.param2})
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
local function open_door(pos, node, player, itemstack, pointed_thing)
|
||||
-- play sound
|
||||
minetest.sound_play(sound,{
|
||||
@ -133,51 +164,12 @@ for _, current_door in ipairs(doors) do
|
||||
})
|
||||
|
||||
local timer = minetest.get_node_timer(pos)
|
||||
local a = minetest.get_node({x=pos.x, y=pos.y, z=pos.z-1})
|
||||
local b = minetest.get_node({x=pos.x, y=pos.y, z=pos.z+1})
|
||||
local c = minetest.get_node({x=pos.x+1, y=pos.y, z=pos.z})
|
||||
local d = minetest.get_node({x=pos.x-1, y=pos.y, z=pos.z})
|
||||
local e = minetest.get_node({x=pos.x+1, y=pos.y, z=pos.z-1})
|
||||
local f = minetest.get_node({x=pos.x-1, y=pos.y, z=pos.z-1})
|
||||
local g = minetest.get_node({x=pos.x+1, y=pos.y, z=pos.z+1})
|
||||
local h = minetest.get_node({x=pos.x-1, y=pos.y, z=pos.z+1})
|
||||
|
||||
|
||||
minetest.set_node(pos, {name=opened, param2=node.param2})
|
||||
minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z}, {name=opened_top, param2=node.param2})
|
||||
|
||||
if a.name == closed then
|
||||
minetest.set_node({x=pos.x, y=pos.y, z=pos.z-1}, {name=opened, param2=a.param2})
|
||||
minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z-1}, {name=opened_top, param2=a.param2})
|
||||
end
|
||||
if b.name == closed then
|
||||
minetest.set_node({x=pos.x, y=pos.y, z=pos.z+1}, {name=opened, param2=b.param2})
|
||||
minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z+1}, {name=opened_top, param2=b.param2})
|
||||
end
|
||||
if c.name == closed then
|
||||
minetest.set_node({x=pos.x+1, y=pos.y, z=pos.z}, {name=opened, param2=c.param2})
|
||||
minetest.set_node({x=pos.x+1,y=pos.y+1,z=pos.z}, {name=opened_top, param2=c.param2})
|
||||
end
|
||||
if d.name == closed then
|
||||
minetest.set_node({x=pos.x-1, y=pos.y, z=pos.z}, {name=opened, param2=d.param2})
|
||||
minetest.set_node({x=pos.x-1,y=pos.y+1,z=pos.z}, {name=opened_top, param2=d.param2})
|
||||
end
|
||||
if e.name == closed then
|
||||
minetest.set_node({x=pos.x+1, y=pos.y, z=pos.z-1}, {name=opened, param2=e.param2})
|
||||
minetest.set_node({x=pos.x+1, y=pos.y+1, z=pos.z-1}, {name=opened_top, param2=e.param2})
|
||||
end
|
||||
if f.name == closed then
|
||||
minetest.set_node({x=pos.x-1, y=pos.y, z=pos.z-1}, {name=opened, param2=f.param2})
|
||||
minetest.set_node({x=pos.x-1, y=pos.y+1, z=pos.z-1}, {name=opened_top, param2=f.param2})
|
||||
end
|
||||
if g.name == closed then
|
||||
minetest.set_node({x=pos.x+1, y=pos.y, z=pos.z+1}, {name=opened, param2=g.param2})
|
||||
minetest.set_node({x=pos.x+1, y=pos.y+1, z=pos.z+1}, {name=opened_top, param2=g.param2})
|
||||
end
|
||||
if h.name == closed then
|
||||
minetest.set_node({x=pos.x-1, y=pos.y, z=pos.z+1}, {name=opened, param2=h.param2})
|
||||
minetest.set_node({x=pos.x-1, y=pos.y+1, z=pos.z+1}, {name=opened_top, param2=h.param2})
|
||||
end
|
||||
change_adjacent(opened, pos, node)
|
||||
|
||||
timer:start(3)
|
||||
end
|
||||
|
||||
@ -195,50 +187,11 @@ for _, current_door in ipairs(doors) do
|
||||
})
|
||||
|
||||
local node = minetest.get_node(pos)
|
||||
local a = minetest.get_node({x=pos.x, y=pos.y, z=pos.z-1})
|
||||
local b = minetest.get_node({x=pos.x, y=pos.y, z=pos.z+1})
|
||||
local c = minetest.get_node({x=pos.x+1, y=pos.y, z=pos.z})
|
||||
local d = minetest.get_node({x=pos.x-1, y=pos.y, z=pos.z})
|
||||
local e = minetest.get_node({x=pos.x+1, y=pos.y, z=pos.z-1})
|
||||
local f = minetest.get_node({x=pos.x-1, y=pos.y, z=pos.z-1})
|
||||
local g = minetest.get_node({x=pos.x+1, y=pos.y, z=pos.z+1})
|
||||
local h = minetest.get_node({x=pos.x-1, y=pos.y, z=pos.z+1})
|
||||
|
||||
minetest.set_node(pos, {name=closed, param2=node.param2})
|
||||
minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z}, {name=closed_top, param2=node.param2})
|
||||
|
||||
if a.name == opened then
|
||||
minetest.set_node({x=pos.x, y=pos.y, z=pos.z-1}, {name=closed, param2=a.param2})
|
||||
minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z-1}, {name=closed_top, param2=a.param2})
|
||||
end
|
||||
if b.name == opened then
|
||||
minetest.set_node({x=pos.x, y=pos.y, z=pos.z+1}, {name=closed, param2=b.param2})
|
||||
minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z+1}, {name=closed_top, param2=b.param2})
|
||||
end
|
||||
if c.name == opened then
|
||||
minetest.set_node({x=pos.x+1, y=pos.y, z=pos.z}, {name=closed, param2=c.param2})
|
||||
minetest.set_node({x=pos.x+1,y=pos.y+1,z=pos.z}, {name=closed_top, param2=c.param2})
|
||||
end
|
||||
if d.name == opened then
|
||||
minetest.set_node({x=pos.x-1, y=pos.y, z=pos.z}, {name=closed, param2=d.param2})
|
||||
minetest.set_node({x=pos.x-1,y=pos.y+1,z=pos.z}, {name=closed_top, param2=d.param2})
|
||||
end
|
||||
if e.name == opened then
|
||||
minetest.set_node({x=pos.x+1, y=pos.y, z=pos.z-1}, {name=closed, param2=e.param2})
|
||||
minetest.set_node({x=pos.x+1, y=pos.y+1, z=pos.z-1}, {name=closed_top, param2=e.param2})
|
||||
end
|
||||
if f.name == opened then
|
||||
minetest.set_node({x=pos.x-1, y=pos.y, z=pos.z-1}, {name=closed, param2=f.param2})
|
||||
minetest.set_node({x=pos.x-1, y=pos.y+1, z=pos.z-1}, {name=closed_top, param2=f.param2})
|
||||
end
|
||||
if g.name == opened then
|
||||
minetest.set_node({x=pos.x+1, y=pos.y, z=pos.z+1}, {name=closed, param2=g.param2})
|
||||
minetest.set_node({x=pos.x+1, y=pos.y+1, z=pos.z+1}, {name=closed_top, param2=g.param2})
|
||||
end
|
||||
if h.name == opened then
|
||||
minetest.set_node({x=pos.x-1, y=pos.y, z=pos.z+1}, {name=closed, param2=h.param2})
|
||||
minetest.set_node({x=pos.x-1, y=pos.y+1, z=pos.z+1}, {name=closed_top, param2=h.param2})
|
||||
end
|
||||
change_adjacent(closed, pos, node)
|
||||
end
|
||||
|
||||
local mesecons_doors_rules = {
|
||||
|
Loading…
Reference in New Issue
Block a user