Beispiel #1
0
        public virtual void addNewGrupa(Gimnastika gimnastika)
        {
            Sprava[] sprave = Sprave.getSpraveIPauze(PauzeMask, gimnastika);
            if (canAddNewGrupa())
            {
                int brojRotacija = sprave.Length;
                int grupa        = getBrojGrupa() + 1;

                for (int i = 1; i <= brojRotacija; i++)
                {
                    foreach (Sprava s in sprave)
                    {
                        StartListe.Add(new StartListaNaSpravi(s, (byte)grupa, (byte)i, NacinRotacije.NeRotirajNista));
                    }
                }
            }
        }
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));
                        }
                    }
                }
            }
        }