de- and serialize

This commit is contained in:
DS-Minetest 2017-09-06 13:47:22 +02:00
parent 02f60d7e7e
commit ea5a2b199f

View File

@ -116,42 +116,45 @@ plg.register_nodes({
after_dig_node = function(pos, node) after_dig_node = function(pos, node)
mesecon.receptor_off(pos, plg.rules[node.name]) mesecon.receptor_off(pos, plg.rules[node.name])
end, end,
on_rotate = minetest.global_exists("screwdriver") and function(pos, node, user, mode) on_rotate = function(pos, node, user, mode)
local abcd1 = {"A", "B", "C", "D"} local abcd1 = {"A", "B", "C", "D"}
local abcd2 = {A = 1, B = 2, C = 3, D = 4} local abcd2 = {A = 1, B = 2, C = 3, D = 4}
local ops = {"op1", "op2", "dst"}
local dir = 0 local dir = 0
if mode == screwdriver.ROTATE_FACE then -- clock-wise if mode == screwdriver.ROTATE_FACE then -- clock-wise
dir = 1 dir = 1
if user and user:is_player() then if user and user:is_player() then
minetest.chat_send_player(user:get_player_name(), minetest.chat_send_player(user:get_player_name(),
"FPGA has been rotated clock-wise.") "FPGA ports have been rotated clock-wise.")
end end
elseif mode == screwdriver.ROTATE_AXIS then -- counter-clock-wise elseif mode == screwdriver.ROTATE_AXIS then -- counter-clock-wise
dir = -1 dir = -1
if user and user:is_player() then if user and user:is_player() then
minetest.chat_send_player(user:get_player_name(), minetest.chat_send_player(user:get_player_name(),
"FPGA has been rotated counter-clock-wise.") "FPGA ports have been rotated counter-clock-wise.")
end end
end end
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
local instr = meta:get_string("instr") local instr = lcore.deserialize(meta:get_string("instr"))
local out = ""
for i = 1, #instr do for i = 1, #instr do
local char = instr:sub(i, i) for k = 1, #ops do
local num = abcd2[char] local op = ops[k]
if num then local o = instr[i][op]
if o and o.type == "io" then
local num = abcd2[o.port]
num = num + dir num = num + dir
if num > 4 then if num > 4 then
num = 1 num = 1
elseif num < 1 then elseif num < 1 then
num = 4 num = 4
end end
char = abcd1[num] instr[i][op].port = abcd1[num]
end end
out = out..char
end end
meta:set_string("instr", out) end
plg.update_formspec(pos, out) local is = lcore.serialize(instr)
meta:set_string("instr", is)
plg.update_formspec(pos, is)
end, end,
}) })