module(..., package.seeall) Builder = {} function Builder:new(definition) local obj = {} setmetatable(obj, self) self.__index = self obj.actions = {} obj.index = 1 obj.position = definition.position obj.last_tick = definition.tick return obj end function Builder:addbuild(builddata) self.actions[#self.actions + 1] = builddata end function Builder:update(tick) if self.index > #self.actions then return end action = self.actions[self.index] if tick < action.tick + self.last_tick then return end -- perform action self.position = action.positionfunction(self.position) self.index = self.index + 1 game.surfaces["nauvis"].create_entity{name=action.name, position=self.position, direction=action.direction} self.last_tick = self.last_tick + action.tick end function down(position) return {x=position.x, y=position.y + 1} end function right(position) return {x=position.x + 1, y=position.y} end builder = Builder:new({position={x=-12, y=30}, tick=game.tick}) for i = 1, 10 do builder:addbuild{tick=5, name="transport-belt", positionfunction=right, direction=defines.direction.east} end builder:addbuild{tick=5, name="transport-belt", positionfunction=right, direction=defines.direction.south} for i = 1, 10 do builder:addbuild{tick=5, name="transport-belt", positionfunction=down, direction=defines.direction.south} end