From a92a29e577201d2d68c9a6a457633ac5d1ba4c3d Mon Sep 17 00:00:00 2001 From: Deet Mit Date: Wed, 15 Jul 2020 23:22:54 +0200 Subject: [PATCH] Add mesecons automove --- mesecons_autowire/auto_move.lua | 599 ++++++++++++++++++ mesecons_autowire/init.lua | 3 +- mesecons_autowire/textures/tool_automove.png | Bin 0 -> 236 bytes .../textures/tool_autoselect.png | Bin 0 -> 249 bytes mesecons_autowire/textures/worldedit_cube.png | Bin 0 -> 147 bytes mesecons_autowire/textures/worldedit_pos1.png | Bin 0 -> 142 bytes mesecons_autowire/textures/worldedit_pos2.png | Bin 0 -> 157 bytes mesecons_gates3/init.lua | 2 +- mesecons_morewires/xjunction.lua | 2 +- mesecons_regs/LICENSE.txt | 532 ++++++++++++++++ mesecons_regs/init.lua | 233 ++++++- mesecons_regs/mod.conf | 1 + modpack.conf | 1 + 13 files changed, 1368 insertions(+), 5 deletions(-) create mode 100644 mesecons_autowire/auto_move.lua create mode 100644 mesecons_autowire/textures/tool_automove.png create mode 100644 mesecons_autowire/textures/tool_autoselect.png create mode 100644 mesecons_autowire/textures/worldedit_cube.png create mode 100644 mesecons_autowire/textures/worldedit_pos1.png create mode 100644 mesecons_autowire/textures/worldedit_pos2.png create mode 100644 mesecons_regs/LICENSE.txt diff --git a/mesecons_autowire/auto_move.lua b/mesecons_autowire/auto_move.lua new file mode 100644 index 0000000..c92bf93 --- /dev/null +++ b/mesecons_autowire/auto_move.lua @@ -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 + + +}) + diff --git a/mesecons_autowire/init.lua b/mesecons_autowire/init.lua index ff3fbc1..5c34f71 100644 --- a/mesecons_autowire/init.lua +++ b/mesecons_autowire/init.lua @@ -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"); \ No newline at end of file +dofile(minetest.get_modpath("mesecons_autowire").."/auto_wire.lua"); +dofile(minetest.get_modpath("mesecons_autowire").."/auto_move.lua"); \ No newline at end of file diff --git a/mesecons_autowire/textures/tool_automove.png b/mesecons_autowire/textures/tool_automove.png new file mode 100644 index 0000000000000000000000000000000000000000..a6177d6823bbc5d604681ae6faae8c12fc8a5e49 GIT binary patch literal 236 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmPVJ3qg!nSbAQOQ2Atr;B5V#p$J!cMBdc;Bao8{_)@K zBbPN?->}sC$AknPuog&QIKbT!zRYpT-lIE>x>^-hYRe@{esEryef#*)6_pO>PR`sU z&VOL_L6;LeH@5C?T;u!Y`&Nv`An=CzZ_5i3blEgv{3KF_7HipNcjCM;!_^Izc{ rC3$1v7u9z?OI7AP+4297#&gye>XG4JeUHxtx`@Hk)z4*}Q$iB}ypL7! literal 0 HcmV?d00001 diff --git a/mesecons_autowire/textures/worldedit_cube.png b/mesecons_autowire/textures/worldedit_cube.png new file mode 100644 index 0000000000000000000000000000000000000000..fde36a8782e7c44d2aea80a82ec486797e1a6497 GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=DjSK$uZf!>a)($X?><>&kwYM?y$VOscWW8z`jU>Eak-aXL96A>qe)2F53sL^A)K lH+a<)DBiOxVZsgu2LE^Ujruw}U4UvCJYD@<);T3K0RTS*DV6{L literal 0 HcmV?d00001 diff --git a/mesecons_autowire/textures/worldedit_pos1.png b/mesecons_autowire/textures/worldedit_pos1.png new file mode 100644 index 0000000000000000000000000000000000000000..4c304aa88d80420e8f4f005d7f0030234210d5ed GIT binary patch literal 142 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9F5hd`K7RKu$QDCpqn z;uvCaIyogF;m3Ig#RW$i{`*Y1b + 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/init.lua b/mesecons_regs/init.lua index 2796c53..9402526 100644 --- a/mesecons_regs/init.lua +++ b/mesecons_regs/init.lua @@ -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() diff --git a/mesecons_regs/mod.conf b/mesecons_regs/mod.conf index 5081472..8af23bc 100644 --- a/mesecons_regs/mod.conf +++ b/mesecons_regs/mod.conf @@ -1,5 +1,6 @@ author = marek description = Adds Latch and Filipflops circuits. +release = 4508 title = Mesecon Register Circuits name = mesecons_regs depends = mesecons diff --git a/modpack.conf b/modpack.conf index e9796bd..c5daf36 100644 --- a/modpack.conf +++ b/modpack.conf @@ -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