Ejemplo n.º 1
0
        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);
        }