public static void DirectionOutput(ElectricalOIinheritance SourceInstance, IntrinsicElectronicData Thiswire, CableLine RelatedLine = null) { if (Thiswire.Data.connections.Count == 0) { Thiswire.FindPossibleConnections(); } if (!(Thiswire.Data.SupplyDependent.TryGetValue(SourceInstance, out ElectronicSupplyData outputSupplyingUsingData))) { outputSupplyingUsingData = Thiswire.Data.SupplyDependent[SourceInstance] = ElectricalPool.GetElectronicSupplyData(); } foreach (IntrinsicElectronicData Relatedindata in Thiswire.Data.connections) { if (!(outputSupplyingUsingData.Upstream.Contains(Relatedindata)) && (Thiswire != Relatedindata)) { bool pass = true; if (RelatedLine != null) { if (RelatedLine.Covering.Contains(Relatedindata)) { pass = false; } } if (outputSupplyingUsingData.Downstream.Contains(Relatedindata) == false && pass && Relatedindata.Present != SourceInstance) { outputSupplyingUsingData.Downstream.Add(Relatedindata); Relatedindata.DirectionInput(SourceInstance, Thiswire); } } } }
public static void DirectionInput(ElectricalOIinheritance SourceInstance, IntrinsicElectronicData ComingFrom, IntrinsicElectronicData Thiswire) { if (Thiswire.Data.connections.Count == 0) { Thiswire.FindPossibleConnections(); //plz don't remove it is necessary for preventing incomplete cleanups when there has been multiple } if (!Thiswire.Data.SupplyDependent.TryGetValue(SourceInstance, out ElectronicSupplyData supplyDep)) { supplyDep = Thiswire.Data.SupplyDependent[SourceInstance] = ElectricalPool.GetElectronicSupplyData(); } if (ComingFrom != null) { supplyDep.Upstream.Add(ComingFrom); } if (Thiswire.ConnectionReaction.TryGetValue(ComingFrom.Categorytype, out PowerInputReactions reaction)) { if (reaction.DirectionReaction || reaction.ResistanceReaction) { if (SourceInstance != null) { SupplyBool SupplyBool = null; foreach (var keysvasl in Thiswire.Data.ResistanceToConnectedDevices) { if (keysvasl.Key.Equals(SourceInstance)) { SupplyBool = keysvasl.Key; } } if (SupplyBool == null) { SupplyBool = ElectricalPool.GetSupplyBool(); SupplyBool.Data = SourceInstance; SupplyBool.RequiresUpdate = true; Thiswire.Data.ResistanceToConnectedDevices[SupplyBool] = new Dictionary <Resistance, HashSet <IntrinsicElectronicData> >(); } var resToConDev = Thiswire.Data.ResistanceToConnectedDevices[SupplyBool]; if (!resToConDev.TryGetValue(reaction.ResistanceReactionA.Resistance, out HashSet <IntrinsicElectronicData> resToConDevHash)) { resToConDevHash = resToConDev[reaction.ResistanceReactionA.Resistance] = new HashSet <IntrinsicElectronicData>(); } resToConDevHash.Add(ComingFrom); SupplyBool.RequiresUpdate = true; SourceInstance.connectedDevices.Add(Thiswire); ElectricalManager.Instance.electricalSync.InitialiseResistanceChange .Add(Thiswire.ControllingDevice); } if (reaction.DirectionReactionA.YouShallNotPass) { return; } } } if (Thiswire.Data.connections.Count > 2) { ElectricalManager.Instance.electricalSync.DirectionWorkOnNextListWaitADD(Thiswire); } else { ElectricalManager.Instance.electricalSync.DirectionWorkOnNextListADD(Thiswire); } }