Esempio n. 1
0
        public void Simulate(double timeModeling)
        {
            int prev = -1;

            while (TCurrent < timeModeling)
            {
                TNext = Double.MaxValue;
                foreach (var e in ElementsList)
                {
                    if (e.TNext < TNext)
                    {
                        TNext = e.TNext;
                        Event = ElementsList.IndexOf(e);
                    }
                }
                ManageChannels();
                if (!(prev == 0 && Event == 0))
                {
                    Console.WriteLine($"It's time for event in {ElementsList[Event].Name} , time = {ElementsList[Event].TNext}");
                }
                foreach (var e in ElementsList)
                {
                    if (e.GetType() == typeof(Doctor))
                    {
                        Doctor d = (Doctor)e;
                        if (d.States.Count > 0)
                        {
                            d.DoStatistics(TNext - TCurrent, d.States[0]);
                        }
                        else
                        {
                            d.DoStatistics(TNext - TCurrent, 0);
                        }
                    }
                    else
                    {
                        e.CountStatistics(TNext - TCurrent);
                    }
                }
                TCurrent = TNext;
                foreach (var e in ElementsList)
                {
                    e.TCurrent = TCurrent;
                }
                //Get(Event).OutAct();
                ElementsList[Event].OutAct();
                foreach (var e in ElementsList)
                {
                    if (e.TNext == TCurrent)
                    {
                        e.OutAct();
                    }
                }
                //PrintInfo();
            }
            PrintResult();
        }