]> git.lizzy.rs Git - Crafter.git/commitdiff
Add in dynamic redstone queue sleep
authoroilboi <47129783+oilboi@users.noreply.github.com>
Thu, 2 Jul 2020 06:49:50 +0000 (02:49 -0400)
committeroilboi <47129783+oilboi@users.noreply.github.com>
Thu, 2 Jul 2020 06:49:50 +0000 (02:49 -0400)
mods/redstone/init.lua
mods/redstone/inverter.lua
mods/redstone/repeater.lua

index 1ef418c2019244dae4c613ce2faf7ca469fa497e..05d3082e5ab241fa403f7c8e41ee6e30cb83e6ae 100644 (file)
@@ -706,22 +706,30 @@ function redstone.update(pos,is_capacitor)
 
        --calculate(pos,is_capacitor)
 end
+local dtime_goal = 0.02
+local sleep = 0
+minetest.register_globalstep(function(dtime)
 
-minetest.register_globalstep(function()
-       player_detector_calculation()
 
-       if table.getn(queue) > 0 then
-               --print(dump(queue))
-               local element = queue[1]
-               calculate(element.pos,element.is_capacitor)
-               queue[1] = nil
-               for index,data in pairs(queue) do
-                       queue[index-1] = data
-               end
-               queue[table.getn(queue)] = nil
+       if dtime > dtime_goal then
+               sleep = dtime - dtime_goal
        end
 
-       --recursion_check = {}
+       if sleep == 0 then
+               player_detector_calculation()
+
+               for index,element in pairs(queue) do
+                       calculate(element.pos,element.is_capacitor)
+               end
+
+               queue = {}
+               --recursion_check = {}
+       else
+               sleep = sleep - dtime
+               if sleep <= 0 then
+                       sleep = 0
+               end
+       end
 end)
 
 
index 8239dd1851b303b38ab4b89210b587d612f879dd..e50a31b9c45e944a1fc45e3c83c456e09b9e144d 100644 (file)
@@ -42,12 +42,13 @@ minetest.register_node("redstone:inverter_on", {
                        dir = dir
                })
                redstone.update(pos)
+               redstone.update(vector.add(pos,dir))
        end,
        after_destruct = function(pos, oldnode)
                local param2 = oldnode.param2
                local dir = minetest.facedir_to_dir(param2)
                redstone.inject(pos,nil)
-               redstone.update(pos)
+               --redstone.update(pos)
                redstone.update(vector.add(pos,dir))
        end
 })
@@ -68,7 +69,7 @@ redstone.register_activator({
                        output = vector.add(pos,dir),
                        dir = dir
                })
-               redstone.update(pos)
+               --redstone.update(pos)
                redstone.update(vector.add(pos,dir))
        end
 })
@@ -87,6 +88,8 @@ minetest.register_lbm({
                        output = vector.add(pos,dir),
                        dir = dir
                })
+               --redstone.update(pos)
+               redstone.update(vector.add(pos,dir))
        end,
 })
 
@@ -132,12 +135,13 @@ minetest.register_node("redstone:inverter_off", {
                        dir = dir
                })
                redstone.update(pos)
+               redstone.update(vector.add(pos,dir))
        end,
        after_destruct = function(pos, oldnode)
                local param2 = oldnode.param2
                local dir = minetest.facedir_to_dir(param2)
                redstone.inject(pos,nil)
-               redstone.update(pos)
+               --redstone.update(pos)
                redstone.update(vector.add(pos,dir))
        end
 })
@@ -156,7 +160,7 @@ redstone.register_activator({
                        output = vector.add(pos,dir),
                        dir = dir
                })
-               redstone.update(pos)
+               --redstone.update(pos)
                redstone.update(vector.add(pos,dir))
        end
 })
@@ -177,5 +181,7 @@ minetest.register_lbm({
                        output = vector.add(pos,dir),
                        dir    = dir
                })
+               --redstone.update(pos)
+               redstone.update(vector.add(pos,dir))
        end,
 })
index e7a4bcf73392092fe6c9fa440283690567082ff8..eb7134e1e2b07ce594ef9affcc5d516714727f9f 100644 (file)
@@ -68,13 +68,16 @@ minetest.register_node("redstone:repeater_on_"..level, {
                        output = vector.add(pos,dir),
                        dir = dir
                })
-               redstone.update(pos)
+               --redstone.update(pos)
                redstone.update(vector.add(pos,dir))
        end,
 
        after_destruct = function(pos, oldnode)
+               local param2 = oldnode.param2
+               local dir = minetest.facedir_to_dir(param2)
                redstone.inject(pos,nil)
-               redstone.update(pos)
+               --redstone.update(pos)
+               redstone.update(vector.add(pos,dir))
        end,
 
        after_place_node = function(pos)
@@ -89,6 +92,7 @@ minetest.register_node("redstone:repeater_on_"..level, {
                        dir = dir
                })
                redstone.update(pos)
+               redstone.update(vector.add(pos,dir))
        end
 })
 
@@ -118,7 +122,8 @@ minetest.register_lbm({
                        output = vector.add(pos,dir),
                        dir = dir
                })
-               redstone.update(pos)
+               --redstone.update(pos)
+               redstone.update(vector.add(pos,dir))
        end,
 })
 
@@ -177,7 +182,7 @@ minetest.register_node("redstone:repeater_off_"..level, {
                        output = vector.add(pos,dir),
                        dir = dir
                })
-               redstone.update(pos)
+               --redstone.update(pos)
                redstone.update(vector.add(pos,dir))
        end,
 
@@ -200,8 +205,11 @@ minetest.register_node("redstone:repeater_off_"..level, {
        end,
 
        after_destruct = function(pos, oldnode)
+               local param2 = oldnode.param2
+               local dir = minetest.facedir_to_dir(param2)
                redstone.inject(pos,nil)
-               redstone.update(pos)
+               --redstone.update(pos)
+               redstone.update(vector.add(pos,dir))
        end,
 
        after_place_node = function(pos)
@@ -214,6 +222,7 @@ minetest.register_node("redstone:repeater_off_"..level, {
                        dir = dir
                })
                redstone.update(pos)
+               redstone.update(vector.add(pos,dir))
        end
 })
 
@@ -241,7 +250,8 @@ minetest.register_lbm({
                        input  = vector.subtract(pos,dir),
                        dir = dir
                })
-               redstone.update(pos)
+               --redstone.update(pos)
+               redstone.update(vector.add(pos,dir))
        end,
 })