]> git.lizzy.rs Git - Crafter.git/commitdiff
Fix glitches
authoroilboi <47129783+oilboi@users.noreply.github.com>
Mon, 29 Jun 2020 15:40:27 +0000 (11:40 -0400)
committeroilboi <47129783+oilboi@users.noreply.github.com>
Mon, 29 Jun 2020 15:40:27 +0000 (11:40 -0400)
mods/redstone/init.lua
mods/redstone/inverter.lua
mods/redstone/piston.lua

index 101170f67d92edcb9c415c7b0092b3c2cdde6b34..5e4332cd5a40b50aa54dc0ec696a563c4b1ffc12 100644 (file)
@@ -255,8 +255,11 @@ local directional_activator = function(pos)
        
        ignore = false
        input = nil
+       temp_pool = nil
        temp_pool2 = nil
 
+       --if not (pool[pos.x] and pool[pos.x][pos.y] and pool[pos.x][pos.y][pos.z]) then return end
+       
        temp_pool = pool[pos.x][pos.y][pos.z]
        
        if not temp_pool then ignore = true end
@@ -367,8 +370,10 @@ local function dust_sniff(pos,mem_map,boundary)
                if not mem_map[i.x][i.y] then mem_map[i.x][i.y] = {} end
 
                if not mem_map[i.x][i.y][i.z] then
+                       
                        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]
+
                                if index.dust then
                                        mem_map[i.x][i.y][i.z] = index
                                        mem_map[i.x][i.y][i.z].sniffed = true
@@ -386,11 +391,7 @@ local function dust_sniff(pos,mem_map,boundary)
                                elseif index.activator then
                                        mem_map[i.x][i.y][i.z] = index
                                        mem_map[i.x][i.y][i.z].sniffed = true
-                               end
-                               --this needs to be hooked into the end
-                               --because nodes can be directional activators
-                               --and directional torches
-                               if index.directional_activator and vec_equals(pos,index.input) then
+                               elseif index.directional_activator and vec_equals(pos,index.input) then
                                        mem_map[i.x][i.y][i.z] = index
                                        mem_map[i.x][i.y][i.z].sniffed = true
                                end
@@ -439,7 +440,6 @@ local function calculate(pos,is_capacitor)
                        end
                end
 
-
                --do torches
                for x,datax in pairs(dust_map) do
                        for y,datay in pairs(datax) do
@@ -464,11 +464,9 @@ local function calculate(pos,is_capacitor)
                                        --print("update")
                                        if data.dust and data.dust ~= data.origin then
                                                swap_node(new_vec(x,y,z),{name="redstone:dust_"..data.dust})
-                                       end
 
-                                       data_injection(new_vec(x,y,z),data)
-                                       
-                                       if data.dust then
+                                               data_injection(new_vec(x,y,z),data)
+
                                                --delete the data to speed up next loop
                                                dust_map[x][y][z] = nil
                                        end
@@ -516,7 +514,7 @@ function redstone.update(pos,is_capacitor)
                        for _,nodey in pairs(bad_node) do
                                minetest.throw_item(pos,nodey)
                        end
-                       minetest.dig_node(pos)
+                       minetest.remove_node(pos)
                        data_injection(pos,nil)
                        redstone.update(pos)
                end)
@@ -632,7 +630,7 @@ for i = 0,8 do
                nodenames = {"redstone:dust_"..i},
                run_at_every_load = true,
         action = function(pos)
-            data_injection(pos,{dust=i})
+                       data_injection(pos,{dust=i})
         end,
     })
 end
