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);
                }
            }
        }
    }
示例#2
0
 public override void DirectionInput(GameObject SourceInstance, ElectricalOIinheritance ComingFrom, CableLine PassOn = null)
 {
     InputOutputFunctions.DirectionInput(SourceInstance, ComingFrom, this);
     if (PassOn == null)
     {
         if (RelatedLine != null)
         {
             //if (RelatedLine.TheEnd == this.GetComponent<ElectricalOIinheritance> ()) {
             //	//Logger.Log ("looc");
             //} else if (RelatedLine.TheStart == this.GetComponent<ElectricalOIinheritance> ()) {
             //	//Logger.Log ("cool");
             //} else {
             //	//Logger.Log ("hELP{!!!");
             //}
         }
         else
         {
             if (!(Data.connections.Count > 2))
             {
                 RelatedLine = new CableLine();
                 if (RelatedLine == null)
                 {
                     Logger.Log("DirectionInput: RelatedLine is null.", Category.Power);
                 }
                 RelatedLine.InitialGenerator = SourceInstance;
                 RelatedLine.TheStart         = this;
                 lineExplore(RelatedLine, SourceInstance);
                 if (RelatedLine.TheEnd == null)
                 {
                     RelatedLine = null;
                 }
             }
         }
     }
 }
示例#3
0
        public static double Moment(CableLine cable)
        {
            if (cable.polys.Count == 0 || cable.loads.Count == 0)
            {
                return(0);
            }

            var treelines = new List <BranchNode>();

            foreach (var poly in cable.polys)
            {
                var treeline = new BranchNode()
                {
                    poly = poly, nodes = new SortedDictionary <double, Node>()
                };
                treelines.Add(treeline);
            }

            for (int i = 0; i < treelines.Count; i++)
            {
                for (int j = 0; j < treelines.Count; j++)
                {
                    if (treelines[i].poly != treelines[j].poly && (Distance(treelines[i].poly.GetClosestPointTo(treelines[j].poly.StartPoint, false), treelines[j].poly.StartPoint) < 10 || Distance(treelines[i].poly.GetClosestPointTo(treelines[j].poly.EndPoint, false), treelines[j].poly.EndPoint) < 10))
                    {
                        if (Distance(treelines[i].poly.GetClosestPointTo(treelines[j].poly.EndPoint, false), treelines[j].poly.EndPoint) < 10)
                        {
                            ReversePoly(treelines[j].poly);
                        }
                        treelines[i].nodes.Add(treelines[i].poly.GetDistAtPoint(treelines[i].poly.GetClosestPointTo(treelines[j].poly.StartPoint, false)), treelines[j]);
                        treelines[j].ischild = true;
                    }
                }
            }
            foreach (var treeline in treelines)
            {
                foreach (var load in cable.loads)
                {
                    if (Distance(treeline.poly.GetClosestPointTo(load.position, false), load.position) < 10)
                    {
                        treeline.nodes.Add(treeline.poly.GetDistAtPoint(treeline.poly.GetClosestPointTo(load.position, false)), new Node {
                            power = load.power
                        });
                    }
                }
                treeline.nodes.Add(0, new Node());
            }

            foreach (var treeline in treelines)
            {
                treeline.nodes.ElementAt(0).Value.distance = treeline.nodes.ElementAt(0).Key;
                for (int i = 1; i < treeline.nodes.Count; i++)
                {
                    treeline.nodes.ElementAt(i).Value.distance = treeline.nodes.ElementAt(i).Key - treeline.nodes.ElementAt(i - 1).Key;
                }
            }

            var root = (from l in treelines where l.ischild == false select l).First();

            return(EquelNode(root).moment);
        }
示例#4
0
    public void lineExplore(CableLine PassOn, GameObject SourceInstance = null)
    {
        if (Data.connections.Count <= 0)
        {
            FindPossibleConnections();
        }

        if (!(Data.connections.Count > 2))
        {
            RelatedLine = PassOn;
            if (!(this == PassOn.TheStart))
            {
                if (PassOn.TheEnd != null)
                {
                    PassOn.Covering.Add(PassOn.TheEnd);
                    PassOn.TheEnd = this;
                }
                else
                {
                    PassOn.TheEnd = this;
                }
            }

            foreach (ElectricalOIinheritance Related in Data.connections)
            {
                if (!(RelatedLine.Covering.Contains(Related) || RelatedLine.TheStart == Related))
                {
                    bool canpass = true;
                    if (SourceInstance != null)
                    {
                        int SourceInstanceID = SourceInstance.GetInstanceID();
                        if (Data.SupplyDependent[SourceInstanceID].Upstream.Contains(Related))
                        {
                            canpass = false;
                        }
                    }

                    if (canpass)
                    {
                        if (Related.GameObject().GetComponent <WireConnect>() != null)
                        {
                            Related.GameObject().GetComponent <WireConnect>().lineExplore(RelatedLine);
                        }
                    }
                }
            }
        }
    }
