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; } } }
public string ProcjenaVremenaGradnje() { if (RedGradnje.First != null) { Zgrada.ZgradaInfo zgrada = RedGradnje.First.Value; return(Zgrada.ProcjenaVremenaGradnje( UtroseniPoeniIndustrije, ostatakGradnje[zgrada.grupa], zgrada, Igrac)); } else { return(""); } }
public string ProcjenaVremenaGradnje() { if (RedGradnje.First != null) { Zgrada.ZgradaInfo zgrada = RedGradnje.First.Value; double faktorCijene = (zgrada.orbitalna) ? 1 / Efekti[FaktorCijeneOrbitalnih] : 1; return(Zgrada.ProcjenaVremenaGradnje( poeniIndustrije() * faktorCijene, ostatakGradnje[zgrada.grupa], zgrada, Igrac)); } else { return(""); } }
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]); }
public static string ProcjenaVremenaGradnje(double poeniIndustrije, double ostatakGradnje, Zgrada.ZgradaInfo uGradnji, Igrac igrac) { if (uGradnji == null) { return(""); } double cijena = uGradnji.CijenaGradnje.iznos(igrac.efekti); double brZgrada = (ostatakGradnje + poeniIndustrije) / cijena; Dictionary <string, ITekst> jezik = Postavke.Jezik[Kontekst.Kolonija]; Dictionary <string, double> vars = new Dictionary <string, double>(); if (brZgrada >= 1) { long dopustenaKolicina = (long)Math.Min( uGradnji.DopustenaKolicina.iznos(igrac.efekti), uGradnji.DopustenaKolicinaPoKrugu.iznos(igrac.efekti)); brZgrada = Fje.Ogranici(brZgrada, 0, dopustenaKolicina); vars.Add("BR_ZGRADA", brZgrada); return(jezik["gradPoKrugu"].tekst(vars)); } else { if (poeniIndustrije == 0) { return(jezik["gradNikad"].tekst()); } double brKrugova = (cijena - ostatakGradnje) / (double)poeniIndustrije; double zaokruzeno = Math.Ceiling(brKrugova * 10) / 10; long tmp = (long)Math.Ceiling(brKrugova * 10); vars.Add("BR_KRUGOVA", Math.Ceiling(brKrugova * 10) / 10); vars.Add("DECIMALA", ((long)Math.Ceiling(brKrugova * 10)) % 10); if (brKrugova < 10) { return(jezik["gradVrijemeDec"].tekst(vars)); } else { return(jezik["gradVrijemePref"].tekst(vars)); } } }