8 Commits

7 changed files with 61 additions and 35 deletions

View File

@ -384,9 +384,10 @@ function mesecon.turnon(pos, link)
if not node then if not node then
-- Area does not exist; do nothing -- Area does not exist; do nothing
pos_can_be_skipped[minetest.hash_node_position(f.pos)] = true 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) local rules = mesecon.conductor_get_rules(node)
if mesecon.is_conductor_off(node, f.link) then
-- Call turnon on neighbors -- Call turnon on neighbors
for _, r in ipairs(mesecon.rule2meta(f.link, rules)) do for _, r in ipairs(mesecon.rule2meta(f.link, rules)) do
local np = vector.add(f.pos, r) local np = vector.add(f.pos, r)
@ -398,7 +399,12 @@ function mesecon.turnon(pos, link)
end end
mesecon.swap_node_force(f.pos, mesecon.get_conductor_on(node, f.link)) mesecon.swap_node_force(f.pos, mesecon.get_conductor_on(node, f.link))
end
-- 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 pos_can_be_skipped[minetest.hash_node_position(f.pos)] = true
end
elseif mesecon.is_effector(node.name) then elseif mesecon.is_effector(node.name) then
mesecon.changesignal(f.pos, node, f.link, mesecon.state.on, depth) mesecon.changesignal(f.pos, node, f.link, mesecon.state.on, depth)
if mesecon.is_effector_off(node.name) then if mesecon.is_effector_off(node.name) then
@ -440,8 +446,10 @@ function mesecon.turnoff(pos, link)
if not node then if not node then
-- Area does not exist; do nothing -- Area does not exist; do nothing
pos_can_be_skipped[minetest.hash_node_position(f.pos)] = true 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) local rules = mesecon.conductor_get_rules(node)
if mesecon.is_conductor_on(node, f.link) then
for _, r in ipairs(mesecon.rule2meta(f.link, rules)) do for _, r in ipairs(mesecon.rule2meta(f.link, rules)) do
local np = vector.add(f.pos, r) local np = vector.add(f.pos, r)
@ -463,7 +471,12 @@ function mesecon.turnoff(pos, link)
end end
mesecon.swap_node_force(f.pos, mesecon.get_conductor_off(node, f.link)) mesecon.swap_node_force(f.pos, mesecon.get_conductor_off(node, f.link))
end
-- 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 pos_can_be_skipped[minetest.hash_node_position(f.pos)] = true
end
elseif mesecon.is_effector(node.name) then elseif mesecon.is_effector(node.name) then
table.insert(signals, { table.insert(signals, {
pos = f.pos, 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 -- also call receptor_on if itself is powered already, so that neighboring
-- conductors will be activated (when pushing an on-conductor with a piston) -- conductors will be activated (when pushing an on-conductor with a piston)
for _, s in ipairs(sources) do for _, s in ipairs(sources) do
local rule = vector.subtract(pos, s) local rule = vector.subtract(s, pos)
mesecon.turnon(pos, rule) mesecon.turnon(pos, rule)
end end
--mesecon.receptor_on (pos, mesecon.conductor_get_rules(node)) --mesecon.receptor_on (pos, mesecon.conductor_get_rules(node))

View File

@ -164,7 +164,9 @@ end
function mesecon.get_bit(binary,bit) function mesecon.get_bit(binary,bit)
bit = bit or 1 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" return binary:sub(c,c) == "1"
end end

View File

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

View File

@ -54,6 +54,7 @@ local boxes = {
-- Delayer definition defaults -- Delayer definition defaults
local def = { local def = {
drawtype = "nodebox", drawtype = "nodebox",
use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or nil,
walkable = true, walkable = true,
selection_box = { selection_box = {
type = "fixed", 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_top_bottom_off.png",
"jeija_hydro_turbine_turbine_misc_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", inventory_image = "jeija_hydro_turbine_inv.png",
is_ground_content = false, is_ground_content = false,
wield_scale = {x=0.75, y=0.75, z=0.75}, 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", { name = "jeija_hydro_turbine_turbine_misc_on.png",
animation = {type = "vertical_frames", aspect_w = 256, aspect_h = 32, length = 0.4} } 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", inventory_image = "jeija_hydro_turbine_inv.png",
drop = "mesecons_hydroturbine:hydro_turbine_off 1", drop = "mesecons_hydroturbine:hydro_turbine_off 1",
groups = {dig_immediate=2,not_in_creative_inventory=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}, 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", { minetest.register_node("mesecons_lamp:lamp_on", {
drawtype = "nodebox", drawtype = "nodebox",
tiles = {"jeija_meselamp_on.png"}, tiles = {"jeija_meselamp_on.png"},
use_texture_alpha = use_texture_alpha,
paramtype = "light", paramtype = "light",
paramtype2 = "wallmounted", paramtype2 = "wallmounted",
is_ground_content = false, is_ground_content = false,
@ -36,6 +39,7 @@ minetest.register_node("mesecons_lamp:lamp_on", {
minetest.register_node("mesecons_lamp:lamp_off", { minetest.register_node("mesecons_lamp:lamp_off", {
drawtype = "nodebox", drawtype = "nodebox",
tiles = {"jeija_meselamp_off.png"}, tiles = {"jeija_meselamp_off.png"},
use_texture_alpha = use_texture_alpha,
inventory_image = "jeija_meselamp.png", inventory_image = "jeija_meselamp.png",
wield_image = "jeija_meselamp.png", wield_image = "jeija_meselamp.png",
paramtype = "light", paramtype = "light",