示例#5
0
    //public override void ElectricityOutput(float Current, GameObject SourceInstance)
    //{
    //	//Logger.Log (CurrentInWire.ToString () + " How much current", Category.Electrical);
    //	InputOutputFunctions.ElectricityOutput(Current, SourceInstance, this);
    //	Data.ActualCurrentChargeInWire = ElectricityFunctions.WorkOutActualNumbers(this);
    //	Data.CurrentInWire = Data.ActualCurrentChargeInWire.Current;
    //	Data.ActualVoltage = Data.ActualCurrentChargeInWire.Voltage;
    //	Data.EstimatedResistance = Data.ActualCurrentChargeInWire.EstimatedResistant;
    //	if (RelatedLine != null)
    //	{
    //		RelatedLine.UpdateCoveringCable(this);
    //	}
    //}

    //public void UpdateRelatedLine()
    //{
    //	if (RelatedLine != null)
    //	{
    //		RelatedLine.UpdateCoveringCable();

    //	}
    //}

    public void lineExplore(CableLine PassOn, GameObject SourceInstance = null)
    {
        if (Data.connections.Count <= 0)
        {
            FindPossibleConnections();
        }

        if (!(Data.connections.Count > 2))
        {
            RelatedLine = PassOn;
            if (!(this == PassOn.TheStart))
            {
                if (PassOn.TheEnd != null)
                {
                    PassOn.Covering.Add(PassOn.TheEnd);
                    PassOn.TheEnd = this;
                }
                else
                {
                    PassOn.TheEnd = this;
                }
            }
            for (int i = 0; i < Data.connections.Count; i++)
            {
                if (!(RelatedLine.Covering.Contains(Data.connections[i]) || RelatedLine.TheStart == Data.connections[i]))
                {
                    bool canpass = true;
                    if (SourceInstance != null)
                    {
                        int SourceInstanceID = SourceInstance.GetInstanceID();
                        if (Data.Upstream[SourceInstanceID].Contains(Data.connections[i]))
                        {
                            canpass = false;
                        }
                    }
                    if (canpass)
                    {
                        if (Data.connections[i].GameObject().GetComponent <WireConnect>() != null)
                        {
                            Data.connections[i].GameObject().GetComponent <WireConnect>().lineExplore(RelatedLine);
                        }
                    }
                }
            }
        }
    }
示例#6
0
 public override void DirectionInput(GameObject SourceInstance, IElectricityIO ComingFrom, CableLine PassOn = null)
 {
     InputOutputFunctions.DirectionInput(SourceInstance, ComingFrom, this);
     if (PassOn == null)
     {
         if (RelatedLine != null)
         {
             if (RelatedLine.TheEnd == this.GetComponent <IElectricityIO> ())
             {
                 //Logger.Log ("looc");
             }
             else if (RelatedLine.TheStart == this.GetComponent <IElectricityIO> ())
             {
                 //Logger.Log ("cool");
             }
             else
             {
                 //Logger.Log ("hELP{!!!");
             }
         }
         else
         {
             if (!(Data.connections.Count > 2))
             {
                 RelatedLine = new CableLine();
                 if (RelatedLine == null)
                 {
                     Logger.Log("HE:LP:::::::::::::::::::niniinininininin");
                 }
                 RelatedLine.InitialGenerator = SourceInstance;
                 RelatedLine.TheStart         = this;
                 lineExplore(RelatedLine, SourceInstance);
                 if (RelatedLine.TheEnd == null)
                 {
                     RelatedLine = null;
                 }
             }
         }
     }
 }
 public override void DirectionInput(GameObject SourceInstance, ElectricalOIinheritance ComingFrom, CableLine PassOn = null)
 {
 }
示例#8
0
 /// <summary>
 ///  Sets the upstream
 /// </summary>
 public virtual void DirectionInput(GameObject SourceInstance, ElectricalOIinheritance ComingFrom, CableLine PassOn = null)
 {
     if (Logall)
     {
         Logger.Log("this > " + this + "DirectionInput SourceInstance > " + SourceInstance + " ComingFrom > " + ComingFrom + "  PassOn > " + PassOn, Category.Electrical);
     }
     InputOutputFunctions.DirectionInput(SourceInstance, ComingFrom, this);
 }
 /// <summary>
 ///  Sets the upstream
 /// </summary>
 public virtual void DirectionInput(ElectricalOIinheritance SourceInstance, IntrinsicElectronicData ComingFrom, CableLine PassOn = null)
 {
     if (Present != null)
     {
         Present.DirectionInput(SourceInstance, ComingFrom);
     }
     else
     {
         InputOutputFunctions.DirectionInput(SourceInstance, ComingFrom, this);
     }
 }
 ///// <summary>
 /////  Sets the upstream
 ///// </summary>
 public virtual void DirectionInput(ElectricalOIinheritance SourceInstance, IntrinsicElectronicData ComingFrom, CableLine PassOn = null)
 {
     if (Logall)
     {
         Logger.Log("this > " + this + "DirectionInput SourceInstance > " + SourceInstance + " ComingFrom > " + ComingFrom + "  PassOn > " + PassOn, Category.Electrical);
     }
     InputOutputFunctions.DirectionInput(SourceInstance, ComingFrom, InData);
 }
