mirror of
https://gitlab.com/deetmit/mesecons_x.git
synced 2024-10-05 17:13:16 +02:00
Add mesecons automove
This commit is contained in:
parent
47c6774798
commit
a92a29e577
599
mesecons_autowire/auto_move.lua
Normal file
599
mesecons_autowire/auto_move.lua
Normal file
@ -0,0 +1,599 @@
|
||||
|
||||
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
|
||||
|
||||
local 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
|
||||
--move
|
||||
|
||||
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
|
||||
|
||||
|
||||
})
|
||||
|
@ -1,4 +1,5 @@
|
||||
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_wire.lua");
|
||||
dofile(minetest.get_modpath("mesecons_autowire").."/auto_move.lua");
|
BIN
mesecons_autowire/textures/tool_automove.png
Normal file
BIN
mesecons_autowire/textures/tool_automove.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 236 B |
BIN
mesecons_autowire/textures/tool_autoselect.png
Normal file
BIN
mesecons_autowire/textures/tool_autoselect.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 249 B |
BIN
mesecons_autowire/textures/worldedit_cube.png
Normal file
BIN
mesecons_autowire/textures/worldedit_cube.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 147 B |
BIN
mesecons_autowire/textures/worldedit_pos1.png
Normal file
BIN
mesecons_autowire/textures/worldedit_pos1.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 142 B |
BIN
mesecons_autowire/textures/worldedit_pos2.png
Normal file
BIN
mesecons_autowire/textures/worldedit_pos2.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 157 B |
@ -59,7 +59,7 @@ local function update_gate3(pos, node, link, newstate)
|
||||
local val3 = meta:get_int("input3") == 1 and 1 or 0
|
||||
|
||||
|
||||
set_gate3(pos, node, gate.assess(val1==1 and true or flase,
|
||||
set_gate3(pos, node, gate.assess(val1==1 and true or false,
|
||||
val2==1 and true or false,
|
||||
val3==1 and true or false))
|
||||
|
||||
|
@ -38,7 +38,7 @@ minetest.register_node("mesecons_morewires:xjunction_on", {
|
||||
},
|
||||
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
-- paramtype2 = "facedir",
|
||||
is_ground_content = false,
|
||||
walkable = false,
|
||||
sunlight_propagates = true,
|
||||
|
532
mesecons_regs/LICENSE.txt
Normal file
532
mesecons_regs/LICENSE.txt
Normal file
@ -0,0 +1,532 @@
|
||||
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. <http://fsf.org/>
|
||||
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/.
|
@ -1,3 +1,232 @@
|
||||
dofile(minetest.get_modpath("mesecons_regs").."/latch.lua");
|
||||
dofile(minetest.get_modpath("mesecons_regs").."/flipflop.lua");
|
||||
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()
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
local function update_flipflop(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" then
|
||||
meta:set_int("enable",0)
|
||||
end
|
||||
if newstate == "on" and enable == 0 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
|
||||
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 = latch_get_output_rules
|
||||
}, effector = {
|
||||
rules = latch_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 = latch_get_output_rules
|
||||
}, effector = {
|
||||
rules = latch_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()
|
||||
|
@ -1,5 +1,6 @@
|
||||
author = marek
|
||||
description = Adds Latch and Filipflops circuits.
|
||||
release = 4508
|
||||
title = Mesecon Register Circuits
|
||||
name = mesecons_regs
|
||||
depends = mesecons
|
||||
|
@ -2,3 +2,4 @@ name = mesecons_x
|
||||
title = Mesecons Extended
|
||||
author = marek
|
||||
description = Adds Latch, Flipflop, tools for automatic wireing, 3-input gates etc.
|
||||
release = 4569
|
||||
|
Loading…
Reference in New Issue
Block a user