rotate rules on mod load

This commit is contained in:
DS-Minetest 2019-09-18 15:46:49 +02:00 committed by Desour
parent 15a95bbf38
commit 2cdf3fc79b
1 changed files with 29 additions and 33 deletions

View File

@ -38,37 +38,33 @@ local bottom_rules = {
{x=0, y=2, z=0} -- receive power from pressure plate / detector / ... 2 nodes above {x=0, y=2, z=0} -- receive power from pressure plate / detector / ... 2 nodes above
} }
local static_middle_rules_unrotated_normal = { local static_middle_rules = {}
{x=1, y=0, z=0}, do
{x=-1, y=0, z=0}, -- not rotated, plate can connect to normal wire
{x=0, y=0, z=1}, static_middle_rules[1] = {
{x=0, y=0, z=-1}, {x=1, y=0, z=0},
{x=0, y=1, z=0}, {x=-1, y=0, z=0},
{x=0, y=2, z=0}, -- receive power from pressure plate / detector / ... 2 nodes above {x=0, y=0, z=1},
{x=0, y=-1, z=0}, {x=0, y=0, z=-1},
} {x=0, y=1, z=0},
local static_middle_rules_unrotated_minimum = { {x=0, y=2, z=0}, -- receive power from pressure plate / detector / ... 2 nodes above
{x=0, y=1, z=0}, {x=0, y=-1, z=0},
{x=0, y=2, z=0}, -- receive power from pressure plate / detector / ... 2 nodes above }
{x=0, y=-1, z=0},
} -- otherwise rotate these rules
local function static_middle_rules(node) local r = mesecon.rotate_rules_up({
if node.param2 == 1 then {x=0, y=1, z=0},
return static_middle_rules_unrotated_normal {x=0, y=2, z=0}, -- receive power from pressure plate / detector / ... 2 nodes above
end {x=0, y=-1, z=0},
-- rotate static_middle_rules_unrotated_minimum })
local r = mesecon.rotate_rules_up(static_middle_rules_unrotated_minimum) static_middle_rules[0] = mesecon.rotate_rules_up(r)
if node.param2 == 0 then -- upside down static_middle_rules[2] = mesecon.rotate_rules_left(mesecon.rotate_rules_left(r))
return mesecon.rotate_rules_up(r) static_middle_rules[3] = r
elseif node.param2 == 2 then static_middle_rules[4] = mesecon.rotate_rules_left(r)
return mesecon.rotate_rules_left(mesecon.rotate_rules_left(r)) static_middle_rules[5] = mesecon.rotate_rules_right(r)
elseif node.param2 == 3 then end
return r local function static_middle_rules_get(node)
elseif node.param2 == 4 then return static_middle_rules[node.param2] or {}
return mesecon.rotate_rules_left(r)
else
return mesecon.rotate_rules_right(r)
end
end end
local function is_dynamic_vertical_wire(node) local function is_dynamic_vertical_wire(node)
@ -251,7 +247,7 @@ mesecon.register_node("mesecons_extrawires:vertical_static_middle", {
mesecons = {conductor = { mesecons = {conductor = {
state = mesecon.state.off, state = mesecon.state.off,
onstate = "mesecons_extrawires:vertical_static_middle_on", onstate = "mesecons_extrawires:vertical_static_middle_on",
rules = static_middle_rules, rules = static_middle_rules_get,
}} }}
}, { }, {
groups = {dig_immediate = 3, not_in_creative_inventory = 1}, groups = {dig_immediate = 3, not_in_creative_inventory = 1},
@ -259,7 +255,7 @@ mesecon.register_node("mesecons_extrawires:vertical_static_middle", {
mesecons = {conductor = { mesecons = {conductor = {
state = mesecon.state.on, state = mesecon.state.on,
offstate = "mesecons_extrawires:vertical_static_middle_off", offstate = "mesecons_extrawires:vertical_static_middle_off",
rules = static_middle_rules, rules = static_middle_rules_get,
}} }}
}) })