This commit is contained in:
rnd 2015-05-06 14:56:42 +02:00
parent a8cc954ff7
commit 534ff33dde
5 changed files with 112 additions and 2 deletions

View File

@ -1,3 +1,4 @@
dofile(minetest.get_modpath("basic_machines").."/mark.lua") -- used for markings, borrowed and adapted from worldedit
dofile(minetest.get_modpath("basic_machines").."/mover.lua") dofile(minetest.get_modpath("basic_machines").."/mover.lua")
minetest.after(1, function() -- if you want keypad to open doors minetest.after(1, function() -- if you want keypad to open doors

97
mark.lua Normal file
View File

@ -0,0 +1,97 @@
-- rnd: code borrowed from machines, mark.lua
-- need for marking
machines = {}; machines.pos1 = {}; machines.pos2 = {};
machines.marker1 = {}
machines.marker2 = {}
machines.marker_region = {}
--marks machines region position 1
machines.mark_pos1 = function(name)
local pos1, pos2 = machines.pos1[name], machines.pos2[name]
if pos1 ~= nil then
--make area stay loaded
local manip = minetest.get_voxel_manip()
manip:read_from_map(pos1, pos1)
end
if machines.marker1[name] ~= nil then --marker already exists
machines.marker1[name]:remove() --remove marker
machines.marker1[name] = nil
end
if pos1 ~= nil then
--add marker
machines.marker1[name] = minetest.add_entity(pos1, "machines:pos1")
if machines.marker1[name] ~= nil then
machines.marker1[name]:get_luaentity().name = name
end
end
end
--marks machines region position 2
machines.mark_pos2 = function(name)
local pos1, pos2 = machines.pos1[name], machines.pos2[name]
if pos2 ~= nil then
--make area stay loaded
local manip = minetest.get_voxel_manip()
manip:read_from_map(pos2, pos2)
end
if machines.marker2[name] ~= nil then --marker already exists
machines.marker2[name]:remove() --remove marker
machines.marker2[name] = nil
end
if pos2 ~= nil then
--add marker
machines.marker2[name] = minetest.add_entity(pos2, "machines:pos2")
if machines.marker2[name] ~= nil then
machines.marker2[name]:get_luaentity().name = name
end
end
end
minetest.register_entity(":machines:pos1", {
initial_properties = {
visual = "cube",
visual_size = {x=1.1, y=1.1},
textures = {"machines_pos1.png", "machines_pos1.png",
"machines_pos1.png", "machines_pos1.png",
"machines_pos1.png", "machines_pos1.png"},
collisionbox = {-0.55, -0.55, -0.55, 0.55, 0.55, 0.55},
physical = false,
},
on_step = function(self, dtime)
if machines.marker1[self.name] == nil then
self.object:remove()
end
end,
on_punch = function(self, hitter)
self.object:remove()
machines.marker1[self.name] = nil
end,
})
minetest.register_entity(":machines:pos2", {
initial_properties = {
visual = "cube",
visual_size = {x=1.1, y=1.1},
textures = {"machines_pos2.png", "machines_pos2.png",
"machines_pos2.png", "machines_pos2.png",
"machines_pos2.png", "machines_pos2.png"},
collisionbox = {-0.55, -0.55, -0.55, 0.55, 0.55, 0.55},
physical = false,
},
on_step = function(self, dtime)
if machines.marker2[self.name] == nil then
self.object:remove()
end
end,
on_punch = function(self, hitter)
self.object:remove()
machines.marker2[self.name] = nil
end,
})

View File

@ -44,6 +44,9 @@ minetest.register_node("basic_machines:mover", {
x0=meta:get_int("x0");y0=meta:get_int("y0");z0=meta:get_int("z0"); x0=meta:get_int("x0");y0=meta:get_int("y0");z0=meta:get_int("z0");
x1=meta:get_int("x1");y1=meta:get_int("y1");z1=meta:get_int("z1"); x1=meta:get_int("x1");y1=meta:get_int("y1");z1=meta:get_int("z1");
x2=meta:get_int("x2");y2=meta:get_int("y2");z2=meta:get_int("z2"); x2=meta:get_int("x2");y2=meta:get_int("y2");z2=meta:get_int("z2");
machines.pos1[player:get_player_name()] = {x=pos.x+x1,y=pos.y+y1,z=pos.z+z1};machines.mark_pos1(player:get_player_name()) -- mark pos1
machines.pos2[player:get_player_name()] = {x=pos.x+x2,y=pos.y+y2,z=pos.z+z2};machines.mark_pos2(player:get_player_name()) -- mark pos2
prefer = meta:get_string("prefer");mode = meta:get_string("mode"); prefer = meta:get_string("prefer");mode = meta:get_string("mode");
local list_name = "nodemeta:"..pos.x..','..pos.y..','..pos.z local list_name = "nodemeta:"..pos.x..','..pos.y..','..pos.z
local form = local form =
@ -353,6 +356,7 @@ minetest.register_node("basic_machines:keypad", {
local x0,y0,z0,pass,iter,mode; local x0,y0,z0,pass,iter,mode;
x0=meta:get_int("x0");y0=meta:get_int("y0");z0=meta:get_int("z0");iter=meta:get_int("iter") or 1; x0=meta:get_int("x0");y0=meta:get_int("y0");z0=meta:get_int("z0");iter=meta:get_int("iter") or 1;
mode = meta:get_int("mode") or 1; mode = meta:get_int("mode") or 1;
machines.pos1[player:get_player_name()] = {x=pos.x+x0,y=pos.y+y0,z=pos.z+z0};machines.mark_pos1(player:get_player_name()) -- mark pos1
pass = meta:get_string("pass"); pass = meta:get_string("pass");
local form = local form =
@ -399,6 +403,10 @@ minetest.register_node("basic_machines:detector", {
local x0,y0,z0,x1,y1,z1,r,node,NOT; local x0,y0,z0,x1,y1,z1,r,node,NOT;
x0=meta:get_int("x0");y0=meta:get_int("y0");z0=meta:get_int("z0"); x0=meta:get_int("x0");y0=meta:get_int("y0");z0=meta:get_int("z0");
x1=meta:get_int("x1");y1=meta:get_int("y1");z1=meta:get_int("z1");r=meta:get_int("r"); x1=meta:get_int("x1");y1=meta:get_int("y1");z1=meta:get_int("z1");r=meta:get_int("r");
machines.pos1[player:get_player_name()] = {x=pos.x+x0,y=pos.y+y0,z=pos.z+z0};machines.mark_pos1(player:get_player_name()) -- mark pos1
machines.pos2[player:get_player_name()] = {x=pos.x+x1,y=pos.y+y1,z=pos.z+z1};machines.mark_pos2(player:get_player_name()) -- mark pos2
node=meta:get_string("node") or ""; node=meta:get_string("node") or "";
NOT=meta:get_int("NOT"); NOT=meta:get_int("NOT");
local list_name = "nodemeta:"..pos.x..','..pos.y..','..pos.z local list_name = "nodemeta:"..pos.x..','..pos.y..','..pos.z
@ -581,6 +589,7 @@ minetest.register_on_punchnode(function(pos, node, puncher, pointed_thing)
end end
punchset[name].pos1 = {x=pos.x,y=pos.y,z=pos.z};punchset[name].state = 2; punchset[name].pos1 = {x=pos.x,y=pos.y,z=pos.z};punchset[name].state = 2;
machines.pos1[name] = punchset[name].pos1;machines.mark_pos1(name) -- mark position
minetest.chat_send_player(name, "MOVER: Start position for mover set. Punch again to set end position.") minetest.chat_send_player(name, "MOVER: Start position for mover set. Punch again to set end position.")
return return
end end
@ -593,6 +602,8 @@ minetest.register_on_punchnode(function(pos, node, puncher, pointed_thing)
end end
punchset[name].pos2 = {x=pos.x,y=pos.y,z=pos.z}; punchset[name].state = 0; punchset[name].pos2 = {x=pos.x,y=pos.y,z=pos.z}; punchset[name].state = 0;
machines.pos2[name] = punchset[name].pos2;machines.mark_pos2(name) -- mark pos2
minetest.chat_send_player(name, "MOVER: End position for mover set.") minetest.chat_send_player(name, "MOVER: End position for mover set.")
local x = punchset[name].pos1.x-punchset[name].pos.x; local x = punchset[name].pos1.x-punchset[name].pos.x;
local y = punchset[name].pos1.y-punchset[name].pos.y; local y = punchset[name].pos1.y-punchset[name].pos.y;
@ -635,7 +646,7 @@ minetest.register_on_punchnode(function(pos, node, puncher, pointed_thing)
minetest.chat_send_player(name, "KEYPAD: Punch closer to keypad. reseting.") minetest.chat_send_player(name, "KEYPAD: Punch closer to keypad. reseting.")
punchset[name].state = 0; return punchset[name].state = 0; return
end end
machines.pos1[name] = pos;machines.mark_pos1(name) -- mark pos1
meta:set_int("x0",x);meta:set_int("y0",y);meta:set_int("z0",z); meta:set_int("x0",x);meta:set_int("y0",y);meta:set_int("z0",z);
punchset[name].state = 0 punchset[name].state = 0
minetest.chat_send_player(name, "KEYPAD: Keypad target set with coordinates " .. x .. " " .. y .. " " .. z) minetest.chat_send_player(name, "KEYPAD: Keypad target set with coordinates " .. x .. " " .. y .. " " .. z)
@ -665,6 +676,7 @@ minetest.register_on_punchnode(function(pos, node, puncher, pointed_thing)
end end
minetest.chat_send_player(name, "DETECTOR: Now punch the target machine.") minetest.chat_send_player(name, "DETECTOR: Now punch the target machine.")
punchset[name].pos1 = {x=pos.x,y=pos.y,z=pos.z}; punchset[name].pos1 = {x=pos.x,y=pos.y,z=pos.z};
machines.pos1[name] = pos;machines.mark_pos1(name) -- mark pos1
punchset[name].state = 2 punchset[name].state = 2
return return
end end
@ -680,7 +692,7 @@ minetest.register_on_punchnode(function(pos, node, puncher, pointed_thing)
punchset[name].state = 0; return punchset[name].state = 0; return
end end
minetest.chat_send_player(name, "DETECTOR: Setup complete.") minetest.chat_send_player(name, "DETECTOR: Setup complete.")
machines.pos2[name] = pos;machines.mark_pos2(name) -- mark pos2
local x = punchset[name].pos1.x-punchset[name].pos.x; local x = punchset[name].pos1.x-punchset[name].pos.x;
local y = punchset[name].pos1.y-punchset[name].pos.y; local y = punchset[name].pos1.y-punchset[name].pos.y;
local z = punchset[name].pos1.z-punchset[name].pos.z; local z = punchset[name].pos1.z-punchset[name].pos.z;

BIN
textures/machines_pos1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 203 B

BIN
textures/machines_pos2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 218 B