Rework core rules of most redstone components

This commit is contained in:
Wuzzy 2018-01-13 03:37:41 +01:00
parent 7626102bdb
commit f612d1b584
8 changed files with 64 additions and 67 deletions

View file

@ -53,7 +53,9 @@ register_rail("mcl_minecarts:golden_rail",
mesecons = { mesecons = {
conductor = { conductor = {
state = mesecon.state.off, state = mesecon.state.off,
offstate = "mcl_minecarts:golden_rail",
onstate = "mcl_minecarts:golden_rail_on", onstate = "mcl_minecarts:golden_rail_on",
rules = mesecon.rules.alldirs,
}, },
}, },
} }
@ -69,6 +71,8 @@ register_rail("mcl_minecarts:golden_rail_on",
conductor = { conductor = {
state = mesecon.state.on, state = mesecon.state.on,
offstate = "mcl_minecarts:golden_rail", offstate = "mcl_minecarts:golden_rail",
onstate = "mcl_minecarts:golden_rail_on",
rules = mesecon.rules.alldirs,
}, },
}, },
drop = "mcl_minecarts:golden_rail", drop = "mcl_minecarts:golden_rail",
@ -87,7 +91,9 @@ register_rail("mcl_minecarts:activator_rail",
mesecons = { mesecons = {
conductor = { conductor = {
state = mesecon.state.off, state = mesecon.state.off,
offstate = "mcl_minecarts:activator_rail",
onstate = "mcl_minecarts:activator_rail_on", onstate = "mcl_minecarts:activator_rail_on",
rules = mesecon.rules.alldirs,
}, },
}, },
} }
@ -102,6 +108,8 @@ register_rail("mcl_minecarts:activator_rail_on",
conductor = { conductor = {
state = mesecon.state.on, state = mesecon.state.on,
offstate = "mcl_minecarts:activator_rail", offstate = "mcl_minecarts:activator_rail",
onstate = "mcl_minecarts:activator_rail_on",
rules = mesecon.rules.alldirs,
}, },
}, },
drop = "mcl_minecarts:activator_rail", drop = "mcl_minecarts:activator_rail",
@ -119,6 +127,7 @@ register_rail("mcl_minecarts:detector_rail",
mesecons = { mesecons = {
receptor = { receptor = {
state = mesecon.state.off, state = mesecon.state.off,
rules = mesecon.rules.pplate,
}, },
}, },
} }
@ -132,6 +141,7 @@ register_rail("mcl_minecarts:detector_rail_on",
mesecons = { mesecons = {
receptor = { receptor = {
state = mesecon.state.on, state = mesecon.state.on,
rules = mesecon.rules.pplate,
}, },
}, },
drop = "mcl_minecarts:detector_rail", drop = "mcl_minecarts:detector_rail",

View file

@ -1,7 +1,7 @@
-- Functions that get the input/output rules of the comparator -- Functions that get the input/output rules of the comparator
local comparator_get_output_rules = function(node) local comparator_get_output_rules = function(node)
local rules = {{x = -1, y = 0, z = 0}} local rules = {{x = -1, y = 0, z = 0, spread=true}}
for i = 0, node.param2 do for i = 0, node.param2 do
rules = mesecon.rotate_rules_left(rules) rules = mesecon.rotate_rules_left(rules)
end end

View file

@ -1,5 +1,5 @@
local rules_flat = { local rules_flat = {
{ x = 0, y = 0, z = -1 }, { x = 0, y = 0, z = -1, spread = true },
} }
local get_rules_flat = function(node) local get_rules_flat = function(node)
local rules = rules_flat local rules = rules_flat
@ -9,8 +9,8 @@ local get_rules_flat = function(node)
return rules return rules
end end
local rules_down = {{ x = 0, y = 1, z = 0 }} local rules_down = {{ x = 0, y = 1, z = 0, spread = true }}
local rules_up = {{ x = 0, y = -1, z = 0 }} local rules_up = {{ x = 0, y = -1, z = 0, spread = true }}
-- Scan the node in front of the observer -- Scan the node in front of the observer
-- and update the observer state if needed. -- and update the observer state if needed.
@ -36,13 +36,13 @@ local observer_scan = function(pos, initialize)
-- Node state changed! Activate observer -- Node state changed! Activate observer
if node.name == "mcl_observers:observer_off" then if node.name == "mcl_observers:observer_off" then
minetest.set_node(pos, {name = "mcl_observers:observer_on", param2 = node.param2}) minetest.set_node(pos, {name = "mcl_observers:observer_on", param2 = node.param2})
mesecon.receptor_on(pos) mesecon.receptor_on(pos, get_rules_flat(node))
elseif node.name == "mcl_observers:observer_down_off" then elseif node.name == "mcl_observers:observer_down_off" then
minetest.set_node(pos, {name = "mcl_observers:observer_down_on"}) minetest.set_node(pos, {name = "mcl_observers:observer_down_on"})
mesecon.receptor_on(pos) mesecon.receptor_on(pos, rules_down)
elseif node.name == "mcl_observers:observer_up_off" then elseif node.name == "mcl_observers:observer_up_off" then
minetest.set_node(pos, {name = "mcl_observers:observer_up_on"}) minetest.set_node(pos, {name = "mcl_observers:observer_up_on"})
mesecon.receptor_on(pos) mesecon.receptor_on(pos, rules_up)
end end
meta_needs_updating = true meta_needs_updating = true
end end
@ -58,12 +58,6 @@ end
-- Vertical orientation (CURRENTLY DISABLED) -- Vertical orientation (CURRENTLY DISABLED)
local observer_orientate = function(pos, placer) local observer_orientate = function(pos, placer)
-- Currently, do nothing.
-- The vertical observers detect the node correctly, but they have problems with
-- transmitting the redstone signal vertically.
-- TODO: Re-enable orientation when vertical observers are done.
do return end
-- Not placed by player -- Not placed by player
if not placer then return end if not placer then return end
@ -130,7 +124,7 @@ mesecon.register_node("mcl_observers:observer",
on_timer = function(pos, elapsed) on_timer = function(pos, elapsed)
local node = minetest.get_node(pos) local node = minetest.get_node(pos)
minetest.set_node(pos, {name = "mcl_observers:observer_off", param2 = node.param2}) minetest.set_node(pos, {name = "mcl_observers:observer_off", param2 = node.param2})
mesecon.receptor_off(pos) mesecon.receptor_off(pos, get_rules_flat(node))
end, end,
} }
) )
@ -179,7 +173,7 @@ mesecon.register_node("mcl_observers:observer_down",
on_timer = function(pos, elapsed) on_timer = function(pos, elapsed)
local node = minetest.get_node(pos) local node = minetest.get_node(pos)
minetest.set_node(pos, {name = "mcl_observers:observer_down_off", param2 = node.param2}) minetest.set_node(pos, {name = "mcl_observers:observer_down_off", param2 = node.param2})
mesecon.receptor_off(pos) mesecon.receptor_off(pos, rules_down)
end, end,
}) })
@ -226,7 +220,7 @@ mesecon.register_node("mcl_observers:observer_up",
end, end,
on_timer = function(pos, elapsed) on_timer = function(pos, elapsed)
minetest.set_node(pos, {name = "mcl_observers:observer_up_off"}) minetest.set_node(pos, {name = "mcl_observers:observer_up_off"})
mesecon.receptor_off(pos) mesecon.receptor_off(pos, rules_up)
end, end,
}) })

