PortTypes = { output = 0, input = 1 } PortDirections = { [0] = {-1, 0, 0}, [1] = {0, 1, 0}, [2] = {1, 0, 0}, [3] = {0, -1, 0}, [4] = {0, 0, 1}, [5] = {0, 0, -1} } Port = { logictype = 1, } function Port.new(self, type, direction, position, causeupdate, sim) local o = { type = type, direction = direction, position = position, causeupdate = causeupdate, state = false, gate = nil, group = nil, sim = sim, } setmetatable(o, self) self.__index = self return o end function Port.setstate(port, state) if state ~= port.state then port.state = state Simulation.queuegroup(port.sim, port.group) end end function Port.setinputstate(port, state) if state ~= port.state then port.state = state if port.causeupdate then Simulation.queuegate(port.sim, port.gate) end end end function Port.getconnectionposition(self) local offset = PortDirections[self.direction] return {self.position[1]+offset[1], self.position[2]+offset[2], self.position[3]+offset[3]} end function Port.isrising(self) if self.group == nil then return false end return self.group.state and (self.group.updatetick == self.sim.currenttick) end function Port.isfalling(self) if self.group == nil then return false end return self.group.state == false and (self.group.updatetick == self.sim.currenttick) end function Port.setgate(self, gate) self.gate = gate end function Port.setgroup(self, group) self.group = group end function Port.getgroup(self) return self.group end function Port.gettype(self) return self.type end function Port.getstate(self) return self.state end