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 = {} function Port.new(type, direction, position, causeupdate) local o = { type = type, direction = direction, position = position, causeupdate = causeupdate, state = false, gate = nil, group = nil, } return o end function Port.setstate(port, state) -- output state if state ~= port.state then local group = port.group group.state_num = group.state_num - (port.state and 1 or 0) + (state and 1 or 0) port.state = state if (group.state_num>0) ~= group.state then Simulation.queuegroup(GSim, group) end end end function Port.getconnectionposition(port) local offset = PortDirections[port.direction] return {port.position[1]+offset[1], port.position[2]+offset[2], port.position[3]+offset[3]} end function Port.isrising(port) if port.group == nil then return false end return port.group.state and (port.group.updatetick == GSim.currenttick) end function Port.isfalling(port) if port.group == nil then return false end return port.group.state == false and (port.updatetick == GSim.currenttick) end function Port.getgate(port) return port.gate end function Port.setgate(port, gate) port.gate = gate end function Port.setgroup(port, group) port.group = group end function Port.getgroup(port) return port.group end function Port.gettype(port) return port.type end function Port.getstate(port) return port.state end