public static void PasteInserter(PlayerAction_Build actionBuild, int index, InserterCopy inserter, float yaw) { InserterPosition positionData = InserterPoses.GetPositions(actionBuild, inserter, yaw * Mathf.Deg2Rad); BuildPreview bp = BuildPreview.CreateSingle(LDB.items.Select(inserter.itemProto.ID), inserter.itemProto.prefabDesc, true); bp.lpos = positionData.absoluteInserterPos; bp.lpos2 = positionData.absoluteInserterPos2; bp.lrot = positionData.absoluteInserterRot; bp.lrot2 = positionData.absoluteInserterRot2; bp.inputToSlot = 1; bp.outputFromSlot = 0; bp.inputOffset = positionData.pickOffset; bp.outputOffset = positionData.insertOffset; bp.outputToSlot = positionData.endSlot; bp.inputFromSlot = positionData.startSlot; bp.condition = positionData.condition; bp.filterId = inserter.filterId; if (pastedEntities.TryGetValue(positionData.inputOriginalId, out PastedEntity inputEntity)) { bp.input = inputEntity.buildPreview; } else { bp.inputObjId = positionData.inputObjId; } if (pastedEntities.TryGetValue(positionData.outputOriginalId, out PastedEntity outputEntity)) { bp.output = outputEntity.buildPreview; } else { bp.outputObjId = positionData.outputObjId; } lock (parallelPastedEntities) { parallelPastedEntities.Add(inserter.originalId, new PastedEntity() { type = EPastedType.INSERTER, index = index, buildPreview = bp, }); } }
public static PastedEntity ConcurrentPasteInserter(int threadIndex, InserterCopy inserter, float yaw, int pasteIndex, bool connectToPasted = false) { var actionBuild = _abs[threadIndex]; int pasteId = PASTE_INDEX_MULTIPLIER * pasteIndex + inserter.originalId; if (!BlueprintManager.pastedEntities.TryGetValue(pasteId, out PastedEntity pastedEntity)) { BuildPreview bp = BuildPreview.CreateSingle(inserter.itemProto, inserter.itemProto.prefabDesc, true); pastedEntity = new PastedEntity() { pasteIndex = pasteIndex, pasteId = pasteId, status = EPastedStatus.NEW, type = EPastedType.INSERTER, sourceInserter = inserter, buildPreview = bp, }; bp.filterId = inserter.filterId; bp.inputToSlot = 1; bp.outputFromSlot = 0; BlueprintManager.pastedEntities.TryAdd(pasteId, pastedEntity); lock (actionBuild.buildPreviews) { actionBuild.buildPreviews.Add(bp); } } else { pastedEntity.status = EPastedStatus.UPDATE; } InserterPosition positionData = InserterPoses.GetPositions(actionBuild, inserter, yaw * Mathf.Deg2Rad, pasteIndex, connectToPasted); pastedEntity.buildPreview.lpos = positionData.absoluteInserterPos; pastedEntity.buildPreview.lpos2 = positionData.absoluteInserterPos2; pastedEntity.buildPreview.lrot = positionData.absoluteInserterRot; pastedEntity.buildPreview.lrot2 = positionData.absoluteInserterRot2; pastedEntity.buildPreview.inputOffset = positionData.pickOffset; pastedEntity.buildPreview.outputOffset = positionData.insertOffset; pastedEntity.buildPreview.outputToSlot = positionData.endSlot; pastedEntity.buildPreview.inputFromSlot = positionData.startSlot; pastedEntity.buildPreview.condition = positionData.condition; pastedEntity.buildPreview.input = null; pastedEntity.buildPreview.inputObjId = 0; pastedEntity.buildPreview.output = null; pastedEntity.buildPreview.outputObjId = 0; if (BlueprintManager.pastedEntities.TryGetValue(positionData.inputPastedId, out PastedEntity inputPastedEntity)) { pastedEntity.buildPreview.input = inputPastedEntity.buildPreview; } else { pastedEntity.buildPreview.inputObjId = positionData.inputEntityId; } if (BlueprintManager.pastedEntities.TryGetValue(positionData.outputPastedId, out PastedEntity outputPastedEntity)) { pastedEntity.buildPreview.output = outputPastedEntity.buildPreview; } else { pastedEntity.buildPreview.outputObjId = positionData.outputEntityId; } return(pastedEntity); }