From a2f59a0b6d1324cc05f6b9466566e0af3dc239dc Mon Sep 17 00:00:00 2001 From: paly2 Date: Sat, 19 Dec 2015 11:57:24 +0100 Subject: [PATCH] Add the "conductor signal changer" node --- .../depends.txt | 1 + moremesecons_conductor_signalchanger/init.lua | 81 ++++++++++++++++++ ...remesecons_conductor_signalchanger_off.png | Bin 0 -> 190 bytes ...oremesecons_conductor_signalchanger_on.png | Bin 0 -> 187 bytes 4 files changed, 82 insertions(+) create mode 100644 moremesecons_conductor_signalchanger/depends.txt create mode 100644 moremesecons_conductor_signalchanger/init.lua create mode 100644 moremesecons_conductor_signalchanger/textures/moremesecons_conductor_signalchanger_off.png create mode 100644 moremesecons_conductor_signalchanger/textures/moremesecons_conductor_signalchanger_on.png diff --git a/moremesecons_conductor_signalchanger/depends.txt b/moremesecons_conductor_signalchanger/depends.txt new file mode 100644 index 0000000..acaa924 --- /dev/null +++ b/moremesecons_conductor_signalchanger/depends.txt @@ -0,0 +1 @@ +mesecons diff --git a/moremesecons_conductor_signalchanger/init.lua b/moremesecons_conductor_signalchanger/init.lua new file mode 100644 index 0000000..6cade6f --- /dev/null +++ b/moremesecons_conductor_signalchanger/init.lua @@ -0,0 +1,81 @@ +local nodebox = { + type = "fixed", + fixed = {{-8/16, -8/16, -8/16, 8/16, -7/16, 8/16 }}, +} + +local function signalchanger_get_output_rules(node) + local rules = {{x=1, y=0, z=0}} + for i = 0, node.param2 do + rules = mesecon.rotate_rules_left(rules) + end + return rules +end + +local function signalchanger_get_input_rules(node) + local rules = {{x=0, y=0, z=1, name="input_on"}, {x=0, y=0, z=-1, name="input_off"}, {x=-1, y=0, z=0, name="input_signal"}} + for i = 0, node.param2 do + rules = mesecon.rotate_rules_left(rules) + end + return rules +end + +local update = function(pos, node, link, newstate) + local meta = minetest.get_meta(pos) + meta:set_int(link.name, newstate == "on" and 1 or 0) + local input_on = meta:get_int("input_on") == 1 + local input_off = meta:get_int("input_off") == 1 + local input_signal = meta:get_int("input_signal") == 1 + + if input_on then + minetest.swap_node(pos, {name = "moremesecons_conductor_signalchanger:conductor_signalchanger_on", param2 = node.param2}) + elseif input_off then + mesecon.receptor_off(pos, signalchanger_get_output_rules(node)) + minetest.swap_node(pos, {name = "moremesecons_conductor_signalchanger:conductor_signalchanger_off", param2 = node.param2}) + end + + if input_signal and minetest.get_node(pos).name == "moremesecons_conductor_signalchanger:conductor_signalchanger_on" then -- Note : we must use "minetest.get_node(pos)" and not "node" because the node may have been changed + mesecon.receptor_on(pos, signalchanger_get_output_rules(node)) + else + mesecon.receptor_off(pos, signalchanger_get_output_rules(node)) + end +end + +mesecon.register_node("moremesecons_conductor_signalchanger:conductor_signalchanger", { + description = "Conductor Signal Changer", + inventory_image = "moremesecons_conductor_signalchanger_off.png", + groups = {dig_immediate = 2}, + paramtype = "light", + paramtype2 = "facedir", + drawtype = "nodebox", + selection_box = nodebox, + node_box = nodebox, +},{ + groups = {dig_immediate = 2}, + mesecons = { + receptor = { + rules = signalchanger_get_output_rules + }, + effector = { + rules = signalchanger_get_input_rules, + action_change = update + }, + }, + tiles = {"moremesecons_conductor_signalchanger_off.png"}, +},{ + groups = {dig_immediate = 2, not_in_creative_inventory = 1}, + mesecons = { + receptor = { + rules = signalchanger_get_output_rules, + }, + effector = { + rules = signalchanger_get_input_rules, + action_change = update, + }, + }, + tiles = {"moremesecons_conductor_signalchanger_on.png"}, +}) + +minetest.register_craft({ + output = "moremesecons_conductor_signalchanger:conductor_signalchanger_off", + recipe = {{"group:mesecon_conductor_craftable","moremesecons_signalchanger:signalchanger_off"}} +}) diff --git a/moremesecons_conductor_signalchanger/textures/moremesecons_conductor_signalchanger_off.png b/moremesecons_conductor_signalchanger/textures/moremesecons_conductor_signalchanger_off.png new file mode 100644 index 0000000000000000000000000000000000000000..b55a2d911c1dc234eab59d0bec6a6341e63dc42d GIT binary patch literal 190 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|oCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#K94Y$iO}08V$MLJSWg$n5RLQ6Avr-Q2N=F*y*D&4&@k0b^fEM@z`?e%t$OQs z1&;ke9ZV~DBbZzE)iqeph~O{XE z)7O>#K94Y$sbsS5zb>Fql&6bhh{pNklpp6CIQPv-OGrp~V0cvN=n)4ci6v6|=CmpO zVOYeF#e9un;d=Q8d}?9Lch2f$ustxBTh+Lrf1;?tqNS=nt1t8