]> git.lizzy.rs Git - Crafter.git/commitdiff
Make repeaters a bit faster
authoroilboi <47129783+oilboi@users.noreply.github.com>
Sun, 28 Jun 2020 05:07:36 +0000 (01:07 -0400)
committeroilboi <47129783+oilboi@users.noreply.github.com>
Sun, 28 Jun 2020 05:07:36 +0000 (01:07 -0400)
mods/redstone/init.lua
mods/redstone/inverter.lua
mods/redstone/lever.lua
mods/redstone/repeater.lua

index 8c5a1bfe3413ee6aad5b6dd793d7df41b769d3d4..f4e3e5238586fd89ef50283c20be121f785cb973 100644 (file)
@@ -180,7 +180,7 @@ local directional_activator = function(pos)
        if not input then ignore = true end
 
        if not ignore then
-               input = add_vec(input,pos)
+               input = temp_pool.input
        end
 
        if not ignore and pool and pool[input.x] and pool[input.x][input.y] and pool[input.x][input.y][input.z] then
@@ -209,11 +209,11 @@ end
 local i
 local index
 local passed_on_level
-local function redstone_pathfinder(source,source_level,boundary,direction)
+local function redstone_pathfinder(source,source_level,boundary,output)
        if not source_level then return end
        --directional torches
-       if direction then
-               i = add_vec(source,direction)
+       if output then
+               i = output
                if i and boundary and boundary[i.x] and boundary[i.x][i.y] and boundary[i.x][i.y][i.z] then
                        index = boundary[i.x][i.y][i.z]
                        --dust
@@ -245,14 +245,14 @@ local function redstone_pathfinder(source,source_level,boundary,direction)
 end
 
 
+
+
 --make all power sources push power out
 local pos
 local node
 local power
-
 local boundary
 local function calculate(pos)
-
        boundary = create_boundary_box(pos)
        --pathfind through memory map   
        for x,index_x in pairs(boundary) do
@@ -263,12 +263,11 @@ local function calculate(pos)
                                        redstone_pathfinder(new_vec(x,y,z),data.torch,boundary)
                                        boundary[x][y][z] = nil
                                elseif data.torch_directional then
-                                       redstone_pathfinder(new_vec(x,y,z),data.torch,boundary,data.dir)
+                                       redstone_pathfinder(new_vec(x,y,z),data.torch,boundary,data.output)
                                end
                        end
                end
        end
-
        --reassemble the table into a position list minetest can understand
        --run through and set dust
        for x,datax in pairs(boundary) do
@@ -289,6 +288,7 @@ local function calculate(pos)
                end
        end
 
+       
        --this must be done after the memory is written
        for x,datax in pairs(boundary) do
                for y,datay in pairs(datax) do
@@ -317,7 +317,7 @@ function redstone.update(pos)
        end
        recursion_check[s_pos] = recursion_check[s_pos] + 1
        --print(recursion_check[s_pos])
-       if recursion_check[s_pos] > 50 then
+       if recursion_check[s_pos] > 6 then
                minetest.after(0,function()
                        minetest.dig_node(pos)
                        data_injection(pos,nil)
index b9a26655d73d1899cdc652b446b7f78f867857d6..39610b61852bce9981cde454d7ca0b76b8c7edc4 100644 (file)
@@ -63,8 +63,9 @@ redstone.register_activator({
                        input  = vector.multiply(dir,-1),
                        dir = dir
                })
-
-               redstone.update(pos)
+               minetest.after(0.1,function()
+                       --redstone.update(pos)
+               end)
        end
 })
 
@@ -145,7 +146,9 @@ redstone.register_activator({
                        input  = vector.multiply(dir,-1),
                        dir = dir
                })
-               redstone.update(pos)
+               minetest.after(0.1,function()
+                       --redstone.update(pos)
+               end)
        end
 })
 
index 517e9e29fa07dfeaa68eda0122edc3b041293870..273f6c0cf423c96c9270f3758ecfce2e81ef6e18 100644 (file)
@@ -1,5 +1,8 @@
 
