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)) && pass) { outputSupplyingUsingData.Downstream.Add(Relatedindata); Relatedindata.DirectionInput(SourceInstance, Thiswire); } } } }
public static void DirectionInput(ElectricalOIinheritance SourceInstance, IntrinsicElectronicData ComingFrom, IntrinsicElectronicData Thiswire) { //Logger.Log(Thiswire.Categorytype + "DirectionInput"); 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.ContainsKey(SourceInstance))) { Thiswire.Data.SupplyDependent[SourceInstance] = ElectricalPool.GetElectronicSupplyData(); } if (ComingFrom != null) { Thiswire.Data.SupplyDependent[SourceInstance].Upstream.Add(ComingFrom); } if (Thiswire.ConnectionReaction.ContainsKey(ComingFrom.Categorytype)) { var Reaction = Thiswire.ConnectionReaction[ComingFrom.Categorytype]; if (Reaction.DirectionReaction || Reaction.ResistanceReaction) { if (SourceInstance != null) { if (!Thiswire.Data.ResistanceToConnectedDevices.ContainsKey(SourceInstance)) { Thiswire.Data.ResistanceToConnectedDevices[SourceInstance] = new Dictionary <Resistance, HashSet <IntrinsicElectronicData> >(); } if (!Thiswire.Data.ResistanceToConnectedDevices[SourceInstance].ContainsKey(Reaction.ResistanceReactionA.Resistance)) { Thiswire.Data.ResistanceToConnectedDevices[SourceInstance][Reaction.ResistanceReactionA.Resistance] = new HashSet <IntrinsicElectronicData>(); } Thiswire.Data.ResistanceToConnectedDevices[SourceInstance][Reaction.ResistanceReactionA.Resistance] .Add(ComingFrom); SourceInstance.connectedDevices.Add(Thiswire); ElectricalManager.Instance.electricalSync.InitialiseResistanceChange.Add(Thiswire.ControllingDevice); } if (Thiswire.ConnectionReaction[ComingFrom.Categorytype].DirectionReactionA.YouShallNotPass) { return; } } } if (Thiswire.Data.connections.Count > 2) { ElectricalManager.Instance.electricalSync.DirectionWorkOnNextListWaitADD(Thiswire); } else { ElectricalManager.Instance.electricalSync.DirectionWorkOnNextListADD(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) { if (!Thiswire.Data.ResistanceToConnectedDevices.TryGetValue(SourceInstance, out var resToConDev)) { resToConDev = Thiswire.Data.ResistanceToConnectedDevices[SourceInstance] = new Dictionary <Resistance, HashSet <IntrinsicElectronicData> >(); } if (!resToConDev.TryGetValue(reaction.ResistanceReactionA.Resistance, out HashSet <IntrinsicElectronicData> resToConDevHash)) { resToConDevHash = resToConDev[reaction.ResistanceReactionA.Resistance] = new HashSet <IntrinsicElectronicData>(); } resToConDevHash.Add(ComingFrom); 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); } }