private static void PokupiOtpad(Vozilo vozilo, ref bool voziloIzaslo) { voziloIzaslo = false; //preskoči prazne spremnike while (!vozilo.IteratorS.Kraj && vozilo.IteratorS.Trenutni.KolicinaOtpada == 0) { vozilo.IteratorS.Sljedeci(); } if (vozilo.IteratorS.Kraj) { Program.Ispisivac.ObavljeniPosao($"C{TrenutniCiklus} Nema vise otpada za vozilo {vozilo.ID}"); vozilo.PromijeniStanje(VrstaStanja.Parkirano); //vozilo za koje vise nema otpada se vraća na prakiralište voziloIzaslo = true; return; } Spremnik spremnik = vozilo.IteratorS.Trenutni; float preostaliKapacitetVozila = vozilo.Nosivost - vozilo.KolicinaOtpada; float kolicinaUzetogOtpadaSpremnika = spremnik.KolicinaOtpada; if (kolicinaUzetogOtpadaSpremnika > preostaliKapacitetVozila) { float kolicinaOtpadaViska = kolicinaUzetogOtpadaSpremnika - preostaliKapacitetVozila; kolicinaUzetogOtpadaSpremnika = kolicinaUzetogOtpadaSpremnika - kolicinaOtpadaViska; Program.Ispisivac.ObavljeniPosao($"ODVOZ Vozilo {vozilo.ID} ({vozilo.VrstaOtpada}) je puno ({vozilo.Nosivost}kg) i mora na odvoz."); Program.Ispisivac.ObavljeniPosao($"ODVOZ Spremnik {spremnik.ID} ima jos {kolicinaOtpadaViska}kg otpada vrste {spremnik.NazivPremaOtpadu}."); Statistika.VoziloBrojOdlazakaNaDeponij[vozilo.ID]++; PrijevozPutnika prijevozPutnika = new PrijevozPutnika(vozilo, vozilo.ID); prijevozPutnika.UkrcajPutnika($"Putnik{TrenutniCiklus}"); listaPrijevozPutnika.Add(prijevozPutnika); //ako je vozilo puno promijeni stanje, posalji ga na praznjenje n ciklusa nakon kojih se vraca na kraj liste vozilo.PromijeniStanje(VrstaStanja.Praznjenje); vozilo.BrojPreostalihCiklusa = Program.Parametri.DohvatiParametarInt("brojRadnihCiklusaZaOdvoz"); voziloIzaslo = true; } vozilo.KolicinaOtpada += kolicinaUzetogOtpadaSpremnika; spremnik.KolicinaOtpada -= kolicinaUzetogOtpadaSpremnika; Statistika.VoziloBrojPreuzetihSpremnika[vozilo.ID]++; Statistika.VoziloKolicinaPreuzetogOtpada[vozilo.ID] += kolicinaUzetogOtpadaSpremnika; Program.Ispisivac.ObavljeniPosao($"C{TrenutniCiklus} Vozilo {vozilo.ID} ({vozilo.VrstaOtpada}) trenutno ima {vozilo.KolicinaOtpada}kg otpada, preostali kapacitet je {vozilo.Nosivost - vozilo.KolicinaOtpada}kg."); vozilo.IteratorS.Sljedeci(); //TODO: provjeri ako je iduci spremnik u iducoj ulici i iteriraj ulicu }
private static void OdradiCiklusPraznjenja() { List <Vozilo> vozilaZaPraznjenje = Program.VozilaUObradi.Where(v => v.TrenutnoStanje.Equals(VrstaStanja.Praznjenje)).ToList(); foreach (Vozilo vozilo in vozilaZaPraznjenje) { if (vozilo.BrojPreostalihCiklusa <= 0) { vozilo.PromijeniStanje(VrstaStanja.Skupljanje); Statistika.DeponijUkupanOtpad[vozilo.VrstaOtpada] += vozilo.KolicinaOtpada; vozilo.KolicinaOtpada = 0; Program.Ispisivac.ObavljeniPosao($"C{TrenutniCiklus} Vozilo {vozilo.ID} je zavrsilo s odvozom otpada i spremno je za skupljanje."); //TODO: stavi vozilo na kraj liste PrijevozPutnika prijevozPutnika = listaPrijevozPutnika.FirstOrDefault(p => p.VoziloID == vozilo.ID); prijevozPutnika.IskrcajPutnike(); } vozilo.BrojPreostalihCiklusa--; } }