示例#11
0
 public virtual void DirectionInput(GameObject SourceInstance, IElectricityIO ComingFrom, CableLine PassOn = null)
 {
     InputOutputFunctions.DirectionInput(SourceInstance, ComingFrom, this);
 }
示例#12
0
 public override void FlushConnectionAndUp()
 {
     ElectricalDataCleanup.PowerSupplies.FlushConnectionAndUp(this);
     RelatedLine = null;
     //InData.ControllingDevice.PotentialDestroyed();
 }
示例#13
0
 public override void FlushConnectionAndUp()
 {
     ElectricalDataCleanup.PowerSupplies.FlushConnectionAndUp(this);
     RelatedLine = null;
 }
    public static void DirectionOutput(GameObject SourceInstance, ElectricalOIinheritance Thiswire, CableLine RelatedLine = null)
    {
        int SourceInstanceID = SourceInstance.GetInstanceID();

        if (!(Thiswire.Data.Upstream.ContainsKey(SourceInstanceID)))
        {
            Thiswire.Data.Upstream[SourceInstanceID] = new HashSet <ElectricalOIinheritance>();
        }
        if (!(Thiswire.Data.Downstream.ContainsKey(SourceInstanceID)))
        {
            Thiswire.Data.Downstream[SourceInstanceID] = new HashSet <ElectricalOIinheritance>();
        }
        if (Thiswire.Data.connections.Count <= 0)
        {
            Thiswire.FindPossibleConnections();
        }
        for (int i = 0; i < Thiswire.Data.connections.Count; i++)
        {
            if (!(Thiswire.Data.Upstream[SourceInstanceID].Contains(Thiswire.Data.connections[i])) && (!(Thiswire == Thiswire.Data.connections[i])))
            {
                bool pass = true;
                if (RelatedLine != null)
                {
                    if (RelatedLine.Covering.Contains(Thiswire.Data.connections [i]))
                    {
                        pass = false;
                    }
                }
                if (!(Thiswire.Data.Downstream[SourceInstanceID].Contains(Thiswire.Data.connections[i])) && pass)
                {
                    Thiswire.Data.Downstream[SourceInstanceID].Add(Thiswire.Data.connections[i]);
                    Thiswire.Data.connections[i].DirectionInput(SourceInstance, Thiswire);
                }
            }
        }
    }
示例#15
0
 public void DirectionInput(GameObject SourceInstance, ElectricalOIinheritance ComingFrom, CableLine PassOn = null)
 {
     JumpToOtherEnd(SourceInstance, ComingFrom);
 }
示例#16
0
    public static void DirectionOutput(GameObject SourceInstance, ElectricalOIinheritance Thiswire, CableLine RelatedLine = null)
    {
        int SourceInstanceID = SourceInstance.GetInstanceID();

        if (Thiswire.Data.connections.Count == 0)
        {
            Thiswire.FindPossibleConnections();
        }
        if (!(Thiswire.Data.SupplyDependent.ContainsKey(SourceInstanceID)))
        {
            Thiswire.Data.SupplyDependent[SourceInstanceID] = new ElectronicSupplyData();
        }
        ElectricalSynchronisation.OutputSupplyingUsingData = Thiswire.Data.SupplyDependent[SourceInstanceID];
        foreach (ElectricalOIinheritance Related in Thiswire.Data.connections)
        {
            if (!(ElectricalSynchronisation.OutputSupplyingUsingData.Upstream.Contains(Related)) && (!(Thiswire == Related)))
            {
                bool pass = true;
                if (RelatedLine != null)
                {
                    if (RelatedLine.Covering.Contains(Related))
                    {
                        pass = false;
                    }
                }
                if (!(ElectricalSynchronisation.OutputSupplyingUsingData.Downstream.Contains(Related)) && pass)
                {
                    ElectricalSynchronisation.OutputSupplyingUsingData.Downstream.Add(Related);
                    Related.DirectionInput(SourceInstance, Thiswire);
                }
            }
        }
    }
示例#17
0
 public void DirectionInput(GameObject SourceInstance, IElectricityIO ComingFrom, CableLine PassOn = null)
 {
 }