Esempio n. 1
0
        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;
                }
            }
        }
Esempio n. 2
0
 public string ProcjenaVremenaGradnje()
 {
     if (RedGradnje.First != null)
     {
         Zgrada.ZgradaInfo zgrada = RedGradnje.First.Value;
         return(Zgrada.ProcjenaVremenaGradnje(
                    UtroseniPoeniIndustrije,
                    ostatakGradnje[zgrada.grupa],
                    zgrada, Igrac));
     }
     else
     {
         return("");
     }
 }
Esempio n. 3
0
        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("");
            }
        }
Esempio n. 4
0
        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]);
        }
Esempio n. 5
0
        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));
                }
            }
        }