index 9746b36763826a075adeccf3336e26bba317ee63..b14788d177e3a4765151c5a384905da3b1315d27 100644 (file)
@@ -53,7 +53,7 @@ redstone.register_activator({
        name = "redstone:inverter_on",
        deactivate = function(pos)
                local param2 = minetest.get_node(pos).param2
-               minetest.set_node(pos,{name="redstone:inverter_off",param2=param2})
+               minetest.swap_node(pos,{name="redstone:inverter_off",param2=param2})
                local dir = minetest.facedir_to_dir(param2)
                redstone.inject(pos,{
                        name = "redstone:inverter_off",
@@ -138,7 +138,7 @@ redstone.register_activator({
        activate = function(pos)
                
                local param2 = minetest.get_node(pos).param2
-               minetest.set_node(pos,{name="redstone:inverter_on",param2=param2})
+               minetest.swap_node(pos,{name="redstone:inverter_on",param2=param2})
                local dir = minetest.facedir_to_dir(param2)
                redstone.inject(pos,{
                        name = "redstone:inverter_on",
index 294479814fc6f86a3de8322bdf9d954810d490fe..a6067898152b61022b75c72680aef4fba365d575 100644 (file)
@@ -96,9 +96,9 @@ local function push_nodes(pos,dir)
                        for i = 1,table.getn(move_index) do
                                if move_index[i] then
                                        if move_index[i].pos then
-                                       move_index[i].pos = vector.add(move_index[i].pos,dir)
-                                       minetest.set_node(move_index[i].pos,move_index[i])
-                                       minetest.check_for_falling(move_index[i].pos)
+                                               move_index[i].pos = vector.add(move_index[i].pos,dir)
+                                               minetest.set_node(move_index[i].pos,move_index[i])
+                                               minetest.check_for_falling(move_index[i].pos)
                                        end
                                end
                        end
@@ -173,9 +173,7 @@ local function actuator_arm_function(pos)
                        name = "redstone:piston_on",
                        activator = true,
                })
-               minetest.after(0,function()
-                       redstone.update(pos)
-               end)
+               redstone.update(pos)
        end
 end
 
@@ -199,18 +197,20 @@ minetest.register_node("redstone:piston_off", {
     drop = "redstone:piston_off",
     paramtype = "light",
        sunlight_propagates = true,
-    --reverse the direction to face the player
-    after_place_node = function(pos, placer, itemstack, pointed_thing)
-               local look = placer:get_look_dir()
-               look = vector.multiply(look,-1)
-               local dir = minetest.dir_to_facedir(look, true)
-               minetest.swap_node(pos,{name="redstone:piston_off",param2=dir})
+       --reverse the direction to face the player
+       on_construct = function(pos)
                redstone.inject(pos,{
                        name = "redstone:piston_off",
                        activator = true,
                })
                redstone.update(pos)
        end,
+    after_place_node = function(pos, placer, itemstack, pointed_thing)
+               local look = placer:get_look_dir()
+               look = vector.multiply(look,-1)
+               local dir = minetest.dir_to_facedir(look, true)
+               minetest.swap_node(pos,{name="redstone:piston_off",param2=dir})
+       end,
        after_destruct = function(pos, oldnode)
                redstone.inject(pos,nil)
     end,
@@ -220,7 +220,9 @@ minetest.register_node("redstone:piston_off", {
 redstone.register_activator({
        name = "redstone:piston_off",
        activate = function(pos)
-               actuator_arm_function(pos)
+               minetest.after(0,function()
+                       actuator_arm_function(pos)
+               end)
        end
 })
 
@@ -233,6 +235,7 @@ minetest.register_lbm({
                        name = "redstone:piston_off",
                        activator = true,
                })
+               --redstone needs to warm up
                minetest.after(0,function()
                        redstone.update(pos)
                end)
@@ -283,6 +286,7 @@ minetest.register_lbm({
                        name = "redstone:piston_on",
                        activator = true,
                })
+               --redstone needs to warm up
                minetest.after(0,function()
                        redstone.update(pos)
                end)
@@ -481,9 +485,8 @@ local function sticky_actuator_arm_function(pos)
                        name = "redstone:sticky_piston_on",
                        activator = true,
                })
-               minetest.after(0,function()
-                       redstone.update(pos)
-               end)
+               
+               redstone.update(pos)
        end
 end
 
@@ -507,17 +510,19 @@ minetest.register_node("redstone:sticky_piston_off", {
     drop = "redstone:sticky_piston_off",
     paramtype = "light",
        sunlight_propagates = true,
+       on_construct = function(pos)
+               redstone.inject(pos,{
+                       name = "redstone:sticky_piston_off",
+                       activator = true,
+               })
+               redstone.update(pos)
+       end,
     --reverse the direction to face the player
     after_place_node = function(pos, placer, itemstack, pointed_thing)
                local look = placer:get_look_dir()
                look = vector.multiply(look,-1)
                local dir = minetest.dir_to_facedir(look, true)
                minetest.swap_node(pos,{name="redstone:sticky_piston_off",param2=dir})
-               redstone.inject(pos,{
-                       name = "redstone:sticky_piston_off",
-                       activator = true,
-               })
-               redstone.update(pos)
        end,
        after_destruct = function(pos, oldnode)
                redstone.inject(pos,nil)
@@ -528,7 +533,9 @@ minetest.register_node("redstone:sticky_piston_off", {
 redstone.register_activator({
        name = "redstone:sticky_piston_off",
        activate = function(pos)
-               sticky_actuator_arm_function(pos)
+               minetest.after(0,function()
+                       sticky_actuator_arm_function(pos)
+               end)
        end
 })
 
@@ -541,6 +548,7 @@ minetest.register_lbm({
                        name = "redstone:sticky_piston_off",
                        activator = true,
                })
+               --redstone needs to warm up
                minetest.after(0,function()
                        redstone.update(pos)
                end)
@@ -610,6 +618,7 @@ minetest.register_lbm({
                        name = "redstone:sticky_piston_on",
                        activator = true,
                })
+               --redstone needs to warm up
                minetest.after(0,function()
                        redstone.update(pos)
                end)