//Vybere událost která je v simulaci první na řade podle atributu třídy událost --kdy
        private Udalost Prvni()
        {
            Udalost prvni = null;

            foreach (Udalost udalost in seznam)
            {
                if ((prvni == null) || (udalost.kdy < prvni.kdy))
                {
                    prvni = udalost;
                }
            }

            seznam.Remove(prvni);
            return(prvni);
        }
 public override void Zpracuj(Udalost udalost)
 {
     switch (udalost.co)
     {
     case TypUdalosti.Prichod:
         if (fronta.Count == 0)
         {
             obsluhuje = false;
         }
         else
         {
             Cestujici cestujici = fronta[0];
             fronta.RemoveAt(0);
             model.Odplanuj(cestujici, TypUdalosti.Cas);
             model.Naplanuj(model.CasSimulace + rychlostObsluhy, cestujici, TypUdalosti.Odbaven);
             model.Naplanuj(model.CasSimulace + rychlostObsluhy, this, TypUdalosti.Prichod);
         }
         break;
     }
 }
        public override void Zpracuj(Udalost udalost)
        {
            switch (udalost.co)
            {
            case TypUdalosti.Prichod:
                if ((Zastavky.Count == 0) && stihlLetadlo)
                {
                    dlouhyVypis.Add(VypisDlouhy("---------- Čeká na nalodění"));
                    kratkyVypis.Add(Vypis("---------- Čeká na nalodění"));
                    uspesni++;
                }
                else
                {
                    Zastavky zastavky = ZastavkaKamChci(Zastavky[0]);
                    if ((Zastavky.Count > 1) && stihlLetadlo)
                    {
                        model.Naplanuj(model.CasSimulace + casDoOdletu, this, TypUdalosti.Cas);
                    }

                    zastavky.ZaradDoFronty(this);
                }
                break;

            case TypUdalosti.Odbaven:
                dlouhyVypis.Add(VypisDlouhy("Vyřízeno: " + Zastavky[0]));
                Zastavky.RemoveAt(0);     // bude se řešit další zastávka -> typ udalosti START
                model.Naplanuj(model.CasSimulace, this, TypUdalosti.Prichod);
                break;

            case TypUdalosti.Cas:
            {
                Zastavky zas = ZastavkaKamChci(Zastavky[0]);
                zas.VyradZFronty(this);
            }
                //Stihnu letadlo?
                if ((NastaveniCasu.casOdletu1.Hour < model.CasSimulace1.Hour) && (Zastavky.Count > 0))
                {
                    while (Zastavky.Count > 0)
                    {
                        Zastavky.RemoveAt(0);
                    }
                    this.stihlLetadlo = false;
                    dlouhyVypis.Add(VypisDlouhy("----------- NESTIHL SVÉ LETADLO"));
                    kratkyVypis.Add(Vypis("----------- NESTIHL SVÉ LETADLO"));
                    break;
                }
                //Přehození pořadí zastávek, aby např. nalodění neproběhlo před bzp.kontrolou
                string nesplneny = Zastavky[0];
                Zastavky.RemoveAt(0);
                Zastavky.Add(nesplneny);

                if ((Zastavky[0] == "Pasová kontrola"))
                {
                    nesplneny = Zastavky[0];
                    Zastavky.RemoveAt(0);
                    Zastavky.Add(nesplneny);
                }

                if ((Zastavky[0] == "Nalodění"))
                {
                    nesplneny = Zastavky[0];
                    Zastavky.RemoveAt(0);
                    Zastavky.Add(nesplneny);
                }

                model.Naplanuj(model.CasSimulace, this, TypUdalosti.Prichod);
                break;
            }
        }
 public abstract void Zpracuj(Udalost udalost);