forked from minetest-mods/mesecons
		
	Minor cleanup of mesecno torch and add another rule to it (behind above)
This commit is contained in:
		@@ -428,7 +428,7 @@ end
 | 
			
		||||
 | 
			
		||||
--Rules rotation Functions:
 | 
			
		||||
function mesecon:rotate_rules_right(rules)
 | 
			
		||||
	local nr = {}
 | 
			
		||||
	nr = {}
 | 
			
		||||
	for i, rule in ipairs(rules) do
 | 
			
		||||
		table.insert(nr, {
 | 
			
		||||
			x = -rule.z, 
 | 
			
		||||
@@ -439,7 +439,7 @@ function mesecon:rotate_rules_right(rules)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function mesecon:rotate_rules_left(rules)
 | 
			
		||||
	local nr = {}
 | 
			
		||||
	nr = {}
 | 
			
		||||
	for i, rule in ipairs(rules) do
 | 
			
		||||
		table.insert(nr, {
 | 
			
		||||
			x =  rule.z, 
 | 
			
		||||
@@ -450,7 +450,7 @@ function mesecon:rotate_rules_left(rules)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function mesecon:rotate_rules_down(rules)
 | 
			
		||||
	local nr = {}
 | 
			
		||||
	nr = {}
 | 
			
		||||
	for i, rule in ipairs(rules) do
 | 
			
		||||
		table.insert(nr, {
 | 
			
		||||
			x = -rule.y, 
 | 
			
		||||
@@ -461,7 +461,7 @@ function mesecon:rotate_rules_down(rules)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function mesecon:rotate_rules_up(rules)
 | 
			
		||||
	local nr = {}
 | 
			
		||||
	nr = {}
 | 
			
		||||
	for i, rule in ipairs(rules) do
 | 
			
		||||
		table.insert(nr, {
 | 
			
		||||
			x =  rule.y, 
 | 
			
		||||
 
 | 
			
		||||
@@ -1,53 +1,54 @@
 | 
			
		||||
--MESECON TORCHES
 | 
			
		||||
 | 
			
		||||
local torch_get_rules = function(node)
 | 
			
		||||
	local rules = {
 | 
			
		||||
		{x=1,  y=0,  z=0},
 | 
			
		||||
		{x=0,  y=0,  z=1},
 | 
			
		||||
		{x=0,  y=0,  z=-1},
 | 
			
		||||
		{x=0,  y=1,  z=0},
 | 
			
		||||
		{x=0,  y=-1,  z=0}}
 | 
			
		||||
	if node.param2 == 5 then
 | 
			
		||||
		rules=mesecon:rotate_rules_right(rules)
 | 
			
		||||
	elseif node.param2 == 2 then
 | 
			
		||||
		rules=mesecon:rotate_rules_right(mesecon:rotate_rules_right(rules)) --180 degrees
 | 
			
		||||
	elseif node.param2 == 4 then
 | 
			
		||||
		rules=mesecon:rotate_rules_left(rules)
 | 
			
		||||
	elseif node.param2 == 1 then
 | 
			
		||||
		rules=mesecon:rotate_rules_down(rules)
 | 
			
		||||
	elseif node.param2 == 0 then
 | 
			
		||||
		rules=mesecon:rotate_rules_up(rules)
 | 
			
		||||
local rotate_torch_rules = function (rules, param2)
 | 
			
		||||
	if param2 == 5 then
 | 
			
		||||
		return mesecon:rotate_rules_right(rules)
 | 
			
		||||
	elseif param2 == 2 then
 | 
			
		||||
		return mesecon:rotate_rules_right(mesecon:rotate_rules_right(rules)) --180 degrees
 | 
			
		||||
	elseif param2 == 4 then
 | 
			
		||||
		return mesecon:rotate_rules_left(rules)
 | 
			
		||||
	elseif param2 == 1 then
 | 
			
		||||
		return mesecon:rotate_rules_down(rules)
 | 
			
		||||
	elseif param2 == 0 then
 | 
			
		||||
		return mesecon:rotate_rules_up(rules)
 | 
			
		||||
	else
 | 
			
		||||
		return rules
 | 
			
		||||
	end
 | 
			
		||||
	return rules
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local torch_get_output_rules = function(node)
 | 
			
		||||
	local rules = {
 | 
			
		||||
		{x = 1,  y = 0, z = 0},
 | 
			
		||||
		{x = 0,  y = 0, z = 1},
 | 
			
		||||
		{x = 0,  y = 0, z =-1},
 | 
			
		||||
		{x = 0,  y = 1, z = 0},
 | 
			
		||||
		{x = 0,  y =-1, z = 0}}
 | 
			
		||||
 | 
			
		||||
	return rotate_torch_rules(rules, node.param2)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local torch_get_input_rules = function(node)
 | 
			
		||||
        local rules = {x=0, y=0, z=0}
 | 
			
		||||
	local rules = 	{{x = -2, y = 0, z = 0},
 | 
			
		||||
				 {x = -1, y = 1, z = 0}}
 | 
			
		||||
 | 
			
		||||
	if node.param2 == 4 then
 | 
			
		||||
		rules.z = -2
 | 
			
		||||
	elseif node.param2 == 2 then
 | 
			
		||||
		rules.x = -2
 | 
			
		||||
	elseif node.param2 == 5 then
 | 
			
		||||
		rules.z = 2
 | 
			
		||||
	elseif node.param2 == 3 then
 | 
			
		||||
		 rules.x = 2
 | 
			
		||||
	elseif node.param2 == 1 then
 | 
			
		||||
		rules.y = 2
 | 
			
		||||
	elseif node.param2 == 0 then
 | 
			
		||||
		rules.y = -2
 | 
			
		||||
        end
 | 
			
		||||
	return rules
 | 
			
		||||
	return rotate_torch_rules(rules, node.param2)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = '"mesecons_torch:mesecon_torch_on" 4',
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{"group:mesecon_conductor_craftable"},
 | 
			
		||||
	{"default:stick"},
 | 
			
		||||
	}
 | 
			
		||||
	{"group:mesecon_conductor_craftable"},
 | 
			
		||||
	{"default:stick"},}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
local torch_selectionbox =
 | 
			
		||||
{
 | 
			
		||||
	type = "wallmounted",
 | 
			
		||||
	wall_top = {-0.1, 0.5-0.6, -0.1, 0.1, 0.5, 0.1},
 | 
			
		||||
	wall_bottom = {-0.1, -0.5, -0.1, 0.1, -0.5+0.6, 0.1},
 | 
			
		||||
	wall_side = {-0.5, -0.1, -0.1, -0.5+0.6, 0.1, 0.1},
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
minetest.register_node("mesecons_torch:mesecon_torch_off", {
 | 
			
		||||
	drawtype = "torchlike",
 | 
			
		||||
	tiles = {"jeija_torches_off.png", "jeija_torches_off_ceiling.png", "jeija_torches_off_side.png"},
 | 
			
		||||
@@ -55,19 +56,12 @@ minetest.register_node("mesecons_torch:mesecon_torch_off", {
 | 
			
		||||
	paramtype = "light",
 | 
			
		||||
	walkable = false,
 | 
			
		||||
	paramtype2 = "wallmounted",
 | 
			
		||||
	selection_box = {
 | 
			
		||||
		type = "wallmounted",
 | 
			
		||||
		wall_top = {-0.1, 0.5-0.6, -0.1, 0.1, 0.5, 0.1},
 | 
			
		||||
		wall_bottom = {-0.1, -0.5, -0.1, 0.1, -0.5+0.6, 0.1},
 | 
			
		||||
		wall_side = {-0.5, -0.1, -0.1, -0.5+0.6, 0.1, 0.1},
 | 
			
		||||
	},
 | 
			
		||||
	legacy_wallmounted = true,
 | 
			
		||||
	groups = {dig_immediate=3,not_in_creative_inventory=1},
 | 
			
		||||
	drop = '"mesecons_torch:mesecon_torch_on" 1',
 | 
			
		||||
	description="Mesecon Torch",
 | 
			
		||||
	selection_box = torch_selectionbox,
 | 
			
		||||
	groups = {dig_immediate = 3, not_in_creative_inventory = 1},
 | 
			
		||||
	drop = "mesecons_torch:mesecon_torch_on",
 | 
			
		||||
	mesecons = {receptor = {
 | 
			
		||||
		state = mesecon.state.off,
 | 
			
		||||
		rules = torch_get_rules
 | 
			
		||||
		rules = torch_get_output_rules
 | 
			
		||||
	}}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
@@ -80,43 +74,39 @@ minetest.register_node("mesecons_torch:mesecon_torch_on", {
 | 
			
		||||
	sunlight_propagates = true,
 | 
			
		||||
	walkable = false,
 | 
			
		||||
	paramtype2 = "wallmounted",
 | 
			
		||||
	selection_box = {
 | 
			
		||||
		type = "wallmounted",
 | 
			
		||||
		wall_top = {-0.1, 0.5-0.6, -0.1, 0.1, 0.5, 0.1},
 | 
			
		||||
		wall_bottom = {-0.1, -0.5, -0.1, 0.1, -0.5+0.6, 0.1},
 | 
			
		||||
		wall_side = {-0.5, -0.1, -0.1, -0.5+0.6, 0.1, 0.1},
 | 
			
		||||
	},
 | 
			
		||||
	legacy_wallmounted = true,
 | 
			
		||||
	selection_box = torch_selectionbox,
 | 
			
		||||
	groups = {dig_immediate=3},
 | 
			
		||||
	light_source = LIGHT_MAX-5,
 | 
			
		||||
	description="Mesecon Torch",
 | 
			
		||||
	mesecons = {receptor = {
 | 
			
		||||
		state = mesecon.state.on,
 | 
			
		||||
		rules = torch_get_rules
 | 
			
		||||
	}}
 | 
			
		||||
		rules = torch_get_output_rules
 | 
			
		||||
	}},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_abm({
 | 
			
		||||
    nodenames = {"mesecons_torch:mesecon_torch_off","mesecons_torch:mesecon_torch_on"},
 | 
			
		||||
    interval = 1,
 | 
			
		||||
    chance = 1,
 | 
			
		||||
    action = function(pos, node, active_object_count, active_object_count_wider)
 | 
			
		||||
	local node = minetest.env:get_node(pos)
 | 
			
		||||
	local pa = torch_get_input_rules(node)
 | 
			
		||||
	nodenames = {"mesecons_torch:mesecon_torch_off","mesecons_torch:mesecon_torch_on"},
 | 
			
		||||
	interval = 1,
 | 
			
		||||
	chance = 1,
 | 
			
		||||
	action = function(pos, node)
 | 
			
		||||
		local is_powered = false
 | 
			
		||||
		for _, rule in ipairs(torch_get_input_rules(node)) do
 | 
			
		||||
			local src = mesecon:addPosRule(pos, rule)
 | 
			
		||||
			if mesecon:is_power_on(src) then
 | 
			
		||||
				is_powered = true
 | 
			
		||||
			end
 | 
			
		||||
		end
 | 
			
		||||
 | 
			
		||||
        local postc = {x=pos.x-pa.x, y=pos.y-pa.y, z=pos.z-pa.z}
 | 
			
		||||
        if mesecon:is_power_on(postc) then
 | 
			
		||||
            if node.name ~= "mesecons_torch:mesecon_torch_off" then
 | 
			
		||||
                minetest.env:add_node(pos, {name="mesecons_torch:mesecon_torch_off",param2=node.param2})
 | 
			
		||||
                mesecon:receptor_off(pos, torch_get_rules(node))
 | 
			
		||||
            end
 | 
			
		||||
        else
 | 
			
		||||
            if node.name ~= "mesecons_torch:mesecon_torch_on" then
 | 
			
		||||
                minetest.env:add_node(pos, {name="mesecons_torch:mesecon_torch_on",param2=node.param2})
 | 
			
		||||
                mesecon:receptor_on(pos, torch_get_rules(node))
 | 
			
		||||
            end
 | 
			
		||||
        end
 | 
			
		||||
    end
 | 
			
		||||
		if is_powered then
 | 
			
		||||
			if node.name == "mesecons_torch:mesecon_torch_on" then
 | 
			
		||||
				mesecon:swap_node(pos, "mesecons_torch:mesecon_torch_off")
 | 
			
		||||
				mesecon:receptor_off(pos, torch_get_output_rules(node))
 | 
			
		||||
			end
 | 
			
		||||
		elseif node.name == "mesecons_torch:mesecon_torch_off" then
 | 
			
		||||
			mesecon:swap_node(pos, "mesecons_torch:mesecon_torch_on")
 | 
			
		||||
			mesecon:receptor_on(pos, torch_get_output_rules(node))
 | 
			
		||||
		end
 | 
			
		||||
	end
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
-- Param2 Table (Block Attached To)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user