diff --git a/mesecons_autotools b/mesecons_autotools new file mode 160000 index 0000000..1b57d5d --- /dev/null +++ b/mesecons_autotools @@ -0,0 +1 @@ +Subproject commit 1b57d5d72b41a69fd3e3215e0aa4074f1db126e8 diff --git a/mesecons_autowire/auto_delete.lua b/mesecons_autowire/auto_delete.lua deleted file mode 100644 index 59fb081..0000000 --- a/mesecons_autowire/auto_delete.lua +++ /dev/null @@ -1,391 +0,0 @@ - - -function delete_node(pos, direction_from) - if( not is_wire(pos)) then - return - end - - - local node = minetest.get_node(pos) - local name = node.name - local param2 = node.param2 - - if( (name == "mesecons_insulated:insulated_off") or (name == "mesecons_insulated:insulated_on") ) then - -- wire - if( (param2 == 0 ) or (param2 == 2) ) then - if( direction_from == "u" ) then - --nothing - return - elseif( direction_from == "d" ) then - --nothing - return - elseif( direction_from == "r" ) then - minetest.set_node(pos,{name="air"}) - local next_pos = { x = pos.x - 1, y = pos.y, z = pos.z } - delete_node(next_pos,"r") - return - elseif( direction_from == "l" ) then - minetest.set_node(pos,{name="air"}) - local next_pos = {x=pos.x+1,y=pos.y,z=pos.z} - delete_node(next_pos,"l") - return - end - end - if( (param2 == 1 ) or (param2 == 3) ) then - if( direction_from == "l" ) then - --nothing - return - elseif( direction_from == "r" ) then - --nothing - return - elseif( direction_from == "u" ) then - minetest.set_node(pos,{name="air"}) - local next_pos = { x = pos.x , y = pos.y, z = pos.z -1} - delete_node(next_pos,"u") - return - elseif( direction_from == "d" ) then - minetest.set_node(pos,{name="air"}) - local next_pos = {x=pos.x,y=pos.y,z=pos.z+1} - delete_node(next_pos,"d") - return - end - end - - - - - elseif (name == "mesecons_extrawires:corner_off") or (name == "mesecons_extrawires:corner_on") then - -- corner - if( param2 == 0 ) then - if( direction_from == "u" ) then - --nothing - return - elseif(direction_from == "r" ) then - --nothing - return - elseif(direction_from == "l" ) then - minetest.set_node(pos,{name="air"}) - local next_pos = {x=pos.x,y=pos.y,z=pos.z-1} - delete_node(next_pos,"u") - return - elseif(direction_from == "d" ) then - minetest.set_node(pos,{name="air"}) - local next_pos = {x=pos.x-1,y=pos.y,z=pos.z} - delete_node(next_pos,"r") - return - end - elseif (param2 == 1) then - if( direction_from == "d" ) then - --nothing - return - elseif(direction_from == "r" ) then - --nothing - return - elseif(direction_from == "l" ) then - minetest.set_node(pos,{name="air"}) - local next_pos = {x=pos.x,y=pos.y,z=pos.z+1} - delete_node(next_pos,"d") - return - elseif(direction_from == "u" ) then - minetest.set_node(pos,{name="air"}) - local next_pos = {x=pos.x-1,y=pos.y,z=pos.z} - delete_node(next_pos,"r") - return - end - elseif( param2 == 2 ) then - if( direction_from == "l" ) then - --nothing - return - elseif(direction_from == "d" ) then - --nothing - return - elseif(direction_from == "u" ) then - minetest.set_node(pos,{name="air"}) - local next_pos = {x=pos.x+1,y=pos.y,z=pos.z} - delete_node(next_pos,"l") - return - elseif(direction_from == "r" ) then - minetest.set_node(pos,{name="air"}) - local next_pos = {x=pos.x,y=pos.y,z=pos.z+1} - delete_node(next_pos,"d") - return - end - elseif( param2 == 3 ) then - if( direction_from == "l" ) then - --nothing - return - elseif(direction_from == "u" ) then - --nothing - return - elseif(direction_from == "d" ) then - minetest.set_node(pos,{name="air"}) - local next_pos = {x=pos.x+1,y=pos.y,z=pos.z} - delete_node(next_pos,"l") - return - elseif(direction_from == "r" ) then - minetest.set_node(pos,{name="air"}) - local next_pos = {x=pos.x,y=pos.y,z=pos.z-1} - delete_node(next_pos,"u") - return - end - end - elseif( name=="mesecons_extrawires:crossover_off") then - if( direction_from == "l" ) then - local next_pos = {x=pos.x+1,y=pos.y,z=pos.z} - minetest.set_node(pos,{name="mesecons_insulated:insulated_off", param2=1}) - delete_node(next_pos,"l") - return - elseif(direction_from == "u" ) then - local next_pos = {x=pos.x,y=pos.y,z=pos.z-1} - minetest.set_node(pos,{name="mesecons_insulated:insulated_off", param2=0}) - delete_node(next_pos,"u") - return - elseif(direction_from == "d" ) then - local next_pos = {x=pos.x,y=pos.y,z=pos.z+1} - minetest.set_node(pos,{name="mesecons_insulated:insulated_off", param2=0}) - delete_node(next_pos,"d") - return - elseif(direction_from == "r" ) then - local next_pos = {x=pos.x-1,y=pos.y,z=pos.z} - minetest.set_node(pos,{name="mesecons_insulated:insulated_off", param2=1}) - delete_node(next_pos,"r") - return - end - - elseif (name=="mesecons_extrawires:crossover_10") then - if( direction_from == "l" ) then - local next_pos = {x=pos.x+1,y=pos.y,z=pos.z} - minetest.set_node(pos,{name="mesecons_insulated:insulated_on", param2=1}) - delete_node(next_pos,"l") - return - elseif(direction_from == "u" ) then - local next_pos = {x=pos.x,y=pos.y,z=pos.z-1} - minetest.set_node(pos,{name="mesecons_insulated:insulated_off", param2=0}) - delete_node(next_pos,"u") - return - elseif(direction_from == "d" ) then - local next_pos = {x=pos.x,y=pos.y,z=pos.z+1} - minetest.set_node(pos,{name="mesecons_insulated:insulated_off", param2=0}) - delete_node(next_pos,"d") - return - elseif(direction_from == "r" ) then - local next_pos = {x=pos.x-1,y=pos.y,z=pos.z} - minetest.set_node(pos,{name="mesecons_insulated:insulated_on", param2=1}) - delete_node(next_pos,"r") - return - end - - elseif (name=="mesecons_extrawires:crossover_01") then - if( direction_from == "l" ) then - local next_pos = {x=pos.x+1,y=pos.y,z=pos.z} - minetest.set_node(pos,{name="mesecons_insulated:insulated_off", param2=1}) - delete_node(next_pos,"l") - return - elseif(direction_from == "u" ) then - local next_pos = {x=pos.x,y=pos.y,z=pos.z-1} - minetest.set_node(pos,{name="mesecons_insulated:insulated_on", param2=0}) - delete_node(next_pos,"u") - return - elseif(direction_from == "d" ) then - local next_pos = {x=pos.x,y=pos.y,z=pos.z+1} - minetest.set_node(pos,{name="mesecons_insulated:insulated_on", param2=0}) - delete_node(next_pos,"d") - return - elseif(direction_from == "r" ) then - local next_pos = {x=pos.x-1,y=pos.y,z=pos.z} - minetest.set_node(pos,{name="mesecons_insulated:insulated_off", param2=1}) - delete_node(next_pos,"r") - return - end - - elseif (name=="mesecons_extrawires:crossover_on") then - if( direction_from == "l" ) then - local next_pos = {x=pos.x+1,y=pos.y,z=pos.z} - minetest.set_node(pos,{name="mesecons_insulated:insulated_on", param2=1}) - delete_node(next_pos,"l") - return - elseif(direction_from == "u" ) then - local next_pos = {x=pos.x,y=pos.y,z=pos.z-1} - minetest.set_node(pos,{name="mesecons_insulated:insulated_on", param2=0}) - delete_node(next_pos,"u") - return - elseif(direction_from == "d" ) then - local next_pos = {x=pos.x,y=pos.y,z=pos.z+1} - minetest.set_node(pos,{name="mesecons_insulated:insulated_on", param2=0}) - delete_node(next_pos,"d") - return - elseif(direction_from == "r" ) then - local next_pos = {x=pos.x-1,y=pos.y,z=pos.z} - minetest.set_node(pos,{name="mesecons_insulated:insulated_on", param2=1}) - delete_node(next_pos,"r") - return - end - - elseif (name=="mesecons_morewires:xjunction_off") then - if( direction_from == "l" ) then - minetest.set_node(pos,{name="mesecons_extrawires:tjunction_off", param2=3}) - return - elseif(direction_from == "u" ) then - minetest.set_node(pos,{name="mesecons_extrawires:tjunction_off", param2=0}) - return - elseif(direction_from == "d" ) then - minetest.set_node(pos,{name="mesecons_extrawires:tjunction_off", param2=2}) - return - elseif(direction_from == "r" ) then - minetest.set_node(pos,{name="mesecons_extrawires:tjunction_off", param2=1}) - return - end - - elseif (name=="mesecons_morewires:xjunction_on") then - if( direction_from == "l" ) then - minetest.set_node(pos,{name="mesecons_extrawires:tjunction_on", param2=3}) - return - elseif(direction_from == "u" ) then - minetest.set_node(pos,{name="mesecons_extrawires:tjunction_on", param2=0}) - return - elseif(direction_from == "d" ) then - minetest.set_node(pos,{name="mesecons_extrawires:tjunction_on", param2=2}) - return - elseif(direction_from == "r" ) then - minetest.set_node(pos,{name="mesecons_extrawires:tjunction_on", param2=1}) - return - end - - elseif( name == "mesecons_extrawires:tjunction_off" ) or ( name == "mesecons_extrawires:tjunction_on" )then - local state = "on" - if ( name == "mesecons_extrawires:tjunction_off" ) then - state = "off" - end - if( param2 == 0 ) then - if( direction_from == "l" ) then - minetest.set_node(pos,{name="mesecons_extrawires:corner_"..state, param2 = 3}) - return - elseif(direction_from == "u" ) then - --nothing - return - elseif(direction_from == "d" ) then - minetest.set_node(pos,{name="mesecons_insulated:insulated_"..state, param2 = 0}) - return - elseif(direction_from == "r" ) then - minetest.set_node(pos,{name="mesecons_extrawires:corner_"..state, param2 = 0}) - return - end - - elseif( param2 == 1 ) then - if( direction_from == "u" ) then - minetest.set_node(pos,{name="mesecons_extrawires:corner_"..state, param2 = 0}) - return - elseif(direction_from == "r" ) then - --nothing - return - elseif(direction_from == "l" ) then - minetest.set_node(pos,{name="mesecons_insulated:insulated_"..state, param2 = 1}) - return - elseif(direction_from == "d" ) then - minetest.set_node(pos,{name="mesecons_extrawires:corner_"..state, param2 = 1}) - return - end - - elseif( param2 == 2 ) then - if( direction_from == "l" ) then - minetest.set_node(pos,{name="mesecons_extrawires:corner_"..state, param2 = 2}) - return - elseif(direction_from == "d" ) then - --nothing - return - elseif(direction_from == "u" ) then - minetest.set_node(pos,{name="mesecons_insulated:insulated_"..state, param2 = 0}) - return - elseif(direction_from == "r" ) then - minetest.set_node(pos,{name="mesecons_extrawires:corner_"..state, param2 = 1}) - return - end - - elseif( param2 == 3) then - if( direction_from == "u" ) then - minetest.set_node(pos,{name="mesecons_extrawires:corner_"..state, param2 = 3}) - return - elseif(direction_from == "l" ) then - --nothing - return - elseif(direction_from == "r" ) then - minetest.set_node(pos,{name="mesecons_insulated:insulated_"..state, param2 = 1}) - return - elseif(direction_from == "d" ) then - minetest.set_node(pos,{name="mesecons_extrawires:corner_"..state, param2 = 2}) - return - end - - end - end -end - - - -function delete(pos) --- local p = get_pins(pos) - local p = get_pins_sticky(pos) - if(p.u==1) then - delete_node(up_node(pos),"d") - end - if(p.d==1) then - delete_node(down_node(pos),"u") - end - if(p.l==1) then - delete_node(left_node(pos),"r") - end - if(p.r==1) then - delete_node(right_node(pos),"l") - end - - minetest.set_node(pos,{ name = "air" } ) - -end - -local function delete_all_selection(pos1,pos2) - local xf = math.min(pos1.x,pos2.x) - local xt = math.max(pos1.x,pos2.x) - local zf = math.min(pos1.z,pos2.z) - local zt = math.max(pos1.z,pos2.z) - - for i=xf,xt do - for k = zf,zt do - local cur = { x=i,z=k,y=pos1.y} - minetest.set_node(cur,{name="air"}) - end - end - - -end - - -minetest.register_craftitem("mesecons_autowire:delete", { - description = "Tool Autodelete", - inventory_image = "tool_autodelete.png", - stack_max = 1, - groups = { tool =1 }, - - on_place = function(itemstack, user, pointed_thing) - local pos = pointed_thing.under - if pointed_thing.type == "node" then - if( is_wire(pos) ) then - delete(pos) - elseif( is_sticky(pos) ) then - delete(pos) - end - end - - end, - on_secondary_use = function(itemstack, user, pointed_thing) - if pointed_thing.type == "nothing" then - if check_selection(mesecons_automove.pos1,mesecons_automove.pos2) then - delete_all_selection(mesecons_automove.pos1,mesecons_automove.pos2) - end - - end - - end - - - -}) diff --git a/mesecons_autowire/auto_move.lua b/mesecons_autowire/auto_move.lua deleted file mode 100644 index 3b45fe1..0000000 --- a/mesecons_autowire/auto_move.lua +++ /dev/null @@ -1,627 +0,0 @@ - -mesecons_automove = {} - - -local function put_node(pos,node) - minetest.set_node(pos,node) --- mesecon.on_placenode(pos,node) -end - -local function put_node_activate(pos,node) - minetest.set_node(pos,node) - mesecon.on_placenode(pos,node) - -end - - -local function sort_xz(p1,p2) - if (p1.x < p2.x ) then - return p1,p2 - elseif( p1.x > p2.x ) then - return p2,p1 - else - -- p1.x == p2.x - if( p1.z < p2.z ) then - return p1,p2 - else - return p2,p1 - end - end - return p1,p2 -end - -function update_selection() - if(mesecons_automove.pos1e ~= nil) then - mesecons_automove.pos1e:remove() - mesecons_automove.pos1e = nil - end - if(mesecons_automove.pos2e ~= nil) then - mesecons_automove.pos2e:remove() - mesecons_automove.pos2e = nil - end - - if(mesecons_automove.pos1 ~= nil ) then - mesecons_automove.pos1e = - minetest.add_entity(mesecons_automove.pos1,"mesecons_automove:pos1") - end - if(mesecons_automove.pos2 ~= nil ) then - mesecons_automove.pos2e = - minetest.add_entity(mesecons_automove.pos2,"mesecons_automove:pos2") - end - - -end - ---[[ -function update_selection() - if( mesecons_automove.pos1 == nil ) or (mesecons_automove.pos2 == nil ) then return end - - if( mesecons_automove.pos1 ~= nil ) and (mesecons_automove.pos1e ~= nil ) then - mesecons_automove.pos1e:remove() - mesecons_automove.pos1e = minetest.add_entity(mesecons_automove.pos1,"mesecons_automove:pos1") - end - if( mesecons_automove.pos2 ~= nil ) and (mesecons_automove.pos2e ~= nil ) then - mesecons_automove.pos2e:remove() - mesecons_automove.pos2e = minetest.add_entity(mesecons_automove.pos2,"mesecons_automove:pos2") - end - -end - -]]-- - -function radians_to_vectors(rad) - local pi = math.pi - if (rad>=0) and (rad<=pi/4) or (rad<=2*pi) and (rad>=(3/2+1/4)*pi) then - return {left = {x=-1,z=0},right = { x=1, z = 0 } } - elseif (rad >= 1/4*pi) and (rad <= (1/2+1/4)*pi) then - return { left = {x = 0 ,z=-1}, right = { x = 0, z = 1 } } - elseif (rad >= (1-1/4)*pi ) and (rad <= (3/2-1/4)*pi ) then - return { left = { x = 1, z =0 }, right = { x = -1, z = 0 } } - else - return { left = { z =1, x = 0 } , right = { z = -1 , x = 0 }} - end -end - - - -local function get_front_wall(pos1,pos2,direction) - local y = pos1.y -- p1.y == p2.y - local x,z - local d= direction - if d.x == -1 then - local m = math.min(pos1.x,pos2.x)-1 -- aoutside the selection - return { - pos1 = { x = m, y = y, z = pos1.z}, - pos2 = { x = m, y = y, z = pos2.z}, - } - elseif d.x == 1 then - local m = math.max(pos1.x,pos2.x)+1 -- aoutside the selection - return { - pos1 = { x = m, y = y, z = pos1.z}, - pos2 = { x = m, y = y, z = pos2.z}, - } - - elseif d.z == -1 then - local m = math.min(pos1.z,pos2.z)-1 -- aoutside the selection - return { - pos1 = { x = pos1.x, y = y, z = m}, - pos2 = { x = pos2.x, y = y, z = m}, - } - - else - --if d.z == 1 then - local m = math.max(pos1.z,pos2.z)+1 -- aoutside the selection - return { - pos1 = { x = pos1.x, y = y, z = m}, - pos2 = { x = pos2.x, y = y, z = m}, - } - end - -end - -local function get_back_wall(p1,p2,direction) - local pos1,pos2 = sort_xz(p1,p2) - local y = pos1.y -- p1.y == p2.y - local x,z - local d= direction - if d.x == 1 then - local m = math.min(pos1.x,pos2.x) -- aoutside the selection - return { - pos1 = { x = m, y = y, z = pos1.z}, - pos2 = { x = m, y = y, z = pos2.z}, - } - elseif d.x == -1 then - local m = math.max(pos1.x,pos2.x) -- aoutside the selection - return { - pos1 = { x = m, y = y, z = pos1.z}, - pos2 = { x = m, y = y, z = pos2.z}, - } - - elseif d.z == 1 then - local m = math.min(pos1.z,pos2.z) -- aoutside the selection - return { - pos1 = { x = pos1.x, y = y, z = m}, - pos2 = { x = pos2.x, y = y, z = m}, - } - - else - --if d.z == 1 then - local m = math.max(pos1.z,pos2.z) -- aoutside the selection - return { - pos1 = { x = pos1.x, y = y, z = m}, - pos2 = { x = pos2.x, y = y, z = m}, - } - end - -end - - - -local function have_output(pos,direction) - local neight_pos = { x = pos.x -direction.x, y = pos.y, z = pos.z - direction.z } - local neight_pin = get_pins_sticky(neight_pos) - - local pin = get_pins_sticky(pos) - - - -- check if connected with each other - if(direction.x == 1 ) then - if not (( pin.l == 1 ) and (neight_pin.r == 1 ) ) then return false end - elseif( direction.x == -1 ) then - if not ( (pin.r == 1) and (neight_pin.l == 1) ) then return false end - elseif( direction.z == 1 ) then - if not (( pin.d == 1 ) and (neight_pin.u == 1 ) ) then return false end - else - if not ((pin.u == 1) and (neight_pin.d == 1 )) then return false end - end - -print("debug.pin="..dump(pos)) - if( pin.u == 1 ) and (direction.z == -1 ) then return true end - if( pin.d == 1 ) and (direction.z == 1 ) then return true end - if( pin.l == 1 ) and (direction.x == 1 ) then return true end - if( pin.r == 1 ) and (direction.x == -1 ) then return true end - - return false -end - - -local function get_outputs(wall,direction) - local pos1 = wall.pos1 - local pos2 = wall.pos2 - - local list = {} - if pos1.x == pos2.x then - local f = math.min(pos1.z, pos2.z) - local t = math.max(pos1.z, pos2.z) - for i=f,t do - local posi = { y = pos1.y, x = pos1.x , z = i } - if( have_output( posi , direction ) == true ) then - table.insert(list,posi) - end - end - else - -- pos1.z == pos2.z - local f = math.min(pos1.x, pos2.x) - local t = math.max(pos1.x, pos2.x) - for i=f,t do - local posi = { y = pos1.y, z = pos1.z , x = i } - if( have_output( posi , direction ) == true ) then - table.insert(list,posi) - end - end - - end - -print("DEBUG.list = "..dump(list)) - return list -end - - --- callback fun(pos) -local function foreach_wall(wall,fun) - local pos1 = wall.pos1 - local pos2 = wall.pos2 - - if pos1.x == pos2.x then - local f = math.min(pos1.z, pos2.z) - local t = math.max(pos1.z, pos2.z) - for i=f,t do - local posi = { y = pos1.y, x = pos1.x , z = i } - fun(posi) - end - else - -- pos1.z == pos2.z - local f = math.min(pos1.x, pos2.x) - local t = math.max(pos1.x, pos2.x) - for i=f,t do - local posi = { y = pos1.y, z = pos1.z , x = i } - fun(posi) - - end - - end -end - - -local function move_single_node(pos,direction) - local node = minetest.get_node(pos) - minetest.set_node(pos, { name = "air" } ) - local new_pos = { x = pos.x + direction.x,y = pos.y ,z = pos.z + direction.z } - put_node(new_pos,node) -end - - -local function move_nodes(direction) - local pos1 = mesecons_automove.pos1 - local pos2 = mesecons_automove.pos2 - - - -- needed later - local back_wall = get_back_wall(pos1,pos2,direction) - local outputs = get_outputs(back_wall,direction) - - - - -- removes front wall - local wall = get_front_wall(pos1,pos2,direction) - foreach_wall(wall, function(pos) minetest.set_node(pos,{name="air"}) end ) - - -- moves each "colum" from the front to end - local xf, xt, xd , zf, zt, zd - - if( direction.x == 1 ) then - xt = math.min(pos1.x, pos2.x) - xf = math.max(pos1.x, pos2.x) - zf = math.min(pos1.z, pos2.z) - zt = math.max(pos1.z, pos2.z) - xd = -1 - zd = 1 - elseif(direction.x == -1 ) then - xf = math.min(pos1.x, pos2.x) - xt = math.max(pos1.x, pos2.x) - zf = math.min(pos1.z, pos2.z) - zt = math.max(pos1.z, pos2.z) - xd = 1 - zd = 1 - - elseif(direction.z == 1 ) then - xf = math.min(pos1.x, pos2.x) - xt = math.max(pos1.x, pos2.x) - zt = math.min(pos1.z, pos2.z) - zf = math.max(pos1.z, pos2.z) - xd = 1 - zd = -1 - - else -- direction.z == -1 - xf = math.min(pos1.x, pos2.x) - xt = math.max(pos1.x, pos2.x) - zf = math.min(pos1.z, pos2.z) - zt = math.max(pos1.z, pos2.z) - xd = 1 - zd = 1 - end - - for ix = xf,xt,xd do - for iz = zf,zt,zd do --- print("move("..ix..","..iz..")") - local current = { x = ix, y=pos1.y , z = iz } - move_single_node(current,direction) - end - end - - - -- adding wires at the end - -print("debug: back_wall =" ..dump(back_wall) .. ", outputs = ".. dump(outputs)) - for _,p in ipairs(outputs) do - if( direction.z == 0 ) then - -- x direction - put_node_activate(p,{name = "mesecons_insulated:insulated_off", param2 = 0 } ) - else - -- z direction - put_node_activate(p,{name = "mesecons_insulated:insulated_off", param2 = 1 } ) - end - end - - -- activate front wall - --TODO: refresh new value of wires - -end - - - - - - - -local function add_direction_to_pos(pos,direction) - return {x = pos.x + direction.x, y= pos.y, z = pos.z + direction.z } -end - -local function can_move_node(pos,direction) - local node = minetest.get_node(pos) - local name = node.name - local param2= node.param2 - - if( name == "air" ) then - return true - end - if( name == "mesecons_insulated:insulated_off" ) or ( name == "mesecons_insulated:insulated_on" ) then - if (param2==0) or (param2==2) then - if( direction.z==0) then return true else return false end - elseif (param2==1) or (param2==3) then - if( direction.x == 0) then return true else return false end - end - else - return false - end -end - -local function check_if_can_move(direction) - local pos1 = mesecons_automove.pos1 - local pos2 = mesecons_automove.pos2 - - pos1,pos2 = sort_xz(pos1,pos2) - local wall = get_front_wall(pos1,pos2,direction) - - pos1 = wall.pos1 - pos2 = wall.pos2 - - local v - if( pos1.x == pos2.x ) then - if( pos1.z < pos2.z ) then - v = {z=1,x=0} - else - v = {z=-1,x=0} - end - else - -- pos1.z == pos2.z - if( pos1.x < pos2.x ) then - v = {z=0,x=1} - else - v ={ z=0,x=-1} - end - end - - local current = pos1 - while( eq_pos(current,pos2) == false ) do - if( can_move_node(current,direction) == false ) then - return false - end - current.x = current.x + v.x - current.z = current.z + v.z - end - -- do last node - if( can_move_node(current,direction) == false ) then - return false - end - - return true -end - - -local function move_selection_left(rad) - local v = radians_to_vectors(rad) - local pos1 = mesecons_automove.pos1 - local pos2 = mesecons_automove.pos2 - if( pos1 == nil ) then return end - if( pos2 == nil ) then return end - - - - if( check_if_can_move(v.left) == false ) then return end - move_nodes(v.left) - - pos1.x = pos1.x + v.left.x - pos1.z = pos1.z + v.left.z - - pos2.x = pos2.x + v.left.x - pos2.z = pos2.z + v.left.z - - - mesecons_automove.pos1 = pos1 - mesecons_automove.pos2 = pos2 - update_selection() - - -end - -local function move_selection_right(rad) - local v = radians_to_vectors(rad) - - local pos1 = mesecons_automove.pos1 - local pos2 = mesecons_automove.pos2 - if( pos1 == nil ) then return end - if( pos2 == nil ) then return end - - - if( check_if_can_move(v.right) == false ) then return end - move_nodes(v.right) - - - pos1.x = pos1.x + v.right.x - pos1.z = pos1.z + v.right.z - - pos2.x = pos2.x + v.right.x - pos2.z = pos2.z + v.right.z - - - - mesecons_automove.pos1 = pos1 - mesecons_automove.pos2 = pos2 - update_selection() - - - -end - - -minetest.register_entity(":mesecons_automove:pos1", { - initial_properties = { - visual = "cube", - visual_size = {x=1.1, y=1.1, }, - textures = {"worldedit_pos1.png", "worldedit_pos1.png", - "worldedit_pos1.png", "worldedit_pos1.png", - "worldedit_pos1.png", "worldedit_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) - self.object:remove() - mesecons_automove.pos1e = nil - mesecons_automove.pos1 = nil - mesecons_automove.pos2 = nil - if( mesecons_automove.pos2e ~= nil ) then - mesecons_automove.pos2e:remove() - mesecons_automove.pos2e = nil - end - print("debug.self:remove()") - end, - on_blast = function(self, damage) - return false, false, {} -- don't damage or knockback - end, -}) - -minetest.register_entity(":mesecons_automove:pos2", { - initial_properties = { - visual = "cube", - visual_size = {x=1.1, y=1.1}, - textures = {"worldedit_pos2.png", "worldedit_pos2.png", - "worldedit_pos2.png", "worldedit_pos2.png", - "worldedit_pos2.png", "worldedit_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) - self.object:remove() - mesecons_automove.pos2e = nil - mesecons_automove.pos2 = nil - mesecons_automove.pos1 = nil - if( mesecons_automove.pos1e ~= nil) then - mesecons_automove.pos1e:remove() - - end - end, - on_blast = function(self, damage) - return false, false, {} -- don't damage or knockback - end, -}) - -minetest.register_entity(":mesecons_automove:move_region", { - initial_properties = { - visual = "upright_sprite", - textures = {"worldedit_cube.png"}, - visual_size = {x=10, y=1.1}, - physical = false, - static_save = false, - }, - on_activate = function(self, staticdata, dtime_s) - end, - on_punch = function(self, hitter) - self.object:remove() - end, - on_blast = function(self, damage) - return false, false, {} -- don't damage or knockback - end, -}) - ---minetest.register_craftitem("mesecons_autowire:move", { -minetest.register_tool("mesecons_autowire:select", { - description = "Tool Autoselect", - inventory_image = "tool_autoselect.png", - stack_max = 1, - groups = { tool =1 }, - - - on_use = function(itemstack, user, pointed_thing) - if pointed_thing == nil then return end - if pointed_thing.type == "nothing" then - --unselect - mesecons_automove.pos1 = nil - mesecons_automove.pos2 = nil - update_selection() - - return - elseif pointed_thing.type == "node" then - --select pos1 - local node_pos = pointed_thing.under - if( mesecons_automove.pos1e ~= nil ) then - mesecons_automove.pos1e:remove() - end - - if( is_circuit_element(node_pos) ) then - mesecons_automove.pos1 = node_pos - else - mesecons_automove.pos1 = pointed_thing.above - end - mesecons_automove.pos1e = minetest.add_entity(mesecons_automove.pos1,"mesecons_automove:pos1") - - end - end, - on_place = function(itemstack, user, pointed_thing) - if pointed_thing == nil then return end - if pointed_thing.type == "node" then - local node_pos = pointed_thing.under - - if( mesecons_automove.pos2e ~= nil ) then - mesecons_automove.pos2e:remove() - end - - - if( is_circuit_element(node_pos) ) then - mesecons_automove.pos2 = node_pos - else - mesecons_automove.pos2 = pointed_thing.above - end - mesecons_automove.pos2e = minetest.add_entity(mesecons_automove.pos2,"mesecons_automove:pos2") - end - end, - - on_secondary_use = function(itemstack, user, pointed_thing) - if pointed_thing == nil then return end - if pointed_thing.type == "nothing" then - --move - end - end - - -}) - -minetest.register_tool("mesecons_autowire:move", { - description = "Tool Automove", - inventory_image = "tool_automove.png", - stack_max = 1, - groups = { tool =1 }, - - - on_use = function(itemstack, user, pointed_thing) - if mesecons_automove.pos1 == nil then return end - if mesecons_automove.pos2 == nil then return end - move_selection_left(user:get_look_horizontal()) - - - end, - on_place = function(itemstack, user, pointed_thing) - if mesecons_automove.pos1 == nil then return end - if mesecons_automove.pos2 == nil then return end - move_selection_right(user:get_look_horizontal()) - - end, - - on_secondary_use = function(itemstack, user, pointed_thing) - if mesecons_automove.pos1 == nil then return end - if mesecons_automove.pos2 == nil then return end - move_selection_right(user:get_look_horizontal()) - - end - - -}) - diff --git a/mesecons_autowire/auto_wire.lua b/mesecons_autowire/auto_wire.lua deleted file mode 100644 index a23fb14..0000000 --- a/mesecons_autowire/auto_wire.lua +++ /dev/null @@ -1,259 +0,0 @@ -mesecons_autowire.pos1 = nil -mesecons_autowire.pos2 = nil - - --- a bit of a weld (TODO: fix that) -function is_circuit_element(pos) - local node = minetest.get_node(pos) - local name = node.name - - local m = string.match(name,"^mesecons_") - if m ~= nil then - return true - else - return false - end -end - - -local function put_node(pos,node) - minetest.set_node(pos,node) - mesecon.on_placenode(pos,node) -end - - - -function get_neigh_pins(p) - return { - u = get_pins_sticky( { x=p.x, y=p.y, z=p.z+1 } ).d, - d = get_pins_sticky( { x=p.x, y=p.y, z=p.z-1 } ).u, - l = get_pins_sticky( { x=p.x-1, y=p.y, z=p.z } ).r, - r = get_pins_sticky( { x=p.x+1, y=p.y, z=p.z } ).l - } -end - - -local map2 = { - {{"mesecons_insulated:insulated_off",1}, {u=1,d=0,l=0,r=0}}, - {{"mesecons_insulated:insulated_off",1}, {u=0,d=1,l=0,r=0}}, - {{"mesecons_insulated:insulated_off",0}, {u=0,d=0,l=1,r=0}}, - {{"mesecons_insulated:insulated_off",0}, {u=0,d=0,l=0,r=1}}, -} - -function pins_to_wire(pins) - for _,v in ipairs(mesecons_autowire.map) do - local p = v[2] - local name = v[1][1] - local param2 = v[1][2] - if( eq_pins(p,pins) ) then - return { name = name, param2 = param2 } - end - end - - for _,v in ipairs(map2) do - local p = v[2] - local name = v[1][1] - local param2 = v[1][2] - - if( eq_pins(p,pins) ) then - return { name = name, param2 = param2 } - end - end - - - return {name ="air" } -end - - -function merge(pos,direc) - local node = minetest.get_node(pos) - local name = node.name - local param2 = node.param2 - - if( (not is_wire(pos)) and (not (name == "air") )) then return end - - -- exception (dont change) - if ( name == "mesecons_extrawires:crossover_off" ) or - ( name == "mesecons_extrawires:crossover_on") or - ( name == "mesecons_extrawires:crossover_10") or - ( name == "mesecons_extrawires:crossover_01") - then - return - end - -- end of exception - - local pins = and_pins(get_pins(pos),get_neigh_pins(pos)) - local final_pins = or_pins(pins, direc_to_pin(direc)) - - - local node = pins_to_wire(final_pins) - put_node(pos,node) -end - -function merge_start(pos,direction_from) - merge(pos,direction_from) -end - -function merge_end(pos,direction_from) - if( direction_from == "u" ) then - merge(pos,"d") - elseif( direction_from == "d" ) then - merge(pos,"u") - elseif( direction_from == "l" ) then - merge(pos,"r") - elseif( direction_from == "r" ) then - merge(pos,"l") - end -end - -function jump(pos,direc) - local node = minetest.get_node(pos) - local name = node.name - local param2 = node.param2 - - if( name == "mesecons_insulated:insulated_off" or name == "mesecons_insulated:insulated_on" ) then - if( direc == "u" or direc == "d" ) then - if( param2 == 0 or param2 == 2 ) then - put_node(pos, {name ="mesecons_extrawires:crossover_off"}); - elseif ( param2 == 1 or param2 == 3) then - --nothing - end - elseif( direc == "l" or direc == "r" ) then - if( param2 == 0 or param2 == 2 ) then - --nothing - elseif ( param2 == 1 or param2 == 3) then - put_node(pos, {name ="mesecons_extrawires:crossover_off"}); - end - end - end - if( name == "air" ) then - if( direc == "u" or direc == "d" ) then - put_node(pos, {name ="mesecons_insulated:insulated_off",param2=1}); - elseif( direc == "l" or direc == "r" ) then - put_node(pos, {name ="mesecons_insulated:insulated_off",param2=0}); - end - - end - -end - - -function next_pos(pos,direc) - local p = pos - if( direc == "u" ) then - p.z = p.z + 1 - elseif( direc == "d" ) then - p.z = p.z - 1 - elseif( direc == "l" ) then - p.x = p.x -1 - elseif( direc == "r" ) then - p.x = p.x + 1 - end - return p -end - -function eq_pos(p1,p2) - if( (p1.x==p2.x) and (p1.y==p2.y) and (p1.z==p2.z) ) then - return true - else - return false - end -end - -function make_wire(p1,p2,direc) - local current = p1 - - merge_start(current,direc) - current = next_pos(current,direc) - - while(not eq_pos(current,p2)) do - jump(current,direc) - current = next_pos(current,direc) - end - merge_end(current,direc) -end - - - -function do_work() - if(not mesecons_autowire.pos1 ) then - return false - end - if(not mesecons_autowire.pos2 ) then - return false - end - - local pos1 = mesecons_autowire.pos1 - local pos2 = mesecons_autowire.pos2 - - if( pos1.y~=pos2.y) then - return false - end - if( (pos1.x==pos2.x) and (pos1.z==pos2.z) ) then - return false - end - - if( (pos1.x~=pos2.x) and (pos1.z~=pos2.z) ) then - return false - end - - local direc = "" - - if( pos1.z == pos2.z ) then - if( pos1.x < pos2.x ) then - direc = "r" - else - direc = "l" - end - elseif( pos1.x == pos2.x ) then - if( pos1.z < pos2.z ) then - direc = "u" - else - direc = "d" - end - end - - - if( direc == "" ) then return end - make_wire(pos1,pos2,direc) - return true - -end - -minetest.register_craftitem("mesecons_autowire:wire", { - description = "Tool Autowire", - inventory_image = "tool_autowire.png", - stack_max = 1, - groups = { tool =1 }, - - on_use = function(itemstack, user, pointed_thing) - - if pointed_thing.type ~= "node" then return end - local node_pos = pointed_thing.under - if( is_circuit_element(node_pos) ) then - mesecons_autowire.pos1 = node_pos - else - mesecons_autowire.pos1 = pointed_thing.above - end - - - end, - on_place = function(itemstack, user, pointed_thing) - if not pointed_thing then return end - if pointed_thing.type ~= "node" then return end - local node_pos = pointed_thing.under - if( is_circuit_element(node_pos) ) then - mesecons_autowire.pos2 = node_pos - else - mesecons_autowire.pos2 = pointed_thing.above - end - if (do_work()) then - - mesecons_autowire.pos1 = mesecons_autowire.pos2 - mesecons_autowire.pos2 = nil - end - end - - -}) - diff --git a/mesecons_autowire/circuit.lua b/mesecons_autowire/circuit.lua deleted file mode 100644 index 074416c..0000000 --- a/mesecons_autowire/circuit.lua +++ /dev/null @@ -1,769 +0,0 @@ --- support for MT game translation. -local S = default.get_translator - ---[[ -current = pos left bottom -posh = pos right bottom -posv = pos left top -depends where you look at -]]-- - -local function standarise_corners(pos1,pos2,direction) - --assert(pos1.y == pos2.y) TODO: how to solve the problem of selectin not flat region - - local x1,x2,z1,z2,y - y = pos1.y - - x1 = pos1.x - x2 = pos2.x - z1 = pos1.z - z2 = pos2.z - - x1,x2 = math.min(x1,x2), math.max(x1,x2) - z1,z2 = math.min(z1,z2), math.max(z1,z2) - - local p1,p2,p3,p4 - - p1 = { x=x1,y=y,z=z1 } - p2 = { x=x2,y=y,z=z1 } - p3 = { x=x1,y=y,z=z2 } - p4 = { x=x2,y=y,z=z2 } - - if( direction.x == -1 ) then - return p2,p4,p1 - elseif( direction.x == 1 ) then - return p3,p1,p4 - elseif( direction.z == -1 ) then - return p4,p3,p2 - else - return p1,p2,p3 - end -end - - - -local function iter_vectors(direction) - local dx = direction.x - local dz = direction.z - - if( direction.z == 1 ) then - return {x=1,z=0},{x=0,z=1} - elseif( direction.z == -1 ) then - return {x=-1,z=0},{x=0,z=-1} - elseif( direction.x == -1 ) then - return {x=0,z=1},{x=-1,z=0} - else - return {x=0,z=-1},{x=1,z=0} - end -end - - -function check_selection(pos1,pos2) - if( pos1 == nil ) then return false end - if( pos2 == nil ) then return false end - return true -end - -local function add_direct_to_pos(pos,direc) - return { x = pos.x + direc.x , y = pos.y, z = pos.z + direc.z } -end - - - - -local function store_nodes(p1,p2,direction) - - local pos1,pos2 = p1,p2 - local tab = {} - - if( check_selection(pos1,pos2) == false ) then - return nil - end - local corner, maxh, maxv = standarise_corners(pos1,pos2,direction) - local inch,incv = iter_vectors(direction) - - - local i,k = 1,1 - - local cur,curv,curh = corner,corner,corner - - while true do - i = 1 - tab[k] = {} - while true do - tab[k][i] = minetest.get_node(cur) - if( eq_pos(curh,maxh) ) then - break - end - curh = add_direct_to_pos(curh,inch) - cur = add_direct_to_pos(cur, inch) - i = i + 1 - end - - if( eq_pos(curv,maxv) ) then - break - end - curv = add_direct_to_pos(curv,incv) - cur = curv - curh = corner - k = k +1 - end - - --print("["..i.."]["..k.."]="..name) - --print("table = ".. dump(tab)) - return tab - -end - -local function radians_to_direction_looking_forward(rad) - if rad == nil then return {x=1,z=0} end - local pi = math.pi - if (rad>=0) and (rad<=pi/4) or (rad<=2*pi) and (rad>=(3/2+1/4)*pi) then - return {x=0, z =1 } - elseif (rad >= 1/4*pi) and (rad <= (1/2+1/4)*pi) then - return {x=-1,z=0} - elseif (rad >= (1-1/4)*pi ) and (rad <= (3/2-1/4)*pi ) then - return {x=0,z=-1} - else - return {x=1,z=0} - end -end - - -local function store_nodes_from_selection(rad) - - local direction = radians_to_direction_looking_forward(rad) - return store_nodes(mesecons_automove.pos1, mesecons_automove.pos2,direction) -end - - - -local function circuit_on_place(itemstack, user, pointed_thing) - print("debug:on_plalce_circuit") -end - - - -local max_text_size = 10000 -local max_title_size = 80 -local short_title_size = 35 - - -minetest.register_on_player_receive_fields(function(player, formname, fields) - if formname ~= "mesecons_autowire:circuit" then return end - - if( fields.save) then - local stack = player:get_wielded_item() - local inv = player:get_inventory() - local new_stack = nil - local meta = stack:get_meta() - local data = meta:to_table().fields - - if data == nil then data = {} end - data.title = fields.title or "" - - - - -- if no nodes then save nodes - local nodes = minetest.deserialize(data.nodes) - - --if not data.nodes then - if nodes == nil then - local rad = player:get_look_horizontal() - local tab = store_nodes_from_selection(rad) - --print("tab="..dump(tab)) - if( tab ) then - data.nodes = minetest.serialize(tab) - data.rad = rad - else - return - end - - end - - - -- print("debug.af="..dump(data)) - - if( stack:get_name() == "mesecons_autowire:circuit_full" ) then - - elseif ( stack:get_name() == "mesecons_autowire:circuit_empty" ) then - local count = stack:get_count() - if( count <= 0 ) then return end - print("debug.count="..count) - if count == 1 then - --inv:remove_item("main",stack) - stack:set_name("mesecons_autowire:circuit_full") - else - stack:set_count(count - 1) - print("debug.count*="..stack:get_count() ) - new_stack = ItemStack("mesecons_autowire:circuit_full") - end - else - end - - - - if not fields.text then fields.text = "" end - if not fields.title then fields.title = "" end - - data.title = fields.title:sub(1, max_title_size) - local short_title = data.title - -- Don't bother triming the title if the trailing dots would make it longer - if #short_title > short_title_size + 3 then - short_title = short_title:sub(1, short_title_size) .. "..." - end - data.description = S(short_title) - data.text = fields.text:sub(1, max_text_size) - data.text = data.text:gsub("\r\n", "\n"):gsub("\r", "\n") - - - if new_stack then - - 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 - else - print("debug.new_stack==nil") - stack:get_meta():from_table( {fields = data } ) - end - - - - --debug - - - player:set_wielded_item(stack) - - end -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 - - -local rotate_exceptions = { - "mesecons_extrawires:crossover_off", - "mesecons_extrawires:crossover_on", - "mesecons_morewires:xjunction_on", - "mesecons_morewires:xjunction_off" -} - -local function is_exception(node) - for _,v in ipairs(rotate_exceptions) do - if( v == node.name ) then - return true - end - end - return false -end - -local function node_to_image(node) - if node == nil then - return "unknown.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 - - - - return "unknown.png" - -end - - -local function generate_spec(starting,nodes) - if nodes == nil then - return "" - end - - local mv = #nodes - local mh = #nodes[1] - - - - - local str = "" - local x,z - - for x = 1,mh do - for z = 1,mv do - local img = node_to_image(nodes[z][x]) - - --str = str .. "image[" .. 0.5*x .. "," .. 0.5*(mv-z+1) .. - str = str .. "image[" .. x +starting .. "," .. (mv-z+1) .. - ";1,1;"..img.."]" - --";0.5,0.5;"..img.."]" - end - end - return str -end - - - - -local function special_case(node,rotate) - local new_node = node - local applied = false - if( node.name == "mesecons_extrawires:crossover_10") and (rotate % 2 == 1 ) then - new_node.name = "mesecons_extrawires:crossover_01" - new_node.param2 = 0 - return new_node - elseif (node.name == "mesecons_extrawires:crossover_10") and (rotate % 2 == 0 ) then - new_node.name = "mesecons_extrawires:crossover_10" - new_node.param2 = 0 - return new_node - elseif( node.name == "mesecons_extrawires:crossover_01" and (rotate % 2 == 1) ) then - new_node.name = "mesecons_extrawires:crossover_10" - new_node.param2 = 0 - return new_node - elseif ( node.name == "mesecons_extrawires:crossover_01" and (rotate % 2 == 0 ) ) then - new_node.name = "mesecons_extrawires:crossover_01" - new_node.param2 = 0 - return new_node - end - - return nil -end -local function rotate_node(node, saved_direction,direction) - if( is_exception(node) ) then return node end - - 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 = special_case(node,rotate) - if( new_node ~= nil ) then return new_node end - - - new_node = node - new_node.param2 = (node.param2+rotate)%4 - return new_node -end - -local function rotate_nodes_for_window(nodes, oryginal) - if nodes == nil then return nil end - local mv = #nodes - local mh = #nodes[1] - local dir = {x=0,z=1} - - local tab = {} - for k = 1,mv do - tab[k] = {} - for i = 1,mh do - tab[k][i] = rotate_node(nodes[k][i],oryginal,dir) - end - end - return tab - -end - -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 - print("found.gate="..v) - return true - end - end - - - return false - - -end - - -local function count_stats(tab) - if tab == nil then return 0 end - local block, wire, gate = 0,0,0 - - local h,v = #tab[1], #tab - for i = 1,h do - for k = 1,v do - if tab[k][i].name ~= "air" then - block = block + 1 - end - if is_wire_node(tab[k][i]) then - wire = wire + 1 - end - if is_gate(tab[k][i]) then - gate = gate + 1 - end - - - - - end - end - return block, wire, gate -end - - -local function show_dialog(itemstack,user,pointed_thing) - local player_name = user:get_player_name() - local formspec - local esc = minetest.formspec_escape - - - local meta = itemstack:get_meta() - local data = meta:to_table().fields - local title, text = data.title or "", data.text or "" - - - - local nodes_string = "empty" - local nodes = minetest.deserialize(data.nodes) - local hight = 0 - local width = 0 - if( nodes ) then - -- show nodes - nodes_string = "size = (".. #nodes[1] .. ","..#nodes .. ")" - hight = #nodes - width = #nodes[1] - end - - - if( nodes == nil ) and - ( check_selection(mesecons_automove.pos1,mesecons_automove.pos2) == false ) then - return - end - - if nodes == nil then - local rad = user:get_look_horizontal() - local tab = store_nodes_from_selection(rad) - if tab == nil then return end - nodes = tab - data.rad = rad - hight = #nodes - width = #nodes[1] - end - - - - - - - local size_w = 45 - size_w = width + 10 - if( size_w < 20 ) then size_w = 20 end - if( size_w > 45 ) then size_w = 45 end - local size_scroll = size_w - 10 - - local starting_point = math.max(0, (size_scroll/2) - (width/2)) - - - local block,wire,gate = count_stats(nodes) - local stats = "size : " .. width .. "x"..hight .. "(=".. width * hight .. ")\n" .. - "wires : " .. wire .. "\n" .. - "gates : " .. gate .. "\n" .. - "other : ".. block - wire - gate .. "\n" .. - "blocks: " .. block - - - local circuitspec = - generate_spec(starting_point, - rotate_nodes_for_window( - nodes, - radians_to_direction_looking_forward( - tonumber(data.rad)))) - - formspec = - "formspec_version[3]".. - --"size[45,25]" .. - "size[".. size_w .. ",25]".. - "field[0.5,1;8,1;title;"..S("Name")..";"..S(title).."]".. - "textarea[0.5,3;8,15;text;" .. esc(S("Description:")) .. ";" .. - esc(S(text)) .. "]" .. - "button_exit[2.5,18;3,1;save;" .. esc(S("Save")) .. "]" .. - "textarea[0.5,19;8,5;;;" .. - esc(S(stats)) .. "]" .. - --"label[10,0.5;"..nodes_string.."]".. - --"container[8,0.5]".. - "scrollbaroptions[min=0;max=".. hight -15 .. ";smallstep=2;largestep=10;arrows=show]".. - - --"scrollbar[44,0.5;0.6,24;vertical;scr0;0]".. - "scrollbar[".. size_w - 1 .. ",0.5;0.6,24;vertical;scr0;0]".. - - --"scroll_container[8,0.5;36,23;scr0;vertical;1]".. - "scroll_container[8,0.5;".. size_w -10 .. ",23;scr0;vertical;1]".. - circuitspec .. - - "scroll_container_end[]".. - --"container_end[]".. - - "" - minetest.show_formspec(player_name, "mesecons_autowire:circuit", formspec) - return itemstack -end - - - -local function make_selection(nodes,pos,rad) - - if nodes == nil then return end - --if check_selection(mesecons_automove.pos1,mesecons_automove.pos2) == false then return end - - local vsize = #nodes - local hsize = #nodes[1] - - -- print("dump"..dump(nodes) .. "====" .. dump(pos) .. "===" .. vsize .. "=" .. hsize ) - - local direction = radians_to_direction_looking_forward(rad) - - mesecons_automove.pos1 = pos - - local dx,dz = 0,0 - - --print("dumpsirection="..dump(direction)) - hsize = hsize -1 - vsize = vsize -1 - if direction.z == 1 then - dx,dz = hsize,vsize - elseif direction.z == -1 then - dx,dz = -hsize,-vsize - elseif direction.x == 1 then - dx,dz = vsize,-hsize - else - --dirextion.x == -1 - dx,dz = -vsize,hsize - end - - - - - mesecons_automove.pos2 = { x=pos.x + dx, y=pos.y, z = pos.z+dz } - mesecons_automove.rad = rad - - --print("debug.all="..dump(mesecons_automove)) - update_selection() - -end - - - - -local function paste_nodes(nodes,saved_direction,direction) - local pos1,pos2 = mesecons_automove.pos1,mesecons_automove.pos2 - - if( check_selection(pos1,pos2) == false ) then - return nil - end - local corner, maxh, maxv = standarise_corners(pos1,pos2,direction) - local inch,incv = iter_vectors(direction) - - local tab = nodes - if tab == nil then return end - local maxi = #nodes[1] - local maxk = #nodes - - local i,k = 1,1 - - local cur,curv,curh = corner,corner,corner - - while true do - i = 1 - while true do - --tab[k][i] = minetest.get_node(cur) - if( i<=maxi) and (k<=maxk) then - local n = rotate_node(tab[k][i],saved_direction,direction) - minetest.set_node(cur,n) - end - - - - - - if( eq_pos(curh,maxh) ) then - break - end - curh = add_direct_to_pos(curh,inch) - cur = add_direct_to_pos(cur, inch) - i = i + 1 - end - - if( eq_pos(curv,maxv) ) then - break - end - curv = add_direct_to_pos(curv,incv) - cur = curv - curh = corner - k = k +1 - end - -end - - -local function on_use_circuit(itemstack, user, pointed_thing) - if( pointed_thing.type == "node" ) then - -- select region - local nodes = minetest.deserialize(itemstack:get_meta():to_table().fields.nodes) - - local sel_pos - if( is_circuit_element(pointed_thing.under) ) then - sel_pos = pointed_thing.under - else - sel_pos = pointed_thing.above - end - - make_selection(nodes,sel_pos,user:get_look_horizontal()) - else - -- show dialog - show_dialog(itemstack,user,pointed_thing); - end -end - -local function on_place_circuit(itemstack, user, pointed_thing) - if pointed_thing.type == "node" then - -- paste - - end - - if( mesecons_automove.rad == nil ) then return end - local data = itemstack:get_meta():to_table() - local nodes = minetest.deserialize(data.fields.nodes) - local rad = tonumber( data.fields.rad ) - paste_nodes(nodes,radians_to_direction_looking_forward(rad), radians_to_direction_looking_forward(mesecons_automove.rad)) -end - - -minetest.register_craftitem("mesecons_autowire:circuit_empty", { - description = S("Circuit empty"), - inventory_image = "circuit_empty.png", - - on_use = on_use_circuit - - }) - -minetest.register_craftitem("mesecons_autowire:circuit_full", { - description = S("Circuit saved"), - inventory_image = "circuit_full.png", - groups = {not_in_creative_inventory = 1}, - stack_max = 1, - on_use = on_use_circuit, - on_place = on_place_circuit, - on_secondary_use = on_place_circuit - - - }) diff --git a/mesecons_autowire/init.lua b/mesecons_autowire/init.lua deleted file mode 100644 index d638eb9..0000000 --- a/mesecons_autowire/init.lua +++ /dev/null @@ -1,6 +0,0 @@ -mesecons_autowire = {} -dofile(minetest.get_modpath("mesecons_autowire").."/utils.lua"); -dofile(minetest.get_modpath("mesecons_autowire").."/auto_delete.lua"); -dofile(minetest.get_modpath("mesecons_autowire").."/auto_wire.lua"); -dofile(minetest.get_modpath("mesecons_autowire").."/auto_move.lua"); -dofile(minetest.get_modpath("mesecons_autowire").."/circuit.lua"); diff --git a/mesecons_autowire/mod.conf b/mesecons_autowire/mod.conf deleted file mode 100644 index 3db5104..0000000 --- a/mesecons_autowire/mod.conf +++ /dev/null @@ -1,4 +0,0 @@ -author = marek -description = Adds tools for automatic wire placing. -name = mesecons_autowire -depends = mesecons, mesecons_morewires diff --git a/mesecons_autowire/page.lua b/mesecons_autowire/page.lua deleted file mode 100644 index a552be8..0000000 --- a/mesecons_autowire/page.lua +++ /dev/null @@ -1,71 +0,0 @@ - - - -local function on_use_page(itemstack, user, pointed_thing) - local player_name = user:get_player_name() - local esc = minetest.formspec_escape - - - local meta = itemstack:get_meta():to_table() - print("itemstack:meta()="..dump(meta)) - - minetest.create_detached_inventory("slots") - local inv = minetest.create_detached_inventory("inventory_name", { - allow_move = function(inv, from_list, from_index, to_list, to_index, count, player) - return count -- allow moving - end, - - allow_put = function(inv, listname, index, stack, player) - return stack:get_count() -- allow putting - end, - - allow_take = function(inv, listname, index, stack, player) - return -1 -- don't allow taking - end, - - on_put = function(inv, listname, index, stack, player) - minetest.chat_send_all(player:get_player_name() .. - " gave " .. stack:to_string() .. - " to the donation chest from " .. minetest.pos_to_string(player:get_pos())) - end, - }) - - local formspec = "size[10,8]" .. - "list[detached:inventory_name;main;0.5,0;8,4]".. - "list[current_player;main;0,3;8,4]".. - "" - - local stack = ItemStack("default:dirt 7") - inv:set_size("main",8) - inv:add_item("main",stack) - - - minetest.show_formspec(player_name,"mesecons_autowire:page", formspec) - - -end - - -minetest.register_craftitem("mesecons_autowire:page_empty", { - description = "Circuit Page empty", - --inventory_image = "circuit_empty.png", - inventory_image = "page_empty.png", - --groups = {book = 1, flammable = 3}, - - on_use = on_use_page - - }) - -minetest.register_craftitem("mesecons_autowire:page_full", { - description = "Circuit page saved", - --inventory_image = "circuit_full.png", - inventory_image = "page_full.png", - --groups = {book = 1, not_in_creative_inventory = 1, flammable = 3}, - groups = { not_in_creative_inventory = 1}, - stack_max = 1, - --on_use = on_use_circuit, - --on_place = on_place_circuit, - --on_secondary_use = on_place_circuit - - - }) diff --git a/mesecons_autowire/textures/and0.png b/mesecons_autowire/textures/and0.png deleted file mode 100644 index fa450f7..0000000 Binary files a/mesecons_autowire/textures/and0.png and /dev/null differ diff --git a/mesecons_autowire/textures/and1.png b/mesecons_autowire/textures/and1.png deleted file mode 100644 index 2f1139d..0000000 Binary files a/mesecons_autowire/textures/and1.png and /dev/null differ diff --git a/mesecons_autowire/textures/and2.png b/mesecons_autowire/textures/and2.png deleted file mode 100644 index 28e8adb..0000000 Binary files a/mesecons_autowire/textures/and2.png and /dev/null differ diff --git a/mesecons_autowire/textures/and3.png b/mesecons_autowire/textures/and3.png deleted file mode 100644 index 4c7cadd..0000000 Binary files a/mesecons_autowire/textures/and3.png and /dev/null differ diff --git a/mesecons_autowire/textures/circuit_empty.png b/mesecons_autowire/textures/circuit_empty.png deleted file mode 100644 index 1623d00..0000000 Binary files a/mesecons_autowire/textures/circuit_empty.png and /dev/null differ diff --git a/mesecons_autowire/textures/circuit_full.png b/mesecons_autowire/textures/circuit_full.png deleted file mode 100644 index dd73759..0000000 Binary files a/mesecons_autowire/textures/circuit_full.png and /dev/null differ diff --git a/mesecons_autowire/textures/corner0.png b/mesecons_autowire/textures/corner0.png deleted file mode 100644 index 1272d0c..0000000 Binary files a/mesecons_autowire/textures/corner0.png and /dev/null differ diff --git a/mesecons_autowire/textures/corner1.png b/mesecons_autowire/textures/corner1.png deleted file mode 100644 index d0e64d4..0000000 Binary files a/mesecons_autowire/textures/corner1.png and /dev/null differ diff --git a/mesecons_autowire/textures/corner2.png b/mesecons_autowire/textures/corner2.png deleted file mode 100644 index 37e1d44..0000000 Binary files a/mesecons_autowire/textures/corner2.png and /dev/null differ diff --git a/mesecons_autowire/textures/corner3.png b/mesecons_autowire/textures/corner3.png deleted file mode 100644 index 550e5c2..0000000 Binary files a/mesecons_autowire/textures/corner3.png and /dev/null differ diff --git a/mesecons_autowire/textures/corssover.png b/mesecons_autowire/textures/corssover.png deleted file mode 100644 index ef7e871..0000000 Binary files a/mesecons_autowire/textures/corssover.png and /dev/null differ diff --git a/mesecons_autowire/textures/diode0.png b/mesecons_autowire/textures/diode0.png deleted file mode 100644 index 309ff3f..0000000 Binary files a/mesecons_autowire/textures/diode0.png and /dev/null differ diff --git a/mesecons_autowire/textures/diode1.png b/mesecons_autowire/textures/diode1.png deleted file mode 100644 index eed69eb..0000000 Binary files a/mesecons_autowire/textures/diode1.png and /dev/null differ diff --git a/mesecons_autowire/textures/diode2.png b/mesecons_autowire/textures/diode2.png deleted file mode 100644 index 6c052c3..0000000 Binary files a/mesecons_autowire/textures/diode2.png and /dev/null differ diff --git a/mesecons_autowire/textures/diode3.png b/mesecons_autowire/textures/diode3.png deleted file mode 100644 index 69b3639..0000000 Binary files a/mesecons_autowire/textures/diode3.png and /dev/null differ diff --git a/mesecons_autowire/textures/empty.png b/mesecons_autowire/textures/empty.png deleted file mode 100644 index f0d00bc..0000000 Binary files a/mesecons_autowire/textures/empty.png and /dev/null differ diff --git a/mesecons_autowire/textures/ff0.png b/mesecons_autowire/textures/ff0.png deleted file mode 100644 index 66f2ae7..0000000 Binary files a/mesecons_autowire/textures/ff0.png and /dev/null differ diff --git a/mesecons_autowire/textures/ff1.png b/mesecons_autowire/textures/ff1.png deleted file mode 100644 index fd8e005..0000000 Binary files a/mesecons_autowire/textures/ff1.png and /dev/null differ diff --git a/mesecons_autowire/textures/ff2.png b/mesecons_autowire/textures/ff2.png deleted file mode 100644 index c5fb774..0000000 Binary files a/mesecons_autowire/textures/ff2.png and /dev/null differ diff --git a/mesecons_autowire/textures/ff3.png b/mesecons_autowire/textures/ff3.png deleted file mode 100644 index 92914aa..0000000 Binary files a/mesecons_autowire/textures/ff3.png and /dev/null differ diff --git a/mesecons_autowire/textures/latch0.png b/mesecons_autowire/textures/latch0.png deleted file mode 100644 index 089b64b..0000000 Binary files a/mesecons_autowire/textures/latch0.png and /dev/null differ diff --git a/mesecons_autowire/textures/latch1.png b/mesecons_autowire/textures/latch1.png deleted file mode 100644 index f545b81..0000000 Binary files a/mesecons_autowire/textures/latch1.png and /dev/null differ diff --git a/mesecons_autowire/textures/latch2.png b/mesecons_autowire/textures/latch2.png deleted file mode 100644 index f2ed048..0000000 Binary files a/mesecons_autowire/textures/latch2.png and /dev/null differ diff --git a/mesecons_autowire/textures/latch3.png b/mesecons_autowire/textures/latch3.png deleted file mode 100644 index 16f1ffe..0000000 Binary files a/mesecons_autowire/textures/latch3.png and /dev/null differ diff --git a/mesecons_autowire/textures/nand0.png b/mesecons_autowire/textures/nand0.png deleted file mode 100644 index 88b2ba8..0000000 Binary files a/mesecons_autowire/textures/nand0.png and /dev/null differ diff --git a/mesecons_autowire/textures/nand1.png b/mesecons_autowire/textures/nand1.png deleted file mode 100644 index 0c659ee..0000000 Binary files a/mesecons_autowire/textures/nand1.png and /dev/null differ diff --git a/mesecons_autowire/textures/nand2.png b/mesecons_autowire/textures/nand2.png deleted file mode 100644 index da3a280..0000000 Binary files a/mesecons_autowire/textures/nand2.png and /dev/null differ diff --git a/mesecons_autowire/textures/nand3.png b/mesecons_autowire/textures/nand3.png deleted file mode 100644 index cfc7f3e..0000000 Binary files a/mesecons_autowire/textures/nand3.png and /dev/null differ diff --git a/mesecons_autowire/textures/nor0.png b/mesecons_autowire/textures/nor0.png deleted file mode 100644 index e586690..0000000 Binary files a/mesecons_autowire/textures/nor0.png and /dev/null differ diff --git a/mesecons_autowire/textures/nor1.png b/mesecons_autowire/textures/nor1.png deleted file mode 100644 index 86aec63..0000000 Binary files a/mesecons_autowire/textures/nor1.png and /dev/null differ diff --git a/mesecons_autowire/textures/nor2.png b/mesecons_autowire/textures/nor2.png deleted file mode 100644 index d6a9784..0000000 Binary files a/mesecons_autowire/textures/nor2.png and /dev/null differ diff --git a/mesecons_autowire/textures/nor3.png b/mesecons_autowire/textures/nor3.png deleted file mode 100644 index c7de743..0000000 Binary files a/mesecons_autowire/textures/nor3.png and /dev/null differ diff --git a/mesecons_autowire/textures/not0.png b/mesecons_autowire/textures/not0.png deleted file mode 100644 index 9ba61fe..0000000 Binary files a/mesecons_autowire/textures/not0.png and /dev/null differ diff --git a/mesecons_autowire/textures/not1.png b/mesecons_autowire/textures/not1.png deleted file mode 100644 index 7a25956..0000000 Binary files a/mesecons_autowire/textures/not1.png and /dev/null differ diff --git a/mesecons_autowire/textures/not2.png b/mesecons_autowire/textures/not2.png deleted file mode 100644 index e2ae188..0000000 Binary files a/mesecons_autowire/textures/not2.png and /dev/null differ diff --git a/mesecons_autowire/textures/not3.png b/mesecons_autowire/textures/not3.png deleted file mode 100644 index 6f65e95..0000000 Binary files a/mesecons_autowire/textures/not3.png and /dev/null differ diff --git a/mesecons_autowire/textures/or0.png b/mesecons_autowire/textures/or0.png deleted file mode 100644 index 87cd827..0000000 Binary files a/mesecons_autowire/textures/or0.png and /dev/null differ diff --git a/mesecons_autowire/textures/or1.png b/mesecons_autowire/textures/or1.png deleted file mode 100644 index c008c92..0000000 Binary files a/mesecons_autowire/textures/or1.png and /dev/null differ diff --git a/mesecons_autowire/textures/or2.png b/mesecons_autowire/textures/or2.png deleted file mode 100644 index 895a46f..0000000 Binary files a/mesecons_autowire/textures/or2.png and /dev/null differ diff --git a/mesecons_autowire/textures/or3.png b/mesecons_autowire/textures/or3.png deleted file mode 100644 index 676c6d5..0000000 Binary files a/mesecons_autowire/textures/or3.png and /dev/null differ diff --git a/mesecons_autowire/textures/picture.png b/mesecons_autowire/textures/picture.png deleted file mode 100644 index 702d63b..0000000 Binary files a/mesecons_autowire/textures/picture.png and /dev/null differ diff --git a/mesecons_autowire/textures/tjunction0.png b/mesecons_autowire/textures/tjunction0.png deleted file mode 100644 index 5c5fa7b..0000000 Binary files a/mesecons_autowire/textures/tjunction0.png and /dev/null differ diff --git a/mesecons_autowire/textures/tjunction1.png b/mesecons_autowire/textures/tjunction1.png deleted file mode 100644 index 344126b..0000000 Binary files a/mesecons_autowire/textures/tjunction1.png and /dev/null differ diff --git a/mesecons_autowire/textures/tjunction2.png b/mesecons_autowire/textures/tjunction2.png deleted file mode 100644 index 9cb6201..0000000 Binary files a/mesecons_autowire/textures/tjunction2.png and /dev/null differ diff --git a/mesecons_autowire/textures/tjunction3.png b/mesecons_autowire/textures/tjunction3.png deleted file mode 100644 index 77ea415..0000000 Binary files a/mesecons_autowire/textures/tjunction3.png and /dev/null differ diff --git a/mesecons_autowire/textures/tool_autodelete.png b/mesecons_autowire/textures/tool_autodelete.png deleted file mode 100644 index 43cf848..0000000 Binary files a/mesecons_autowire/textures/tool_autodelete.png and /dev/null differ diff --git a/mesecons_autowire/textures/tool_autoinsulated.png b/mesecons_autowire/textures/tool_autoinsulated.png deleted file mode 100644 index 6869edf..0000000 Binary files a/mesecons_autowire/textures/tool_autoinsulated.png and /dev/null differ diff --git a/mesecons_autowire/textures/tool_automove.png b/mesecons_autowire/textures/tool_automove.png deleted file mode 100644 index a6177d6..0000000 Binary files a/mesecons_autowire/textures/tool_automove.png and /dev/null differ diff --git a/mesecons_autowire/textures/tool_autoselect.png b/mesecons_autowire/textures/tool_autoselect.png deleted file mode 100644 index 6869edf..0000000 Binary files a/mesecons_autowire/textures/tool_autoselect.png and /dev/null differ diff --git a/mesecons_autowire/textures/tool_autowire.png b/mesecons_autowire/textures/tool_autowire.png deleted file mode 100644 index 2f1ee62..0000000 Binary files a/mesecons_autowire/textures/tool_autowire.png and /dev/null differ diff --git a/mesecons_autowire/textures/unknown.png b/mesecons_autowire/textures/unknown.png deleted file mode 100644 index f91b9ea..0000000 Binary files a/mesecons_autowire/textures/unknown.png and /dev/null differ diff --git a/mesecons_autowire/textures/wireh.png b/mesecons_autowire/textures/wireh.png deleted file mode 100644 index 8a5d895..0000000 Binary files a/mesecons_autowire/textures/wireh.png and /dev/null differ diff --git a/mesecons_autowire/textures/wirev.png b/mesecons_autowire/textures/wirev.png deleted file mode 100644 index c0fce22..0000000 Binary files a/mesecons_autowire/textures/wirev.png and /dev/null differ diff --git a/mesecons_autowire/textures/worldedit_cube.png b/mesecons_autowire/textures/worldedit_cube.png deleted file mode 100644 index fde36a8..0000000 Binary files a/mesecons_autowire/textures/worldedit_cube.png and /dev/null differ diff --git a/mesecons_autowire/textures/worldedit_pos1.png b/mesecons_autowire/textures/worldedit_pos1.png deleted file mode 100644 index 4c304aa..0000000 Binary files a/mesecons_autowire/textures/worldedit_pos1.png and /dev/null differ diff --git a/mesecons_autowire/textures/worldedit_pos2.png b/mesecons_autowire/textures/worldedit_pos2.png deleted file mode 100644 index 1502f16..0000000 Binary files a/mesecons_autowire/textures/worldedit_pos2.png and /dev/null differ diff --git a/mesecons_autowire/textures/xjunction.png b/mesecons_autowire/textures/xjunction.png deleted file mode 100644 index f123fa5..0000000 Binary files a/mesecons_autowire/textures/xjunction.png and /dev/null differ diff --git a/mesecons_autowire/textures/xor0.png b/mesecons_autowire/textures/xor0.png deleted file mode 100644 index 3f783e9..0000000 Binary files a/mesecons_autowire/textures/xor0.png and /dev/null differ diff --git a/mesecons_autowire/textures/xor1.png b/mesecons_autowire/textures/xor1.png deleted file mode 100644 index 224e98b..0000000 Binary files a/mesecons_autowire/textures/xor1.png and /dev/null differ diff --git a/mesecons_autowire/textures/xor2.png b/mesecons_autowire/textures/xor2.png deleted file mode 100644 index b3e36c4..0000000 Binary files a/mesecons_autowire/textures/xor2.png and /dev/null differ diff --git a/mesecons_autowire/textures/xor3.png b/mesecons_autowire/textures/xor3.png deleted file mode 100644 index 44059d0..0000000 Binary files a/mesecons_autowire/textures/xor3.png and /dev/null differ diff --git a/mesecons_autowire/utils.lua b/mesecons_autowire/utils.lua deleted file mode 100644 index 07574f9..0000000 --- a/mesecons_autowire/utils.lua +++ /dev/null @@ -1,331 +0,0 @@ - -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 - - -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 is_wire(pos) - 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 node = minetest.get_node(pos) - 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 up_node(pos) - return { x = pos.x, y = pos.y, z=pos.z+1} -end -function down_node(pos) - return { x = pos.x, y = pos.y, z=pos.z-1} -end -function left_node(pos) - return {x=pos.x-1,y=pos.y,z=pos.z} -end -function right_node(pos) - return {x=pos.x+1,y=pos.y,z=pos.z} -end - - -mesecons_autowire.map = { --- beware, order is important, I think, not sure though - - {{"air", 0 }, { u=0, d=0, l=0, r=0 }}, - - - {{"mesecons_insulated:insulated_off",0}, {u=0,d=0,l=1,r=1}}, - {{"mesecons_insulated:insulated_off",2}, {u=0,d=0,l=1,r=1}}, - {{"mesecons_insulated:insulated_off",1}, {u=1,d=1,l=0,r=0}}, - {{"mesecons_insulated:insulated_off",3}, {u=1,d=1,l=0,r=0}}, - - {{"mesecons_extrawires:corner_off",0}, {u=0,d=1,l=1,r=0}}, - {{"mesecons_extrawires:corner_off",1}, {u=1,d=0,l=1,r=0}}, - {{"mesecons_extrawires:corner_off",2}, {u=1,d=0,l=0,r=1}}, - {{"mesecons_extrawires:corner_off",3}, {u=0,d=1,l=0,r=1}}, - - {{"mesecons_insulated:insulated_on",0}, {u=0,d=0,l=1,r=1}}, - {{"mesecons_insulated:insulated_on",2}, {u=0,d=0,l=1,r=1}}, - {{"mesecons_insulated:insulated_on",1}, {u=1,d=1,l=0,r=0}}, - {{"mesecons_insulated:insulated_on",3}, {u=1,d=1,l=0,r=0}}, - - {{"mesecons_extrawires:corner_on",0}, {u=0,d=1,l=1,r=0}}, - {{"mesecons_extrawires:corner_on",1}, {u=1,d=0,l=1,r=0}}, - {{"mesecons_extrawires:corner_on",2}, {u=1,d=0,l=0,r=1}}, - {{"mesecons_extrawires:corner_on",3}, {u=0,d=1,l=0,r=1}}, - - - - - {{"mesecons_morewires:xjunction_off",0}, {u=1,d=1,l=1,r=1}}, - {{"mesecons_morewires:xjunction_on",0}, {u=1,d=1,l=1,r=1}}, - - {{"mesecons_extrawires:crossover_off",0}, {u=1,d=1,l=1,r=1}}, - {{"mesecons_extrawires:crossover_10",0}, {u=1,d=1,l=1,r=1}}, - {{"mesecons_extrawires:crossover_01",0}, {u=1,d=1,l=1,r=1}}, - {{"mesecons_extrawires:crossover_on",0}, {u=1,d=1,l=1,r=1}}, - - - {{"mesecons_extrawires:tjunction_off",0}, {u=0,d=1,l=1,r=1}}, - {{"mesecons_extrawires:tjunction_off",1}, {u=1,d=1,l=1,r=0}}, - {{"mesecons_extrawires:tjunction_off",2}, {u=1,d=0,l=1,r=1}}, - {{"mesecons_extrawires:tjunction_off",3}, {u=1,d=1,l=0,r=1}}, - - {{"mesecons_extrawires:tjunction_on",0}, {u=0,d=1,l=1,r=1}}, - {{"mesecons_extrawires:tjunction_on",1}, {u=1,d=1,l=1,r=0}}, - {{"mesecons_extrawires:tjunction_on",2}, {u=1,d=0,l=1,r=1}}, - {{"mesecons_extrawires:tjunction_on",3}, {u=1,d=1,l=0,r=1}}, -} - -mesecons_autowire.mapsticky = {} - -function is_sticky(pos) - local node = minetest.get_node(pos) - local name = node.name - for i,v in ipairs(mesecons_autowire.mapsticky) do - local name = v[1][1] - local param2 = v[1][2] - local pins = v[2] - - if( (name == node.name) ) then - return true - end - end - return false - - -end - - -function rotate_pin(p) - return { u = p.l, r = p.u, d = p.r, l = p.d } -end - -function rotate_pins(p,r) - local cur = p - local i = 0 - while( i< r) do - cur = rotate_pin(cur) - i = i +1 - end - return cur -end - -function map_add_gates() - local gates = { "and", "or", "xor", "nand", "nor"} - local states = { "on", "off" } - local mod = "mesecons_gates" - local pin = {u=1,d=1,r=1,l=0} - - for _,g in ipairs(gates) do - for r=0,3 do - for _,s in ipairs(states) do - local name = mod..":"..g.."_"..s - - table.insert(mesecons_autowire.mapsticky, { { name, r}, rotate_pins(pin,r) }) - end - end - end - - gates = { "not", "diode" } - pin = {u=0,d=0,l=1,r=1} - - for _,g in ipairs(gates) do - for r=0,3 do - for _,s in ipairs(states) do - local name = mod..":"..g.."_"..s - - table.insert(mesecons_autowire.mapsticky, { { name, r}, rotate_pins(pin,r) }) - end - end - end - - gates = { "latch", "flipflop" } - mod = "mesecons_regs" - pin = { u=0,d=1,l=1,r=1 } - - for _,g in ipairs(gates) do - for r=0,3 do - for _,s in ipairs(states) do - local name = mod..":"..g.."_"..s - - table.insert(mesecons_autowire.mapsticky, { { name, r}, rotate_pins(pin,r) }) - end - end - end - - gates = { "and3", "or3", "nand3", "nor3" } - mod = "mesecons_gates3" - pin = { u=1,d=1,l=1,r=1 } - - for _,g in ipairs(gates) do - for r=0,3 do - for _,s in ipairs(states) do - local name = mod..":"..g.."_"..s - - table.insert(mesecons_autowire.mapsticky, { { name, r}, rotate_pins(pin,r) }) - end - end - end - - -end - -map_add_gates() - - -function get_pins_sticky(pos) - local node = minetest.get_node(pos) - for i,v in ipairs(mesecons_autowire.map) do - local name = v[1][1] - local param2 = v[1][2] - local pins = v[2] - - if( (name == node.name) and (node.param2 == param2) ) then - return pins - end - end - for i,v in ipairs(mesecons_autowire.mapsticky) do - local name = v[1][1] - local param2 = v[1][2] - local pins = v[2] - - if( (name == node.name) and (node.param2 == param2) ) then - return pins - end - end - return {u=0,d=0,l=0,r=0} -end - - - -function get_pins(pos) - local node = minetest.get_node(pos) - for i,v in ipairs(mesecons_autowire.map) do - local name = v[1][1] - local param2 = v[1][2] - local pins = v[2] - - if( (name == node.name) and (node.param2 == param2) ) then - return pins - end - end - return {u=0,d=0,l=0,r=0} -end - - - -function eq_pins(i1,i2) - if i1.u ~= i2.u then return false end - if i1.d ~= i2.d then return false end - if i1.l ~= i2.l then return false end - if i1.r ~= i2.r then return false end - return true -end - -function and_pins(i1,i2) - local u,d,l,r = 0,0,0,0 - if (i1.u==1) and (i2.u==1) then - u = 1 - end - if (i1.d==1) and (i2.d==1) then - d = 1 - end - if (i1.l==1) and (i2.l==1) then - l =1 - end - if(i1.r==1) and (i2.r==1) then - r=1 - end - return { u=u,d=d,l=l,r=r } -end - -function or_pins(i1,i2) - local u,d,l,r = 0,0,0,0 - if (i1.u==1) or (i2.u==1) then - u = 1 - end - if (i1.d==1) or (i2.d==1) then - d = 1 - end - if (i1.l==1) or (i2.l==1) then - l =1 - end - if(i1.r==1) or (i2.r==1) then - r=1 - end - return { u=u,d=d,l=l,r=r } -end - -function direc_to_pin(dir) - local u,d,l,r = 0,0,0,0 - if( dir == "u" ) then u = 1; end - if( dir == "d" ) then d = 1; end - if( dir == "l" ) then l = 1; end - if( dir == "r" ) then r = 1; end - return {u=u,d=d,l=l,r=r} -end - -function next_pos(pos,direc) - local p = pos - if( direc == "u" ) then - p.z = p.z + 1 - elseif( direc == "d" ) then - p.z = p.z - 1 - elseif( direc == "l" ) then - p.x = p.x -1 - elseif( direc == "r" ) then - p.x = p.x + 1 - end - return p -end - -function eq_pos(p1,p2) - if( (p1.x==p2.x) and (p1.y==p2.y) and (p1.z==p2.z) ) then - return true - else - return false - end -end - diff --git a/mesecons_regs/LICENSE.txt b/mesecons_regs/LICENSE.txt deleted file mode 100644 index 0d2fd18..0000000 --- a/mesecons_regs/LICENSE.txt +++ /dev/null @@ -1,532 +0,0 @@ -The LGPLv3 applies to all code in this project. -The CC-BY-SA-3.0 license applies to textures and any other content in this project which is not source code. - -================================================================= - -GNU LESSER GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - - This version of the GNU Lesser General Public License incorporates -the terms and conditions of version 3 of the GNU General Public -License, supplemented by the additional permissions listed below. - - 0. Additional Definitions. - - As used herein, "this License" refers to version 3 of the GNU Lesser -General Public License, and the "GNU GPL" refers to version 3 of the GNU -General Public License. - - "The Library" refers to a covered work governed by this License, -other than an Application or a Combined Work as defined below. - - An "Application" is any work that makes use of an interface provided -by the Library, but which is not otherwise based on the Library. -Defining a subclass of a class defined by the Library is deemed a mode -of using an interface provided by the Library. - - A "Combined Work" is a work produced by combining or linking an -Application with the Library. The particular version of the Library -with which the Combined Work was made is also called the "Linked -Version". - - The "Minimal Corresponding Source" for a Combined Work means the -Corresponding Source for the Combined Work, excluding any source code -for portions of the Combined Work that, considered in isolation, are -based on the Application, and not on the Linked Version. - - The "Corresponding Application Code" for a Combined Work means the -object code and/or source code for the Application, including any data -and utility programs needed for reproducing the Combined Work from the -Application, but excluding the System Libraries of the Combined Work. - - 1. Exception to Section 3 of the GNU GPL. - - You may convey a covered work under sections 3 and 4 of this License -without being bound by section 3 of the GNU GPL. - - 2. Conveying Modified Versions. - - If you modify a copy of the Library, and, in your modifications, a -facility refers to a function or data to be supplied by an Application -that uses the facility (other than as an argument passed when the -facility is invoked), then you may convey a copy of the modified -version: - - a) under this License, provided that you make a good faith effort to - ensure that, in the event an Application does not supply the - function or data, the facility still operates, and performs - whatever part of its purpose remains meaningful, or - - b) under the GNU GPL, with none of the additional permissions of - this License applicable to that copy. - - 3. Object Code Incorporating Material from Library Header Files. - - The object code form of an Application may incorporate material from -a header file that is part of the Library. You may convey such object -code under terms of your choice, provided that, if the incorporated -material is not limited to numerical parameters, data structure -layouts and accessors, or small macros, inline functions and templates -(ten or fewer lines in length), you do both of the following: - - a) Give prominent notice with each copy of the object code that the - Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the object code with a copy of the GNU GPL and this license - document. - - 4. Combined Works. - - You may convey a Combined Work under terms of your choice that, -taken together, effectively do not restrict modification of the -portions of the Library contained in the Combined Work and reverse -engineering for debugging such modifications, if you also do each of -the following: - - a) Give prominent notice with each copy of the Combined Work that - the Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the Combined Work with a copy of the GNU GPL and this license - document. - - c) For a Combined Work that displays copyright notices during - execution, include the copyright notice for the Library among - these notices, as well as a reference directing the user to the - copies of the GNU GPL and this license document. - - d) Do one of the following: - - 0) Convey the Minimal Corresponding Source under the terms of this - License, and the Corresponding Application Code in a form - suitable for, and under terms that permit, the user to - recombine or relink the Application with a modified version of - the Linked Version to produce a modified Combined Work, in the - manner specified by section 6 of the GNU GPL for conveying - Corresponding Source. - - 1) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (a) uses at run time - a copy of the Library already present on the user's computer - system, and (b) will operate properly with a modified version - of the Library that is interface-compatible with the Linked - Version. - - e) Provide Installation Information, but only if you would otherwise - be required to provide such information under section 6 of the - GNU GPL, and only to the extent that such information is - necessary to install and execute a modified version of the - Combined Work produced by recombining or relinking the - Application with a modified version of the Linked Version. (If - you use option 4d0, the Installation Information must accompany - the Minimal Corresponding Source and Corresponding Application - Code. If you use option 4d1, you must provide the Installation - Information in the manner specified by section 6 of the GNU GPL - for conveying Corresponding Source.) - - 5. Combined Libraries. - - You may place library facilities that are a work based on the -Library side by side in a single library together with other library -facilities that are not Applications and are not covered by this -License, and convey such a combined library under terms of your -choice, if you do both of the following: - - a) Accompany the combined library with a copy of the same work based - on the Library, uncombined with any other library facilities, - conveyed under the terms of this License. - - b) Give prominent notice with the combined library that part of it - is a work based on the Library, and explaining where to find the - accompanying uncombined form of the same work. - - 6. Revised Versions of the GNU Lesser General Public License. - - The Free Software Foundation may publish revised and/or new versions -of the GNU Lesser General Public License from time to time. Such new -versions will be similar in spirit to the present version, but may -differ in detail to address new problems or concerns. - - Each version is given a distinguishing version number. If the -Library as you received it specifies that a certain numbered version -of the GNU Lesser General Public License "or any later version" -applies to it, you have the option of following the terms and -conditions either of that published version or of any later version -published by the Free Software Foundation. If the Library as you -received it does not specify a version number of the GNU Lesser -General Public License, you may choose any version of the GNU Lesser -General Public License ever published by the Free Software Foundation. - - If the Library as you received it specifies that a proxy can decide -whether future versions of the GNU Lesser General Public License shall -apply, that proxy's public statement of acceptance of any version is -permanent authorization for you to choose that version for the -Library. - -================================================================= - -Creative Commons Legal Code - -Attribution-ShareAlike 3.0 Unported - - CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE - LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN - ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS - INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES - REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR - DAMAGES RESULTING FROM ITS USE. - -License - -THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE -COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY -COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS -AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. - -BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE -TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY -BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS -CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND -CONDITIONS. - -1. Definitions - - a. "Adaptation" means a work based upon the Work, or upon the Work and - other pre-existing works, such as a translation, adaptation, - derivative work, arrangement of music or other alterations of a - literary or artistic work, or phonogram or performance and includes - cinematographic adaptations or any other form in which the Work may be - recast, transformed, or adapted including in any form recognizably - derived from the original, except that a work that constitutes a - Collection will not be considered an Adaptation for the purpose of - this License. For the avoidance of doubt, where the Work is a musical - work, performance or phonogram, the synchronization of the Work in - timed-relation with a moving image ("synching") will be considered an - Adaptation for the purpose of this License. - b. "Collection" means a collection of literary or artistic works, such as - encyclopedias and anthologies, or performances, phonograms or - broadcasts, or other works or subject matter other than works listed - in Section 1(f) below, which, by reason of the selection and - arrangement of their contents, constitute intellectual creations, in - which the Work is included in its entirety in unmodified form along - with one or more other contributions, each constituting separate and - independent works in themselves, which together are assembled into a - collective whole. A work that constitutes a Collection will not be - considered an Adaptation (as defined below) for the purposes of this - License. - c. "Creative Commons Compatible License" means a license that is listed - at http://creativecommons.org/compatiblelicenses that has been - approved by Creative Commons as being essentially equivalent to this - License, including, at a minimum, because that license: (i) contains - terms that have the same purpose, meaning and effect as the License - Elements of this License; and, (ii) explicitly permits the relicensing - of adaptations of works made available under that license under this - License or a Creative Commons jurisdiction license with the same - License Elements as this License. - d. "Distribute" means to make available to the public the original and - copies of the Work or Adaptation, as appropriate, through sale or - other transfer of ownership. - e. "License Elements" means the following high-level license attributes - as selected by Licensor and indicated in the title of this License: - Attribution, ShareAlike. - f. "Licensor" means the individual, individuals, entity or entities that - offer(s) the Work under the terms of this License. - g. "Original Author" means, in the case of a literary or artistic work, - the individual, individuals, entity or entities who created the Work - or if no individual or entity can be identified, the publisher; and in - addition (i) in the case of a performance the actors, singers, - musicians, dancers, and other persons who act, sing, deliver, declaim, - play in, interpret or otherwise perform literary or artistic works or - expressions of folklore; (ii) in the case of a phonogram the producer - being the person or legal entity who first fixes the sounds of a - performance or other sounds; and, (iii) in the case of broadcasts, the - organization that transmits the broadcast. - h. "Work" means the literary and/or artistic work offered under the terms - of this License including without limitation any production in the - literary, scientific and artistic domain, whatever may be the mode or - form of its expression including digital form, such as a book, - pamphlet and other writing; a lecture, address, sermon or other work - of the same nature; a dramatic or dramatico-musical work; a - choreographic work or entertainment in dumb show; a musical - composition with or without words; a cinematographic work to which are - assimilated works expressed by a process analogous to cinematography; - a work of drawing, painting, architecture, sculpture, engraving or - lithography; a photographic work to which are assimilated works - expressed by a process analogous to photography; a work of applied - art; an illustration, map, plan, sketch or three-dimensional work - relative to geography, topography, architecture or science; a - performance; a broadcast; a phonogram; a compilation of data to the - extent it is protected as a copyrightable work; or a work performed by - a variety or circus performer to the extent it is not otherwise - considered a literary or artistic work. - i. "You" means an individual or entity exercising rights under this - License who has not previously violated the terms of this License with - respect to the Work, or who has received express permission from the - Licensor to exercise rights under this License despite a previous - violation. - j. "Publicly Perform" means to perform public recitations of the Work and - to communicate to the public those public recitations, by any means or - process, including by wire or wireless means or public digital - performances; to make available to the public Works in such a way that - members of the public may access these Works from a place and at a - place individually chosen by them; to perform the Work to the public - by any means or process and the communication to the public of the - performances of the Work, including by public digital performance; to - broadcast and rebroadcast the Work by any means including signs, - sounds or images. - k. "Reproduce" means to make copies of the Work by any means including - without limitation by sound or visual recordings and the right of - fixation and reproducing fixations of the Work, including storage of a - protected performance or phonogram in digital form or other electronic - medium. - -2. Fair Dealing Rights. Nothing in this License is intended to reduce, -limit, or restrict any uses free from copyright or rights arising from -limitations or exceptions that are provided for in connection with the -copyright protection under copyright law or other applicable laws. - -3. License Grant. Subject to the terms and conditions of this License, -Licensor hereby grants You a worldwide, royalty-free, non-exclusive, -perpetual (for the duration of the applicable copyright) license to -exercise the rights in the Work as stated below: - - a. to Reproduce the Work, to incorporate the Work into one or more - Collections, and to Reproduce the Work as incorporated in the - Collections; - b. to create and Reproduce Adaptations provided that any such Adaptation, - including any translation in any medium, takes reasonable steps to - clearly label, demarcate or otherwise identify that changes were made - to the original Work. For example, a translation could be marked "The - original work was translated from English to Spanish," or a - modification could indicate "The original work has been modified."; - c. to Distribute and Publicly Perform the Work including as incorporated - in Collections; and, - d. to Distribute and Publicly Perform Adaptations. - e. For the avoidance of doubt: - - i. Non-waivable Compulsory License Schemes. In those jurisdictions in - which the right to collect royalties through any statutory or - compulsory licensing scheme cannot be waived, the Licensor - reserves the exclusive right to collect such royalties for any - exercise by You of the rights granted under this License; - ii. Waivable Compulsory License Schemes. In those jurisdictions in - which the right to collect royalties through any statutory or - compulsory licensing scheme can be waived, the Licensor waives the - exclusive right to collect such royalties for any exercise by You - of the rights granted under this License; and, - iii. Voluntary License Schemes. The Licensor waives the right to - collect royalties, whether individually or, in the event that the - Licensor is a member of a collecting society that administers - voluntary licensing schemes, via that society, from any exercise - by You of the rights granted under this License. - -The above rights may be exercised in all media and formats whether now -known or hereafter devised. The above rights include the right to make -such modifications as are technically necessary to exercise the rights in -other media and formats. Subject to Section 8(f), all rights not expressly -granted by Licensor are hereby reserved. - -4. Restrictions. The license granted in Section 3 above is expressly made -subject to and limited by the following restrictions: - - a. You may Distribute or Publicly Perform the Work only under the terms - of this License. You must include a copy of, or the Uniform Resource - Identifier (URI) for, this License with every copy of the Work You - Distribute or Publicly Perform. You may not offer or impose any terms - on the Work that restrict the terms of this License or the ability of - the recipient of the Work to exercise the rights granted to that - recipient under the terms of the License. You may not sublicense the - Work. You must keep intact all notices that refer to this License and - to the disclaimer of warranties with every copy of the Work You - Distribute or Publicly Perform. When You Distribute or Publicly - Perform the Work, You may not impose any effective technological - measures on the Work that restrict the ability of a recipient of the - Work from You to exercise the rights granted to that recipient under - the terms of the License. This Section 4(a) applies to the Work as - incorporated in a Collection, but this does not require the Collection - apart from the Work itself to be made subject to the terms of this - License. If You create a Collection, upon notice from any Licensor You - must, to the extent practicable, remove from the Collection any credit - as required by Section 4(c), as requested. If You create an - Adaptation, upon notice from any Licensor You must, to the extent - practicable, remove from the Adaptation any credit as required by - Section 4(c), as requested. - b. You may Distribute or Publicly Perform an Adaptation only under the - terms of: (i) this License; (ii) a later version of this License with - the same License Elements as this License; (iii) a Creative Commons - jurisdiction license (either this or a later license version) that - contains the same License Elements as this License (e.g., - Attribution-ShareAlike 3.0 US)); (iv) a Creative Commons Compatible - License. If you license the Adaptation under one of the licenses - mentioned in (iv), you must comply with the terms of that license. If - you license the Adaptation under the terms of any of the licenses - mentioned in (i), (ii) or (iii) (the "Applicable License"), you must - comply with the terms of the Applicable License generally and the - following provisions: (I) You must include a copy of, or the URI for, - the Applicable License with every copy of each Adaptation You - Distribute or Publicly Perform; (II) You may not offer or impose any - terms on the Adaptation that restrict the terms of the Applicable - License or the ability of the recipient of the Adaptation to exercise - the rights granted to that recipient under the terms of the Applicable - License; (III) You must keep intact all notices that refer to the - Applicable License and to the disclaimer of warranties with every copy - of the Work as included in the Adaptation You Distribute or Publicly - Perform; (IV) when You Distribute or Publicly Perform the Adaptation, - You may not impose any effective technological measures on the - Adaptation that restrict the ability of a recipient of the Adaptation - from You to exercise the rights granted to that recipient under the - terms of the Applicable License. This Section 4(b) applies to the - Adaptation as incorporated in a Collection, but this does not require - the Collection apart from the Adaptation itself to be made subject to - the terms of the Applicable License. - c. If You Distribute, or Publicly Perform the Work or any Adaptations or - Collections, You must, unless a request has been made pursuant to - Section 4(a), keep intact all copyright notices for the Work and - provide, reasonable to the medium or means You are utilizing: (i) the - name of the Original Author (or pseudonym, if applicable) if supplied, - and/or if the Original Author and/or Licensor designate another party - or parties (e.g., a sponsor institute, publishing entity, journal) for - attribution ("Attribution Parties") in Licensor's copyright notice, - terms of service or by other reasonable means, the name of such party - or parties; (ii) the title of the Work if supplied; (iii) to the - extent reasonably practicable, the URI, if any, that Licensor - specifies to be associated with the Work, unless such URI does not - refer to the copyright notice or licensing information for the Work; - and (iv) , consistent with Ssection 3(b), in the case of an - Adaptation, a credit identifying the use of the Work in the Adaptation - (e.g., "French translation of the Work by Original Author," or - "Screenplay based on original Work by Original Author"). The credit - required by this Section 4(c) may be implemented in any reasonable - manner; provided, however, that in the case of a Adaptation or - Collection, at a minimum such credit will appear, if a credit for all - contributing authors of the Adaptation or Collection appears, then as - part of these credits and in a manner at least as prominent as the - credits for the other contributing authors. For the avoidance of - doubt, You may only use the credit required by this Section for the - purpose of attribution in the manner set out above and, by exercising - Your rights under this License, You may not implicitly or explicitly - assert or imply any connection with, sponsorship or endorsement by the - Original Author, Licensor and/or Attribution Parties, as appropriate, - of You or Your use of the Work, without the separate, express prior - written permission of the Original Author, Licensor and/or Attribution - Parties. - d. Except as otherwise agreed in writing by the Licensor or as may be - otherwise permitted by applicable law, if You Reproduce, Distribute or - Publicly Perform the Work either by itself or as part of any - Adaptations or Collections, You must not distort, mutilate, modify or - take other derogatory action in relation to the Work which would be - prejudicial to the Original Author's honor or reputation. Licensor - agrees that in those jurisdictions (e.g. Japan), in which any exercise - of the right granted in Section 3(b) of this License (the right to - make Adaptations) would be deemed to be a distortion, mutilation, - modification or other derogatory action prejudicial to the Original - Author's honor and reputation, the Licensor will waive or not assert, - as appropriate, this Section, to the fullest extent permitted by the - applicable national law, to enable You to reasonably exercise Your - right under Section 3(b) of this License (right to make Adaptations) - but not otherwise. - -5. Representations, Warranties and Disclaimer - -UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR -OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY -KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, -INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, -FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF -LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, -WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION -OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU. - -6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE -LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR -ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES -ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS -BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -7. Termination - - a. This License and the rights granted hereunder will terminate - automatically upon any breach by You of the terms of this License. - Individuals or entities who have received Adaptations or Collections - from You under this License, however, will not have their licenses - terminated provided such individuals or entities remain in full - compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will - survive any termination of this License. - b. Subject to the above terms and conditions, the license granted here is - perpetual (for the duration of the applicable copyright in the Work). - Notwithstanding the above, Licensor reserves the right to release the - Work under different license terms or to stop distributing the Work at - any time; provided, however that any such election will not serve to - withdraw this License (or any other license that has been, or is - required to be, granted under the terms of this License), and this - License will continue in full force and effect unless terminated as - stated above. - -8. Miscellaneous - - a. Each time You Distribute or Publicly Perform the Work or a Collection, - the Licensor offers to the recipient a license to the Work on the same - terms and conditions as the license granted to You under this License. - b. Each time You Distribute or Publicly Perform an Adaptation, Licensor - offers to the recipient a license to the original Work on the same - terms and conditions as the license granted to You under this License. - c. If any provision of this License is invalid or unenforceable under - applicable law, it shall not affect the validity or enforceability of - the remainder of the terms of this License, and without further action - by the parties to this agreement, such provision shall be reformed to - the minimum extent necessary to make such provision valid and - enforceable. - d. No term or provision of this License shall be deemed waived and no - breach consented to unless such waiver or consent shall be in writing - and signed by the party to be charged with such waiver or consent. - e. This License constitutes the entire agreement between the parties with - respect to the Work licensed here. There are no understandings, - agreements or representations with respect to the Work not specified - here. Licensor shall not be bound by any additional provisions that - may appear in any communication from You. This License may not be - modified without the mutual written agreement of the Licensor and You. - f. The rights granted under, and the subject matter referenced, in this - License were drafted utilizing the terminology of the Berne Convention - for the Protection of Literary and Artistic Works (as amended on - September 28, 1979), the Rome Convention of 1961, the WIPO Copyright - Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 - and the Universal Copyright Convention (as revised on July 24, 1971). - These rights and subject matter take effect in the relevant - jurisdiction in which the License terms are sought to be enforced - according to the corresponding provisions of the implementation of - those treaty provisions in the applicable national law. If the - standard suite of rights granted under applicable copyright law - includes additional rights not granted under this License, such - additional rights are deemed to be included in the License; this - License is not intended to restrict the license of any rights under - applicable law. - - -Creative Commons Notice - - Creative Commons is not a party to this License, and makes no warranty - whatsoever in connection with the Work. Creative Commons will not be - liable to You or any party on any legal theory for any damages - whatsoever, including without limitation any general, special, - incidental or consequential damages arising in connection to this - license. Notwithstanding the foregoing two (2) sentences, if Creative - Commons has expressly identified itself as the Licensor hereunder, it - shall have all rights and obligations of Licensor. - - Except for the limited purpose of indicating to the public that the - Work is licensed under the CCPL, Creative Commons does not authorize - the use by either party of the trademark "Creative Commons" or any - related trademark or logo of Creative Commons without the prior - written consent of Creative Commons. Any permitted use will be in - compliance with Creative Commons' then-current trademark usage - guidelines, as may be published on its website or otherwise made - available upon request from time to time. For the avoidance of doubt, - this trademark restriction does not form part of the License. - - Creative Commons may be contacted at http://creativecommons.org/. diff --git a/mesecons_regs/README.md b/mesecons_regs/README.md deleted file mode 100644 index ab6b649..0000000 --- a/mesecons_regs/README.md +++ /dev/null @@ -1 +0,0 @@ -Adds Latch and Flipflop, that can be used with Mesecon mod. diff --git a/mesecons_regs/flipflop.lua b/mesecons_regs/flipflop.lua deleted file mode 100644 index 69a6f7c..0000000 --- a/mesecons_regs/flipflop.lua +++ /dev/null @@ -1,128 +0,0 @@ -local nodebox = { - type = "fixed", - fixed = {{-8/16, -8/16, -8/16, 8/16, -7/16, 8/16 }}, -} - -local function gate_rotate_rules(node, rules) - for rotations = 0, node.param2 - 1 do - rules = mesecon.rotate_rules_left(rules) - end - return rules -end - - -local function ff_get_input_rules(node) - return gate_rotate_rules(node, - { - {x=-1, y=0, z=0, name="data"}, - {x=0, y=0, z=-1, name="enable"} - }) -end - -local function ff_get_output_rules(node) - return gate_rotate_rules(node, - { {x=1,y=0,z=0 }} - ) -end - - -local function set_ff(pos,node,state) - local ff = minetest.registered_nodes[node.name] - if state then - minetest.swap_node(pos, {name = ff.onstate, param2=node.param2}) - mesecon.receptor_on(pos, ff_get_output_rules(node)) - else - minetest.swap_node(pos, {name = ff.offstate, param2=node.param2}) - mesecon.receptor_off(pos, ff_get_output_rules(node)) - end -end - -local function update_flipflop(pos, node, link, newstate) - local ff = minetest.registered_nodes[node.name] - local meta = minetest.get_meta(pos) - - local data= meta:get_int("data") == 1 and 1 or 0 - local enable = meta:get_int("enable") == 1 and 1 or 0 - - - - if link.name == "enable" then - if newstate == "off" then - meta:set_int("enable",0) - end - if newstate == "on" and enable == 0 then - if data == 0 then - set_ff(pos,node,false) - else - set_ff(pos,node,true) - end - meta:set_int("enable",1) - end - - end - - if link.name == "data" then - meta:set_int("data", newstate == "on" and 1 or 0 ) - end - -end - - - -local function register_flipflop() - local name = "flipflop" - description = "Logic Memory Circuit: "..name - - local basename = "mesecons_regs:"..name - mesecon.register_node(basename, - { - description = description, - inventory_image = "jeija_gate_off.png^jeija_gate_"..name..".png", - paramtype = "light", - paramtype2 = "facedir", - is_ground_content = false, - drawtype = "nodebox", - drop = basename.."_off", - selection_box = nodebox, - node_box = nodebox, - walkable = true, - sounds = default.node_sound_stone_defaults(), - onstate = basename.."_on", - offstate = basename.."_off", - after_dig_node = mesecon.do_cooldown, - },{ - tiles = {"jeija_microcontroller_bottom.png^".."jeija_gate_off.png^".. - "jeija_gate_"..name..".png"}, - groups = {dig_immediate = 2, overheat = 1}, - mesecons = { receptor = { - state = "off", - rules = ff_get_output_rules - }, effector = { - rules = ff_get_input_rules, - action_change = update_flipflop - }} - },{ - tiles = {"jeija_microcontroller_bottom.png^".."jeija_gate_on.png^".. - "jeija_gate_"..name..".png"}, - groups = {dig_immediate = 2, not_in_creative_inventory = 1, overheat = 1}, - mesecons = { receptor = { - state = "on", - rules = ff_get_output_rules - }, effector = { - rules = ff_get_input_rules, - action_change = update_flipflop - }} - }) - - minetest.register_craft({output = basename.."_off", - recipe = { - { "mesecons_regs:latch_off", "mesecons_regs:latch_off", }, - { "mesecons_gates:not_off", "mesecons_insulated:insulated_off",}, - { "mesecons_extrawires:tjunction_off", "mesecons_extrawires:corner_off", } - }}) - -end - - - -register_flipflop() diff --git a/mesecons_regs/latch.lua b/mesecons_regs/latch.lua deleted file mode 100644 index 0b91565..0000000 --- a/mesecons_regs/latch.lua +++ /dev/null @@ -1,138 +0,0 @@ -local nodebox = { - type = "fixed", - fixed = {{-8/16, -8/16, -8/16, 8/16, -7/16, 8/16 }}, -} - -local function gate_rotate_rules(node, rules) - for rotations = 0, node.param2 - 1 do - rules = mesecon.rotate_rules_left(rules) - end - return rules -end - - -local function latch_get_input_rules(node) - return gate_rotate_rules(node, - { - {x=-1, y=0, z=0, name="data"}, - {x=0, y=0, z=-1, name="enable"} - }) -end - -local function latch_get_output_rules(node) - return gate_rotate_rules(node, - { {x=1,y=0,z=0 }} - ) -end - - -local function set_latch(pos,node,state) - local latch = minetest.registered_nodes[node.name] - if state then - minetest.swap_node(pos, {name = latch.onstate, param2=node.param2}) - mesecon.receptor_on(pos, latch_get_output_rules(node)) - else - minetest.swap_node(pos, {name = latch.offstate, param2=node.param2}) - mesecon.receptor_off(pos, latch_get_output_rules(node)) - end -end - - -local function update_latch(pos, node, link, newstate) - local latch = minetest.registered_nodes[node.name] - local meta = minetest.get_meta(pos) - - local data= meta:get_int("data") == 1 and 1 or 0 - local enable = meta:get_int("enable") == 1 and 1 or 0 - - if link.name == "enable" then - if newstate == "off" and enable == 1 then - if data == 0 then - set_latch(pos,node,false) - else - set_latch(pos,node,true) - end - meta:set_int("enable",0) - end - if newstate == "on" then - if data == 0 then - set_latch(pos,node,false) - else - set_latch(pos,node,true) - end - meta:set_int("enable",1) - end - - end - - if link.name == "data" then - if enable == 1 then - local nv = newstate == "on" and 1 or 0 - set_latch(pos,node, nv == 1 and true or false) - meta:set_int("data",nv) - else - meta:set_int("data", newstate == "on" and 1 or 0 ) - end - end - -end - - - -local function register_latch() - local name = "latch" - description = "Logic Memory Circuit: "..name - - local basename = "mesecons_regs:"..name - mesecon.register_node(basename, - { - description = description, - inventory_image = "jeija_gate_off.png^jeija_gate_"..name..".png", - paramtype = "light", - paramtype2 = "facedir", - is_ground_content = false, - drawtype = "nodebox", - drop = basename.."_off", - selection_box = nodebox, - node_box = nodebox, - walkable = true, - sounds = default.node_sound_stone_defaults(), - onstate = basename.."_on", - offstate = basename.."_off", - after_dig_node = mesecon.do_cooldown, - },{ - tiles = {"jeija_microcontroller_bottom.png^".."jeija_gate_off.png^".. - "jeija_gate_"..name..".png"}, - groups = {dig_immediate = 2, overheat = 1}, - mesecons = { receptor = { - state = "off", - rules = latch_get_output_rules - }, effector = { - rules = latch_get_input_rules, - action_change = update_latch - }} - },{ - tiles = {"jeija_microcontroller_bottom.png^".."jeija_gate_on.png^".. - "jeija_gate_"..name..".png"}, - groups = {dig_immediate = 2, not_in_creative_inventory = 1, overheat = 1}, - mesecons = { receptor = { - state = "on", - rules = latch_get_output_rules - }, effector = { - rules = latch_get_input_rules, - action_change = update_latch - }} - }) - - - minetest.register_craft({output = basename.."_off", recipe = { - { "mesecons_gates:and_off", "mesecons_gates:and_off", "mesecons_gates:not_off"}, - { "mesecons_gates:nor_off", "mesecons_gates:nor_off", "mesecons_insulated:insulated_off"}, - { "mesecons_insulated:insulated_off", "mesecons_insulated:insulated_off", "mesecons_insulated:insulated_off"} - }}) - -end - - -register_latch() - diff --git a/mesecons_regs/textures/jeija_gate_flipflop2.png b/mesecons_regs/textures/jeija_gate_flipflop2.png deleted file mode 100644 index 0d6c62a..0000000 Binary files a/mesecons_regs/textures/jeija_gate_flipflop2.png and /dev/null differ