public static void RecreateLinker(Vector3i pos, TransportPipeLinker linker) { for (int i = -1; i <= 1; i++) { for (int j = -1; j <= 1; j++) { for (int k = -1; k <= 1; k++) { if (i == 0 && j == 0 && k == 0) { Vector3i newPos = MakeWorldMod(new Vector3i(pos.x + i, pos.y + j, pos.z + k)); TransportPipeInfo info = null; if (TransportPipeManager.pipesInfo.TryGetValue(newPos, out info)) { if (linker.ContainsConveyor(info) == false) { linker.AddConveyor(info); } } continue; } if ((i == 0 && j == 0) || (i == 0 && k == 0) || (j == 0 && k == 0)) { Vector3i newPos = MakeWorldMod(new Vector3i(pos.x + i, pos.y + j, pos.z + k)); TransportPipeInfo info = null; if (TransportPipeManager.pipesInfo.TryGetValue(newPos, out info)) { if (info.beltLinker == null) { info.beltLinker = linker; RecreateLinker(newPos, linker); } } else if (World.GetBlock(newPos) is BaseTransportPipeBlock || World.GetBlock(newPos) is PipeSlotBlock) { info = new TransportPipeInfo(); info.pos = newPos; info.beltLinker = linker; info.type = World.GetBlock(newPos) is WoodenTransportPipeBlock ? PIPETYPE.Wooden : PIPETYPE.Electric; TransportPipeManager.pipesInfo.TryAdd(newPos, info); RecreateLinker(newPos, linker); } } } } } }
public void AbsorbLinker(TransportPipeLinker linker) { foreach (TransportPipeInfo con in linker.conveyors) { con.beltLinker = this; AddConveyor(con); } foreach (ConnectorObject con in linker.inputConveyors) { AddConnector(true, con); } foreach (ConnectorObject con in linker.outputConveyors) { AddConnector(false, con); } linker = null; }