public static void PasteInsertersOnly(BlueprintData data, Vector3 targetPos, float yaw, int pasteIndex = 0, bool connectToPasted = false) { PlayerAction_Build actionBuild = GameMain.data.mainPlayer.controller.actionBuild; var backupMechaBuildArea = actionBuild.player.mecha.buildArea; actionBuild.player.mecha.buildArea = 10000f; Vector2 targetSpr = targetPos.ToSpherical(); ConcurrentQueue <InserterCopy> inserterQueue = new ConcurrentQueue <InserterCopy>(data.copiedInserters); Util.Parallelize((threadIndex) => { while (inserterQueue.TryDequeue(out InserterCopy inserter)) { var pastedEntity = ConcurrentPasteInserter(threadIndex, inserter, yaw, pasteIndex, connectToPasted); BuildLogic.CheckBuildConditionsWorker(_abs[threadIndex], pastedEntity.buildPreview); } }); actionBuild.player.mecha.buildArea = backupMechaBuildArea; }
public static void Paste(BlueprintData data, Vector3 targetPos, float yaw, bool pasteInserters = true, int pasteIndex = 0) { PlayerAction_Build actionBuild = GameMain.data.mainPlayer.controller.actionBuild; var backupMechaBuildArea = actionBuild.player.mecha.buildArea; actionBuild.player.mecha.buildArea = 10000f; Vector2 targetSpr = targetPos.ToSpherical(); ConcurrentQueue <BuildingCopy> buildingsQueue = new ConcurrentQueue <BuildingCopy>(data.copiedBuildings); Util.Parallelize((int threadIndex) => { while (buildingsQueue.TryDequeue(out BuildingCopy building)) { var pastedEntity = ConcurrentPasteBuilding(threadIndex, building, targetSpr, yaw, pasteIndex); lock (actionBuild.nearcdLogic) { actionBuild.nearcdLogic.ActiveEntityBuildCollidersInArea(pastedEntity.pose.position, 5f); } } }); buildingsQueue = new ConcurrentQueue <BuildingCopy>(data.copiedBuildings); Util.Parallelize((int threadIndex) => { while (buildingsQueue.TryDequeue(out BuildingCopy building)) { int pasteId = PASTE_INDEX_MULTIPLIER * pasteIndex + building.originalId; var pastedEntity = BlueprintManager.pastedEntities[pasteId]; ConcurrentConnectBuildings(threadIndex, pastedEntity); BuildLogic.CheckBuildConditionsWorker(_abs[threadIndex], pastedEntity.buildPreview); } }); ConcurrentQueue <BeltCopy> beltsQueue = new ConcurrentQueue <BeltCopy>(data.copiedBelts); Util.Parallelize((int threadIndex) => { while (beltsQueue.TryDequeue(out BeltCopy belt)) { var pastedEntity = ConcurrentPasteBelt(threadIndex, belt, targetSpr, yaw, pasteIndex); } }); // after creating the belt previews this restore the correct connection to other belts and buildings beltsQueue = new ConcurrentQueue <BeltCopy>(data.copiedBelts); Util.Parallelize((int threadIndex) => { while (beltsQueue.TryDequeue(out BeltCopy belt)) { int pasteId = PASTE_INDEX_MULTIPLIER * pasteIndex + belt.originalId; var pastedEntity = BlueprintManager.pastedEntities[pasteId]; ConcurrentConnectBelt(threadIndex, pastedEntity); BuildLogic.CheckBuildConditionsWorker(_abs[threadIndex], pastedEntity.buildPreview); } }); if (pasteInserters) { ConcurrentQueue <InserterCopy> inserterQueue = new ConcurrentQueue <InserterCopy>(data.copiedInserters); Util.Parallelize((threadIndex) => { while (inserterQueue.TryDequeue(out InserterCopy inserter)) { var pastedEntity = ConcurrentPasteInserter(threadIndex, inserter, yaw, pasteIndex); BuildLogic.CheckBuildConditionsWorker(_abs[threadIndex], pastedEntity.buildPreview); } }); } actionBuild.player.mecha.buildArea = backupMechaBuildArea; }