Beispiel #1
0
    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;
            }
        }
    }
Beispiel #2
0
    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);
            }
        }
    }
Beispiel #4
0
    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);
    }