summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mesecons_fpga/depends.txt1
-rw-r--r--mesecons_fpga/init.lua38
2 files changed, 39 insertions, 0 deletions
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..7a78d46 100644
--- a/mesecons_fpga/init.lua
+++ b/mesecons_fpga/init.lua
@@ -116,6 +116,44 @@ plg.register_nodes({
after_dig_node = function(pos, node)
mesecon.receptor_off(pos, plg.rules[node.name])
end,
+ on_rotate = function(pos, node, user, mode)
+ local abcd1 = {"A", "B", "C", "D"}
+ local abcd2 = {A = 1, B = 2, C = 3, D = 4}
+ local ops = {"op1", "op2", "dst"}
+ 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 ports have been rotated clockwise.")
+ end
+ elseif mode == screwdriver.ROTATE_AXIS then -- counter-clockwise
+ dir = -1
+ if user and user:is_player() then
+ minetest.chat_send_player(user:get_player_name(),
+ "FPGA ports have been rotated counter-clockwise.")
+ end
+ end
+
+ local meta = minetest.get_meta(pos)
+ local instr = lcore.deserialize(meta:get_string("instr"))
+ for i = 1, #instr do
+ for _, op in ipairs(ops) do
+ local o = instr[i][op]
+ if o and o.type == "io" then
+ local num = abcd2[o.port]
+ num = num + dir
+ if num > 4 then num = 1
+ elseif num < 1 then num = 4 end
+ instr[i][op].port = abcd1[num]
+ end
+ end
+ end
+
+ meta:set_string("instr", lcore.serialize(instr))
+ plg.update_formspec(pos, instr)
+ return true
+ end,
})