forked from Mirrorlandia_minetest/mesecons
Port more blocks to nodedef system: object detector, extrawires, water turbine, insulated wire
This commit is contained in:
parent
00e071b695
commit
cf6080f723
@ -290,7 +290,7 @@ function mesecon:turnon(pos)
|
||||
|
||||
if mesecon:is_conductor_off(node.name) then
|
||||
local rules = mesecon:conductor_get_rules(node)
|
||||
minetest.env:add_node(pos, {name=mesecon:get_conductor_on(node.name), param2 = node.param2})
|
||||
mesecon:swap_node(pos, mesecon:get_conductor_on(node.name))
|
||||
|
||||
for _, rule in ipairs(rules) do
|
||||
local np = mesecon:addPosRule(pos, rule)
|
||||
@ -314,7 +314,7 @@ function mesecon:turnoff(pos) --receptor rules used because output could have be
|
||||
|
||||
if mesecon:is_conductor_on(node.name) then
|
||||
local rules = mesecon:conductor_get_rules(node)
|
||||
minetest.env:add_node(pos, {name=mesecon:get_conductor_off(node.name), param2 = node.param2})
|
||||
mesecon:swap_node(pos, mesecon:get_conductor_off(node.name))
|
||||
|
||||
for _, rule in ipairs(rules) do
|
||||
local np = mesecon:addPosRule(pos, rule)
|
||||
|
@ -23,5 +23,22 @@ mesecon.rules.buttonlike =
|
||||
{x = 1, y =-1, z =-1},
|
||||
{x = 2, y = 0, z = 0}}
|
||||
|
||||
mesecon.rules.pressurplatelike =
|
||||
{{x=0, y=1, z=-1},
|
||||
{x=0, y=0, z=-1},
|
||||
{x=0, y=-1, z=-1},
|
||||
{x=0, y=1, z=1},
|
||||
{x=0, y=-1, z=1},
|
||||
{x=0, y=0, z=1},
|
||||
{x=1, y=0, z=0},
|
||||
{x=1, y=1, z=0},
|
||||
{x=1, y=-1, z=0},
|
||||
{x=-1, y=1, z=0},
|
||||
{x=-1, y=-1, z=0},
|
||||
{x=-1, y=0, z=0},
|
||||
{x=0, y=-1, z=0},
|
||||
{x=0, y=-2, z=0},
|
||||
{x=0, y=1, z=0}}
|
||||
|
||||
mesecon.state.on = "on"
|
||||
mesecon.state.off = "off"
|
||||
|
@ -2,3 +2,4 @@
|
||||
BLINKY_PLANT_INTERVAL = 3
|
||||
NEW_STYLE_WIRES = true -- true = new nodebox wires, false = old raillike wires
|
||||
PRESSURE_PLATE_INTERVAL = 0.1
|
||||
OBJECT_DETECTOR_RADIUS = 6
|
||||
|
@ -1,19 +1,29 @@
|
||||
--SHORT RANGE DETECTORS
|
||||
-- Object detector
|
||||
-- Detects all entities in a certain radius
|
||||
-- The radius can be specified in mesecons/settings.lua
|
||||
|
||||
minetest.register_node("mesecons_detector:object_detector_off", {
|
||||
tiles = {"default_steel_block.png", "default_steel_block.png", "jeija_object_detector_off.png", "jeija_object_detector_off.png", "jeija_object_detector_off.png", "jeija_object_detector_off.png"},
|
||||
paramtype = "light",
|
||||
walkable = true,
|
||||
groups = {cracky=3, mesecon = 2},
|
||||
groups = {cracky=3},
|
||||
description="Player Detector",
|
||||
mesecons = {receptor = {
|
||||
state = mesecon.state.off,
|
||||
rules = mesecon.rules.pressurplatelike
|
||||
}}
|
||||
})
|
||||
|
||||
minetest.register_node("mesecons_detector:object_detector_on", {
|
||||
tiles = {"default_steel_block.png", "default_steel_block.png", "jeija_object_detector_on.png", "jeija_object_detector_on.png", "jeija_object_detector_on.png", "jeija_object_detector_on.png"},
|
||||
paramtype = "light",
|
||||
walkable = true,
|
||||
groups = {cracky=3,not_in_creative_inventory=1, mesecon = 2},
|
||||
groups = {cracky=3,not_in_creative_inventory=1},
|
||||
drop = 'mesecons_detector:object_detector_off',
|
||||
description="Player Detector",
|
||||
mesecons = {receptor = {
|
||||
state = mesecon.state.on,
|
||||
rules = mesecon.rules.pressurplatelike
|
||||
}}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
@ -30,9 +40,9 @@ minetest.register_abm(
|
||||
interval = 1.0,
|
||||
chance = 1,
|
||||
action = function(pos, node, active_object_count, active_object_count_wider)
|
||||
local objs = minetest.env:get_objects_inside_radius(pos, 6)
|
||||
local objs = minetest.env:get_objects_inside_radius(pos, OBJECT_DETECTOR_RADIUS)
|
||||
for k, obj in pairs(objs) do
|
||||
if obj:get_entity_name()~="mesecons_pistons:piston_pusher_sticky" and obj:get_entity_name()~="mesecons_pistons:piston_pusher_normal" and obj:get_player_name()~=nil then -- Detected object is not piston pusher - will be changed if every entity has a type (like entity_type=mob)
|
||||
if obj:get_entity_name()~="mesecons_pistons:piston_pusher_sticky" and obj:get_entity_name()~="mesecons_pistons:piston_pusher_normal" and obj:get_player_name()~=nil then
|
||||
if minetest.env:get_node({x=pos.x, y=pos.y-1, z=pos.z}).name=="default:sign_wall" then
|
||||
if obj:get_player_name()~=minetest.env:get_meta({x=pos.x, y=pos.y-1, z=pos.z}):get_string("text") then
|
||||
return
|
||||
@ -51,7 +61,7 @@ minetest.register_abm(
|
||||
interval = 1.0,
|
||||
chance = 1,
|
||||
action = function(pos, node, active_object_count, active_object_count_wider)
|
||||
local objs = minetest.env:get_objects_inside_radius(pos, 6)
|
||||
local objs = minetest.env:get_objects_inside_radius(pos, OBJECT_DETECTOR_RADIUS)
|
||||
local objectfound=0
|
||||
for k, obj in pairs(objs) do
|
||||
if obj:get_entity_name()~="mesecons_pistons:piston_pusher_sticky" and obj:get_entity_name()~="mesecons_pistons:piston_pusher_normal" and obj~=nil
|
||||
@ -72,6 +82,3 @@ minetest.register_abm(
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
mesecon:add_receptor_node("mesecons_detector:object_detector_on", mesecon:get_rules("pressureplate"))
|
||||
mesecon:add_receptor_node_off("mesecons_detector:object_detector_off", mesecon:get_rules("pressureplate"))
|
||||
|
@ -1,3 +1,5 @@
|
||||
-- CODE NOT ACTIVE
|
||||
|
||||
for x=-1, 1 do for z=-1, 1 do
|
||||
rules = {}
|
||||
nodename = "mesecons_extrawires:crossing"
|
||||
|
@ -1,2 +1,3 @@
|
||||
dofile(minetest.get_modpath("mesecons_extrawires").."/crossing.lua");
|
||||
-- dofile(minetest.get_modpath("mesecons_extrawires").."/crossing.lua");
|
||||
-- The crossing code is not active right now because it is hard to maintain
|
||||
dofile(minetest.get_modpath("mesecons_extrawires").."/tjunction.lua");
|
||||
|
@ -9,6 +9,22 @@ local tjunction_selectionbox = {
|
||||
fixed = { -16/32-0.001, -18/32, -16/32, 16/32+0.001, -12/32, 7/32 },
|
||||
}
|
||||
|
||||
local tjunction_get_rules = function (node)
|
||||
local rules =
|
||||
{{x = 1, y = 0, z = 0},
|
||||
{x =-1, y = 0, z = 0},
|
||||
{x = 0, y = 0, z = -1}}
|
||||
|
||||
if node.param2 == 1 then
|
||||
rules = mesecon:rotate_rules_left(rules)
|
||||
elseif node.param2 == 2 then
|
||||
rules = mesecon:rotate_rules_right(mesecon:rotate_rules_right(rules))
|
||||
elseif node.param2 == 3 then
|
||||
rules = mesecon:rotate_rules_right(rules)
|
||||
end
|
||||
return rules
|
||||
end
|
||||
|
||||
minetest.register_node("mesecons_extrawires:tjunction_on", {
|
||||
drawtype = "nodebox",
|
||||
tiles = {
|
||||
@ -27,7 +43,12 @@ minetest.register_node("mesecons_extrawires:tjunction_on", {
|
||||
node_box = tjunction_nodebox,
|
||||
groups = {dig_immediate = 3, mesecon = 3, mesecon_conductor_craftable=1, not_in_creative_inventory = 1},
|
||||
drop = "mesecons_insulated:insulated_off",
|
||||
|
||||
mesecons = {conductor =
|
||||
{
|
||||
state = mesecon.state.on,
|
||||
rules = tjunction_get_rules,
|
||||
offstate = "mesecons_extrawires:tjunction_off"
|
||||
}}
|
||||
})
|
||||
|
||||
minetest.register_node("mesecons_extrawires:tjunction_off", {
|
||||
@ -48,6 +69,12 @@ minetest.register_node("mesecons_extrawires:tjunction_off", {
|
||||
selection_box = tjunction_selectionbox,
|
||||
node_box = tjunction_nodebox,
|
||||
groups = {dig_immediate = 3, mesecon = 3, mesecon_conductor_craftable=1},
|
||||
mesecons = {conductor =
|
||||
{
|
||||
state = mesecon.state.off,
|
||||
rules = tjunction_get_rules,
|
||||
onstate = "mesecons_extrawires:tjunction_on"
|
||||
}}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
@ -58,28 +85,3 @@ minetest.register_craft({
|
||||
{"", "mesecons_insulated:insulated_off", ""},
|
||||
}
|
||||
})
|
||||
|
||||
mesecon:add_rules("tjunction_all", { --all possible rules
|
||||
{x = 1, y = 0, z = 0},
|
||||
{x =-1, y = 0, z = 0},
|
||||
{x = 0, y = 0, z = 1},
|
||||
{x = 0, y = 0, z =-1},})
|
||||
|
||||
mesecon:add_rules("tjunction", {
|
||||
{x = 1, y = 0, z = 0},
|
||||
{x =-1, y = 0, z = 0},
|
||||
{x = 0, y = 0, z = -1},})
|
||||
|
||||
function tjunction_get_rules(param2)
|
||||
local rules = mesecon:get_rules("tjunction")
|
||||
if param2 == 1 then
|
||||
rules = mesecon:rotate_rules_left(mesecon:get_rules("tjunction"))
|
||||
elseif param2 == 2 then
|
||||
rules = mesecon:rotate_rules_right(mesecon:rotate_rules_right(mesecon:get_rules("tjunction")))
|
||||
elseif param2 == 3 then
|
||||
rules = mesecon:rotate_rules_right(mesecon:get_rules("tjunction"))
|
||||
end
|
||||
return rules
|
||||
end
|
||||
|
||||
mesecon:register_conductor("mesecons_extrawires:tjunction_on", "mesecons_extrawires:tjunction_off", mesecon:get_rules("tjunction_all"), tjunction_get_rules)
|
||||
|
@ -1,9 +1,12 @@
|
||||
-- HYDRO_TURBINE
|
||||
-- Water turbine:
|
||||
-- Active if flowing >water< above it
|
||||
-- (does not work with other liquids)
|
||||
|
||||
minetest.register_node("mesecons_hydroturbine:hydro_turbine_off", {
|
||||
drawtype = "nodebox",
|
||||
tiles = {"jeija_hydro_turbine_off.png"},
|
||||
groups = {dig_immediate=2, mesecon = 2},
|
||||
groups = {dig_immediate=2},
|
||||
description="Water Turbine",
|
||||
paramtype = "light",
|
||||
selection_box = {
|
||||
@ -20,13 +23,16 @@ minetest.register_node("mesecons_hydroturbine:hydro_turbine_off", {
|
||||
{-0.45, 1.15, -0.1, 0.45, 1.45, 0.1},
|
||||
{-0.1, 1.15, -0.45, 0.1, 1.45, 0.45}},
|
||||
},
|
||||
mesecons = {receptor = {
|
||||
state = mesecon.state.off
|
||||
}}
|
||||
})
|
||||
|
||||
minetest.register_node("mesecons_hydroturbine:hydro_turbine_on", {
|
||||
drawtype = "nodebox",
|
||||
tiles = {"jeija_hydro_turbine_on.png"},
|
||||
drop = '"mesecons_hydroturbine:hydro_turbine_off" 1',
|
||||
groups = {dig_immediate=2,not_in_creative_inventory=1, mesecon = 2},
|
||||
groups = {dig_immediate=2,not_in_creative_inventory=1},
|
||||
description="Water Turbine",
|
||||
paramtype = "light",
|
||||
selection_box = {
|
||||
@ -43,6 +49,9 @@ minetest.register_node("mesecons_hydroturbine:hydro_turbine_on", {
|
||||
{-0.5, 1.15, -0.1, 0.5, 1.45, 0.1},
|
||||
{-0.1, 1.15, -0.5, 0.1, 1.45, 0.5}},
|
||||
},
|
||||
mesecons = {receptor = {
|
||||
state = mesecon.state.on
|
||||
}}
|
||||
})
|
||||
|
||||
|
||||
@ -74,9 +83,6 @@ nodenames = {"mesecons_hydroturbine:hydro_turbine_on"},
|
||||
end,
|
||||
})
|
||||
|
||||
mesecon:add_receptor_node("mesecons_hydroturbine:hydro_turbine_on")
|
||||
mesecon:add_receptor_node_off("mesecons_hydroturbine:hydro_turbine_off")
|
||||
|
||||
minetest.register_craft({
|
||||
output = '"mesecons_hydroturbine:hydro_turbine_off" 2',
|
||||
recipe = {
|
||||
|
@ -21,9 +21,13 @@ minetest.register_node("mesecons_insulated:insulated_on", {
|
||||
type = "fixed",
|
||||
fixed = { -16/32-0.001, -17/32, -3/32, 16/32+0.001, -13/32, 3/32 }
|
||||
},
|
||||
groups = {dig_immediate = 3, mesecon = 3, mesecon_conductor_craftable=1, not_in_creative_inventory = 1},
|
||||
groups = {dig_immediate = 3, not_in_creative_inventory = 1},
|
||||
drop = "mesecons_insulated:insulated_off",
|
||||
|
||||
mesecons = {conductor = {
|
||||
state = mesecon.state.on,
|
||||
offstate = "mesecons_insulated:insulated_off",
|
||||
rules = insulated_wire_get_rules
|
||||
}}
|
||||
})
|
||||
|
||||
minetest.register_node("mesecons_insulated:insulated_off", {
|
||||
@ -49,7 +53,12 @@ minetest.register_node("mesecons_insulated:insulated_off", {
|
||||
type = "fixed",
|
||||
fixed = { -16/32-0.001, -17/32, -3/32, 16/32+0.001, -13/32, 3/32 }
|
||||
},
|
||||
groups = {dig_immediate = 3, mesecon = 3, mesecon_conductor_craftable=1},
|
||||
groups = {dig_immediate = 3},
|
||||
mesecons = {conductor = {
|
||||
state = mesecon.state.off,
|
||||
onstate = "mesecons_insulated:insulated_on",
|
||||
rules = insulated_wire_get_rules
|
||||
}}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
@ -61,21 +70,15 @@ minetest.register_craft({
|
||||
}
|
||||
})
|
||||
|
||||
mesecon:add_rules("insulated_all", { --all possible rules
|
||||
{x = 1, y = 0, z = 0},
|
||||
{x =-1, y = 0, z = 0},
|
||||
{x = 0, y = 0, z = 1},
|
||||
{x = 0, y = 0, z =-1},})
|
||||
|
||||
mesecon:add_rules("insulated", {
|
||||
{x = 1, y = 0, z = 0},
|
||||
{x =-1, y = 0, z = 0},})
|
||||
{x =-1, y = 0, z = 0}})
|
||||
|
||||
function insulated_wire_get_rules(param2)
|
||||
function insulated_wire_get_rules(node)
|
||||
local rules = {{x = 1, y = 0, z = 0},
|
||||
{x =-1, y = 0, z = 0}}
|
||||
if param2 == 1 or param2 == 3 then
|
||||
return mesecon:rotate_rules_right(mesecon:get_rules("insulated"))
|
||||
return mesecon:rotate_rules_right(rules)
|
||||
end
|
||||
return mesecon:get_rules("insulated")
|
||||
return rules
|
||||
end
|
||||
|
||||
mesecon:register_conductor("mesecons_insulated:insulated_on", "mesecons_insulated:insulated_off", mesecon:get_rules("insulated_all"), insulated_wire_get_rules)
|
||||
|
@ -150,23 +150,6 @@ minetest.register_craft({
|
||||
}
|
||||
})
|
||||
|
||||
mesecon:add_rules("pressureplate",
|
||||
{{x=0, y=1, z=-1},
|
||||
{x=0, y=0, z=-1},
|
||||
{x=0, y=-1, z=-1},
|
||||
{x=0, y=1, z=1},
|
||||
{x=0, y=-1, z=1},
|
||||
{x=0, y=0, z=1},
|
||||
{x=1, y=0, z=0},
|
||||
{x=1, y=1, z=0},
|
||||
{x=1, y=-1, z=0},
|
||||
{x=-1, y=1, z=0},
|
||||
{x=-1, y=-1, z=0},
|
||||
{x=-1, y=0, z=0},
|
||||
{x=0, y=-1, z=0},
|
||||
{x=0, y=-2, z=0},
|
||||
{x=0, y=1, z=0}})
|
||||
|
||||
mesecon:add_receptor_node("mesecons_pressureplates:pressure_plate_wood_on", mesecon:get_rules("pressureplate"))
|
||||
mesecon:add_receptor_node_off("mesecons_pressureplates:pressure_plate_wood_off", mesecon:get_rules("pressureplate"))
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user