fix
@ -1 +0,0 @@
|
||||
Subproject commit 700e2e90b5f3aef873721158c4dd09accf8341b7
|
405
mesecons_autotools_tmp/book/circuit.lua
Normal file
@ -0,0 +1,405 @@
|
||||
dofile(minetest.get_modpath("mesecons_autotools").."/book/mx.lua");
|
||||
dofile(minetest.get_modpath("mesecons_autotools").."/book/m3.lua");
|
||||
|
||||
dofile(minetest.get_modpath("mesecons_autotools").."/book/formspec.lua");
|
||||
dofile(minetest.get_modpath("mesecons_autotools").."/book/image.lua");
|
||||
|
||||
dofile(minetest.get_modpath("mesecons_autotools").."/book/misc.lua");
|
||||
dofile(minetest.get_modpath("mesecons_autotools").."/book/stats.lua");
|
||||
|
||||
local esc = minetest.formspec_escape
|
||||
|
||||
|
||||
|
||||
|
||||
local function show_dialog_new(user,direction)
|
||||
|
||||
local pos1 = mesecons_autotools.get_pos(user,1)
|
||||
local pos2 = mesecons_autotools.get_pos(user,2)
|
||||
local sel = {pos1=pos1,pos2=pos2}
|
||||
|
||||
if not mesecons_autotools.is_full_selection(user) then return end
|
||||
|
||||
local nodes = selection_to_m3(pos1,pos2,direction)
|
||||
local view = m3_to_mx(nodes)
|
||||
|
||||
local db = {
|
||||
title = "",
|
||||
text = "",
|
||||
nodes = nodes,
|
||||
direction = direction,
|
||||
view = view,
|
||||
}
|
||||
local formspec = fs_all(db)
|
||||
|
||||
minetest.show_formspec(user, "mesecons_autotools:circuit_new", formspec)
|
||||
|
||||
end
|
||||
|
||||
|
||||
local function show_dialog_full(user,file)
|
||||
local info = read_table_from_file(file)
|
||||
local view = m3_to_mx(info.nodes)
|
||||
|
||||
local db = {
|
||||
title = info.title,
|
||||
text = info.text,
|
||||
nodes = info.nodes,
|
||||
direction = info.direction,
|
||||
view = view,
|
||||
}
|
||||
|
||||
local formspec = fs_all(db)
|
||||
minetest.show_formspec(user, "mesecons_autotools:circuit_edit", formspec)
|
||||
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
|
||||
|
||||
local user = player:get_player_name()
|
||||
local file = generate_file_name(user)
|
||||
local rad = player:get_look_horizontal()
|
||||
local direction = radians_to_direction_looking_forward(rad)
|
||||
|
||||
local stack = player:get_wielded_item()
|
||||
local inv = player:get_inventory()
|
||||
|
||||
local new_stack = nil
|
||||
local info = {}
|
||||
local data = {}
|
||||
|
||||
if( stack:get_name() == "mesecons_autotools:circuit_empty" ) then
|
||||
|
||||
new_stack = ItemStack("mesecons_autotools:circuit_full")
|
||||
data.file = file
|
||||
data.description = fields.title
|
||||
new_stack:get_meta():from_table({ fields = data})
|
||||
|
||||
if inv:room_for_item("main", new_stack) then
|
||||
inv:add_item("main", new_stack)
|
||||
else
|
||||
minetest.add_item(player:get_pos(), new_stack)
|
||||
end
|
||||
|
||||
-- standart info
|
||||
info.title = fields.title
|
||||
info.text = fields.text
|
||||
|
||||
-- direction
|
||||
info.direction = direction
|
||||
|
||||
--info.direction = direction
|
||||
|
||||
-- selection
|
||||
|
||||
local pos1 = mesecons_autotools.get_pos(user,1)
|
||||
local pos2 = mesecons_autotools.get_pos(user,2)
|
||||
local nodes = selection_to_m3(pos1,pos2,direction)
|
||||
|
||||
|
||||
info.nodes = nodes
|
||||
save_table_to_file(file,info)
|
||||
end
|
||||
end
|
||||
|
||||
end)
|
||||
|
||||
minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||
if formname ~= "mesecons_autotools:circuit_edit" then return end
|
||||
|
||||
if (fields.save) or fields.key_enter_field == "title" then
|
||||
local user = player:get_player_name()
|
||||
local rad = player:get_look_horizontal()
|
||||
local direction = radians_to_direction_looking_forward(rad)
|
||||
|
||||
local stack = player:get_wielded_item()
|
||||
local data = stack:get_meta():to_table().fields
|
||||
--local inv = player:get_inventory()
|
||||
|
||||
local info = {}
|
||||
local file = data.file
|
||||
|
||||
--[[
|
||||
info = read_table_from_file(file)
|
||||
info.title = fields.title
|
||||
info.text = fields.text
|
||||
save_table_to_file(file,info)
|
||||
]]--
|
||||
|
||||
data.title = fields.title
|
||||
data.text = fields.text
|
||||
|
||||
|
||||
|
||||
data.description = fields.title
|
||||
stack:get_meta():from_table({ fields = data})
|
||||
|
||||
|
||||
|
||||
|
||||
player:set_wielded_item(stack)
|
||||
|
||||
end
|
||||
end)
|
||||
|
||||
|
||||
function rotate_direction_right(direction)
|
||||
local d = {x=0,y=0,z=0}
|
||||
if direction.z == 1 then
|
||||
d.x = 1
|
||||
end
|
||||
if direction.x == 1 then
|
||||
d.z = -1
|
||||
end
|
||||
if direction.z == -1 then
|
||||
d.x = -1
|
||||
end
|
||||
if direction.x == -1 then
|
||||
d.z = 1
|
||||
end
|
||||
return d
|
||||
end
|
||||
|
||||
function make_pos2(pos1,direction,sx,sy,sz)
|
||||
|
||||
local right = rotate_direction_right(direction)
|
||||
|
||||
local hv = vector.multiply(direction,sz-1)
|
||||
local vv = vector.multiply(right,sx-1)
|
||||
local uv = vector.multiply({x=0,y=1,z=0},sy-1)
|
||||
local shift = vector.add(hv, vector.add(vv,uv))
|
||||
|
||||
local pos2 = vector.add(pos1, shift)
|
||||
|
||||
return pos2
|
||||
end
|
||||
|
||||
function get_all_corners_flat(sel)
|
||||
local pos = {}
|
||||
pos[1] = sel.pos1
|
||||
pos[2] = sel.pos2
|
||||
|
||||
local xmax = math.max(pos[1].x, pos[2].x)
|
||||
local xmin = math.min(pos[1].x, pos[2].x)
|
||||
|
||||
local ymax = math.max(pos[1].y, pos[2].y)
|
||||
local ymin = math.min(pos[1].y, pos[2].y)
|
||||
|
||||
local zmax = math.max(pos[1].z, pos[2].z)
|
||||
local zmin = math.min(pos[1].z, pos[2].z)
|
||||
|
||||
local pos00 = vector.new(xmin,ymin,zmin)
|
||||
local pos11 = vector.new(xmax,ymin,zmax)
|
||||
local pos10 = vector.new(xmax,ymin,zmin)
|
||||
local pos01 = vector.new(xmin,ymin,zmax)
|
||||
return {pos00=pos00,pos01=pos01,pos10=pos10,pos11=pos11}
|
||||
end
|
||||
|
||||
|
||||
|
||||
function get_corner00(sel,direction)
|
||||
local crs = get_all_corners_flat(sel)
|
||||
|
||||
|
||||
|
||||
if direction.z == 1 then
|
||||
return crs.pos00
|
||||
end
|
||||
if direction.x == 1 then
|
||||
return crs.pos01
|
||||
end
|
||||
if direction.z == -1 then
|
||||
return crs.pos11
|
||||
end
|
||||
if direction.x == -1 then
|
||||
return crs.pos10
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
|
||||
function add_vectors(a,b,c)
|
||||
return vector.add(a,vector.add(b,c))
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
function direction_to_number(direction)
|
||||
if direction.z == 1 then return 0 end
|
||||
if direction.x == 1 then return 1 end
|
||||
if direction.z == -1 then return 2 end
|
||||
if direction.x == - 1 then return 3 end
|
||||
end
|
||||
|
||||
function number_to_direction(nr)
|
||||
if nr == 0 then return {x=0,y=0,z=1} end
|
||||
if nr == 1 then return {x=1,y=0,z=0} end
|
||||
if nr == 2 then return {x=0,y=0,z=-1} end
|
||||
if nr == 3 then return {x=-1,y=0,z=0} end
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
function diff_directions(d1,d2)
|
||||
local p1 = direction_to_number(d1)
|
||||
local p2 = direction_to_number(d2)
|
||||
|
||||
return number_to_direction( (p2-p1+4)%4 )
|
||||
end
|
||||
|
||||
function flip(v)
|
||||
if v == nil then return nil end
|
||||
return vector.multiply(v,-1)
|
||||
end
|
||||
|
||||
|
||||
function paste_circuit(sel,file,direction)
|
||||
if sel.pos1 == nil then return end
|
||||
if sel.pos2 == nil then return end
|
||||
|
||||
local info = read_table_from_file(file)
|
||||
|
||||
--local rotate_direction = diff_directions(direction)
|
||||
--local nodes = rotate_m3(info.nodes,direction)
|
||||
local nodes = info.nodes
|
||||
|
||||
|
||||
local sx = nodes.sx
|
||||
local sy = nodes.sy
|
||||
local sz = nodes.sz
|
||||
|
||||
local right = rotate_direction_right(direction)
|
||||
|
||||
local start_pos = get_corner00(sel,direction)
|
||||
|
||||
for xi=1,sx do
|
||||
for zi=1,sz do
|
||||
for yi=1,sy do
|
||||
local shift= add_vectors(
|
||||
vector.multiply(right,xi-1),
|
||||
vector.multiply(direction,zi-1),
|
||||
vector.multiply({x=0,y=1,z=0},yi-1))
|
||||
|
||||
local pos = vector.add(start_pos, shift)
|
||||
|
||||
if is_in_selection(sel,pos) then
|
||||
|
||||
local node = m3_get(nodes,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")
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
local function make_selection(user,file,direction,pos)
|
||||
local info = read_table_from_file(file)
|
||||
--local rotate_direction = diff_directions(info.direction,direction)
|
||||
local rotate_direction= info.direction
|
||||
|
||||
local nodes = info.nodes
|
||||
local sx = nodes.sx
|
||||
local sy = nodes.sy
|
||||
local sz = nodes.sz
|
||||
|
||||
|
||||
local pos2 = make_pos2(pos,direction,sx,sy,sz)
|
||||
|
||||
-- Update
|
||||
mesecons_autotools.set_pos(user,1,pos)
|
||||
mesecons_autotools.set_pos(user,2,pos2)
|
||||
mesecons_autotools.render(user)
|
||||
mesecons_autotools.zero_stack_counter(user)
|
||||
mesecons_autotools.zero_stack_direction(user)
|
||||
end
|
||||
|
||||
local function on_place_full_circuit(itemstack, player, pointed_thing)
|
||||
local user = player:get_player_name()
|
||||
local rad = player:get_look_horizontal()
|
||||
local direction = radians_to_direction_looking_forward(rad)
|
||||
local fields = itemstack:get_meta():to_table().fields
|
||||
local file = fields.file
|
||||
|
||||
if not mesecons_autotools.is_full_selection(user) then return nil end
|
||||
local pos1 = mesecons_autotools.get_pos(user,1)
|
||||
local pos2 = mesecons_autotools.get_pos(user,2)
|
||||
local sel = {pos1=pos1,pos2=pos2}
|
||||
paste_circuit(sel,file,direction)
|
||||
|
||||
end
|
||||
|
||||
|
||||
local function on_use_new_circuit(itemstack, player, pointed_thing)
|
||||
local user = player:get_player_name()
|
||||
local rad = player:get_look_horizontal()
|
||||
local direction = radians_to_direction_looking_forward(rad)
|
||||
|
||||
if not mesecons_autotools.is_full_selection(user) then
|
||||
-- show dialog with info or chat info
|
||||
return
|
||||
end
|
||||
show_dialog_new(user,direction)
|
||||
|
||||
return nil
|
||||
end
|
||||
|
||||
local function on_use_full_circuit(itemstack, player, pointed_thing)
|
||||
local user = player:get_player_name()
|
||||
local rad = player:get_look_horizontal()
|
||||
local direction = radians_to_direction_looking_forward(rad)
|
||||
local fields = itemstack:get_meta():to_table().fields
|
||||
local file = fields.file
|
||||
|
||||
|
||||
if( pointed_thing.type == "node" ) then
|
||||
make_selection(user,file,direction,pointed_thing.above)
|
||||
else
|
||||
show_dialog_full(user,file,player)
|
||||
end
|
||||
|
||||
return nil
|
||||
end
|
||||
|
||||
local function none(itemstack, player, pointed_thing)
|
||||
return nil
|
||||
end
|
||||
|
||||
|
||||
|
||||
--minetest.register_craftitem("mesecons_autotools:circuit_empty", {
|
||||
minetest.register_tool("mesecons_autotools:circuit_empty", {
|
||||
description = "Circuit Empty",
|
||||
inventory_image = "circuit_empty.png",
|
||||
stack_max = 1,
|
||||
|
||||
on_use = on_use_new_circuit,
|
||||
on_place = none,
|
||||
on_secondary_use = none,
|
||||
|
||||
})
|
||||
|
||||
--minetest.register_craftitem("mesecons_autotools:circuit_full", {
|
||||
minetest.register_tool("mesecons_autotools:circuit_full", {
|
||||
description = "Circuit saved",
|
||||
inventory_image = "circuit_full.png",
|
||||
groups = {not_in_creative_inventory = 1},
|
||||
stack_max = 1,
|
||||
on_use = on_use_full_circuit,
|
||||
on_place = on_place_full_circuit,
|
||||
--on_secondary_use = on_place_full_circuit,
|
||||
|
||||
|
||||
})
|
47
mesecons_autotools_tmp/book/file.lua
Normal file
@ -0,0 +1,47 @@
|
||||
mesecons_autotools.rand = PcgRandom(2);
|
||||
|
||||
|
||||
function generate_file_name(user)
|
||||
local days = minetest.get_day_count()
|
||||
local sec = minetest.get_gametime()
|
||||
local rand = math.abs(mesecons_autotools.rand:next())
|
||||
local file = "circuit-"..user.."-"..sec.."-" .. rand
|
||||
return file
|
||||
end
|
||||
|
||||
local path = minetest.get_worldpath() .. "/circuits/"
|
||||
|
||||
function save_table_to_file(filename,tab)
|
||||
minetest.mkdir(path)
|
||||
local file, err = io.open(path .. filename, "wb")
|
||||
if err ~= nil then
|
||||
-- player_notify(name, "Could not save file to \"" .. filename .. "\"")
|
||||
print ("mesecons_autotools: ERROR: file save error")
|
||||
return
|
||||
end
|
||||
local result = minetest.serialize(tab)
|
||||
|
||||
file:write(result)
|
||||
file:flush()
|
||||
file:close()
|
||||
end
|
||||
|
||||
|
||||
function read_table_from_file(filename)
|
||||
minetest.mkdir(path)
|
||||
local file, err = io.open(path .. filename, "rb")
|
||||
if err ~= nil then
|
||||
-- notify
|
||||
print ("mesecons_autotools: ERROR: file read error")
|
||||
return nil
|
||||
end
|
||||
|
||||
local value = file:read("*a")
|
||||
file:close()
|
||||
|
||||
local tab = minetest.deserialize(value)
|
||||
return tab
|
||||
end
|
||||
|
||||
|
||||
|
88
mesecons_autotools_tmp/book/formspec.lua
Normal file
@ -0,0 +1,88 @@
|
||||
local esc = minetest.formspec_escape
|
||||
|
||||
function fs_all(db)
|
||||
local info = fs_info(db.title,db.text,db)
|
||||
local stats = fs_stats(db.nodes, db.direction)
|
||||
local circuit = fs_circuit(db.view)
|
||||
|
||||
local spec = info .. stats .. circuit
|
||||
return spec
|
||||
end
|
||||
|
||||
|
||||
|
||||
function fs_info(title,text)
|
||||
local formspec =
|
||||
"formspec_version[3]"..
|
||||
"size[32,25]"..
|
||||
"field[0.5,1;8,1;title;".."Name"..";"..esc(title).."]"..
|
||||
"label[15,0.7;Circuit Preview]"..
|
||||
"textarea[0.5,3;8,15;text;" .. "Description:" .. ";" ..
|
||||
esc(text) .. "]" ..
|
||||
"button_exit[2.5,18;3,1;save;" .. "Save" .. "]"
|
||||
|
||||
return formspec
|
||||
end
|
||||
|
||||
|
||||
function fs_circuit(mx_view)
|
||||
local W = 20
|
||||
local H = 20
|
||||
local startx = 10
|
||||
local starty = 2
|
||||
|
||||
local imagew = W/(mx_view.w)
|
||||
local imageh = H/(mx_view.h)
|
||||
|
||||
if imageh > 1 then imageh = 1 end
|
||||
if imagew > 1 then imagew = 1 end
|
||||
|
||||
local minsize = math.min(imageh,imagew)
|
||||
imageh = minsize
|
||||
imagew = minsize
|
||||
|
||||
local epsilon = 0.07
|
||||
|
||||
|
||||
local spec = ""
|
||||
for ix=1,mx_view.w do
|
||||
for iy=1,mx_view.h do
|
||||
local n = mx_get(mx_view,ix,iy)
|
||||
if n == nil then n = {name="air",param2=0} end
|
||||
local img = node_to_image( n )
|
||||
|
||||
|
||||
spec = spec .. "image["..
|
||||
startx+ix*imagew .. "," ..
|
||||
starty+(mx_view.h-iy+1)*imageh .. ";" ..
|
||||
imagew +epsilon .. "," ..
|
||||
imageh +epsilon .. ";" ..
|
||||
img .. "]"
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
return spec
|
||||
|
||||
end
|
||||
|
||||
function fs_stats(nodes,direction)
|
||||
local block, gate, wire = get_stats(nodes)
|
||||
|
||||
|
||||
|
||||
|
||||
local sx = nodes.sx
|
||||
local sy = nodes.sy
|
||||
local sz = nodes.sz
|
||||
|
||||
local stats = "size : " .. sx .. "x"..sy .. "x"..sz .. "(=".. sx*sy*sz .. ")\n" ..
|
||||
"wires : " .. wire .. "\n" ..
|
||||
"gates : " .. gate .. "\n" ..
|
||||
"others : ".. block - wire - gate .. "\n" ..
|
||||
"blocks: " .. block
|
||||
local spec = "textarea[0.5,19;8,5;;;" .. esc(stats) .. "]"
|
||||
return spec
|
||||
end
|
||||
|
||||
|
125
mesecons_autotools_tmp/book/image.lua
Normal file
@ -0,0 +1,125 @@
|
||||
|
||||
|
||||
function node_to_image(node)
|
||||
if node == nil then
|
||||
return "empty.png"
|
||||
end
|
||||
|
||||
local name = node.name
|
||||
local param2 = node.param2 or 0
|
||||
|
||||
|
||||
if( name == "air" ) then
|
||||
return "empty.png"
|
||||
end
|
||||
|
||||
|
||||
if (name == "mesecons_insulated:insulated_off") or
|
||||
(name == "mesecons_insulated:insulated_on" ) then
|
||||
if( param2 % 2 == 0 ) then
|
||||
return "wireh.png"
|
||||
else
|
||||
return "wirev.png"
|
||||
end
|
||||
end
|
||||
|
||||
if (name == "mesecons_extrawires:crossover_off") or
|
||||
(name == "mesecons_extrawires:crossover_on") or
|
||||
(name == "mesecons_extrawires:crossover_01") or
|
||||
(name == "mesecons_extrawires:crossover_10" ) then
|
||||
return "corssover.png"
|
||||
end
|
||||
|
||||
if (name == "mesecons_extrawires:corner_off" ) or
|
||||
(name == "mesecons_extrawires:corner_on" ) then
|
||||
|
||||
return "corner"..param2 .. ".png"
|
||||
end
|
||||
|
||||
if (name == "mesecons_extrawires:tjunction_off" ) or
|
||||
(name == "mesecons_extrawires:tjunction_on" ) then
|
||||
|
||||
return "tjunction"..param2 .. ".png"
|
||||
end
|
||||
|
||||
if ( name == "mesecons_morewires:xjunction_off" ) or
|
||||
( name == "mesecons_morewires:xjunction_on" ) then
|
||||
return "xjunction.png"
|
||||
end
|
||||
|
||||
|
||||
if( name == "mesecons_regs:flipflop_off" ) or ( name == "mesecons_regs:flipflop_on") then
|
||||
return "ff"..param2..".png"
|
||||
end
|
||||
if( name == "mesecons_regs:latch_off" ) or ( name == "mesecons_regs:latch_on") then
|
||||
return "latch"..param2..".png"
|
||||
end
|
||||
|
||||
|
||||
if( name == "mesecons_gates:and_off" ) or ( name =="mesecons_gates:and_on" )then
|
||||
return "and".. param2 .. ".png"
|
||||
end
|
||||
if( name == "mesecons_gates:nand_off" ) or ( name =="mesecons_gates:nand_on" )then
|
||||
return "nand".. param2 .. ".png"
|
||||
end
|
||||
|
||||
if( name == "mesecons_gates:nor_off" ) or ( name =="mesecons_gates:nor_on" )then
|
||||
return "nor".. param2 .. ".png"
|
||||
end
|
||||
if( name == "mesecons_gates:or_off" ) or ( name =="mesecons_gates:or_on" )then
|
||||
return "or".. param2 .. ".png"
|
||||
end
|
||||
if( name == "mesecons_gates:xor_off" ) or ( name =="mesecons_gates:xor_on" )then
|
||||
return "xor".. param2 .. ".png"
|
||||
end
|
||||
|
||||
|
||||
if( name == "mesecons_gates:diode_off" ) or ( name =="mesecons_gates:diode_on" )then
|
||||
return "diode".. param2 .. ".png"
|
||||
end
|
||||
|
||||
if( name == "mesecons_gates:not_off" ) or ( name =="mesecons_gates:not_on" )then
|
||||
return "not".. param2 .. ".png"
|
||||
end
|
||||
|
||||
if( name == "mesecons_switch:mesecon_switch_off" ) or ( name =="mesecons_switch:mesecon_switch_on" )then
|
||||
return "mesecons_switch_off.png"
|
||||
end
|
||||
|
||||
if ( name == "mesecons_lightstone:lightstone_white_off" ) or ( name == "mesecons_lightstone:lightstone_white_on" ) then
|
||||
return "jeija_lightstone_white_on.png"
|
||||
end
|
||||
|
||||
if (name == "mesecons_walllever:wall_lever_off" ) or (name == "mesecons_walllever:wall_lever_on" ) then
|
||||
|
||||
return "jeija_wall_lever_inv.png"
|
||||
end
|
||||
|
||||
if (name == "default:mese" ) or (name == "mesecons_extrawires:mese_powered" )then
|
||||
return "default_mese_block.png"
|
||||
end
|
||||
|
||||
if (name == "mesecons_powerplant:power_plant") then
|
||||
return "jeija_power_plant.png"
|
||||
end
|
||||
|
||||
|
||||
if (name == "mesecons_gates3:and3_off") or (name == "mesecons_gates3:and3_on" ) then
|
||||
return "jeija_gate3_and3r"..param2..".png"
|
||||
end
|
||||
|
||||
|
||||
if (name == "mesecons_gates3:nand3_off") or (name == "mesecons_gates3:nand3_on" ) then
|
||||
return "jeija_gate3_nand3r"..param2..".png"
|
||||
end
|
||||
|
||||
if (name == "mesecons_gates3:or3_off") or (name == "mesecons_gates3:or3_on" ) then
|
||||
return "jeija_gate3_or3r"..param2..".png"
|
||||
end
|
||||
|
||||
if (name == "mesecons_gates3:nor3_off") or (name == "mesecons_gates3:nor3_on" ) then
|
||||
return "jeija_gate3_nor3r"..param2..".png"
|
||||
end
|
||||
|
||||
return "unknown.png"
|
||||
end
|
220
mesecons_autotools_tmp/book/library.lua
Normal file
@ -0,0 +1,220 @@
|
||||
|
||||
|
||||
|
||||
function render_circuit(circ,start_x,start_y)
|
||||
circ.title = circ.title or ""
|
||||
local spec = "button["..start_x..","..start_y..";10,1;".. "title_" .. circ.id .. ";"..circ.title.."]"
|
||||
return spec,1
|
||||
end
|
||||
|
||||
|
||||
function f_fold(id,x,y,folded)
|
||||
local fold_sign
|
||||
if folded == true then
|
||||
fold_sign = "+"
|
||||
else
|
||||
fold_sign = "-"
|
||||
end
|
||||
|
||||
local spec = "button["..x..","..y..";1,1;".. "fold_" .. id ..";".. fold_sign.."]"
|
||||
|
||||
return spec, 1, 0
|
||||
end
|
||||
|
||||
|
||||
function render_lib(lib,start_x,start_y)
|
||||
local xshift = 1
|
||||
local yshift = 1
|
||||
local total_yshift = 0
|
||||
local total_xshift = 0
|
||||
local id = lib.id
|
||||
|
||||
lib.title = lib.title or ""
|
||||
lib.folded = lib.folded or false
|
||||
|
||||
|
||||
local spec = ""
|
||||
|
||||
-- fold button
|
||||
local ss,shx,shy = f_fold(id,start_x+total_xshift, start_y+total_yshift, lib.folded)
|
||||
total_xshift = total_xshift+shx
|
||||
total_yshift = total_yshift+shy
|
||||
spec = spec .. ss
|
||||
|
||||
|
||||
spec = spec ..
|
||||
"button[".. start_x + total_xshift ..",".. start_y + total_yshift..
|
||||
";10,1;".. "title_"..lib.id .. ";"..lib.title.."]"
|
||||
total_xshift = start_x + 1
|
||||
total_yshift = total_yshift+1
|
||||
|
||||
|
||||
|
||||
|
||||
if lib.folded == false then
|
||||
for _,v in ipairs(lib.list) do
|
||||
if v.type == "library" then
|
||||
local sp, ys = render_lib(v, start_x+total_xshift, start_y+total_yshift)
|
||||
spec = spec .. sp
|
||||
total_yshift = total_yshift + ys
|
||||
elseif v.type == "circuit" then
|
||||
local sp, ys = render_circuit(v,start_x+total_xshift, start_y+total_yshift)
|
||||
spec = spec .. sp
|
||||
total_yshift = total_yshift + ys
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
return spec, total_yshift
|
||||
|
||||
end
|
||||
|
||||
function traverse_list(list,action)
|
||||
if list == nil then return end
|
||||
|
||||
for _,v in ipairs(list) do
|
||||
print("traverser.id =" .. v.id)
|
||||
if v.type == "circuit" then
|
||||
action(v)
|
||||
elseif v.type == "library" then
|
||||
action(v)
|
||||
traverse_list(v.list,action)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
|
||||
function foreach_id(list,action)
|
||||
if list == nil then return end
|
||||
traverse_list(list, function(elem)
|
||||
action(elem.id)
|
||||
end)
|
||||
end
|
||||
|
||||
function get_elem_by_id(list,id)
|
||||
local found
|
||||
traverse_list(list,function(e)
|
||||
if e.id == id then
|
||||
found = e
|
||||
end
|
||||
|
||||
end)
|
||||
return found
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||
if formname ~= "mesecons_autotools:library_view" then return end
|
||||
--print ("RECEIVE:=player="..dump(player) .. ", formname="..formname .. ".fiels="..dump(fields))
|
||||
local user = player:get_player_name()
|
||||
local stack = player:get_wielded_item()
|
||||
local data = stack:get_meta():to_table().fields
|
||||
local lib = data.lib
|
||||
|
||||
|
||||
print("lib="..dump(lib))
|
||||
if fields.quit then return end
|
||||
--if lib == nil then return end
|
||||
|
||||
-- print("DB2: " .. dump(data))
|
||||
-- print("FIELDS:"..dump(fields))
|
||||
|
||||
|
||||
|
||||
lib = lib or {}
|
||||
-- print ("lib="..dump(lib))
|
||||
traverse_list(lib.list,function(elem)
|
||||
print("#")
|
||||
if fields["fold_".. elem.id] == true then
|
||||
elem.folded = not elem.folded
|
||||
end
|
||||
end)
|
||||
|
||||
-- print("libafger="..dump(lib))
|
||||
--[[
|
||||
if (fields.save) or fields.key_enter_field == "title" then
|
||||
]]--
|
||||
data.lib = lib
|
||||
stack:get_meta():from_table({ fields = data})
|
||||
player:set_wielded_item(stack)
|
||||
|
||||
local formspec = render_formspec(lib)
|
||||
minetest.show_formspec(user, "mesecons_autotools:library_view", formspec)
|
||||
|
||||
end)
|
||||
|
||||
function render_formspec(lib)
|
||||
local formspec = "formspec_version[3]"..
|
||||
"size[32,25]"
|
||||
|
||||
formspec = formspec .. render_lib(lib,1,1)
|
||||
return formspec
|
||||
end
|
||||
|
||||
|
||||
lib = {
|
||||
id = "l1",
|
||||
title = "library bla bla ",
|
||||
type = "library",
|
||||
list = {
|
||||
{id = "c1", type="circuit", title="somethign something"},
|
||||
{id = "c2", type="circuit", title="somethign something2"},
|
||||
{id = "l2", type="library", title="wooihoihoh/", folded = false,
|
||||
list = {
|
||||
{id = "c11", type="circuit", title="somethign something"},
|
||||
{id = "c21", type="circuit", title="somethign something2"},
|
||||
}
|
||||
|
||||
},
|
||||
{id = "c111", type="circuit", title="circuit sak/32/d0"},
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function on_place_library(itemstack, player, pointed_thing)
|
||||
local user = player:get_player_name()
|
||||
local stack = player:get_wielded_item()
|
||||
local data = stack:get_meta():to_table().fields
|
||||
|
||||
|
||||
print("DU:"..dump(itemstack:get_meta():to_table()))
|
||||
print("item stackc:" .. dump(itemstack))
|
||||
|
||||
if data.count == nil then data.count = 0 end
|
||||
data.count = data.count + 1
|
||||
|
||||
|
||||
stack:get_meta():from_table({ fields = data})
|
||||
player:set_wielded_item(stack)
|
||||
|
||||
|
||||
local formspec = render_formspec(lib)
|
||||
-- print("formtspec="..formspec)
|
||||
|
||||
|
||||
minetest.show_formspec(user, "mesecons_autotools:library_view", formspec)
|
||||
|
||||
end
|
||||
|
||||
|
||||
|
||||
minetest.register_tool("mesecons_autotools:library", {
|
||||
description = "Library of Circuits",
|
||||
inventory_image = "library.png",
|
||||
stack_max = 1,
|
||||
|
||||
|
||||
on_place = on_place_library,
|
||||
--[[
|
||||
on_use = on_use_new_circuit,
|
||||
|
||||
on_secondary_use = none,
|
||||
]]--
|
||||
})
|
||||
|
271
mesecons_autotools_tmp/book/m3.lua
Normal file
@ -0,0 +1,271 @@
|
||||
|
||||
|
||||
function m3_get(m,x,y,z)
|
||||
if m == nil then return nil end
|
||||
if m[x] == nil then return nil end
|
||||
if m[x][y] == nil then return nil end
|
||||
if m[x][y][z] == nil then return nil end
|
||||
return m[x][y][z]
|
||||
end
|
||||
|
||||
function m3_set(m,x,y,z,value)
|
||||
if m == nil then m = {} end
|
||||
if m[x] == nil then m[x] = {} end
|
||||
if m[x][y] == nil then m[x][y] = {} end
|
||||
if m[x][y][z] == nil then m[x][y][z] = {} end
|
||||
m[x][y][z] = value
|
||||
end
|
||||
--[[
|
||||
function m3_set_pos(m,pos1,pos2)
|
||||
m.pos1 = pos1
|
||||
m.pos2 = pos2
|
||||
end
|
||||
]]--
|
||||
|
||||
function m3_flip_xy(m)
|
||||
local new_m = {}
|
||||
for ix=1,m.sx do
|
||||
for iz=1,m.sz do
|
||||
for iy=1,m.sy do
|
||||
m3_set(new_m,iz,iy,ix, m3_get(m,ix,iy,iz))
|
||||
end
|
||||
end
|
||||
end
|
||||
--[[
|
||||
-- Rotate node
|
||||
for ix=1,m.sx do
|
||||
for iz=1,m.sz do
|
||||
for iy=1,m.sy do
|
||||
local node = m3_get(m,ix,iy,iz)
|
||||
|
||||
local rotated_node =
|
||||
rotate_node_to_direction(node,{x=1,y=0,z=0})
|
||||
m3_set(m,ix,iy,iz,rotated_node)
|
||||
end
|
||||
end
|
||||
end
|
||||
]]--
|
||||
new_m.sx = m.sz
|
||||
new_m.sz = m.sx
|
||||
new_m.sy = m.sy
|
||||
return new_m
|
||||
end
|
||||
|
||||
function m3_flip_x(m)
|
||||
local new_m = {}
|
||||
for ix=1,m.sx do
|
||||
for iz=1,m.sz do
|
||||
for iy=1,m.sy do
|
||||
m3_set(new_m,ix,iy,m.sz-iz+1, m3_get(m,ix,iy,iz))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
--[[
|
||||
for ix=1,m.sx do
|
||||
for iz=1,m.sz do
|
||||
for iy=1,m.sy do
|
||||
local node = m3_get(m,ix,iy,iz)
|
||||
|
||||
local rotated_node =
|
||||
rotate_node_to_direction(node,{x=0,y=0,z=-1})
|
||||
m3_set(m,ix,iy,iz,rotated_node)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
]]--
|
||||
new_m.sx = m.sx
|
||||
new_m.sz = m.sz
|
||||
new_m.sy = m.sy
|
||||
return new_m
|
||||
end
|
||||
|
||||
|
||||
function m3_rotate90(m)
|
||||
return m3_flip_x( m3_flip_xy (m))
|
||||
end
|
||||
|
||||
function m3_rotate180(m)
|
||||
return m3_rotate90(m3_rotate90(m))
|
||||
end
|
||||
|
||||
function m3_rotate270(m)
|
||||
return m3_rotate90(m3_rotate90(m3_rotate90(m)))
|
||||
end
|
||||
|
||||
function rotate_m3(m,direction)
|
||||
|
||||
if direction.x == 1 then
|
||||
return m3_rotate270(m)
|
||||
end
|
||||
if direction.x == -1 then
|
||||
return m3_rotate90(m)
|
||||
end
|
||||
if direction.z == 1 then
|
||||
return m
|
||||
end
|
||||
if direction.z == -1 then
|
||||
return m3_rotate180(m)
|
||||
end
|
||||
return m
|
||||
end
|
||||
|
||||
|
||||
|
||||
function m3_move_to_000(m)
|
||||
local new_m = {}
|
||||
|
||||
local pos1 = m.pos1
|
||||
local pos2 = m.pos2
|
||||
|
||||
local xmin = math.min(pos1.x,pos2.x)
|
||||
local ymin = math.min(pos1.y,pos2.y)
|
||||
local zmin = math.min(pos1.z,pos2.z)
|
||||
|
||||
local xmax = math.max(pos1.x,pos2.x)
|
||||
local ymax = math.max(pos1.y,pos2.y)
|
||||
local zmax = math.max(pos1.z,pos2.z)
|
||||
|
||||
|
||||
|
||||
local sx = xmax - xmin + 1
|
||||
local sy = ymax - ymin + 1
|
||||
local sz = zmax - zmin + 1
|
||||
|
||||
for x=1,sx,1 do
|
||||
for y=1,sy,1 do
|
||||
for z=1,sz,1 do
|
||||
m3_set(new_m,x,y,z,
|
||||
m3_get(m, x-1 + xmin, y-1 + ymin, z-1+zmin))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
new_m.sx = sx
|
||||
new_m.sy = sy
|
||||
new_m.sz = sz
|
||||
return new_m
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
function selection_to_m3(pos1,pos2,direction)
|
||||
local m = {}
|
||||
iterate_selection(pos1,pos2,function(pos)
|
||||
local node = minetest.get_node(pos)
|
||||
m3_set(m,pos.x,pos.y,pos.z,node)
|
||||
end)
|
||||
m.pos1 = pos1
|
||||
m.pos2 = pos2
|
||||
|
||||
m = m3_move_to_000(m)
|
||||
|
||||
m = rotate_m3(m,direction)
|
||||
|
||||
for ix=1,m.sx do
|
||||
for iz=1,m.sz do
|
||||
for iy=m.sy,1,-1 do
|
||||
local node = m3_get(m,ix,iy,iz)
|
||||
local rotated_node = rotate_node_to_direction(node,direction)
|
||||
m3_set(m,ix,iy,iz,rotated_node)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
return m
|
||||
end
|
||||
|
||||
|
||||
function m3_to_mx(m)
|
||||
local mx={}
|
||||
for ix=1,m.sx do
|
||||
for iz=1,m.sz do
|
||||
for iy=m.sy,1,-1 do
|
||||
local pos = { x = ix, y=iy, z = iz }
|
||||
local node = m3_get(m,ix,iy,iz)
|
||||
|
||||
if node.name ~= "air" then
|
||||
mx_set(mx,ix,iz,node)
|
||||
break
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
mx.w = m.sx
|
||||
mx.h = m.sz
|
||||
return mx
|
||||
end
|
||||
|
||||
|
||||
local function lmin(a,b)
|
||||
if a == nil then
|
||||
return b
|
||||
else
|
||||
if b == nil then
|
||||
return a
|
||||
else
|
||||
return math.min(a,b)
|
||||
end
|
||||
end
|
||||
end
|
||||
local function lmax(a,b)
|
||||
if a == nil then
|
||||
return b
|
||||
else
|
||||
if b == nil then
|
||||
return a
|
||||
else
|
||||
return math.max(a,b)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function list_to_m3(list)
|
||||
local m = {}
|
||||
|
||||
local xmin,xmax,ymin,ymax,zmin,zmax
|
||||
|
||||
for _,v in pairs(list) do
|
||||
local pos = v.pos
|
||||
local node = v.node
|
||||
|
||||
m3_set(m,pos.x,pos.y,pos.z, node)
|
||||
|
||||
xmin = lmin(xmin, pos.x)
|
||||
ymin = lmin(ymin, pos.y)
|
||||
zmin = lmin(zmin, pos.z)
|
||||
|
||||
xmax = lmax(xmax, pos.x)
|
||||
ymax = lmax(ymax, pos.y)
|
||||
zmax = lmax(zmax, pos.z)
|
||||
|
||||
|
||||
end
|
||||
|
||||
m.pos1 = {x=xmin,y=ymin,z=zmin}
|
||||
m.pos2 = {x=xmax,y=ymax,z=zmax}
|
||||
return m
|
||||
end
|
||||
|
||||
|
||||
function iterate_m3(m,action)
|
||||
for x=1,m.sx do
|
||||
for y=1,m.sy do
|
||||
for z=1,m.sz do
|
||||
action(m3_get(m,x,y,z))
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
48
mesecons_autotools_tmp/book/misc.lua
Normal file
@ -0,0 +1,48 @@
|
||||
function rotate_node_to_direction(node,direction)
|
||||
local add = 0
|
||||
if direction.x == 1 then add = 3 end
|
||||
if direction.x == -1 then add = 1 end
|
||||
if direction.z == 1 then add = 0 end
|
||||
if direction.z == -1 then add = 2 end
|
||||
|
||||
local param2 = node.param2
|
||||
|
||||
param2 = (param2+add)% 4
|
||||
|
||||
return { name = node.name , param2 = param2 }
|
||||
end
|
||||
|
||||
local function direction_to_number(direction)
|
||||
if( direction.z == 1 ) then
|
||||
return 1
|
||||
elseif( direction.x == 1 ) then
|
||||
return 2
|
||||
elseif(direction.z == -1 )then
|
||||
return 3
|
||||
else
|
||||
return 4
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
||||
|
||||
function rotate_node(node, saved_direction,direction)
|
||||
|
||||
local values =
|
||||
{
|
||||
{0,1,2,3},
|
||||
{3,0,1,2},
|
||||
{2,3,0,1},
|
||||
{1,2,3,0}
|
||||
}
|
||||
|
||||
local rotate =
|
||||
values[direction_to_number(saved_direction)][direction_to_number(direction)]
|
||||
|
||||
local new_node = {}
|
||||
new_node.name = node.name
|
||||
new_node.param2 = (node.param2+rotate)%4
|
||||
|
||||
return new_node
|
||||
end
|
109
mesecons_autotools_tmp/book/mx.lua
Normal file
@ -0,0 +1,109 @@
|
||||
|
||||
|
||||
function mx_get(m,x,y)
|
||||
if m == nil then return nil end
|
||||
if m[x] == nil then return nil end
|
||||
if m[x][y] == nil then return nil end
|
||||
return m[x][y]
|
||||
end
|
||||
|
||||
function mx_set(m,x,y,value)
|
||||
if m == nil then m = {} end
|
||||
if m[x] == nil then m[x] = {} end
|
||||
if m[x][y] == nil then m[x][y] = {} end
|
||||
m[x][y] = value
|
||||
end
|
||||
|
||||
function mx_flip_xy(m)
|
||||
local new_m = {}
|
||||
for i=1,m.w do
|
||||
for k=1,m.h do
|
||||
mx_set(new_m,k,i, mx_get(m,i,k))
|
||||
end
|
||||
end
|
||||
new_m.h = m.w
|
||||
new_m.w = m.h
|
||||
return new_m
|
||||
end
|
||||
|
||||
function mx_flip_y(m)
|
||||
local new_m = {}
|
||||
for i=1,m.w do
|
||||
for k=1,m.h do
|
||||
mx_set(new_m,m.w+1-i,k, mx_get(m,i,k))
|
||||
end
|
||||
end
|
||||
new_m.h = m.h
|
||||
new_m.w = m.w
|
||||
return new_m
|
||||
end
|
||||
|
||||
function mx_flip_x(m)
|
||||
local new_m = {}
|
||||
for i=1,m.w do
|
||||
for k=1,m.h do
|
||||
mx_set(new_m,i,m.h+1-k, mx_get(m,i,k))
|
||||
end
|
||||
end
|
||||
new_m.h = m.h
|
||||
new_m.w = m.w
|
||||
return new_m
|
||||
end
|
||||
|
||||
|
||||
function mx_rotate90(m)
|
||||
return mx_flip_x( mx_flip_xy (m))
|
||||
end
|
||||
|
||||
function mx_rotate180(m)
|
||||
return mx_rotate90(mx_rotate90(m))
|
||||
end
|
||||
|
||||
function mx_rotate270(m)
|
||||
return mx_rotate90(mx_rotate90(mx_rotate90(m)))
|
||||
end
|
||||
|
||||
function rotate_mx(mx,direction)
|
||||
|
||||
if direction.x == 1 then
|
||||
return mx_rotate270(mx)
|
||||
end
|
||||
if direction.x == -1 then
|
||||
return mx_rotate90(mx)
|
||||
end
|
||||
if direction.z == 1 then
|
||||
return mx
|
||||
end
|
||||
if direction.z == -1 then
|
||||
return mx_rotate180(mx)
|
||||
end
|
||||
return mx
|
||||
end
|
||||
|
||||
|
||||
|
||||
function move_mx_to_00(mx)
|
||||
local new_mx = {}
|
||||
|
||||
local xmax = mx.xmax
|
||||
local xmin = mx.xmin
|
||||
|
||||
local ymax = mx.ymax
|
||||
local ymin = mx.ymin
|
||||
|
||||
|
||||
local sx = xmax - xmin + 1
|
||||
local sy = ymax - ymin + 1
|
||||
|
||||
for x=1,sx,1 do
|
||||
for y=1,sy,1 do
|
||||
mx_set(new_mx,x,y, mx_get(mx, x-1 + xmin, y-1 + ymin))
|
||||
end
|
||||
end
|
||||
|
||||
new_mx.w = sx
|
||||
new_mx.h = sy
|
||||
return new_mx
|
||||
|
||||
end
|
||||
|
71
mesecons_autotools_tmp/book/stats.lua
Normal file
@ -0,0 +1,71 @@
|
||||
function is_gate(node)
|
||||
local gates = {
|
||||
"mesecons_gates:and",
|
||||
"mesecons_gates:or",
|
||||
"mesecons_gates:xor",
|
||||
"mesecons_gates:nand",
|
||||
"mesecons_gates:nor",
|
||||
"mesecons_gates:not",
|
||||
"mesecons_gates:diode",
|
||||
"mesecons_gates3:and3",
|
||||
"mesecons_gates3:or3",
|
||||
"mesecons_gates3:nor3",
|
||||
"mesecons_gates3:nand3",
|
||||
"mesecons_regs:flipflop",
|
||||
"mesecons_regs:latch"
|
||||
}
|
||||
|
||||
local gates_with_states = {}
|
||||
for _,v in ipairs(gates) do
|
||||
table.insert(gates_with_states,v.."_on")
|
||||
table.insert(gates_with_states,v.."_off")
|
||||
end
|
||||
|
||||
for _,v in ipairs(gates_with_states) do
|
||||
if node.name == v then
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
function is_wire_node(node)
|
||||
local list = {
|
||||
"mesecons_insulated:insulated_off", "mesecons_insulated:insulated_on",
|
||||
"mesecons_extrawires:corner_off", "mesecons_extrawires:corner_on",
|
||||
"mesecons_extrawires:tjunction_off", "mesecons_extrawires:tjunction_on",
|
||||
"mesecons_extrawires:crossover_off", "mesecons_extrawires:crossover_on",
|
||||
"mesecons_extrawires:crossover_10", "mesecons_extrawires:crossover_01",
|
||||
"mesecons_morewires:xjunction_off", "mesecons_morewires:xjunction_on",
|
||||
}
|
||||
|
||||
local pos_name = node.name
|
||||
for i,name in ipairs(list) do
|
||||
if name == pos_name then
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
function get_stats(m)
|
||||
local blocks,gates,wires = 0,0,0
|
||||
iterate_m3(m, function(node)
|
||||
if is_wire_node(node) then
|
||||
wires = wires + 1
|
||||
end
|
||||
if is_gate(node) then
|
||||
gates = gates+1
|
||||
end
|
||||
if node.name ~= "air" then
|
||||
blocks = blocks + 1
|
||||
end
|
||||
|
||||
end)
|
||||
|
||||
return blocks,gates,wires
|
||||
|
||||
end
|
0
mesecons_autotools_tmp/commands/all_commands.lua
Normal file
16
mesecons_autotools_tmp/debug.lua
Normal file
@ -0,0 +1,16 @@
|
||||
|
||||
-- Debug
|
||||
|
||||
function dump(o)
|
||||
if type(o) == 'table' then
|
||||
local s = '{ '
|
||||
for k,v in pairs(o) do
|
||||
if type(k) ~= 'number' then k = '"'..k..'"' end
|
||||
s = s .. '['..k..'] = ' .. dump(v) .. ','
|
||||
end
|
||||
return s .. '} '
|
||||
else
|
||||
return tostring(o)
|
||||
end
|
||||
end
|
||||
|
353
mesecons_autotools_tmp/init.lua
Normal file
@ -0,0 +1,353 @@
|
||||
dofile(minetest.get_modpath("mesecons_autotools").."/debug.lua");
|
||||
|
||||
|
||||
mesecons_autotools = {}
|
||||
mesecons_autotools.users = {}
|
||||
mesecons_autotools.actions = {}
|
||||
|
||||
|
||||
-- Basic functions
|
||||
|
||||
--[[
|
||||
mesecons_autotools =
|
||||
{
|
||||
user_name = {
|
||||
pos[1..2] = { x = number, y = number, z = number}
|
||||
stack_direction = {x,y,z}
|
||||
stack_counter = number
|
||||
entities = <list of minetest.add_entity()>
|
||||
options = {
|
||||
option1 = value1
|
||||
option2 = value2
|
||||
}
|
||||
}
|
||||
|
||||
user_name = ...
|
||||
]]--
|
||||
|
||||
mesecons_autotools.set_pos = function(user,nr,pos)
|
||||
if mesecons_autotools.users[user] == nil then
|
||||
mesecons_autotools.users[user] = {}
|
||||
end
|
||||
if mesecons_autotools.users[user].pos == nil then
|
||||
mesecons_autotools.users[user].pos = {}
|
||||
end
|
||||
if pos == nil then
|
||||
mesecons_autotools.users[user].pos[nr] = nil
|
||||
else
|
||||
local p = vector.new(pos)
|
||||
mesecons_autotools.users[user].pos[nr] = p
|
||||
end
|
||||
end
|
||||
|
||||
mesecons_autotools.get_pos = function(user,nr)
|
||||
if mesecons_autotools.users[user] == nil then
|
||||
return nil
|
||||
end
|
||||
if mesecons_autotools.users[user].pos == nil then
|
||||
return nil
|
||||
end
|
||||
if mesecons_autotools.users[user].pos[nr] == nil then
|
||||
return nil
|
||||
else
|
||||
return vector.new(mesecons_autotools.users[user].pos[nr])
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
|
||||
mesecons_autotools.get_stack_counter = function(user)
|
||||
if mesecons_autotools.users[user] == nil then
|
||||
mesecons_autotools.users[user] = {}
|
||||
end
|
||||
|
||||
if mesecons_autotools.users[user].stack_counter == nil then
|
||||
mesecons_autotools.users[user].stack_counter = 0
|
||||
end
|
||||
|
||||
return mesecons_autotools.users[user].stack_counter
|
||||
end
|
||||
|
||||
mesecons_autotools.inc_stack_counter = function(user)
|
||||
-- get value and create structure if needed
|
||||
local count = mesecons_autotools.get_stack_counter(user)
|
||||
mesecons_autotools.users[user].stack_counter = count + 1
|
||||
end
|
||||
|
||||
mesecons_autotools.dec_stack_counter = function(user)
|
||||
-- get value and create structure if needed
|
||||
local count = mesecons_autotools.get_stack_counter(user)
|
||||
if count == 0 then return end
|
||||
mesecons_autotools.users[user].stack_counter = count - 1
|
||||
end
|
||||
|
||||
mesecons_autotools.zero_stack_counter = function(user)
|
||||
-- get value and create structure if needed
|
||||
local count = mesecons_autotools.get_stack_counter(user)
|
||||
mesecons_autotools.users[user].stack_counter = 0
|
||||
end
|
||||
|
||||
mesecons_autotools.zero_stack_direction = function(user)
|
||||
if mesecons_autotools.users[user] == nil then
|
||||
mesecons_autotools.users[user] = {}
|
||||
end
|
||||
mesecons_autotools.users[user].stack_direction = { x = 0, y = 0, z =0 }
|
||||
end
|
||||
|
||||
mesecons_autotools.set_stack_direction = function(user,direction)
|
||||
-- get rid of nils
|
||||
mesecons_autotools.zero_stack_direction(user)
|
||||
mesecons_autotools.users[user].stack_direction = direction
|
||||
end
|
||||
|
||||
mesecons_autotools.get_stack_direction = function(user)
|
||||
if mesecons_autotools.users[user] == nil then
|
||||
mesecons_autotools.users[user] = {}
|
||||
end
|
||||
if mesecons_autotools.users[user].stack_direction == nil then
|
||||
mesecons_autotools.users[user].stack_direction = { x = 0, y = 0, z =0 }
|
||||
end
|
||||
return mesecons_autotools.users[user].stack_direction
|
||||
end
|
||||
|
||||
|
||||
mesecons_autotools.set_option = function(user,field,value)
|
||||
if mesecons_autotools.users[user] == nil then
|
||||
mesecons_autotools.users[user] = {}
|
||||
end
|
||||
if mesecons_autotools.users[user].options == nil then
|
||||
mesecons_autotools.users[user].options = {}
|
||||
end
|
||||
mesecons_autotools.users[user].options[field] = value
|
||||
end
|
||||
|
||||
mesecons_autotools.get_option = function(user,field)
|
||||
if mesecons_autotools.users[user] == nil then
|
||||
return nil
|
||||
end
|
||||
if mesecons_autotools.users[user].options == nil then
|
||||
return nil
|
||||
end
|
||||
return mesecons_autotools.users[user].options[field]
|
||||
end
|
||||
|
||||
mesecons_autotools.is_full_selection = function(user)
|
||||
if mesecons_autotools.get_pos(user,1) == nil then return false end
|
||||
if mesecons_autotools.get_pos(user,2) == nil then return false end
|
||||
return true
|
||||
end
|
||||
|
||||
|
||||
-- Actions/Callbacks ('user' clicked 'button' on 'pos' using 'tool')
|
||||
|
||||
-- button = "left" | "right"
|
||||
-- pos = { x = number, y = number, z = number }
|
||||
-- tool = "black" | "red" | ...
|
||||
-- type = "air" | "block"
|
||||
|
||||
mesecons_autotools.execute_action = function(tool,button,type,user,pos,rad,under)
|
||||
-- if user == nil then return end
|
||||
-- if pos == nil then return end
|
||||
if tool == nil then return end
|
||||
if button == nil then return end
|
||||
if type == nil then return end
|
||||
if rad == nil then return end
|
||||
-- under == nil can be nil
|
||||
|
||||
if mesecons_autotools.actions[tool] == nil then return end
|
||||
if mesecons_autotools.actions[tool][button] == nil then return end
|
||||
if mesecons_autotools.actions[tool][button][type] == nil then return end
|
||||
|
||||
|
||||
mesecons_autotools.actions[tool][button][type](user,pos,rad,under)
|
||||
|
||||
end
|
||||
|
||||
|
||||
|
||||
mesecons_autotools.register_action = function(tool,button,type,action)
|
||||
if mesecons_autotools.actions[tool] == nil then
|
||||
mesecons_autotools.actions[tool] = {}
|
||||
end
|
||||
if mesecons_autotools.actions[tool][button] == nil then
|
||||
mesecons_autotools.actions[tool][button] = {}
|
||||
end
|
||||
if mesecons_autotools.actions[tool][button][type] == nil then
|
||||
mesecons_autotools.actions[tool][button][type] = {}
|
||||
end
|
||||
mesecons_autotools.actions[tool][button][type] = action
|
||||
end
|
||||
|
||||
|
||||
function is_in_list(list,value)
|
||||
|
||||
for _,v in ipairs(list) do
|
||||
if v == value then return true end
|
||||
|
||||
end
|
||||
return false
|
||||
|
||||
end
|
||||
|
||||
|
||||
function ref_place(pos,node)
|
||||
if minetest.get_item_group(node.name, "mesecon_needs_receiver") == 1 then
|
||||
mesecon.receiver_place(pos)
|
||||
end
|
||||
end
|
||||
|
||||
function ref_remove(pos,node)
|
||||
if minetest.get_item_group(node.name, "mesecon_needs_receiver") == 1 then
|
||||
mesecon.receiver_remove(pos)
|
||||
end
|
||||
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)
|
||||
else
|
||||
|
||||
|
||||
if is_in_list({"start_node","middle_node"},why) then
|
||||
minetest.set_node(pos,node)
|
||||
mesecon.on_placenode(pos,node)
|
||||
ref_place(pos,node)
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if is_in_list({"delete"},why) then
|
||||
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 is_in_list({"delete_crossover","delete_end"},why) then --
|
||||
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 is_in_list({"paste_circuit"},why) then
|
||||
minetest.set_node(pos,node)
|
||||
end
|
||||
|
||||
if is_in_list({"add_wire"},why) then
|
||||
minetest.set_node(pos,node)
|
||||
end
|
||||
|
||||
if is_in_list({"red"},why) then
|
||||
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 is_in_list({"put_tail_wires"},why) then
|
||||
minetest.set_node(pos,node)
|
||||
end
|
||||
|
||||
if is_in_list({"copy"},why) then
|
||||
minetest.set_node(pos,node)
|
||||
end
|
||||
|
||||
if is_in_list({"paste_from_buffor"},why) then
|
||||
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
|
||||
|
||||
end
|
||||
|
||||
|
||||
-- Register Tools
|
||||
|
||||
dofile(minetest.get_modpath("mesecons_autotools").."/tools.lua");
|
||||
|
||||
|
||||
-- Register Rendering
|
||||
|
||||
dofile(minetest.get_modpath("mesecons_autotools").."/render.lua");
|
||||
|
||||
-- Regiser Circuit
|
||||
|
||||
dofile(minetest.get_modpath("mesecons_autotools").."/book/circuit.lua");
|
||||
--dofile(minetest.get_modpath("mesecons_autotools").."/book/library.lua");
|
||||
dofile(minetest.get_modpath("mesecons_autotools").."/book/file.lua");
|
||||
|
||||
-- Register chatcommands
|
||||
|
||||
dofile(minetest.get_modpath("mesecons_autotools").."/commands/all_commands.lua");
|
||||
|
156
mesecons_autotools_tmp/render.lua
Normal file
@ -0,0 +1,156 @@
|
||||
-- Remove entities
|
||||
local function clear_selection(user)
|
||||
if mesecons_autotools.users[user] == nil then
|
||||
mesecons_autotools.users[user] = {}
|
||||
end
|
||||
if mesecons_autotools.users[user].entities == nil then
|
||||
mesecons_autotools.users[user].entities = {}
|
||||
end
|
||||
|
||||
|
||||
|
||||
for _,v in pairs(mesecons_autotools.users[user].entities) do
|
||||
v:remove()
|
||||
end
|
||||
mesecons_autotools.users[user].entities = {}
|
||||
|
||||
|
||||
end
|
||||
|
||||
|
||||
-- Register entities
|
||||
minetest.register_entity(":mesecons_autotools:pos1", {
|
||||
initial_properties = {
|
||||
visual = "cube",
|
||||
visual_size = {x=1.11, y=1.11, },
|
||||
textures = {"pos1.png", "pos1.png",
|
||||
"pos1.png", "pos1.png",
|
||||
"pos1.png", "pos1.png"},
|
||||
collisionbox = {-0.55, -0.55, -0.55, 0.55, 0.55, 0.55},
|
||||
physical = false,
|
||||
static_save = false,
|
||||
},
|
||||
on_activate = function(self, staticdata, dtime_s)
|
||||
end,
|
||||
|
||||
on_punch = function(self,hitter)
|
||||
end,
|
||||
on_blast = function(self, damage)
|
||||
return false, false, {} -- don't damage or knockback
|
||||
end,
|
||||
})
|
||||
minetest.register_entity(":mesecons_autotools:pos2", {
|
||||
initial_properties = {
|
||||
visual = "cube",
|
||||
visual_size = {x=1.1, y=1.1},
|
||||
textures = {"pos2.png", "pos2.png",
|
||||
"pos2.png", "pos2.png",
|
||||
"pos2.png", "pos2.png"},
|
||||
collisionbox = {-0.55, -0.55, -0.55, 0.55, 0.55, 0.55},
|
||||
physical = false,
|
||||
static_save = false,
|
||||
},
|
||||
on_activate = function(self, staticdata, dtime_s)
|
||||
end,
|
||||
|
||||
on_punch = function(self,hitter)
|
||||
end,
|
||||
|
||||
on_blast = function(self, damage)
|
||||
return false, false, {} -- don't damage or knockback
|
||||
end,
|
||||
})
|
||||
minetest.register_entity(":mesecons_autotools:wall", {
|
||||
initial_properties = {
|
||||
visual = "upright_sprite",
|
||||
textures = {"wall.png"},
|
||||
visual_size = {x=10, y=10},
|
||||
physical = false,
|
||||
static_save = false,
|
||||
},
|
||||
on_activate = function(self, staticdata, dtime_s)
|
||||
end,
|
||||
|
||||
on_punch = function(self,hitter)
|
||||
end,
|
||||
|
||||
on_blast = function(self, damage)
|
||||
return false, false, {} -- don't damage or knockback
|
||||
end,
|
||||
})
|
||||
|
||||
minetest.register_entity(":mesecons_autotools:pos", {
|
||||
initial_properties = {
|
||||
visual = "cube",
|
||||
visual_size = {x=1.1, y=1.1},
|
||||
textures = {"pos.png", "pos.png",
|
||||
"pos.png", "pos.png",
|
||||
"pos.png", "pos.png"},
|
||||
collisionbox = {-0.55, -0.55, -0.55, 0.55, 0.55, 0.55},
|
||||
physical = false,
|
||||
static_save = false,
|
||||
},
|
||||
on_activate = function(self, staticdata, dtime_s)
|
||||
end,
|
||||
|
||||
on_punch = function(self,hitter)
|
||||
end,
|
||||
|
||||
on_blast = function(self, damage)
|
||||
return false, false, {} -- don't damage or knockback
|
||||
end,
|
||||
})
|
||||
|
||||
--[[ not used: TODO remove
|
||||
local function generate_corners(user)
|
||||
local pos = {}
|
||||
pos[1] = mesecons_autotools.get_pos(user,1)
|
||||
pos[2] = mesecons_autotools.get_pos(user,2)
|
||||
|
||||
if pos[1] == nil then return end
|
||||
if pos[2] == nil then return end
|
||||
|
||||
|
||||
local list = {}
|
||||
for xi = 1,2 do
|
||||
for yi = 1,2 do
|
||||
for zi = 1,2 do
|
||||
local p = { x = pos[xi].x , y = pos[yi].y , z = pos[zi].z }
|
||||
if not vector.equals(p,pos[1]) then
|
||||
table.insert(list,p)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
return list
|
||||
end
|
||||
]]--
|
||||
|
||||
|
||||
local function show_selection(user)
|
||||
local pos1 = mesecons_autotools.get_pos(user,1)
|
||||
local pos2 = mesecons_autotools.get_pos(user,2)
|
||||
|
||||
if pos1 ~= nil then
|
||||
local e1 = minetest.add_entity(pos1,"mesecons_autotools:pos1")
|
||||
table.insert(mesecons_autotools.users[user].entities, e1)
|
||||
end
|
||||
|
||||
if pos2 ~= nil then
|
||||
local e2 = minetest.add_entity(pos2,"mesecons_autotools:pos2")
|
||||
table.insert(mesecons_autotools.users[user].entities, e2)
|
||||
end
|
||||
|
||||
|
||||
|
||||
end
|
||||
|
||||
|
||||
|
||||
mesecons_autotools.render = function(user)
|
||||
clear_selection(user)
|
||||
show_selection(user)
|
||||
end
|
||||
|
||||
|
||||
|
BIN
mesecons_autotools_tmp/textures/circuit_empty.png
Normal file
After Width: | Height: | Size: 257 B |
BIN
mesecons_autotools_tmp/textures/circuit_full.png
Normal file
After Width: | Height: | Size: 315 B |
BIN
mesecons_autotools_tmp/textures/circuit_test.png
Normal file
After Width: | Height: | Size: 244 B |
BIN
mesecons_autotools_tmp/textures/formspec/empty.png
Normal file
After Width: | Height: | Size: 123 B |
BIN
mesecons_autotools_tmp/textures/formspec/gate/and0.png
Normal file
After Width: | Height: | Size: 178 B |
BIN
mesecons_autotools_tmp/textures/formspec/gate/and1.png
Normal file
After Width: | Height: | Size: 177 B |
BIN
mesecons_autotools_tmp/textures/formspec/gate/and2.png
Normal file
After Width: | Height: | Size: 179 B |
BIN
mesecons_autotools_tmp/textures/formspec/gate/and3.png
Normal file
After Width: | Height: | Size: 176 B |
BIN
mesecons_autotools_tmp/textures/formspec/gate/diode0.png
Normal file
After Width: | Height: | Size: 181 B |
BIN
mesecons_autotools_tmp/textures/formspec/gate/diode1.png
Normal file
After Width: | Height: | Size: 179 B |
BIN
mesecons_autotools_tmp/textures/formspec/gate/diode2.png
Normal file
After Width: | Height: | Size: 181 B |
BIN
mesecons_autotools_tmp/textures/formspec/gate/diode3.png
Normal file
After Width: | Height: | Size: 178 B |
BIN
mesecons_autotools_tmp/textures/formspec/gate/nand0.png
Normal file
After Width: | Height: | Size: 180 B |
BIN
mesecons_autotools_tmp/textures/formspec/gate/nand1.png
Normal file
After Width: | Height: | Size: 180 B |
BIN
mesecons_autotools_tmp/textures/formspec/gate/nand2.png
Normal file
After Width: | Height: | Size: 180 B |
BIN
mesecons_autotools_tmp/textures/formspec/gate/nand3.png
Normal file
After Width: | Height: | Size: 179 B |
BIN
mesecons_autotools_tmp/textures/formspec/gate/nor0.png
Normal file
After Width: | Height: | Size: 180 B |
BIN
mesecons_autotools_tmp/textures/formspec/gate/nor1.png
Normal file
After Width: | Height: | Size: 183 B |
BIN
mesecons_autotools_tmp/textures/formspec/gate/nor2.png
Normal file
After Width: | Height: | Size: 180 B |
BIN
mesecons_autotools_tmp/textures/formspec/gate/nor3.png
Normal file
After Width: | Height: | Size: 183 B |
BIN
mesecons_autotools_tmp/textures/formspec/gate/not0.png
Normal file
After Width: | Height: | Size: 181 B |
BIN
mesecons_autotools_tmp/textures/formspec/gate/not1.png
Normal file
After Width: | Height: | Size: 179 B |
BIN
mesecons_autotools_tmp/textures/formspec/gate/not2.png
Normal file
After Width: | Height: | Size: 181 B |
BIN
mesecons_autotools_tmp/textures/formspec/gate/not3.png
Normal file
After Width: | Height: | Size: 178 B |
BIN
mesecons_autotools_tmp/textures/formspec/gate/or0.png
Normal file
After Width: | Height: | Size: 182 B |
BIN
mesecons_autotools_tmp/textures/formspec/gate/or1.png
Normal file
After Width: | Height: | Size: 182 B |
BIN
mesecons_autotools_tmp/textures/formspec/gate/or2.png
Normal file
After Width: | Height: | Size: 182 B |
BIN
mesecons_autotools_tmp/textures/formspec/gate/or3.png
Normal file
After Width: | Height: | Size: 182 B |
BIN
mesecons_autotools_tmp/textures/formspec/gate/xor0.png
Normal file
After Width: | Height: | Size: 184 B |
BIN
mesecons_autotools_tmp/textures/formspec/gate/xor1.png
Normal file
After Width: | Height: | Size: 186 B |
BIN
mesecons_autotools_tmp/textures/formspec/gate/xor2.png
Normal file
After Width: | Height: | Size: 183 B |
BIN
mesecons_autotools_tmp/textures/formspec/gate/xor3.png
Normal file
After Width: | Height: | Size: 187 B |
After Width: | Height: | Size: 183 B |
After Width: | Height: | Size: 179 B |
After Width: | Height: | Size: 183 B |
After Width: | Height: | Size: 177 B |
After Width: | Height: | Size: 187 B |
After Width: | Height: | Size: 184 B |
After Width: | Height: | Size: 187 B |
After Width: | Height: | Size: 182 B |
After Width: | Height: | Size: 187 B |
After Width: | Height: | Size: 187 B |
After Width: | Height: | Size: 187 B |
After Width: | Height: | Size: 186 B |
After Width: | Height: | Size: 187 B |
After Width: | Height: | Size: 188 B |
After Width: | Height: | Size: 184 B |
After Width: | Height: | Size: 186 B |
After Width: | Height: | Size: 183 B |
BIN
mesecons_autotools_tmp/textures/formspec/pink.png
Normal file
After Width: | Height: | Size: 141 B |
BIN
mesecons_autotools_tmp/textures/formspec/regs/ff0.png
Normal file
After Width: | Height: | Size: 188 B |
BIN
mesecons_autotools_tmp/textures/formspec/regs/ff1.png
Normal file
After Width: | Height: | Size: 192 B |
BIN
mesecons_autotools_tmp/textures/formspec/regs/ff2.png
Normal file
After Width: | Height: | Size: 188 B |
BIN
mesecons_autotools_tmp/textures/formspec/regs/ff3.png
Normal file
After Width: | Height: | Size: 190 B |
BIN
mesecons_autotools_tmp/textures/formspec/regs/latch0.png
Normal file
After Width: | Height: | Size: 181 B |
BIN
mesecons_autotools_tmp/textures/formspec/regs/latch1.png
Normal file
After Width: | Height: | Size: 184 B |
BIN
mesecons_autotools_tmp/textures/formspec/regs/latch2.png
Normal file
After Width: | Height: | Size: 184 B |
BIN
mesecons_autotools_tmp/textures/formspec/regs/latch3.png
Normal file
After Width: | Height: | Size: 183 B |
BIN
mesecons_autotools_tmp/textures/formspec/unknown.png
Normal file
After Width: | Height: | Size: 201 B |
BIN
mesecons_autotools_tmp/textures/formspec/wires/corner0.png
Normal file
After Width: | Height: | Size: 142 B |
BIN
mesecons_autotools_tmp/textures/formspec/wires/corner1.png
Normal file
After Width: | Height: | Size: 144 B |
BIN
mesecons_autotools_tmp/textures/formspec/wires/corner2.png
Normal file
After Width: | Height: | Size: 146 B |
BIN
mesecons_autotools_tmp/textures/formspec/wires/corner3.png
Normal file
After Width: | Height: | Size: 137 B |
BIN
mesecons_autotools_tmp/textures/formspec/wires/corssover.png
Normal file
After Width: | Height: | Size: 160 B |
BIN
mesecons_autotools_tmp/textures/formspec/wires/tjunction0.png
Normal file
After Width: | Height: | Size: 142 B |
BIN
mesecons_autotools_tmp/textures/formspec/wires/tjunction1.png
Normal file
After Width: | Height: | Size: 145 B |
BIN
mesecons_autotools_tmp/textures/formspec/wires/tjunction2.png
Normal file
After Width: | Height: | Size: 144 B |
BIN
mesecons_autotools_tmp/textures/formspec/wires/tjunction3.png
Normal file
After Width: | Height: | Size: 143 B |
BIN
mesecons_autotools_tmp/textures/formspec/wires/wireh.png
Normal file
After Width: | Height: | Size: 130 B |
BIN
mesecons_autotools_tmp/textures/formspec/wires/wirev.png
Normal file
After Width: | Height: | Size: 134 B |
BIN
mesecons_autotools_tmp/textures/formspec/wires/xjunction.png
Normal file
After Width: | Height: | Size: 170 B |
BIN
mesecons_autotools_tmp/textures/library.png
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
mesecons_autotools_tmp/textures/pos.png
Normal file
After Width: | Height: | Size: 150 B |
BIN
mesecons_autotools_tmp/textures/selection/pos1.png
Normal file
After Width: | Height: | Size: 142 B |
BIN
mesecons_autotools_tmp/textures/selection/pos2.png
Normal file
After Width: | Height: | Size: 157 B |
BIN
mesecons_autotools_tmp/textures/test.png
Normal file
After Width: | Height: | Size: 253 B |
BIN
mesecons_autotools_tmp/textures/tools/black.png
Normal file
After Width: | Height: | Size: 223 B |
BIN
mesecons_autotools_tmp/textures/tools/blue.png
Normal file
After Width: | Height: | Size: 249 B |
BIN
mesecons_autotools_tmp/textures/tools/orange.png
Normal file
After Width: | Height: | Size: 257 B |
BIN
mesecons_autotools_tmp/textures/tools/orange_up.png
Normal file
After Width: | Height: | Size: 246 B |
BIN
mesecons_autotools_tmp/textures/tools/red.png
Normal file
After Width: | Height: | Size: 228 B |
BIN
mesecons_autotools_tmp/textures/tools/refresh.png
Normal file
After Width: | Height: | Size: 263 B |
BIN
mesecons_autotools_tmp/textures/tools/white.png
Normal file
After Width: | Height: | Size: 279 B |
BIN
mesecons_autotools_tmp/textures/tools/white_down (copy).png
Normal file
After Width: | Height: | Size: 255 B |
BIN
mesecons_autotools_tmp/textures/tools/white_down.png
Normal file
After Width: | Height: | Size: 271 B |
BIN
mesecons_autotools_tmp/textures/tools/white_up.png
Normal file
After Width: | Height: | Size: 257 B |