Esempio n. 1
0
        private void paljba(Strana strana, Dizajn.Zbir <Oruzje> zbir, PopisMeta popisMeta, int pozicijaNapadaca)
        {
            Borac  meta = null;
            double vjerotanostPogotka = 1;

            Pozicije.EfektUdaljenosti efektUdaljenosti = null;
            Oruzje oruzje = zbir.komponenta;

            for (int i = 0; i < zbir.kolicina; i++)
            {
                if (meta == null)
                {
                    if (!popisMeta.jePrazan())
                    {
                        meta             = popisMeta.DajSlijedeci(zbir.komponenta.ciljanje, random.NextDouble());
                        efektUdaljenosti = Pozicije.EfektUdaljenosti.Izracunaj(Math.Abs(pozicijaNapadaca - Math.Round(meta.Pozicija)));

                        double ometanje = Math.Max(meta.Dizajn.ometanje - strana.SnagaSenzora((int)Math.Round(-meta.Pozicija)), 0);
                        vjerotanostPogotka = Vjerojatnost(oruzje.preciznost + efektUdaljenosti.Preciznost, meta.Dizajn.pokretljivost) * Math.Pow(sigmoidBase, ometanje);
                    }
                    else
                    {
                        break;
                    }
                }

                if (vjerotanostPogotka > random.NextDouble())
                {
                    Dizajn dizajnMete = meta.Dizajn;
                    double vatrenaMoc = oruzje.vatrenaMoc;

                    if (meta.IzdrzljivostStita > 0)
                    {
                        double ulaznaSteta      = Upijanje(vatrenaMoc, dizajnMete.debljinaStita);
                        double ublazavanjeStete = Math.Max(0, dizajnMete.ublazavanjeSteteStita * Math.Sqrt(meta.IzdrzljivostStita / dizajnMete.izdrzljivostStita) - oruzje.penetracijaStita);

                        double steta = Math.Min(meta.IzdrzljivostStita, Upijanje(ulaznaSteta, ublazavanjeStete));
                        meta.IzdrzljivostStita -= steta;
                        vatrenaMoc             -= steta;
                    }

                    meta.IzdrzljivostOklopa -= Upijanje(vatrenaMoc, dizajnMete.ublazavanjeSteteOklopa);

                    if (meta.IzdrzljivostOklopa <= 0)
                    {
                        popisMeta.Ukloni(meta);
                        meta = null;
                    }
                }
            }
        }
Esempio n. 2
0
        private static List <string> opisOruzja(bool primarno, Dizajn.Zbir <Oruzje> oruzje, bool cijene)
        {
            List <string> opis = new List <string>();

            Dictionary <string, ITekst> jezik = Postavke.Jezik[Kontekst.FormFlote];

            if (primarno)
            {
                opis.Add(jezik["opisPrimMis"].tekst() + ": ");
            }
            else
            {
                opis.Add(jezik["opisSekMis"].tekst() + ": ");
            }

            if (oruzje == null)
            {
                opis.Add("");
                if (primarno)
                {
                    opis.Add(jezik["opisNemaPrimMis"].tekst());
                }
                else
                {
                    opis.Add(jezik["opisNemaSekMis"].tekst());
                }

                return(opis);
            }

            Misija.Tip misijaTip = oruzje.komponenta.misija;
            Misija     misija    = Misija.Opisnici[misijaTip];

            opis.Add(misija.naziv);
            opis.Add((misija.grupirana) ?
                     oruzje.komponenta.naziv :
                     Fje.PrefiksFormater(oruzje.kolicina) + " x " + oruzje.komponenta.naziv);
            opis.Add("");
            if (oruzje.komponenta.maxNivo > 0)
            {
                opis.Add(jezik["opisNivo"].tekst() + ": " + oruzje.komponenta.nivo);
            }
            if (misija.imaCiljanje)
            {
                opis.Add(jezik["opisCiljanje"].tekst() + ": " + Postavke.Jezik[Kontekst.Misije, Oruzje.OruzjeInfo.CiljanjeKod[oruzje.komponenta.ciljanje]].tekst());
            }

            for (int i = 0; i < misija.brParametara; i++)
            {
                double vrijednost = oruzje.komponenta.parametri[i];
                if (misija.parametri[i].mnoziKolicinom)
                {
                    vrijednost *= oruzje.kolicina;
                }
                switch (misija.parametri[i].tip)
                {
                case Misija.TipParameta.Cijelobrojni:
                    opis.Add(misija.parametri[i].opis + ": " + Fje.PrefiksFormater(vrijednost));
                    break;

                case Misija.TipParameta.Postotak:
                    opis.Add(misija.parametri[i].opis + ": " + vrijednost.ToString("0.##"));
                    break;
                }
            }

            if (cijene)
            {
                opis.Add("");
                opis.Add(jezik["opisSnaga"].tekst() + ": " + Fje.PrefiksFormater(oruzje.komponenta.snaga));
                opis.Add(jezik["opisCijena"].tekst() + ": " + Fje.PrefiksFormater(oruzje.komponenta.cijena * oruzje.kolicina));
            }

            return(opis);
        }