public void Prowadź(Punkt Koniec, Punkt Wywołujocy, Kolejność kor = Kolejność.Bez) { Punkt[] pk = new Punkt[MaxksymalnaDługośćDrogi]; if (Aktywny) { Prowadź(0, Koniec, ref pk, 0, kor, Wywołujocy == Koniec); } }
internal void Prowadź(float Odległość, Punkt Koniec, ref Punkt[] tabW, int l, Kolejność kolejnosc = Kolejność.Bez, bool ZaczyniaeZKońca = false) { Punkt p = PoczotekKrawdzi, k = KoniecKrawdzi; if (ZaczyniaeZKońca) { p = KoniecKrawdzi; k = PoczotekKrawdzi; } float dystans = Odległość + DługośćKrawedzi; if (k.NajkrutszaOdległośćDoKońca < dystans || Koniec.NajkrutszaOdległośćDoKońca < dystans) { return; } k.NajkrutszaOdległośćDoKońca = dystans; if (kolejnosc != Kolejność.Bez) { if (kolejnosc == Kolejność.OdRosnocych) { if (p.Kolejność < k.Kolejność) { return; } } else { if (p.Kolejność > k.Kolejność) { return; } } } if (tabW.Length <= l) { return; } tabW[l++] = k; if (k == Koniec) { if (Koniec.KoniecEvent != null) { Punkt[] kar = (Punkt[])tabW.Clone(); Array.Resize(ref kar, l); Koniec.KoniecEvent(dystans, kar); } return; } foreach (Krawedz item in k.ListaKrawedzi) { if (item.Aktywny) { item.Prowadź(dystans, Koniec, ref tabW, l, kolejnosc, item.KoniecKrawdzi == k); } } }