dont use conductor

This commit is contained in:
HybridDog 2014-08-14 21:20:03 +02:00
parent 0c62545a3a
commit 3922514ac0

View File

@ -25,6 +25,50 @@ minetest.register_craft({
-- GHOSTSTONE
local function get_tab(pos, func)
local tab = {pos}
local tab_avoid = {[pos.x.." "..pos.y.." "..pos.z] = true}
local tab_done,num = {pos},2
while tab[1] do
for n,p in pairs(tab) do
for i = -1,1,2 do
for _,p2 in pairs({
{x=p.x+i, y=p.y, z=p.z},
{x=p.x, y=p.y+i, z=p.z},
{x=p.x, y=p.y, z=p.z+i},
}) do
local pstr = p2.x.." "..p2.y.." "..p2.z
if not tab_avoid[pstr]
and func(p2) then
tab_avoid[pstr] = true
tab_done[num] = p2
num = num+1
table.insert(tab, p2)
end
end
end
tab[n] = nil
end
end
return tab_done
end
local function is_ghoststone(pos)
return minetest.get_node(pos).name == "mesecons_random:ghoststone"
end
local function is_ghoststone_active(pos)
return minetest.get_node(pos).name == "mesecons_random:ghoststone_active"
end
local function update_ghoststones(pos, func, name)
func = func or is_ghoststone
name = name or "mesecons_random:ghoststone_active"
for _,p in pairs(get_tab(pos, func)) do
minetest.set_node(p, {name=name})
end
end
minetest.register_node("mesecons_random:ghoststone", {
description="ghoststone",
tiles = {"jeija_ghoststone.png"},
@ -32,18 +76,32 @@ minetest.register_node("mesecons_random:ghoststone", {
inventory_image = minetest.inventorycube("jeija_ghoststone_inv.png"),
groups = {cracky=3},
sounds = default.node_sound_stone_defaults(),
mesecons = {conductor = {
state = mesecon.state.off,
rules = { --axes
{x = -1, y = 0, z = 0},
{x = 1, y = 0, z = 0},
{x = 0, y = -1, z = 0},
{x = 0, y = 1, z = 0},
{x = 0, y = 0, z = -1},
{x = 0, y = 0, z = 1},
},
onstate = "mesecons_random:ghoststone_active"
}}
mesecons = {--[[conductor = {
state = mesecon.state.off,
rules = { --axes
{x = -1, y = 0, z = 0},
{x = 1, y = 0, z = 0},
{x = 0, y = -1, z = 0},
{x = 0, y = 1, z = 0},
{x = 0, y = 0, z = -1},
{x = 0, y = 0, z = 1},
},
onstate = "mesecons_random:ghoststone_active"
},]]
effector = {
rules = {
{x = -1, y = 0, z = 0},
{x = 1, y = 0, z = 0},
{x = 0, y = -1, z = 0},
{x = 0, y = 1, z = 0},
{x = 0, y = 0, z = -1},
{x = 0, y = 0, z = 1},
},
action_on = function(pos)
update_ghoststones(pos)
end
}
}
})
minetest.register_node("mesecons_random:ghoststone_active", {
@ -53,23 +111,37 @@ minetest.register_node("mesecons_random:ghoststone_active", {
diggable = false,
sunlight_propagates = true,
paramtype = "light",
mesecons = {conductor = {
state = mesecon.state.on,
rules = {
{x = -1, y = 0, z = 0},
{x = 1, y = 0, z = 0},
{x = 0, y = -1, z = 0},
{x = 0, y = 1, z = 0},
{x = 0, y = 0, z = -1},
{x = 0, y = 0, z = 1},
},
offstate = "mesecons_random:ghoststone"
}},
mesecons = {--[[conductor = {
state = mesecon.state.on,
rules = {
{x = -1, y = 0, z = 0},
{x = 1, y = 0, z = 0},
{x = 0, y = -1, z = 0},
{x = 0, y = 1, z = 0},
{x = 0, y = 0, z = -1},
{x = 0, y = 0, z = 1},
},
offstate = "mesecons_random:ghoststone"
},]]
effector = {
rules = {
{x = -1, y = 0, z = 0},
{x = 1, y = 0, z = 0},
{x = 0, y = -1, z = 0},
{x = 0, y = 1, z = 0},
{x = 0, y = 0, z = -1},
{x = 0, y = 0, z = 1},
},
action_off = function(pos)
update_ghoststones(pos, is_ghoststone_active, "mesecons_random:ghoststone")
end
}
},
on_construct = function(pos)
--remove shadow
pos2 = {x = pos.x, y = pos.y + 1, z = pos.z}
if ( minetest.get_node(pos2).name == "air" ) then
minetest.dig_node(pos2)
pos.y = pos.y+1
if minetest.get_node(pos).name == "air" then
minetest.dig_node(pos)
end
end
})