View file

@ -19,12 +19,12 @@ mesecon.rules.default =
{x=0, y=-1, z=-1}} {x=0, y=-1, z=-1}}
mesecon.rules.alldirs = mesecon.rules.alldirs =
{{x= 1, y= 0, z= 0, spread = true}, {{x= 1, y= 0, z= 0},
{x=-1, y= 0, z= 0, spread = true}, {x=-1, y= 0, z= 0},
{x= 0, y= 1, z= 0, spread = true}, {x= 0, y= 1, z= 0},
{x= 0, y=-1, z= 0, spread = true}, {x= 0, y=-1, z= 0},
{x= 0, y= 0, z= 1, spread = true}, {x= 0, y= 0, z= 1},
{x= 0, y= 0, z=-1, spread = true}} {x= 0, y= 0, z=-1}}
mesecon.rules.pplate = mesecon.rules.pplate =
{{x = 1, y = 0, z = 0}, {{x = 1, y = 0, z = 0},
@ -49,13 +49,13 @@ mesecon.rules.flat =
{x = 0, y = 0, z =-1}} {x = 0, y = 0, z =-1}}
-- NOT IN ORIGNAL MESECONS -- NOT IN ORIGNAL MESECONS
mesecon.rules.mcl_alldirs_short = mesecon.rules.mcl_alldirs_spread =
{{x= 1, y= 0, z= 0}, {{x= 1, y= 0, z= 0, spread = true},
{x=-1, y= 0, z= 0}, {x=-1, y= 0, z= 0, spread = true},
{x= 0, y= 1, z= 0}, {x= 0, y= 1, z= 0, spread = true},
{x= 0, y=-1, z= 0}, {x= 0, y=-1, z= 0, spread = true},
{x= 0, y= 0, z= 1}, {x= 0, y= 0, z= 1, spread = true},
{x= 0, y= 0, z=-1}} {x= 0, y= 0, z=-1, spread = true}}
-- END OF UNOFFICIAL RULES -- END OF UNOFFICIAL RULES

