Initial commit
This commit is contained in:
67
sim/port.lua
Normal file
67
sim/port.lua
Normal file
@@ -0,0 +1,67 @@
|
||||
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(type, direction, position, causeupdate)
|
||||
local o = {
|
||||
type = type,
|
||||
direction = direction,
|
||||
position = position,
|
||||
causeupdate = causeupdate,
|
||||
state = false,
|
||||
gate = nil,
|
||||
group = nil,
|
||||
}
|
||||
setmetatable(o, self)
|
||||
self.__index = self
|
||||
return o
|
||||
end
|
||||
|
||||
function Port:setstate(state)
|
||||
if state ~= self.state then
|
||||
self.state = state
|
||||
sim:queuegroup(self.group)
|
||||
end
|
||||
end
|
||||
|
||||
function Port:setinputstate(state)
|
||||
if state ~= self.state then
|
||||
self.state = state
|
||||
if self.causeupdate then
|
||||
sim:queuegate(self.gate)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function Port:getconnectionposition()
|
||||
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()
|
||||
if self.group == nil then
|
||||
return false
|
||||
end
|
||||
return self.group.state and (self.group.updatetick == sim.currenttick)
|
||||
end
|
||||
|
||||
function Port:isfalling()
|
||||
if self.group == nil then
|
||||
return false
|
||||
end
|
||||
return self.group.state == false and (self.group.updatetick == sim.currenttick)
|
||||
end
|
||||
Reference in New Issue
Block a user