8 Commits

7 changed files with 61 additions and 35 deletions

View File

@ -384,21 +384,27 @@ function mesecon.turnon(pos, link)
if not node then
-- Area does not exist; do nothing
pos_can_be_skipped[minetest.hash_node_position(f.pos)] = true
elseif mesecon.is_conductor_off(node, f.link) then
elseif mesecon.is_conductor(node.name) then
local rules = mesecon.conductor_get_rules(node)
-- Call turnon on neighbors
for _, r in ipairs(mesecon.rule2meta(f.link, rules)) do
local np = vector.add(f.pos, r)
if not pos_can_be_skipped[minetest.hash_node_position(np)] then
for _, l in ipairs(mesecon.rules_link_rule_all(f.pos, r)) do
frontiers:add({pos = np, link = l})
if mesecon.is_conductor_off(node, f.link) then
-- Call turnon on neighbors
for _, r in ipairs(mesecon.rule2meta(f.link, rules)) do
local np = vector.add(f.pos, r)
if not pos_can_be_skipped[minetest.hash_node_position(np)] then
for _, l in ipairs(mesecon.rules_link_rule_all(f.pos, r)) do
frontiers:add({pos = np, link = l})
end
end
end
mesecon.swap_node_force(f.pos, mesecon.get_conductor_on(node, f.link))
end
mesecon.swap_node_force(f.pos, mesecon.get_conductor_on(node, f.link))
pos_can_be_skipped[minetest.hash_node_position(f.pos)] = true
-- Only conductors with flat rules can be reliably skipped later
if not rules[1] or rules[1].x then
pos_can_be_skipped[minetest.hash_node_position(f.pos)] = true
end
elseif mesecon.is_effector(node.name) then
mesecon.changesignal(f.pos, node, f.link, mesecon.state.on, depth)
if mesecon.is_effector_off(node.name) then
@ -440,30 +446,37 @@ function mesecon.turnoff(pos, link)
if not node then
-- Area does not exist; do nothing
pos_can_be_skipped[minetest.hash_node_position(f.pos)] = true
elseif mesecon.is_conductor_on(node, f.link) then
elseif mesecon.is_conductor(node.name) then
local rules = mesecon.conductor_get_rules(node)
for _, r in ipairs(mesecon.rule2meta(f.link, rules)) do
local np = vector.add(f.pos, r)
if not pos_can_be_skipped[minetest.hash_node_position(np)] then
-- Check if an onstate receptor is connected. If that is the case,
-- abort this turnoff process by returning false. `receptor_off` will
-- discard all the changes that we made in the voxelmanip:
if mesecon.rules_link_rule_all_inverted(f.pos, r)[1] then
if mesecon.is_receptor_on(mesecon.get_node_force(np).name) then
return false
if mesecon.is_conductor_on(node, f.link) then
for _, r in ipairs(mesecon.rule2meta(f.link, rules)) do
local np = vector.add(f.pos, r)
if not pos_can_be_skipped[minetest.hash_node_position(np)] then
-- Check if an onstate receptor is connected. If that is the case,
-- abort this turnoff process by returning false. `receptor_off` will
-- discard all the changes that we made in the voxelmanip:
if mesecon.rules_link_rule_all_inverted(f.pos, r)[1] then
if mesecon.is_receptor_on(mesecon.get_node_force(np).name) then
return false
end
end
-- Call turnoff on neighbors
for _, l in ipairs(mesecon.rules_link_rule_all(f.pos, r)) do
frontiers:add({pos = np, link = l})
end
end
-- Call turnoff on neighbors
for _, l in ipairs(mesecon.rules_link_rule_all(f.pos, r)) do
frontiers:add({pos = np, link = l})
end
end
mesecon.swap_node_force(f.pos, mesecon.get_conductor_off(node, f.link))
end
mesecon.swap_node_force(f.pos, mesecon.get_conductor_off(node, f.link))
pos_can_be_skipped[minetest.hash_node_position(f.pos)] = true
-- Only conductors with flat rules can be reliably skipped later
if not rules[1] or rules[1].x then
pos_can_be_skipped[minetest.hash_node_position(f.pos)] = true
end
elseif mesecon.is_effector(node.name) then
table.insert(signals, {
pos = f.pos,

View File

@ -16,7 +16,7 @@ mesecon.on_placenode = function(pos, node)
-- also call receptor_on if itself is powered already, so that neighboring
-- conductors will be activated (when pushing an on-conductor with a piston)
for _, s in ipairs(sources) do
local rule = vector.subtract(pos, s)
local rule = vector.subtract(s, pos)
mesecon.turnon(pos, rule)
end
--mesecon.receptor_on (pos, mesecon.conductor_get_rules(node))

View File

@ -164,7 +164,9 @@ end
function mesecon.get_bit(binary,bit)
bit = bit or 1
local c = binary:len()-(bit-1)
local len = binary:len()
if bit > len then return false end
local c = len-(bit-1)
return binary:sub(c,c) == "1"
end

View File

@ -13,16 +13,19 @@ mesecon.button_turnoff = function (pos)
mesecon.receptor_off(pos, rules)
end
local use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or nil
minetest.register_node("mesecons_button:button_off", {
drawtype = "nodebox",
tiles = {
"jeija_wall_button_sides.png",
"jeija_wall_button_sides.png",
"jeija_wall_button_sides.png",
"jeija_wall_button_sides.png",
"jeija_wall_button_sides.png",
"jeija_wall_button_off.png"
"jeija_wall_button_sides.png",
"jeija_wall_button_sides.png",
"jeija_wall_button_sides.png",
"jeija_wall_button_sides.png",
"jeija_wall_button_sides.png",
"jeija_wall_button_off.png"
},
use_texture_alpha = use_texture_alpha,
paramtype = "light",
paramtype2 = "facedir",
is_ground_content = false,
@ -66,7 +69,8 @@ minetest.register_node("mesecons_button:button_on", {
"jeija_wall_button_sides.png",
"jeija_wall_button_sides.png",
"jeija_wall_button_on.png"
},
},
use_texture_alpha = use_texture_alpha,
paramtype = "light",
paramtype2 = "facedir",
is_ground_content = false,

View File

@ -54,6 +54,7 @@ local boxes = {
-- Delayer definition defaults
local def = {
drawtype = "nodebox",
use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or nil,
walkable = true,
selection_box = {
type = "fixed",

View File

@ -12,6 +12,7 @@ minetest.register_node("mesecons_hydroturbine:hydro_turbine_off", {
"jeija_hydro_turbine_turbine_top_bottom_off.png",
"jeija_hydro_turbine_turbine_misc_off.png"
},
use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or nil,
inventory_image = "jeija_hydro_turbine_inv.png",
is_ground_content = false,
wield_scale = {x=0.75, y=0.75, z=0.75},
@ -42,6 +43,7 @@ minetest.register_node("mesecons_hydroturbine:hydro_turbine_on", {
{ name = "jeija_hydro_turbine_turbine_misc_on.png",
animation = {type = "vertical_frames", aspect_w = 256, aspect_h = 32, length = 0.4} }
},
use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "clip" or nil,
inventory_image = "jeija_hydro_turbine_inv.png",
drop = "mesecons_hydroturbine:hydro_turbine_off 1",
groups = {dig_immediate=2,not_in_creative_inventory=1},

View File

@ -9,9 +9,12 @@ local mesecon_lamp_box = {
wall_side = {-0.375,-0.3125,-0.3125,-0.5,0.3125,0.3125},
}
local use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or nil
minetest.register_node("mesecons_lamp:lamp_on", {
drawtype = "nodebox",
tiles = {"jeija_meselamp_on.png"},
use_texture_alpha = use_texture_alpha,
paramtype = "light",
paramtype2 = "wallmounted",
is_ground_content = false,
@ -36,6 +39,7 @@ minetest.register_node("mesecons_lamp:lamp_on", {
minetest.register_node("mesecons_lamp:lamp_off", {
drawtype = "nodebox",
tiles = {"jeija_meselamp_off.png"},
use_texture_alpha = use_texture_alpha,
inventory_image = "jeija_meselamp.png",
wield_image = "jeija_meselamp.png",
paramtype = "light",