diff --git a/mechanism.lua b/mechanism.lua index 69814a5..01f755b 100644 --- a/mechanism.lua +++ b/mechanism.lua @@ -55,6 +55,20 @@ function Mechanism:new( position, size, ports, color ) return mechanism end +function Mechanism:clone() + local ports = {} + for _, port in ipairs(self.ports) do + local clonedPort = port:clone() + table.insert(ports, clonedPort) + end + local mechanism = { + position = GridPoint:new( self.position.x, self.position.y ), + size = GridPoint:new( self.size.x, self.size.y ), + ports = ports, + color = self.color + } +end + function Mechanism:rotateClockwise() self.size = GridPoint:new(self.size.y, self.size.x) self.xcorner = nextxcorner(self.xcorner, self.size) diff --git a/port.lua b/port.lua index d77b5c4..2ddbecc 100644 --- a/port.lua +++ b/port.lua @@ -47,6 +47,19 @@ function Port:new(position, rotation, color) return port end +---@return Port +function Port:clone() + local port = { + position = GridPoint:new( self.position.x, self.position.y ), + alignment = self.alignment, + scanOffset = self.scanOffset, + color = self.color + } + setmetatable( port, { __index = self } ) + + return port +end + function Port:rotateClockwise() self.position.x, self.position.y = -self.position.y, self.position.x self.scanOffset = (self.scanOffset == 1) ~= self.alignment and 1 or 0