public static void CircuitResistanceLoop(IElectricityIO Thiswire, IProvidePower ProvidingPower) { bool Break = true; List <IElectricityIO> IterateDirectionWorkOnNextList = new List <IElectricityIO> (); while (Break) { IterateDirectionWorkOnNextList = new List <IElectricityIO> (ProvidingPower.ResistanceWorkOnNextList); ProvidingPower.ResistanceWorkOnNextList.Clear(); for (int i = 0; i < IterateDirectionWorkOnNextList.Count; i++) { IterateDirectionWorkOnNextList [i].ResistancyOutput(ElectricalSynchronisation.currentTick, Thiswire.GameObject()); } if (ProvidingPower.ResistanceWorkOnNextList.Count <= 0) { IterateDirectionWorkOnNextList = new List <IElectricityIO> (ProvidingPower.ResistanceWorkOnNextListWait); ProvidingPower.ResistanceWorkOnNextListWait.Clear(); for (int i = 0; i < IterateDirectionWorkOnNextList.Count; i++) { IterateDirectionWorkOnNextList [i].ResistancyOutput(ElectricalSynchronisation.currentTick, Thiswire.GameObject()); } } if (ProvidingPower.ResistanceWorkOnNextList.Count <= 0 && ProvidingPower.ResistanceWorkOnNextListWait.Count <= 0) { Break = false; } } }
public static void CircuitSearchLoop(IElectricityIO Thiswire, IProvidePower ProvidingPower) { InputOutputFunctions.DirectionOutput(ElectricalSynchronisation.currentTick, Thiswire.GameObject(), Thiswire); bool Break = true; List <IElectricityIO> IterateDirectionWorkOnNextList = new List <IElectricityIO> (); while (Break) { IterateDirectionWorkOnNextList = new List <IElectricityIO> (ProvidingPower.DirectionWorkOnNextList); ProvidingPower.DirectionWorkOnNextList.Clear(); for (int i = 0; i < IterateDirectionWorkOnNextList.Count; i++) { IterateDirectionWorkOnNextList [i].DirectionOutput(ElectricalSynchronisation.currentTick, Thiswire.GameObject()); } if (ProvidingPower.DirectionWorkOnNextList.Count <= 0) { IterateDirectionWorkOnNextList = new List <IElectricityIO> (ProvidingPower.DirectionWorkOnNextListWait); ProvidingPower.DirectionWorkOnNextListWait.Clear(); for (int i = 0; i < IterateDirectionWorkOnNextList.Count; i++) { IterateDirectionWorkOnNextList [i].DirectionOutput(ElectricalSynchronisation.currentTick, Thiswire.GameObject()); } } if (ProvidingPower.DirectionWorkOnNextList.Count <= 0 && ProvidingPower.DirectionWorkOnNextListWait.Count <= 0) { //Logger.Log ("stop!"); Break = false; } } }
public static void DirectionInput(int tick, GameObject SourceInstance, IElectricityIO ComingFrom, IElectricityIO Thiswire) { int SourceInstanceID = SourceInstance.GetInstanceID(); if (Thiswire.Data.FirstPresent == 0) { Thiswire.Data.FirstPresent = SourceInstanceID; } if (!(Thiswire.Data.Upstream.ContainsKey(SourceInstanceID))) { Thiswire.Data.Upstream [SourceInstanceID] = new HashSet <IElectricityIO> (); } if (!(Thiswire.Data.Downstream.ContainsKey(SourceInstanceID))) { Thiswire.Data.Downstream [SourceInstanceID] = new HashSet <IElectricityIO> (); } if (ComingFrom != null) { Thiswire.Data.Upstream [SourceInstanceID].Add(ComingFrom); } bool CanPass = true; if (Thiswire.InData.ConnectionReaction.ContainsKey(ComingFrom.InData.Categorytype)) { if (Thiswire.InData.ConnectionReaction [ComingFrom.InData.Categorytype].DirectionReaction) { if (Thiswire.InData.ConnectionReaction [ComingFrom.InData.Categorytype].DirectionReactionA.AddResistanceCall.Bool) { IProvidePower SourceInstancPowerSupply = SourceInstance.GetComponent <IProvidePower> (); if (SourceInstancPowerSupply != null) { IElectricityIO IElectricityIOPowerSupply = SourceInstance.GetComponent <IElectricityIO> (); if (!Thiswire.Data.ResistanceToConnectedDevices.ContainsKey(IElectricityIOPowerSupply)) { Thiswire.Data.ResistanceToConnectedDevices [IElectricityIOPowerSupply] = new HashSet <PowerTypeCategory> (); } Thiswire.Data.ResistanceToConnectedDevices [IElectricityIOPowerSupply].Add(ComingFrom.InData.Categorytype); SourceInstancPowerSupply.connectedDevices.Add(Thiswire); } } if (Thiswire.InData.ConnectionReaction [ComingFrom.InData.Categorytype].DirectionReactionA.YouShallNotPass) { CanPass = false; } } } if (CanPass) { if (Thiswire.Data.connections.Count > 2) { SourceInstance.GetComponent <IProvidePower> ().DirectionWorkOnNextListWait.Add(Thiswire); } else { SourceInstance.GetComponent <IProvidePower> ().DirectionWorkOnNextList.Add(Thiswire); } } }
public void DirectionOutput(int tick, GameObject SourceInstance) { //ElectricityFunctions.DirectionOutput (tick, SourceInstance, this); int SourceInstanceID = SourceInstance.GetInstanceID(); DownstreamCount = Downstream [SourceInstanceID].Count; UpstreamCount = Upstream [SourceInstanceID].Count; //Logger.Log ("rfert"); // foreach (IElectricityIO ConnectedTo in Upstream [SourceInstanceID]) { // Logger.Log (ConnectedTo.ToString () + "Special connection"); // } IProvidePower SourceInstancPowerSupply = SourceInstance.GetComponent <IProvidePower> (); if (SourceInstancPowerSupply != null) { SourceInstancPowerSupply.connectedDevices.Add(this); } //Logger.Log (this.gameObject.GetInstanceID().ToString() + " <ID | Downstream = "+Downstream[SourceInstanceID].Count.ToString() + " Upstream = " + Upstream[SourceInstanceID].Count.ToString (), Category.Electrical); }
public static void ElectricityInput(int tick, float Current, GameObject SourceInstance, IElectricityIO ComingFrom, IElectricityIO Thiswire) { //Logger.Log (tick.ToString () + " <tick " + Current.ToString () + " <Current " + SourceInstance.ToString () + " <SourceInstance " + ComingFrom.ToString () + " <ComingFrom " + Thiswire.ToString () + " <Thiswire ", Category.Electrical); int SourceInstanceID = SourceInstance.GetInstanceID(); //if (electricity.voltage > 1f) { // connected = true; //} if (!(Thiswire.SourceVoltages.ContainsKey(SourceInstanceID))) { Thiswire.SourceVoltages [SourceInstanceID] = new float(); } if (!(Thiswire.CurrentComingFrom.ContainsKey(SourceInstanceID))) { Thiswire.CurrentComingFrom [SourceInstanceID] = new Dictionary <IElectricityIO, float> (); } Thiswire.CurrentComingFrom [SourceInstanceID] [ComingFrom] = Current; //Logger.Log (Current.ToString () + " <Current Using Resistance> " + WorkOutResistance (Thiswire.ResistanceComingFrom [SourceInstanceID]).ToString (), Category.Electrical); Thiswire.SourceVoltages[SourceInstanceID] = Current * (WorkOutResistance(Thiswire.ResistanceComingFrom [SourceInstanceID])); //Logger.Log (Thiswire.ActualCurrentChargeInWire.ToString () + " How much current", Category.Electrical); //Pass the charge on: if (Thiswire.CanProvideResistance) { IProvidePower SourceInstancPowerSupply = SourceInstance.GetComponent <IProvidePower> (); if (SourceInstancPowerSupply != null) { IElectricityIO IElectricityIOPowerSupply = SourceInstance.GetComponent <IElectricityIO> (); Thiswire.ResistanceToConnectedDevices.Add(IElectricityIOPowerSupply); SourceInstancPowerSupply.connectedDevices.Add(Thiswire); } } Thiswire.ElectricityOutput(tick, ElectricityFunctions.WorkOutCurrent(Thiswire.CurrentComingFrom [SourceInstanceID]), SourceInstance); }