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 List <string> opis(InfoStranice stranica, Dizajn dizajn, bool cijene)
        {
            List <string> opis = new List <string>();
            Dictionary <string, ITekst> jezik = Postavke.Jezik[Kontekst.FormFlote];

            switch (stranica)
            {
            case InfoStranice.MZPogon:
                opis.Add(jezik["opisMZPogon"].tekst());
                opis.Add("");
                if (dizajn.MZPogon == null)
                {
                    opis.Add(jezik["opisNemaMZPogon"].tekst());
                }
                else
                {
                    opis.Add(dizajn.MZPogon.info.naziv);
                    if (dizajn.MZPogon.maxNivo > 0)
                    {
                        opis.Add(jezik["opisNivo"].tekst() + ": " + dizajn.MZPogon.nivo);
                    }
                    opis.Add(jezik["opisMZPogonBrz"].tekst() + ": " + dizajn.MZbrzina.ToString("0.###"));
                    if (cijene)
                    {
                        opis.Add(jezik["opisSnaga"].tekst() + ": " + Fje.PrefiksFormater(dizajn.MZPogon.snaga));
                        opis.Add(jezik["opisCijena"].tekst() + ": " + Fje.PrefiksFormater(dizajn.MZPogon.cijena));
                    }
                }
                break;

            case InfoStranice.Pokretljivost:
                opis.Add(jezik["opisPokret"].tekst());
                opis.Add("");
                opis.Add(dizajn.potisnici.naziv);
                if (dizajn.potisnici.maxNivo > 0)
                {
                    opis.Add(jezik["opisNivo"].tekst() + ": " + dizajn.reaktor.nivo);
                }
                opis.Add(jezik["opisTromost"].tekst() + ": " + dizajn.inercija);
                opis.Add(jezik["opisPokret"].tekst() + ": " + Fje.PrefiksFormater(dizajn.pokretljivost));
                break;

            case InfoStranice.PrimarnaMisija:
                opis = opisOruzja(true, dizajn.primarnoOruzje, cijene);
                break;

            case InfoStranice.Reaktor:
                opis.Add(jezik["opisReaktor"].tekst());
                opis.Add("");
                opis.Add(dizajn.reaktor.naziv);
                if (dizajn.reaktor.maxNivo > 0)
                {
                    opis.Add(jezik["opisNivo"].tekst() + ": " + dizajn.reaktor.nivo);
                }
                opis.Add(jezik["opisReaktorOp"].tekst() + ": " + Fje.PrefiksFormater(dizajn.opterecenjeReaktora));
                opis.Add(jezik["opisReaktorDost"].tekst() + ": " + Fje.PrefiksFormater(dizajn.snagaReaktora) + " (" + (dizajn.koefSnageReaktora * 100).ToString("0") + "%)");
                break;

            case InfoStranice.SekundarnaMisija:
                opis = opisOruzja(false, dizajn.sekundarnoOruzje, cijene);
                break;

            case InfoStranice.Senzori:
                opis.Add(jezik["opisSenzor"].tekst());
                opis.Add("");
                //opis.Add(Fje.PrefiksFormater(dizajn.brSenzora) + " x " + dizajn.senzor.naziv);
                if (dizajn.senzor.maxNivo > 0)
                {
                    opis.Add(jezik["opisNivo"].tekst() + ": " + dizajn.senzor.nivo);
                }
                opis.Add(jezik["opisSenzorSn"].tekst() + ": " + Fje.PrefiksFormater(dizajn.snagaSenzora));
                //opis.Add(jezik["opisSenzorOm"].tekst() + ": " + Fje.PrefiksFormater(dizajn.ometanje));
                //opis.Add(jezik["opisSenzorPrik"].tekst() + ": " + Fje.PrefiksFormater(dizajn.prikrivenost));
                break;

            case InfoStranice.SpecijalnaOprema:
                opis.Add(jezik["opisSpecOp"].tekst());
                opis.Add("");
                if (specijalnaOpremaZaOpis != null)
                {
                    if (dizajn.specijalnaOprema.ContainsKey(specijalnaOpremaZaOpis))
                    {
                        opis.Add(dizajn.specijalnaOprema[specijalnaOpremaZaOpis] + " x " + specijalnaOpremaZaOpis.naziv);
                    }
                    else
                    {
                        opis.Add(specijalnaOpremaZaOpis.naziv);
                    }
                    if (specijalnaOpremaZaOpis.maxNivo > 0)
                    {
                        opis.Add(jezik["opisNivo"].tekst() + ": " + specijalnaOpremaZaOpis.nivo);
                    }
                    opis.AddRange(specijalnaOpremaZaOpis.opisEfekata);
                    if (cijene)
                    {
                        opis.Add("");
                        opis.Add(jezik["opisVelicina"].tekst() + ": " + Fje.PrefiksFormater(specijalnaOpremaZaOpis.velicina));
                        opis.Add(jezik["opisCijena"].tekst() + ": " + Fje.PrefiksFormater(specijalnaOpremaZaOpis.cijena));
                    }
                }

                break;

            case InfoStranice.Stit:
                opis.Add(jezik["opisStit"].tekst());
                opis.Add("");
                if (dizajn.stit == null)
                {
                    opis.Add(jezik["opisNemaStit"].tekst());
                }
                else
                {
                    opis.Add(dizajn.stit.naziv);
                    if (dizajn.stit.maxNivo > 0)
                    {
                        opis.Add(jezik["opisNivo"].tekst() + ": " + dizajn.stit.nivo);
                    }
                    opis.Add(jezik["opisStitIzd"].tekst() + ": " + Fje.PrefiksFormater(dizajn.stit.izdrzljivost));
                    opis.Add(jezik["opisStitObn"].tekst() + ": " + Fje.PrefiksFormater(dizajn.stit.obnavljanje));
                    opis.Add(jezik["opisStitDeb"].tekst() + ": " + Fje.PrefiksFormater(dizajn.stit.debljina));
                    opis.Add(jezik["opisStitOm"].tekst() + ": " + dizajn.stit.ometanje.ToString("+0;-0"));
                    opis.Add(jezik["opisStitPrik"].tekst() + ": +" + Fje.PrefiksFormater(dizajn.stit.prikrivanje));
                    if (cijene)
                    {
                        opis.Add("");
                        opis.Add(jezik["opisSnaga"].tekst() + ": " + Fje.PrefiksFormater(dizajn.stit.snaga));
                        opis.Add(jezik["opisCijena"].tekst() + ": " + Fje.PrefiksFormater(dizajn.stit.cijena));
                    }
                }
                break;

            case InfoStranice.Taktika:
                Pozicije.EfektUdaljenosti efektUdaljenosti = Pozicije.EfektUdaljenosti.Izracunaj(dizajn.pozeljnaPozicija + Pozicije.UobicajenaPozicija);
                opis.Add(jezik["opisTaktika"].tekst());
                opis.Add("");
                opis.Add(Pozicije.Naziv(dizajn.pozeljnaPozicija));
                opis.Add(jezik["opisTaktikaPrec"].tekst() + ": x" + efektUdaljenosti.Preciznost);
                opis.Add(jezik["opisSenzorSn"].tekst() + ": x" + efektUdaljenosti.SnagaSenzora);
                break;
            }

            return(opis);
        }