-local minetest,vector,math,pairs = minetest,vector,math,pairs
+local
+minetest,vector,math,pairs
+=
+minetest,vector,math,pairs
 
 
 minetest.register_node("redstone:lever_off", {
index 5d669193787e274cb30cc428a4c6c5b55e54d397..88a06c699be821b1764e4c311cc1045676078937 100644 (file)
@@ -51,7 +51,8 @@ minetest.register_node("redstone:repeater_on_"..level, {
                        torch  = 9,
                        torch_directional = true,
                        directional_activator = true,
-                       input  = vector.multiply(dir,-1),
+                       input  = vector.subtract(pos,dir),
+                       output = vector.add(pos,dir),
                        dir = dir
                })
        end,
@@ -63,11 +64,12 @@ minetest.register_node("redstone:repeater_on_"..level, {
                redstone.inject(pos,{
                        name = "redstone:repeater_off_"..level,
                        directional_activator = true,
-                       input  = vector.multiply(dir,-1),
+                       input  = vector.subtract(pos,dir),
                        dir = dir
                })
                minetest.after(0,function()
-                       redstone.update(vector.add(pos,dir))
+                       --redstone.update(vector.add(pos,dir))
+                       redstone.update(pos)
                end)
        end,
 
@@ -83,7 +85,8 @@ minetest.register_node("redstone:repeater_on_"..level, {
                        torch  = 9,
                        torch_directional = true,
                        directional_activator = true,
-                       input  = vector.multiply(dir,-1),
+                       input  = vector.subtract(pos,dir),
+                       output = vector.add(pos,dir),
                        dir = dir
                })
                redstone.update(pos)
@@ -112,10 +115,13 @@ minetest.register_lbm({
                        torch  = 9,
                        torch_directional = true,
                        directional_activator = true,
-                       input  = vector.multiply(dir,-1),
+                       input  = vector.subtract(pos,dir),
+                       output = vector.add(pos,dir),
                        dir = dir
                })
-               redstone.update(pos)
+               minetest.after(0,function()
+                       redstone.update(vector.add(pos,dir))
+               end)
        end,
 })
 
@@ -176,11 +182,13 @@ minetest.register_node("redstone:repeater_off_"..level, {
                        torch  = 9,
                        torch_directional = true,
                        directional_activator = true,
-                       input  = vector.multiply(dir,-1),
+                       input  = vector.subtract(pos,dir),
+                       output = vector.add(pos,dir),
                        dir = dir
                })
                minetest.after(0,function()
-                       redstone.update(vector.add(pos,dir))
+                       --redstone.update(vector.add(pos,dir))
+                       redstone.update(pos)
                end)
        end,
 
@@ -195,7 +203,7 @@ minetest.register_node("redstone:repeater_off_"..level, {
                redstone.inject(pos,{
                        name = "redstone:repeater_off_"..newlevel,
                        directional_activator = true,
-                       input  = vector.multiply(dir,-1),
+                       input  = vector.subtract(pos,dir),
                        dir = dir
                })
                minetest.sound_play("lever", {pos=pos})
@@ -211,7 +219,7 @@ minetest.register_node("redstone:repeater_off_"..level, {
                redstone.inject(pos,{
                        name = "redstone:repeater_off_"..level,
                        directional_activator = true,
-                       input  = vector.multiply(dir,-1),
+                       input  = vector.subtract(pos,dir),
                        dir = dir
                })
                redstone.update(pos)
@@ -239,10 +247,12 @@ minetest.register_lbm({
                redstone.inject(pos,{
                        name = "redstone:repeater_off_"..level,
                        directional_activator = true,
-                       input  = vector.multiply(dir,-1),
+                       input  = vector.subtract(pos,dir),
                        dir = dir
                })
-               redstone.update(pos)
+               minetest.after(0,function()
+                       redstone.update(vector.add(pos,dir))
+               end)
        end,
 })