From bcc39d9f205485beddcb13ccfd99470feb8ebd54 Mon Sep 17 00:00:00 2001
From: Redo0 <a509dcfc@cock.li>
Date: Sat, 24 Jul 2021 15:35:00 -0500
Subject: [PATCH] make input queue stack again

---
 sim/group.lua      |  2 +-
 sim/main.lua       |  4 ++--
 sim/simulation.lua | 10 +++++++---
 3 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/sim/group.lua b/sim/group.lua
index 417c387..675c626 100644
--- a/sim/group.lua
+++ b/sim/group.lua
@@ -185,7 +185,7 @@ function Group.setstate(group, state)
 		local len = group.num_gates_update
 		for i = 1, len do
 			local gate = group.gates_update[i]
-			if gate.in_queue==0 then
+			if gate and gate.in_queue==0 then
 				Simulation.queuegate(sim, gate)
 			end
 		end
diff --git a/sim/main.lua b/sim/main.lua
index b9bbc1e..ae0f027 100644
--- a/sim/main.lua
+++ b/sim/main.lua
@@ -55,6 +55,8 @@ GSim = sim
 network_accept_client()
 
 while true do
+	network_update()
+	
 	local time = os.clock()
 	
 	if OPT_TICK_ENABLED then
@@ -84,8 +86,6 @@ while true do
 	end
 	
 	if time-lastfxtime >= OPT_FX_TIME then
-		network_update()
-		
 		if OPT_FX_UPDATES then
 			Simulation.sendfxupdate(sim)
 		end
diff --git a/sim/simulation.lua b/sim/simulation.lua
index 23bb2c5..010a8f6 100644
--- a/sim/simulation.lua
+++ b/sim/simulation.lua
@@ -263,7 +263,9 @@ end
 
 function Simulation.queuegateinput(sim, gate, argv)
 	sim.inputqueue = sim.inputqueue or {}
-	sim.inputqueue[gate] = argv
+	--sim.inputqueue[gate] = argv
+	sim.inputqueue[gate] = sim.inputqueue[gate] or {}
+	table.insert(sim.inputqueue[gate], argv)
 end
 
 function Simulation.queuegateinit(sim, gate)
@@ -358,8 +360,10 @@ end
 
 function Simulation.tickinput(sim)
 	if sim.inputqueue ~= nil then
-		for gate, argv in pairs(sim.inputqueue) do
-			Gate.input(gate, argv)
+		for gate, inputs in pairs(sim.inputqueue) do
+			for k, argv in ipairs(inputs) do
+				Gate.input(gate, argv)
+			end
 		end
 		sim.inputqueue = nil
 	end