Make levers use node meta, to place on anything
parent
a83eab5fb5
commit
ed378531b4
|
@ -161,13 +161,20 @@ localredstone.injector = function(i)
|
|||
if not a_index[i.x][i.y][i.z] then a_index[i.x][i.y][i.z] = {} end
|
||||
a_index[i.x][i.y][i.z].redstone_activation = true
|
||||
end
|
||||
|
||||
--sneaky way to make levers and buttons work
|
||||
if get_meta(i):get_int("redstone_power") > 0 then
|
||||
if not r_index[i.x] then r_index[i.x] = {} end
|
||||
if not r_index[i.x][i.y] then r_index[i.x][i.y] = {} end
|
||||
r_index[i.x][i.y][i.z] = {torch = true,power=9}
|
||||
end
|
||||
end
|
||||
|
||||
localredstone.collector = function(pos)
|
||||
for x = -1,1 do
|
||||
for y = -1,1 do
|
||||
for z = -1,1 do
|
||||
if abs(x)+abs(y)+abs(z) == 1 then
|
||||
if abs(x)+abs(z) == 1 then
|
||||
localredstone.injector(add_vec(pos,new_vec(x,y,z)))
|
||||
end
|
||||
end
|
||||
|
@ -299,7 +306,7 @@ local function redstone_pathfinder(source,source_level,direction)
|
|||
for x = -1,1 do
|
||||
for y = -1,1 do
|
||||
for z = -1,1 do
|
||||
if not (abs(x)+abs(z) > 1) or (abs(x)+abs(z) == 0) then
|
||||
if abs(x)+abs(z) == 1 then
|
||||
i = add_vec(source,new_vec(x,y,z))
|
||||
if r_index and r_index[i.x] and r_index[i.x][i.y] and r_index[i.x][i.y][i.z] then
|
||||
index = r_index[i.x][i.y][i.z]
|
||||
|
|
|
@ -1,42 +1,5 @@
|
|||
|
||||
local minetest,vector,math,pairs = minetest,vector,math,pairs
|
||||
--create torch versions of the nodes
|
||||
for name,def in pairs(minetest.registered_nodes) do
|
||||
if def.drawtype == "normal" and string.match(name, "main:") then
|
||||
local def2 = table.copy(def)
|
||||
def2.groups.redstone_torch = 1
|
||||
def2.groups.redstone_power=9
|
||||
def2.drop = def.drop
|
||||
def2.mod_origin = "redstone"
|
||||
--def2.textures = "dirt.png"
|
||||
def2.after_destruct = function(pos, oldnode)
|
||||
redstone.collect_info(pos)
|
||||
end
|
||||
local newname = "redstone:node_activated_"..string.gsub(name, "main:", "")
|
||||
def2.name = newname
|
||||
def2.description = "Redstone "..def.description
|
||||
minetest.register_node(newname,def2)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
--this removes power from node that the lever is powering
|
||||
local function on_lever_destroy(pos)
|
||||
local param2 = minetest.get_node(pos).param2
|
||||
local self = minetest.get_node(pos)
|
||||
local dir = minetest.wallmounted_to_dir(self.param2)
|
||||
|
||||
local pos = vector.add(dir,pos)
|
||||
local node = minetest.get_node(pos)
|
||||
local name = node.name
|
||||
|
||||
local def = minetest.registered_nodes[name]
|
||||
if def.drawtype == "normal" and string.match(name, "redstone:node_activated_")then
|
||||
name = "main:"..string.gsub(name, "redstone:node_activated_", "")
|
||||
minetest.swap_node(pos, {name=name})
|
||||
redstone.collect_info(pos)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
minetest.register_node("redstone:lever_off", {
|
||||
|
@ -60,21 +23,28 @@ minetest.register_node("redstone:lever_off", {
|
|||
},
|
||||
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
|
||||
minetest.set_node(pos, {name="redstone:lever_on",param2=node.param2})
|
||||
minetest.sound_play("lever", {pos=pos})
|
||||
|
||||
local dir = minetest.wallmounted_to_dir(node.param2)
|
||||
local pos = vector.add(dir,pos)
|
||||
local name = minetest.get_node(pos).name
|
||||
local def = minetest.registered_nodes[name]
|
||||
pos = vector.add(dir,pos)
|
||||
|
||||
local meta = minetest.get_meta(pos)
|
||||
|
||||
meta:set_int("redstone_power", 9)
|
||||
|
||||
if def.drawtype == "normal" and string.match(name, "main:") then
|
||||
minetest.sound_play("lever", {pos=pos})
|
||||
name = "redstone:node_activated_"..string.gsub(name, "main:", "")
|
||||
minetest.swap_node(pos,{name=name})
|
||||
redstone.collect_info(pos)
|
||||
else
|
||||
minetest.sound_play("lever", {pos=pos,pitch=0.6})
|
||||
end
|
||||
|
||||
redstone.collect_info(pos)
|
||||
end,
|
||||
after_destruct = function(pos, oldnode)
|
||||
local dir = minetest.wallmounted_to_dir(oldnode.param2)
|
||||
pos = vector.add(dir,pos)
|
||||
|
||||
local meta = minetest.get_meta(pos)
|
||||
|
||||
meta:set_int("redstone_power", 0)
|
||||
|
||||
redstone.collect_info(pos)
|
||||
end,
|
||||
on_destruct = on_lever_destroy,
|
||||
})
|
||||
minetest.register_node("redstone:lever_on", {
|
||||
description = "Lever On",
|
||||
|
@ -96,9 +66,27 @@ minetest.register_node("redstone:lever_on", {
|
|||
},
|
||||
},
|
||||
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
|
||||
minetest.sound_play("lever", {pos=pos,pitch=0.8})
|
||||
minetest.set_node(pos, {name="redstone:lever_off",param2=node.param2})
|
||||
on_lever_destroy(pos)
|
||||
|
||||
minetest.sound_play("lever", {pos=pos})
|
||||
|
||||
local dir = minetest.wallmounted_to_dir(node.param2)
|
||||
pos = vector.add(dir,pos)
|
||||
|
||||
local meta = minetest.get_meta(pos)
|
||||
|
||||
meta:set_int("redstone_power", 0)
|
||||
|
||||
redstone.collect_info(pos)
|
||||
end,
|
||||
after_destruct = function(pos, oldnode)
|
||||
local dir = minetest.wallmounted_to_dir(oldnode.param2)
|
||||
pos = vector.add(dir,pos)
|
||||
|
||||
local meta = minetest.get_meta(pos)
|
||||
|
||||
meta:set_int("redstone_power", 0)
|
||||
|
||||
redstone.collect_info(pos)
|
||||
end,
|
||||
on_destruct = on_lever_destroy,
|
||||
})
|
||||
|
|
|
@ -13,7 +13,8 @@ minetest.register_node("redstone:light_on", {
|
|||
redstone_activation = function(pos)
|
||||
end,
|
||||
redstone_deactivation = function(pos)
|
||||
minetest.set_node(pos,{name="redstone:light_off"})
|
||||
minetest.set_node(pos,{name="redstone:light_off"})
|
||||
|
||||
end,
|
||||
})
|
||||
minetest.register_node("redstone:light_off", {
|
||||
|
|
Loading…
Reference in New Issue