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