]> git.lizzy.rs Git - Crafter.git/blobdiff - mods/redstone/init.lua
Revert redstone back to 9 states
[Crafter.git] / mods / redstone / init.lua
index 74c4f34f5a593cb1c8703a5a8a9387515999b06a..b9030461ab204cc63e99c3428f695c7155762846 100644 (file)
@@ -82,6 +82,7 @@ dofile(path.."/space_maker.lua")
 --dofile(path.."/pressure_plate.lua")
 dofile(path.."/capacitors.lua")
 dofile(path.."/breaker.lua")
+dofile(path.."/detector.lua")
 
 
 --this is written out manually so that
@@ -155,19 +156,19 @@ local table_3d
 local temp_pool
 local function create_boundary_box(pos)
        table_3d = {}
-       for x = pos.x-16,pos.x+16 do
+       for x = pos.x-9,pos.x+9 do
                if pool[x] then
-                       for y = pos.y-16,pos.y+16 do
+                       for y = pos.y-9,pos.y+9 do
                                if pool[x][y] then
-                                       for z = pos.z-16,pos.z+16 do
+                                       for z = pos.z-9,pos.z+9 do
                                                temp_pool = pool[x][y][z]
                                                if temp_pool then
                                                        if not table_3d[x] then table_3d[x] = {} end
                                                        if not table_3d[x][y] then table_3d[x][y] = {} end
 
-                                                       if (x == pos.x-16 or x == pos.x+16 or 
-                                                       y == pos.y-16 or y == pos.y+16 or 
-                                                       z == pos.z-16 or z == pos.z+16) and 
+                                                       if (x == pos.x-9 or x == pos.x+9 or 
+                                                       y == pos.y-9 or y == pos.y+9 or 
+                                                       z == pos.z-9 or z == pos.z+9) and 
                                                        temp_pool.dust and temp_pool.dust > 1 then
                                                                table_3d[x][y][z] = {torch=temp_pool.dust}
                                                        else
@@ -640,32 +641,6 @@ function redstone.inject(pos,data)
 end
 
 
-local recursion_check = {}
-local bad_node
-function redstone.update(pos,is_capacitor)
-       local s_pos = minetest.serialize(pos)
-       if not recursion_check[s_pos] then
-               recursion_check[s_pos] = 0
-       end
-       recursion_check[s_pos] = recursion_check[s_pos] + 1
-       if recursion_check[s_pos] > 25 then
-               --print(recursion_check[s_pos])
-               minetest.after(0,function()
-                       bad_node = minetest.get_node(pos).name
-                       bad_node = minetest.get_node_drops(bad_node, "main:rubypick")
-                       for _,nodey in pairs(bad_node) do
-                               minetest.throw_item(pos,nodey)
-                       end
-                       minetest.remove_node(pos)
-                       data_injection(pos,nil)
-                       redstone.update(pos)
-               end)
-               return
-       end
-
-       calculate(pos,is_capacitor)
-end
-
 
 local level
 local pos2
@@ -677,9 +652,9 @@ local function player_detector_calculation()
                max = 0
                for _,player in ipairs(minetest.get_connected_players()) do
                        pos2 = player:get_pos()
-                       power = floor(17-vector_distance(pos2,pos))
-                       if power > 16 then
-                               power = 16
+                       power = floor(11-vector_distance(pos2,pos))
+                       if power > 9 then
+                               power = 9
                        elseif power < 0 then
                                power = 0
                        end
@@ -700,9 +675,58 @@ local function player_detector_calculation()
        end
 end
 
-minetest.register_globalstep(function()
+
+local recursion_check = {}
+local bad_node
+local queue = {}
+function redstone.update(pos,is_capacitor)
+       local count = table.getn(queue)
+       local s_pos = minetest.serialize(pos)
+       if not recursion_check[s_pos] then
+               recursion_check[s_pos] = 0
+       end
+       recursion_check[s_pos] = recursion_check[s_pos] + 1
+       if recursion_check[s_pos] > 25 then
+               --print(recursion_check[s_pos])
+               minetest.after(0,function()
+                       bad_node = minetest.get_node(pos).name
+                       bad_node = minetest.get_node_drops(bad_node, "main:rubypick")
+                       for _,nodey in pairs(bad_node) do
+                               minetest.throw_item(pos,nodey)
+                       end
+                       minetest.remove_node(pos)
+                       data_injection(pos,nil)
+                       redstone.update(pos)
+               end)
+               return
+       end
+       calculate(pos,is_capacitor)
+end
+local dtime_goal = 0.02
+local sleep = 0
+minetest.register_globalstep(function(dtime)
        player_detector_calculation()
        recursion_check = {}
+       --[[
+       if dtime > dtime_goal then
+               sleep = dtime - dtime_goal
+       end
+
+       if sleep == 0 then
+
+               for index,element in pairs(queue) do
+                       calculate(element.pos,element.is_capacitor)
+               end
+
+               queue = {}
+               
+       else
+               sleep = sleep - dtime
+               if sleep <= 0 then
+                       sleep = 0
+               end
+       end
+       ]]--
 end)
 
 
@@ -766,9 +790,9 @@ minetest.register_craftitem("redstone:dust", {
 })
 
 --15 power levels 15 being the highest
-for i = 0,15 do
+for i = 0,8 do
 
-       local color = floor(255 * (i/15))
+       local color = floor(255 * (i/8))
        
        minetest.register_node("redstone:dust_"..i,{
                description = "Redstone Dust",