private void RemoveUntrusted(List <Tuple <BulletPathBlueprint, float> >[] rayClock) { List <Tuple <int, Tuple <BulletPathBlueprint, float> > > rems = new List <Tuple <int, Tuple <BulletPathBlueprint, float> > >(); for (int ideg = 0; ideg < RESOLUTION; ideg++) { var ddeg = (ideg * 1f / RESOLUTION) * 360; foreach (var ray in rayClock[ideg]) { bool fault = false; for (int ideg2 = 0; ideg2 < RESOLUTION; ideg2++) { var ddeg2 = (ideg2 * 1f / RESOLUTION) * 360; if (ideg2 == ideg || FloatMath.Abs(FloatMath.DiffModulo(ddeg, ddeg2, 360)) > TRUSTANGLE) { continue; } if (rayClock[ideg2].All(r => r.Item1.TargetCannonID != ray.Item1.TargetCannonID)) { fault = true; } } if (fault) { rems.Add(Tuple.Create(ideg, ray)); } } } foreach (var rem in rems) { rayClock[rem.Item1].Remove(rem.Item2); } }