Skip to content
Permalink
Browse files

fpga: Make rotatable with screwdrivers

  • Loading branch information
Desour authored and sfan5 committed Oct 3, 2017
1 parent 1963d8b commit fa58607546dc6b27c88f9a54f4560fdb3a55c344
Showing with 39 additions and 0 deletions.
  1. +1 −0 mesecons_fpga/depends.txt
  2. +38 −0 mesecons_fpga/init.lua
@@ -1 +1,2 @@
mesecons
screwdriver?
@@ -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,
})


0 comments on commit fa58607

Please sign in to comment.