Light * Scene::GetNearestDynamicLight(Light::eType type, Vector3 position) { switch(type) { case Light::TYPE_DIRECTIONAL: break; default: break; }; float32 squareMinDistance = 10000000.0f; Light * nearestLight = 0; Set<Light*> & lights = GetLights(); const Set<Light*>::iterator & endIt = lights.end(); for (Set<Light*>::iterator it = lights.begin(); it != endIt; ++it) { Light * node = *it; if(node->IsDynamic()) { const Vector3 & lightPosition = node->GetPosition(); float32 squareDistanceToLight = (position - lightPosition).SquareLength(); if (squareDistanceToLight < squareMinDistance) { squareMinDistance = squareDistanceToLight; nearestLight = node; } } } return nearestLight; }