From 02f60d7e7ee61e0e7a6bad37281fb395ef0a28d9 Mon Sep 17 00:00:00 2001 From: DS-Minetest Date: Tue, 5 Sep 2017 20:12:49 +0200 Subject: [PATCH] make fpga rotatable --- mesecons_fpga/depends.txt | 1 + mesecons_fpga/init.lua | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/mesecons_fpga/depends.txt b/mesecons_fpga/depends.txt index acaa924..a0ba1ef 100644 --- a/mesecons_fpga/depends.txt +++ b/mesecons_fpga/depends.txt @@ -1 +1,2 @@ mesecons +screwdriver? diff --git a/mesecons_fpga/init.lua b/mesecons_fpga/init.lua index 6c462e6..1b9c49e 100644 --- a/mesecons_fpga/init.lua +++ b/mesecons_fpga/init.lua @@ -116,6 +116,43 @@ plg.register_nodes({ after_dig_node = function(pos, node) mesecon.receptor_off(pos, plg.rules[node.name]) end, + on_rotate = minetest.global_exists("screwdriver") and function(pos, node, user, mode) + local abcd1 = {"A", "B", "C", "D"} + local abcd2 = {A = 1, B = 2, C = 3, D = 4} + local dir = 0 + if mode == screwdriver.ROTATE_FACE then -- clock-wise + dir = 1 + if user and user:is_player() then + minetest.chat_send_player(user:get_player_name(), + "FPGA has been rotated clock-wise.") + end + elseif mode == screwdriver.ROTATE_AXIS then -- counter-clock-wise + dir = -1 + if user and user:is_player() then + minetest.chat_send_player(user:get_player_name(), + "FPGA has been rotated counter-clock-wise.") + end + end + local meta = minetest.get_meta(pos) + local instr = meta:get_string("instr") + local out = "" + for i = 1, #instr do + local char = instr:sub(i, i) + local num = abcd2[char] + if num then + num = num + dir + if num > 4 then + num = 1 + elseif num < 1 then + num = 4 + end + char = abcd1[num] + end + out = out..char + end + meta:set_string("instr", out) + plg.update_formspec(pos, out) + end, })