From 6c997a36fa10ba05b42d0da091ab7546ab0c9da5 Mon Sep 17 00:00:00 2001 From: Redo0 Date: Sat, 22 May 2021 18:45:04 -0500 Subject: [PATCH] fix more oop and bugs --- sim/group.lua | 6 +++--- sim/main.lua | 4 +++- sim/port.lua | 18 +++++++++--------- sim/simulation.lua | 10 +++++----- 4 files changed, 20 insertions(+), 18 deletions(-) diff --git a/sim/group.lua b/sim/group.lua index d500143..b5d8ab9 100644 --- a/sim/group.lua +++ b/sim/group.lua @@ -85,7 +85,7 @@ function Group.addport(self, port) elseif port.type == PortTypes.input then self.in_ports[port] = port self.nin_ports = self.nin_ports + 1 - port:setinputstate(self.state) + Port.setinputstate(port, self.state) end end @@ -138,11 +138,11 @@ function Group.setstate(self, state) if state ~= self.state then self.state = state self.updatetick = sim.currenttick - + for k, port in pairs(self.in_ports) do Port.setinputstate(port, state) end - + Simulation.queuegroupfx(sim, self) end end diff --git a/sim/main.lua b/sim/main.lua index eaa29c9..a1b61c3 100644 --- a/sim/main.lua +++ b/sim/main.lua @@ -290,7 +290,9 @@ while 1 do for a = i+3, i+3+argc-1 do argv[#argv+1] = collapseescape(data[a]) end - Simulation.queuegateinput(sim, gate, argv) + if gate then + Simulation.queuegateinput(sim, gate, argv) + end i = i+2+argc elseif data[i] == "SAVE" then diff --git a/sim/port.lua b/sim/port.lua index fe3460a..4280ef6 100644 --- a/sim/port.lua +++ b/sim/port.lua @@ -32,18 +32,18 @@ function Port.new(self, type, direction, position, causeupdate) return o end -function Port.setstate(self, state) - if state ~= self.state then - self.state = state - Simulation.queuegroup(sim, self.group) +function Port.setstate(port, state) + if state ~= port.state then + port.state = state + Simulation.queuegroup(sim, port.group) end end -function Port.setinputstate(self, state) - if state ~= self.state then - self.state = state - if self.causeupdate then - Simulation.queuegate(sim, self.gate) +function Port.setinputstate(port, state) + if state ~= port.state then + port.state = state + if port.causeupdate then + Simulation.queuegate(sim, port.gate) end end end diff --git a/sim/simulation.lua b/sim/simulation.lua index bdc3723..c8c18d3 100644 --- a/sim/simulation.lua +++ b/sim/simulation.lua @@ -271,31 +271,31 @@ function Simulation.tick(self) Group.setstate(group, newstate) end self.groupqueue = {} - + for k, gate in pairs(self.initqueue) do gate.definition.init(gate) end self.initqueue = {} - + for gate, inputs in pairs(self.inputqueue) do for inputidx, argv in ipairs(inputs) do gate.definition.input(gate, argv) end end self.inputqueue = {} - + if self.tickqueue[self.currenttick] ~= nil then for i, gate in ipairs(self.tickqueue[self.currenttick]) do Simulation.queuegate(self, gate) end self.tickqueue[self.currenttick] = nil end - + for k, gate in pairs(self.gatequeue) do gate.definition.logic(gate) end self.gatequeue = {} - + self.currenttick = self.currenttick + 1 end