From ac0fb9113997e87c724ed5ece9e9914936ed6a3b Mon Sep 17 00:00:00 2001 From: Jeija Date: Thu, 27 Dec 2012 10:50:20 +0100 Subject: Minor cleanup of mesecno torch and add another rule to it (behind above) --- mesecons_torch/init.lua | 140 ++++++++++++++++++++++-------------------------- 1 file changed, 65 insertions(+), 75 deletions(-) (limited to 'mesecons_torch') diff --git a/mesecons_torch/init.lua b/mesecons_torch/init.lua index 8b9a59b..801220e 100644 --- a/mesecons_torch/init.lua +++ b/mesecons_torch/init.lua @@ -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) -- cgit v1.2.3