private void osvjeziRedGradnje() { for (LinkedListNode <Zgrada.ZgradaInfo> uGradnji = RedGradnje.First; uGradnji != null;) { Zgrada.ZgradaInfo zgradaTip = uGradnji.Value; long kolicina = 0; if (Zgrade.ContainsKey(zgradaTip)) { kolicina = Zgrade[zgradaTip].kolicina; } if (!zgradaTip.dostupna(Igrac.efekti, kolicina)) { if (zgradaTip.ponavljaSe) { Igrac.poruke.AddLast(Poruka.NovaZgrada(this, zgradaTip)); } LinkedListNode <Zgrada.ZgradaInfo> slijedeci = uGradnji.Next; RedGradnje.Remove(uGradnji); uGradnji = slijedeci; } else { uGradnji = uGradnji.Next; } } }
protected override void gradi(bool simulacija) { double pocetniPoeniGradnje = poeniIndustrije(); double poeniGradnje = pocetniPoeniGradnje; LinkedListNode <Zgrada.ZgradaInfo> uGradnji = RedGradnje.First; Dictionary <string, double> ostatakGradnje; if (simulacija) { ostatakGradnje = new Dictionary <string, double>(this.ostatakGradnje); } else { ostatakGradnje = this.ostatakGradnje; } while (uGradnji != null && poeniGradnje > 0) { Zgrada.ZgradaInfo zgradaTip = uGradnji.Value; double cijena = zgradaTip.CijenaGradnje.iznos(Igrac.efekti); if (zgradaTip.orbitalna) { cijena *= Efekti[FaktorCijeneOrbitalnih]; } poeniGradnje += ostatakGradnje[zgradaTip.grupa]; long brZgrada = (long)(poeniGradnje / cijena); long dopustenaKolicina = (long)Math.Min( zgradaTip.DopustenaKolicina.iznos(Igrac.efekti), zgradaTip.DopustenaKolicinaPoKrugu.iznos(Igrac.efekti)); if (brZgrada < dopustenaKolicina) { ostatakGradnje[zgradaTip.grupa] = poeniGradnje - brZgrada * cijena; poeniGradnje = 0; } else { brZgrada = dopustenaKolicina; poeniGradnje = poeniGradnje - (brZgrada * cijena - ostatakGradnje[zgradaTip.grupa]); ostatakGradnje[zgradaTip.grupa] = 0; } if (!simulacija) { if (brZgrada > 0) { Zgrada z = new Zgrada(zgradaTip, brZgrada); if (z.tip.instantEfekt) { z.djeluj(this, Igrac.efekti); } else { if (Zgrade.ContainsKey(z.tip)) { Zgrade[z.tip].kolicina += brZgrada; } else { Zgrade.Add(z.tip, z); } } if (!z.tip.brod && !z.tip.ponavljaSe) { Igrac.poruke.AddLast(Poruka.NovaZgrada(this, z.tip)); } } long brNovih = brZgrada; if (Zgrade.ContainsKey(zgradaTip)) { brZgrada = Zgrade[zgradaTip].kolicina; } else { brZgrada = 0; } } uGradnji = uGradnji.Next; } this.UtroseniPoeniIndustrije = pocetniPoeniGradnje - poeniGradnje; this.UtrosenUdioIndustrije = UtroseniPoeniIndustrije / (Efekti[BrRadnika] * Efekti[IndPoRadnikuEfektivno]); }