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 void fazaPaljbe(Strana strana)
        {
            PopisMeta popisMeta = new PopisMeta();

            foreach (var drugaStrana in strane.Values)
            {
                if (drugaStrana != strana)
                {
                    foreach (var borac in drugaStrana.Borci)
                    {
                        if (borac.Vidljiv[strana.Igrac.id])
                        {
                            popisMeta.Dodaj(borac);
                        }
                    }
                }
            }

            foreach (Borac borac in strana.Borci)
            {
                Dizajn dizajn = borac.Dizajn;

                if (dizajn.primarnoOruzje != null && dizajn.primarnaMisija == Misija.Tip.DirektnoOruzje)
                {
                    paljba(strana, borac.Dizajn.primarnoOruzje, popisMeta, (int)Math.Round(borac.Pozicija));
                }

                if (dizajn.sekundarnoOruzje != null && dizajn.sekundarnaMisija == Misija.Tip.DirektnoOruzje)
                {
                    paljba(strana, borac.Dizajn.sekundarnoOruzje, popisMeta, (int)Math.Round(borac.Pozicija));
                }

                if (popisMeta.jePrazan())
                {
                    break;
                }
            }
        }