private List <BoidData> RelevantBoidData(BoidData self, BoidSettings settings, List <BoidData> boidDatum) { // Get those inside range var relevants = boidDatum.FindAll(x => { float d = Vector3.Distance(x.position, self.position); // d can't be negative // if x not at self.position and weight at this distance is not null return(d > 0 && settings.GetWeight(d) != 0); }); if (settings.m_myBackCulling || settings.m_itsBackCulling) { // Back Culling relevants = relevants.FindAll(x => { Vector3 selfToX = x.position - self.position; return((!settings.m_myBackCulling || Vector3.Dot(self.forward, selfToX) > 0) && // cull if x is in self's back (!settings.m_itsBackCulling || Vector3.Dot(x.forward, -selfToX) > 0)); // cull if self is in x's back }); } return(relevants); }