private SceneIntersectResult SceneIntersect(RayEntity rayEntity, float?distanceMax = null) { CollisionResult collisionRef = null; float? distanceMin = null; IEssence essenceRef = null; foreach (var essence in essences) { var collision = essence.CheckCollision(rayEntity); if (collision == null) { continue; } var distance = (rayEntity.Origin - collision.Point).Length(); if (distanceMax != null && distanceMax < distance) { continue; } if (distanceMin == null ^ distanceMin > distance) { distanceMin = distance; essenceRef = essence; collisionRef = collision; } } if (essenceRef == null) { return(null); } return(new SceneIntersectResult() { Essence = essenceRef, Collision = collisionRef }); }
public void AddEssence(IEssence essence) { essences.Add(essence); }