Beispiel #1
0
 public virtual void prebaciGimnasticare(IList <NastupNaSpravi> nastupi, StartListaNaSpravi from,
                                         StartListaNaSpravi to)
 {
     foreach (NastupNaSpravi n in nastupi)
     {
         if (from.removeNastup(n))
         {
             // Kod prebacivanja ne proveravam da li je gimnasticar vec u nekoj start listi u istoj rotaciji zato
             // sto je prilikom dodavanja gimnasticara osigurano da gimnasticar moze da bude u samo jednoj start
             // listi u rotaciji).
             to.addNastup(new NastupNaSpravi(n.Gimnasticar, 0));
         }
     }
 }
Beispiel #2
0
        public virtual void kreirajRotaciju(int grupa, int rot, List <List <Sprava> > aktivneSprave)
        {
            foreach (Sprava s in Sprave.getSpraveIPauze(PauzeMask, Takmicenje.Gimnastika))
            {
                StartListaNaSpravi startLista = getStartLista(s, grupa, rot);
                startLista.clear();

                if (aktivneSprave[rot - 1].IndexOf(s) == -1)
                {
                    // Sprava nije aktivna u rotaciji.
                    continue;
                }

                StartListaNaSpravi startListaPrethRot = getStartListaPrethRot(startLista, aktivneSprave);
                if (startListaPrethRot.Nastupi.Count == 0)
                {
                    continue;
                }
                if (Sprave.isPraznaSprava(startListaPrethRot.Sprava))
                {
                    // Ako je prethodna sprava pauza, samo prebacujem gimnasticare na novu spravu, bez obzira koji je
                    // nacin rotacije. Rotacija je izvrsena kada sam prebacivao sa sprave na pauzu.
                    foreach (NastupNaSpravi n in startListaPrethRot.Nastupi)
                    {
                        startLista.addNastup(new NastupNaSpravi(n.Gimnasticar, n.Ekipa));
                    }
                    continue;
                }

                // Nadji nacin rotacije (u start listi na prvoj rotaciji).
                StartListaNaSpravi current = startListaPrethRot;
                while (current.Rotacija != 1)
                {
                    current = getStartListaPrethRot(current, aktivneSprave);
                }
                NacinRotacije nacinRotacije = current.NacinRotacije;

                if (nacinRotacije == NacinRotacije.RotirajSve || nacinRotacije == NacinRotacije.NeRotirajNista)
                {
                    foreach (NastupNaSpravi n in startListaPrethRot.Nastupi)
                    {
                        startLista.addNastup(new NastupNaSpravi(n.Gimnasticar, n.Ekipa));
                    }

                    if (nacinRotacije == NacinRotacije.RotirajSve)
                    {
                        NastupNaSpravi n2 = startLista.Nastupi[0];
                        startLista.removeNastup(n2);
                        startLista.addNastup(n2);
                    }
                }
                else if (nacinRotacije == NacinRotacije.RotirajEkipeRotirajGimnasticare ||
                         nacinRotacije == NacinRotacije.NeRotirajEkipeRotirajGimnasticare)
                {
                    // Najpre pronadji ekipe
                    List <List <NastupNaSpravi> > listaEkipa = new List <List <NastupNaSpravi> >();
                    int m = 0;
                    while (m < startListaPrethRot.Nastupi.Count)
                    {
                        NastupNaSpravi n       = startListaPrethRot.Nastupi[m];
                        byte           ekipaId = n.Ekipa;
                        if (ekipaId == 0)
                        {
                            List <NastupNaSpravi> pojedinac = new List <NastupNaSpravi>();
                            pojedinac.Add(new NastupNaSpravi(n.Gimnasticar, 0));
                            listaEkipa.Add(pojedinac);
                            ++m;
                            continue;
                        }

                        List <NastupNaSpravi> novaEkipa = new List <NastupNaSpravi>();
                        while (n.Ekipa == ekipaId)
                        {
                            novaEkipa.Add(new NastupNaSpravi(n.Gimnasticar, ekipaId));
                            if (++m < startListaPrethRot.Nastupi.Count)
                            {
                                n = startListaPrethRot.Nastupi[m];
                            }
                            else
                            {
                                break;
                            }
                        }
                        listaEkipa.Add(novaEkipa);
                    }

                    if (nacinRotacije == NacinRotacije.RotirajEkipeRotirajGimnasticare)
                    {
                        // Rotiraj ekipe
                        List <NastupNaSpravi> prvaEkipa = listaEkipa[0];
                        listaEkipa.RemoveAt(0);
                        listaEkipa.Add(prvaEkipa);
                    }

                    foreach (List <NastupNaSpravi> ekipa in listaEkipa)
                    {
                        // Rotiraj clanove ekipe
                        NastupNaSpravi nastup = ekipa[0];
                        ekipa.RemoveAt(0);
                        ekipa.Add(nastup);

                        foreach (NastupNaSpravi n in ekipa)
                        {
                            startLista.addNastup(new NastupNaSpravi(n.Gimnasticar, n.Ekipa));
                        }
                    }
                }
            }
        }