public Inserter(string data) { pd = default; inserter = default; isInserter = true; type = EDataType.Inserter; string[] s = data.Split(','); if (s.Length > 20) { pd.protoId = short.Parse(s[0]); pd.modelIndex = short.Parse(s[1]); pd.pos = new Vector3(float.Parse(s[2]), float.Parse(s[3]), float.Parse(s[4])); pd.rot = new Quaternion(float.Parse(s[5]), float.Parse(s[6]), float.Parse(s[7]), float.Parse(s[8])); pd.pos2 = new Vector3(float.Parse(s[9]), float.Parse(s[10]), float.Parse(s[11])); pd.rot2 = new Quaternion(float.Parse(s[12]), float.Parse(s[13]), float.Parse(s[14]), float.Parse(s[15])); pd.filterId = int.Parse(s[16]); inserter.pickTarget = int.Parse(s[17]); inserter.insertTarget = int.Parse(s[18]); inserter.stt = int.Parse(s[19]); inserter.delay = int.Parse(s[20]); if (s.Length > 22) { outConn = int.Parse(s[21]); inConn = int.Parse(s[22]); } if (s.Length > 23) { oldEId = int.Parse(s[23]); } } }
public Inserter(PrebuildData prebuild, InserterComponent inserter, int Out, int In) { pd = prebuild; isInserter = true; type = EDataType.Inserter; this.inserter = inserter; outConn = Out; inConn = In; }
static PrebuildData GetPreDate(InserterComponent ic, EntityData ed) { PrebuildData prebuild = default(PrebuildData); prebuild.protoId = (short)ed.protoId; prebuild.modelIndex = (short)ed.modelIndex; prebuild.pos = ed.pos; prebuild.pos2 = ic.pos2; prebuild.rot = ed.rot; prebuild.rot2 = ic.rot2; prebuild.filterId = ic.filter; prebuild.insertOffset = ic.insertOffset; prebuild.pickOffset = ic.pickOffset; return(prebuild); }
public static InserterCopy CopyInserter(EntityData sourceEntity, EntityData referenceEntity) { PlanetFactory factory = GameMain.data.localPlanet.factory; PlayerAction_Build actionBuild = GameMain.data.mainPlayer.controller.actionBuild; if (sourceEntity.inserterId == 0) { return(null); } InserterComponent inserter = factory.factorySystem.inserterPool[sourceEntity.inserterId]; if (data.copiedInserters.FindIndex(x => x.originalId == inserter.entityId) != -1) { return(null); } int pickTarget = inserter.pickTarget; int insertTarget = inserter.insertTarget; ItemProto itemProto = LDB.items.Select(sourceEntity.protoId); bool incoming = insertTarget == referenceEntity.id; int otherId = incoming ? pickTarget : insertTarget; Vector2 referenceSprPos = referenceEntity.pos.ToSpherical(); Vector2 sourceSprPos = sourceEntity.pos.ToSpherical(); Vector2 sourceSprPos2 = inserter.pos2.ToSpherical(); // The belt or other building this inserter is attached to Vector2 otherSprPos; ItemProto otherProto; if (otherId > 0) { otherProto = LDB.items.Select(factory.entityPool[otherId].protoId); otherSprPos = factory.entityPool[otherId].pos.ToSpherical(); } else if (otherId < 0) { otherProto = LDB.items.Select(factory.prebuildPool[-otherId].protoId); otherSprPos = factory.prebuildPool[-otherId].pos.ToSpherical(); } else { otherSprPos = sourceSprPos2; otherProto = null; } bool otherIsBelt = otherProto == null || otherProto.prefabDesc.isBelt; // Cache info for this inserter InserterCopy copiedInserter = new InserterCopy { itemProto = itemProto, protoId = itemProto.ID, originalId = inserter.entityId, pickTarget = pickTarget, insertTarget = insertTarget, referenceBuildingId = referenceEntity.id, incoming = incoming, // rotations + deltas relative to the source building's rotation rot = Quaternion.Inverse(referenceEntity.rot) * sourceEntity.rot, rot2 = Quaternion.Inverse(referenceEntity.rot) * inserter.rot2, posDelta = sourceSprPos - referenceSprPos, // Delta from copied building to inserter pos pos2Delta = sourceSprPos2 - referenceSprPos, // Delta from copied building to inserter pos2 posDeltaCount = sourceSprPos.GetSegmentsCount(), pos2DeltaCount = sourceSprPos2.GetSegmentsCount(), otherPosDelta = otherSprPos - referenceSprPos, otherPosDeltaCount = otherSprPos.GetSegmentsCount(), // not important? pickOffset = inserter.pickOffset, insertOffset = inserter.insertOffset, filterId = inserter.filter, startSlot = -1, endSlot = -1, otherIsBelt = otherIsBelt }; InserterPoses.CalculatePose(actionBuild, pickTarget, insertTarget); if (actionBuild.posePairs.Count > 0) { float minDistance = 1000f; for (int j = 0; j < actionBuild.posePairs.Count; ++j) { var posePair = actionBuild.posePairs[j]; float startDistance = Vector3.Distance(posePair.startPose.position, sourceEntity.pos); float endDistance = Vector3.Distance(posePair.endPose.position, inserter.pos2); float poseDistance = startDistance + endDistance; if (poseDistance < minDistance) { minDistance = poseDistance; copiedInserter.startSlot = posePair.startSlot; copiedInserter.endSlot = posePair.endSlot; copiedInserter.pickOffset = (short)posePair.startOffset; copiedInserter.insertOffset = (short)posePair.endOffset; } } } /* factory.ReadObjectConn(sourceEntity.id, 1, out bool isOutput, out int connectedId, out int connectedSlot); * * if (connectedId != 0) * { * copiedInserter.startSlot = connectedSlot; * } * * * factory.ReadObjectConn(sourceEntity.id, 0, out _, out connectedId, out connectedSlot); * if (connectedId != 0) * { * copiedInserter.endSlot = connectedSlot; * } */ data.copiedInserters.Add(copiedInserter); return(copiedInserter); }
public void CopyBuildData(PlanetFactory factory, int i) { var fSystem = factory.factorySystem; var ed = factory.entityPool[i]; if (ed.protoId > 0) { if (ed.labId > 0 && ed.storageId > 0 || ed.tankId > 0) { return; } MyPreBuildData temp = null; if (ed.splitterId > 0) { var ap = factory.cargoTraffic.splitterPool[ed.splitterId]; int c0 = factory.entityConnPool[16 * ap.entityId]; int c1 = factory.entityConnPool[16 * ap.entityId + 1]; int c2 = factory.entityConnPool[16 * ap.entityId + 2]; int c3 = factory.entityConnPool[16 * ap.entityId + 3]; temp = new Splitter(GetPreDate(ed), c0, c1, c2, c3); } else if (ed.stationId > 0) { var ap = factory.transport.stationPool[ed.stationId]; if (ap != null) { temp = new Station(GetPreDate(ed), ap); } } else if (ed.inserterId > 0) { var ip = fSystem.inserterPool[ed.inserterId]; InserterComponent tempp = ip; int outConn = factory.entityConnPool[i * 16]; int inConn = factory.entityConnPool[i * 16 + 1]; temp = new Inserter(GetPreDate(tempp, ed), ip, outConn, inConn); } else if (ed.beltId > 0) { var ap = factory.cargoTraffic.beltPool[ed.beltId]; bool flag2; int slot; factory.ReadObjectConn(i, 0, out flag2, out int out1, out slot); factory.ReadObjectConn(i, 1, out flag2, out int in1, out slot); factory.ReadObjectConn(i, 2, out flag2, out int in2, out slot); factory.ReadObjectConn(i, 3, out flag2, out int in3, out slot); temp = new Belt(GetPreDate(ap, ed), ap, out1, in1, in2, in3); Belt tBelt = (Belt)temp; if (out1 == 0) { CheckBeltData.Add(i, tBelt); } tBelt.beltOut = EIdIsBeltId(out1); tBelt.beltIn1 = EIdIsBeltId(in1); tBelt.beltIn2 = EIdIsBeltId(in2); tBelt.beltIn3 = EIdIsBeltId(in3); } else if (ed.fractionateId > 0) { var ap = factory.factorySystem.fractionatePool[ed.fractionateId]; int c0 = factory.entityConnPool[i * 16]; int c1 = factory.entityConnPool[i * 16 + 1]; int c2 = factory.entityConnPool[i * 16 + 2]; temp = new Fractionate(GetPreDate(ed), c0, c1, c2); } else if (ed.powerExcId > 0) { var ap = factory.powerSystem.excPool[ed.powerExcId]; int c0 = factory.entityConnPool[i * 16]; int c1 = factory.entityConnPool[i * 16 + 1]; int c2 = factory.entityConnPool[i * 16 + 2]; int c3 = factory.entityConnPool[i * 16 + 3]; temp = new PowerExchanger(GetPreDate(ed), c0, c1, c2, c3, ap.targetState); } else if (ed.assemblerId > 0) { var ap = fSystem.assemblerPool[ed.assemblerId]; temp = new Assembler(GetPreDate(ap, ed)); } else if (ed.ejectorId > 0) { var ap = fSystem.ejectorPool[ed.ejectorId]; temp = new Assembler(GetPreDate(ed)); } else if (ed.siloId > 0) { var ap = fSystem.siloPool[ed.siloId]; temp = new Assembler(GetPreDate(ed)); } else if (ed.powerGenId > 0) { var ap = factory.powerSystem.genPool[ed.powerGenId]; if (ap.gamma) { int c0 = factory.entityConnPool[16 * ap.entityId]; int c1 = factory.entityConnPool[16 * ap.entityId + 1]; temp = new Gamm(GetPreDate(ed), ap.productId, c0, c1); } else { temp = new Assembler(GetPreDate(ed)); temp.type = EDataType.PowGen; } } else if (ed.powerNodeId > 0) { var ap = factory.powerSystem.nodePool[ed.powerNodeId]; temp = new Assembler(GetPreDate(ed)); } //else if (ed.storageId > 0) //{ // var ap = factory.factoryStorage.storagePool[ed.storageId]; // if (ap.next == 0) // { // temp = new Assembler(GetPreDate(ed)); // } //} if (temp != null) { temp.oldEId = i; AllData.Add(temp); AddItemCount(ed.protoId); } } }