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; } } } }
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); }