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