View file

@ -1,6 +1,6 @@
-- Function that get the input/output rules of the delayer -- Function that get the input/output rules of the delayer
local delayer_get_output_rules = function(node) local delayer_get_output_rules = function(node)
local rules = {{x = -1, y = 0, z = 0}} local rules = {{x = -1, y = 0, z = 0, spread=true}}
for i = 0, node.param2 do for i = 0, node.param2 do
rules = mesecon.rotate_rules_left(rules) rules = mesecon.rotate_rules_left(rules)
end end

View file

@ -1,6 +1,6 @@
local boxes = { -8/16, -8/16, -8/16, 8/16, -2/16, 8/16 } -- Solar Pannel local boxes = { -8/16, -8/16, -8/16, 8/16, -2/16, 8/16 }
-- Solar Panel -- Daylight Sensor
minetest.register_node("mesecons_solarpanel:solar_panel_on", { minetest.register_node("mesecons_solarpanel:solar_panel_on", {
drawtype = "nodebox", drawtype = "nodebox",
tiles = { "jeija_solar_panel.png","jeija_solar_panel.png","jeija_solar_panel_side.png", tiles = { "jeija_solar_panel.png","jeija_solar_panel.png","jeija_solar_panel_side.png",
@ -25,17 +25,16 @@ minetest.register_node("mesecons_solarpanel:solar_panel_on", {
sounds = mcl_sounds.node_sound_glass_defaults(), sounds = mcl_sounds.node_sound_glass_defaults(),
mesecons = {receptor = { mesecons = {receptor = {
state = mesecon.state.on, state = mesecon.state.on,
rules = mesecon.rules.alldirs, rules = mesecon.rules.pplate,
}}, }},
on_rightclick = function(pos, node, clicker, pointed_thing) on_rightclick = function(pos, node, clicker, pointed_thing)
minetest.swap_node(pos, {name = "mesecons_solarpanel:solar_panel_inverted_off"}) minetest.swap_node(pos, {name = "mesecons_solarpanel:solar_panel_inverted_off"})
mesecon.receptor_off(pos) mesecon.receptor_off(pos, mesecon.rules.pplate)
end, end,
_mcl_blast_resistance = 1, _mcl_blast_resistance = 1,
_mcl_hardness = 0.2, _mcl_hardness = 0.2,
}) })
-- Solar Panel
minetest.register_node("mesecons_solarpanel:solar_panel_off", { minetest.register_node("mesecons_solarpanel:solar_panel_off", {
drawtype = "nodebox", drawtype = "nodebox",
tiles = { "jeija_solar_panel.png","jeija_solar_panel.png","jeija_solar_panel_side.png", tiles = { "jeija_solar_panel.png","jeija_solar_panel.png","jeija_solar_panel_side.png",
@ -60,11 +59,11 @@ minetest.register_node("mesecons_solarpanel:solar_panel_off", {
sounds = mcl_sounds.node_sound_glass_defaults(), sounds = mcl_sounds.node_sound_glass_defaults(),
mesecons = {receptor = { mesecons = {receptor = {
state = mesecon.state.off, state = mesecon.state.off,
rules = mesecon.rules.alldirs, rules = mesecon.rules.pplate,
}}, }},
on_rightclick = function(pos, node, clicker, pointed_thing) on_rightclick = function(pos, node, clicker, pointed_thing)
minetest.swap_node(pos, {name = "mesecons_solarpanel:solar_panel_inverted_on"}) minetest.swap_node(pos, {name = "mesecons_solarpanel:solar_panel_inverted_on"})
mesecon.receptor_on(pos) mesecon.receptor_on(pos, mesecon.rules.pplate)
end, end,
_mcl_blast_resistance = 1, _mcl_blast_resistance = 1,
_mcl_hardness = 0.2, _mcl_hardness = 0.2,
@ -89,7 +88,7 @@ minetest.register_abm({
if light >= 12 and minetest.get_timeofday() > 0.2 and minetest.get_timeofday() < 0.8 then if light >= 12 and minetest.get_timeofday() > 0.2 and minetest.get_timeofday() < 0.8 then
minetest.set_node(pos, {name="mesecons_solarpanel:solar_panel_on", param2=node.param2}) minetest.set_node(pos, {name="mesecons_solarpanel:solar_panel_on", param2=node.param2})
mesecon.receptor_on(pos) mesecon.receptor_on(pos, mesecon.rules.pplate)
end end
end, end,
}) })
@ -104,14 +103,13 @@ minetest.register_abm({
if light < 12 then if light < 12 then
minetest.set_node(pos, {name="mesecons_solarpanel:solar_panel_off", param2=node.param2}) minetest.set_node(pos, {name="mesecons_solarpanel:solar_panel_off", param2=node.param2})
mesecon.receptor_off(pos) mesecon.receptor_off(pos, mesecon.rules.pplate)
end end
end, end,
}) })
--- Solar panel inversed --- Inverted Daylight Sensor
-- Solar Panel
minetest.register_node("mesecons_solarpanel:solar_panel_inverted_on", { minetest.register_node("mesecons_solarpanel:solar_panel_inverted_on", {
drawtype = "nodebox", drawtype = "nodebox",
tiles = { "jeija_solar_panel_inverted.png","jeija_solar_panel_inverted.png","jeija_solar_panel_side.png", tiles = { "jeija_solar_panel_inverted.png","jeija_solar_panel_inverted.png","jeija_solar_panel_side.png",
@ -135,17 +133,17 @@ minetest.register_node("mesecons_solarpanel:solar_panel_inverted_on", {
_doc_items_create_entry = false, _doc_items_create_entry = false,
sounds = mcl_sounds.node_sound_glass_defaults(), sounds = mcl_sounds.node_sound_glass_defaults(),
mesecons = {receptor = { mesecons = {receptor = {
state = mesecon.state.on state = mesecon.state.on,
rules = mesecon.rules.pplate,
}}, }},
on_rightclick = function(pos, node, clicker, pointed_thing) on_rightclick = function(pos, node, clicker, pointed_thing)
minetest.swap_node(pos, {name = "mesecons_solarpanel:solar_panel_off"}) minetest.swap_node(pos, {name = "mesecons_solarpanel:solar_panel_off"})
mesecon.receptor_off(pos) mesecon.receptor_off(pos, mesecon.rules.pplate)
end, end,
_mcl_blast_resistance = 1, _mcl_blast_resistance = 1,
_mcl_hardness = 0.2, _mcl_hardness = 0.2,
}) })
-- Solar Panel
minetest.register_node("mesecons_solarpanel:solar_panel_inverted_off", { minetest.register_node("mesecons_solarpanel:solar_panel_inverted_off", {
drawtype = "nodebox", drawtype = "nodebox",
tiles = { "jeija_solar_panel_inverted.png","jeija_solar_panel_inverted.png","jeija_solar_panel_side.png", tiles = { "jeija_solar_panel_inverted.png","jeija_solar_panel_inverted.png","jeija_solar_panel_side.png",
@ -170,11 +168,12 @@ minetest.register_node("mesecons_solarpanel:solar_panel_inverted_off", {
_doc_items_usagehelp = "Rightclick the daylight sensor to turn it into a daylight sensor.", _doc_items_usagehelp = "Rightclick the daylight sensor to turn it into a daylight sensor.",
sounds = mcl_sounds.node_sound_glass_defaults(), sounds = mcl_sounds.node_sound_glass_defaults(),
mesecons = {receptor = { mesecons = {receptor = {
state = mesecon.state.off state = mesecon.state.off,
rules = mesecon.rules.pplate,
}}, }},
on_rightclick = function(pos, node, clicker, pointed_thing) on_rightclick = function(pos, node, clicker, pointed_thing)
minetest.swap_node(pos, {name = "mesecons_solarpanel:solar_panel_on"}) minetest.swap_node(pos, {name = "mesecons_solarpanel:solar_panel_on"})
mesecon.receptor_on(pos) mesecon.receptor_on(pos, mesecon.rules.pplate)
end, end,
_mcl_blast_resistance = 1, _mcl_blast_resistance = 1,
_mcl_hardness = 0.2, _mcl_hardness = 0.2,
@ -190,7 +189,7 @@ minetest.register_abm({
if light < 12 then if light < 12 then
minetest.set_node(pos, {name="mesecons_solarpanel:solar_panel_inverted_on", param2=node.param2}) minetest.set_node(pos, {name="mesecons_solarpanel:solar_panel_inverted_on", param2=node.param2})
mesecon.receptor_on(pos) mesecon.receptor_on(pos, mesecon.rules.pplate)
end end
end, end,
}) })
@ -205,7 +204,7 @@ minetest.register_abm({
if light >= 12 and minetest.get_timeofday() > 0.8 and minetest.get_timeofday() < 0.2 then if light >= 12 and minetest.get_timeofday() > 0.8 and minetest.get_timeofday() < 0.2 then
minetest.set_node(pos, {name="mesecons_solarpanel:solar_panel_inverted_off", param2=node.param2}) minetest.set_node(pos, {name="mesecons_solarpanel:solar_panel_inverted_off", param2=node.param2})
mesecon.receptor_off(pos) mesecon.receptor_off(pos, mesecon.rules.pplate)
end end
end, end,
}) })

View file

@ -164,20 +164,20 @@ local function register_wires()
end end
local rules = {} local rules = {}
if (nid[0] == 1) then table.insert(rules, vector.new( 1, 0, 0)) end if (nid[0] == 1) then table.insert(rules, {x=1, y= 0,z= 0, spread=true}) end
if (nid[1] == 1) then table.insert(rules, vector.new( 0, 0, 1)) end if (nid[1] == 1) then table.insert(rules, {x=0, y= 0,z= 1, spread=true}) end
if (nid[2] == 1) then table.insert(rules, vector.new(-1, 0, 0)) end if (nid[2] == 1) then table.insert(rules, {x=-1,y= 0,z= 0, spread=true}) end
if (nid[3] == 1) then table.insert(rules, vector.new( 0, 0, -1)) end if (nid[3] == 1) then table.insert(rules, {x= 0,y= 0,z=-1, spread=true}) end
if (nid[0] == 1) then table.insert(rules, vector.new( 1, -1, 0)) end if (nid[0] == 1) then table.insert(rules, {x= 1,y=-1,z= 0}) end
if (nid[1] == 1) then table.insert(rules, vector.new( 0, -1, 1)) end if (nid[1] == 1) then table.insert(rules, {x= 0,y=-1,z= 1}) end
if (nid[2] == 1) then table.insert(rules, vector.new(-1, -1, 0)) end if (nid[2] == 1) then table.insert(rules, {x=-1,y=-1,z= 0}) end
if (nid[3] == 1) then table.insert(rules, vector.new( 0, -1, -1)) end if (nid[3] == 1) then table.insert(rules, {x= 0,y=-1,z= -1}) end
if (nid[4] == 1) then table.insert(rules, vector.new( 1, 1, 0)) end if (nid[4] == 1) then table.insert(rules, {x= 1,y= 1,z= 0}) end
if (nid[5] == 1) then table.insert(rules, vector.new( 0, 1, 1)) end if (nid[5] == 1) then table.insert(rules, {x= 0,y= 1,z= 1}) end
if (nid[6] == 1) then table.insert(rules, vector.new(-1, 1, 0)) end if (nid[6] == 1) then table.insert(rules, {x=-1,y= 1,z= 0}) end
if (nid[7] == 1) then table.insert(rules, vector.new( 0, 1, -1)) end if (nid[7] == 1) then table.insert(rules, {x= 0,y= 1,z= -1}) end
local meseconspec_off = { conductor = { local meseconspec_off = { conductor = {
rules = rules, rules = rules,

View file

@ -370,13 +370,7 @@ register_chest("chest",
false false
) )
local trapped_chest_mesecons_rules = { local trapped_chest_mesecons_rules = mesecon.rules.pplate
{x = 1, y = 0, z = 0},
{x = -1, y = 0, z = 0},
{x = 0, y = 0, z = 1},
{x = 0, y = 0, z =-1},
{x = 0, y =-1, z = 0}
}
register_chest("trapped_chest", register_chest("trapped_chest",
"Trapped Chest", "Trapped Chest",