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(); }