mirror of
https://gitlab.com/deetmit/mesecons_x.git
synced 2024-10-05 17:13:16 +02:00
Fix: comping metadata when moving (yellow tool), stacking (orange tool), book paste
This commit is contained in:
parent
e28f8c1238
commit
0ceebf0d72
@ -54,9 +54,8 @@ local function show_dialog_full(user,file)
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||
|
||||
if formname ~= "mesecons_autotools:circuit_new" then return end
|
||||
|
||||
if (fields.save) or fields.key_enter_field == "title" then
|
||||
@ -101,8 +100,11 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||
local pos2 = mesecons_autotools.get_pos(user,2)
|
||||
local nodes = selection_to_m3(pos1,pos2,direction)
|
||||
|
||||
local metas = selection_to_m3_meta(pos1,pos2,direction)
|
||||
|
||||
|
||||
info.nodes = nodes
|
||||
info.metas = metas
|
||||
save_table_to_file(file,info)
|
||||
end
|
||||
end
|
||||
@ -269,7 +271,7 @@ function paste_circuit(sel,file,direction)
|
||||
--local rotate_direction = diff_directions(direction)
|
||||
--local nodes = rotate_m3(info.nodes,direction)
|
||||
local nodes = info.nodes
|
||||
|
||||
local metas = info.metas
|
||||
|
||||
local sx = nodes.sx
|
||||
local sy = nodes.sy
|
||||
@ -292,9 +294,12 @@ function paste_circuit(sel,file,direction)
|
||||
if is_in_selection(sel,pos) then
|
||||
|
||||
local node = m3_get(nodes,xi,yi,zi)
|
||||
local meta = m3_get(metas,xi,yi,zi)
|
||||
node = rotate_node(node,{x=0,y=0,z=1},direction)
|
||||
--minetest.set_node(pos, node)
|
||||
mesecons_autotools.set_node(pos,node,"paste_circuit")
|
||||
--mesecons_autotools.set_node(pos,node,"paste_circuit")
|
||||
minetest.set_node(pos,node)
|
||||
minetest.get_meta(pos):from_table(meta)
|
||||
end
|
||||
|
||||
end
|
||||
|
@ -180,6 +180,22 @@ function selection_to_m3(pos1,pos2,direction)
|
||||
return m
|
||||
end
|
||||
|
||||
function selection_to_m3_meta(pos1,pos2,direction)
|
||||
local m = {}
|
||||
iterate_selection(pos1,pos2,function(pos)
|
||||
local meta = minetest.get_meta(pos):to_table()
|
||||
m3_set(m,pos.x,pos.y,pos.z,meta)
|
||||
end)
|
||||
m.pos1 = pos1
|
||||
m.pos2 = pos2
|
||||
|
||||
m = m3_move_to_000(m)
|
||||
|
||||
m = rotate_m3(m,direction)
|
||||
return m
|
||||
end
|
||||
|
||||
|
||||
|
||||
function m3_to_mx(m)
|
||||
local mx={}
|
||||
|
@ -1,3 +1,16 @@
|
||||
|
||||
local n01 = "mesecons_extrawires:crossover_01"
|
||||
local n10 = "mesecons_extrawires:crossover_10"
|
||||
|
||||
-- axuliary function
|
||||
function switch (name)
|
||||
if( name == n01 ) then
|
||||
return n10
|
||||
else
|
||||
return n01
|
||||
end
|
||||
end
|
||||
|
||||
function rotate_node_to_direction(node,direction)
|
||||
local add = 0
|
||||
if direction.x == 1 then add = 3 end
|
||||
@ -9,6 +22,15 @@ function rotate_node_to_direction(node,direction)
|
||||
|
||||
param2 = (param2+add)% 4
|
||||
|
||||
if( node.name == n01 or node.name == n10 ) then
|
||||
if( add % 2 == 0 ) then
|
||||
return { name = node.name, param2=param2}
|
||||
else
|
||||
return { name = switch(node.name), param2=param2}
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
return { name = node.name , param2 = param2 }
|
||||
end
|
||||
|
||||
@ -44,5 +66,15 @@ function rotate_node(node, saved_direction,direction)
|
||||
new_node.name = node.name
|
||||
new_node.param2 = (node.param2+rotate)%4
|
||||
|
||||
-- an exception, special treatement of crossover wire
|
||||
if( node.name == n01 or node.name == n10 ) then
|
||||
|
||||
if( rotate % 2 == 0 ) then
|
||||
new_node = node
|
||||
else
|
||||
new_node = {name = switch(node.name), param2=node.param2}
|
||||
end
|
||||
end
|
||||
|
||||
return new_node
|
||||
end
|
||||
|
@ -206,36 +206,6 @@ end
|
||||
|
||||
|
||||
mesecons_autotools.set_node = function(pos,node,why)
|
||||
--[[
|
||||
if node.name == "air" then
|
||||
local n = minetest.get_node(pos)
|
||||
mesecon.on_dignode(pos,n)
|
||||
ref_remove(pos,n)
|
||||
minetest.set_node(pos,node)
|
||||
-- ref_place ???
|
||||
else
|
||||
local n = minetest.get_node(pos)
|
||||
mesecon.on_dignode(pos,n)
|
||||
ref_remove(pos,n)
|
||||
minetest.set_node(pos,node)
|
||||
mesecon.on_placenode(pos,node)
|
||||
ref_place(pos,node)
|
||||
end
|
||||
|
||||
if true then return end
|
||||
|
||||
local n = minetest.get_node(pos)
|
||||
mesecon.on_dignode(pos,n)
|
||||
ref_remove(pos,n)
|
||||
|
||||
minetest.set_node(pos,node)
|
||||
mesecon.on_placenode(pos,node)
|
||||
ref_place(pos,node)
|
||||
|
||||
|
||||
if true then return end
|
||||
]]--
|
||||
|
||||
|
||||
if why == nil then
|
||||
minetest.set_node(pos,node)
|
||||
@ -308,24 +278,6 @@ mesecons_autotools.set_node = function(pos,node,why)
|
||||
minetest.set_node(pos,node)
|
||||
end
|
||||
|
||||
--[[
|
||||
if is_in_list({"delete_crossover"},why) then
|
||||
minetest.set_node(pos,node)
|
||||
mesecon.on_placenode(pos,node)
|
||||
ref_remove(pos,node)
|
||||
end
|
||||
|
||||
if is_in_list({"delete_end"},why) then
|
||||
minetest.set_node(pos,{name="air"})
|
||||
mesecon.on_dignode(pos,node)
|
||||
ref_remove(pos,node)
|
||||
--mesecon.on_dignode(pos,{name="air"})
|
||||
|
||||
--mesecon.receiver_remove(pos,node)
|
||||
--minetest.set_node(pos,node)
|
||||
--mesecon.on_placenode(pos,node)
|
||||
end
|
||||
]]--
|
||||
|
||||
end
|
||||
|
||||
|
@ -36,12 +36,19 @@ end
|
||||
function copy(pos1,pos2, shift_vector)
|
||||
iterate_selection(pos1,pos2, function(pos)
|
||||
local node = minetest.get_node(pos)
|
||||
local meta = minetest.get_meta(pos):to_table()
|
||||
|
||||
local new_pos = vector.add(pos,shift_vector)
|
||||
--minetest.set_node(new_pos, node)
|
||||
mesecons_autotools.set_node(new_pos, node,"copy")
|
||||
--mesecons_autotools.set_node(new_pos, node,"copy")
|
||||
minetest.set_node(new_pos,node)
|
||||
minetest.get_meta(new_pos):from_table(meta)
|
||||
|
||||
end)
|
||||
end
|
||||
|
||||
|
||||
--[[
|
||||
function copy_to_buffor(pos1,pos2,buffor)
|
||||
iterate_selection(pos1,pos2, function(pos)
|
||||
local node = minetest.get_node(pos)
|
||||
@ -62,12 +69,43 @@ function paste_from_buffor(shift_vector,buffor)
|
||||
end
|
||||
|
||||
end
|
||||
]]--
|
||||
|
||||
|
||||
function copy_to_buffor(pos1,pos2,buffor)
|
||||
|
||||
iterate_selection(pos1,pos2, function(pos)
|
||||
local node = minetest.get_node(pos)
|
||||
local meta = minetest.get_meta(pos):to_table()
|
||||
|
||||
table.insert(buffor, { node = { pos = pos, node = node }, meta = meta} )
|
||||
end)
|
||||
|
||||
end
|
||||
|
||||
function paste_from_buffor(shift_vector,buffor)
|
||||
|
||||
for _,v in pairs(buffor) do
|
||||
local pos = v.node.pos
|
||||
local node = v.node.node
|
||||
local meta = v.meta
|
||||
|
||||
local new_pos = vector.add(pos,shift_vector)
|
||||
|
||||
minetest.set_node(new_pos,node)
|
||||
minetest.get_meta(new_pos):from_table(meta)
|
||||
|
||||
--mesecons_autotools.set_node(new_pos,node,"paste_from_buffor")
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
||||
|
||||
function delete(pos1,pos2)
|
||||
iterate_selection(pos1,pos2, function(pos)
|
||||
minetest.set_node(pos,{ name = "air" } )
|
||||
minetest.get_meta(pos):from_table({})
|
||||
end)
|
||||
|
||||
end
|
||||
|
@ -179,6 +179,7 @@ local function move_selection(user,rad,click)
|
||||
copy_to_buffor(pos[1],pos[2],buffor)
|
||||
tail = generate_tail_wires(back_wall,direction)
|
||||
|
||||
print("yellow.buffor= " .. dump(buffor) )
|
||||
|
||||
delete(pos[1],pos[2])
|
||||
paste_from_buffor(direction,buffor)
|
||||
|
Loading…
Reference in New Issue
Block a user