private void ObsluzKolizje(bool kolidujacaJestDluzsza, IRzeka kolizyjnaRzeka, IPunkt punktKolizji) { if (kolidujacaJestDluzsza) { PogrubRzekeOdPunktu(kolizyjnaRzeka, punktKolizji, _aktualnaGrubosc); } else { float gruboscDoDodania = kolizyjnaRzeka.Odcinki.First(o => o.PunktA == punktKolizji).Grubosc; _aktualnaGrubosc += gruboscDoDodania; IList<IOdcinekRzeki> wycinek = WytnijCzescRzekiOdPunktu(kolizyjnaRzeka, punktKolizji); _odcinki = _odcinki.Concat(wycinek).ToList(); } }
private void PogrubRzekeOdPunktu(IRzeka rzeka, IPunkt punkt, float aktualnaGrubosc) { int indeksPunktu = rzeka.DlugoscDoPunktu(punkt); foreach (var odcinekRzeki in rzeka.Odcinki.Skip(indeksPunktu)) { odcinekRzeki.Grubosc += aktualnaGrubosc; } }
private IList<IOdcinekRzeki> WytnijCzescRzekiOdPunktu(IRzeka rzeka, IPunkt punkt) { int indeks = rzeka.DlugoscDoPunktu(punkt); var wycinek = rzeka.Odcinki.Skip(indeks).ToList(); rzeka.Odcinki = rzeka.Odcinki.Take(indeks).ToList(); return wycinek; }