示例#1
0
        internal void CheckMerger(Point p, string name, Component e, Pipe plf)
        {
            foreach (Merger merg in Mergers)
            {
                if (merg.Position == e.Position)
                {
                    merger = merg;
                }
            }

            if ((tempPoint.X + 63 >= e.Position.X && (tempPoint.Y + 63 >= e.Position.Y) && ((tempPoint.X - 63 <= e.Position.X) && (tempPoint.Y - 63 <= e.Position.Y)) && (e is Merger)))
            {
                merger.listPipelineOutputMerger.Add(plf);
            }
            if ((p.X + 63 >= e.Position.X && (p.Y + 63 >= e.Position.Y) && ((p.X - 63 <= e.Position.X) && (p.Y - 63 <= e.Position.Y)) && (e is Merger)))
            {
                merger.listPipelineInputMerger.Add(plf);

                foreach (Pipe pl in Pipes)
                {
                    foreach (Pipe pl2 in merger.listPipelineInputMerger)
                    {
                        if (pl.SecondPoint == pl2.SecondPoint)
                        {
                            pl.Flow       = pl2.Flow;
                            pl.FirstPoint = pl2.FirstPoint;
                        }
                    }
                }
            }


            if (merger.listPipelineInputMerger.Count > 2)
            {
                MessageBox.Show("It is not possible to have more than 2 input pumps.");

                Pipe pl = CheckPipeline(p);

                Pipes.Remove(merger.listPipelineInputMerger[2]);
                merger.listPipelineInputMerger.Remove(merger.listPipelineInputMerger[2]);
            }



            if (merger.listPipelineInputMerger.Count == 1)
            {
                merger.listPipelineInputMerger[0].Flow = plf.Flow;

                foreach (Pipe pl in merger.listPipelineInputMerger)
                {
                    if ((pl.SecondPoint.X) + 63 >= e.Position.X && ((pl.SecondPoint.Y) + 63 >= e.Position.Y && (pl.SecondPoint.X) - 63 <= e.Position.X) && ((pl.SecondPoint.X) + 63 >= e.Position.X) && (e is Merger))
                    {
                        pl.SecondPoint = new Point(e.Position.X + 18, e.Position.Y + 18);
                    }
                }
                foreach (Pipe pl in Pipes)
                {
                    if ((pl.SecondPoint.X) + 63 >= e.Position.X && ((pl.SecondPoint.Y) + 63 >= e.Position.Y && (pl.SecondPoint.X) - 63 <= e.Position.X) && ((pl.SecondPoint.X) + 63 >= e.Position.X) && (e is Merger))
                    {
                        pl.SecondPoint = new Point(e.Position.X + 18, e.Position.Y + 18);
                    }
                }
            }
            else if (merger.listPipelineInputMerger.Count == 2 && merger.listPipelineOutputMerger.Count == 1)
            {
                double final = 0;
                foreach (Pipe pl in merger.listPipelineInputMerger)
                {
                    final += pl.Flow;
                }
                merger.listPipelineOutputMerger[0].Flow = final;
            }
        }