internal RLIGHT[] GetClosestActiveLights(Vector3 Position) { BoundingSphere posSphere = new BoundingSphere(Position, 1.0f); SortedList<float,RLIGHT> lights = new SortedList<float,RLIGHT>(32); Hashtable distances = new Hashtable(32); foreach (RLIGHT light in _LightList.Values) { float Distance = Vector3.Distance(light.Position.vector, Position); if (light.Enabled) { switch (light.LightType) { case 0: lights.Add(Distance, light); break; case 1: if(lights.Count >= 32) { int i = 0; foreach(float d in lights.Keys) { if(lights[d].LightType != 0) { if(Distance < d) { lights.RemoveAt(i); break; } } i++; } } BoundingSphere sphere = new BoundingSphere(light.Position.vector, light.Radius); if (sphere.Intersects(posSphere)) { lights.Add(Distance, light); } break; case 2: lights.Add(Distance, light); break; default: break; } } } lights.TrimExcess(); List<RLIGHT> l = new List<RLIGHT>(lights.Values); return l.ToArray(); }