public static List <GameObject> GetIntersectingObjects(OrientedBox orientedBox, bool ignoreFaceTouch) { List <GameObject> intersectingObjects = Octave3DScene.Get().OverlapBox(orientedBox); if (ignoreFaceTouch) { intersectingObjects.RemoveAll(item => orientedBox.AreAllBoxPointsOnOrInFrontOfAnyFacePlane(item.GetWorldOrientedBox())); } return(intersectingObjects); }
public bool BoxIntersectsAnyObjectBoxes(OrientedBox box, HashSet <GameObject> ignoreObjects, bool allowFaceTouch) { if (ignoreObjects == null) { ignoreObjects = new HashSet <GameObject>(); } List <SphereTreeNode <GameObject> > allOverlappedNodes = _sphereTree.OverlapBox(box); if (allOverlappedNodes.Count == 0) { return(false); } var overlappedObjects = new List <GameObject>(); foreach (SphereTreeNode <GameObject> node in allOverlappedNodes) { GameObject gameObject = node.Data; if (gameObject == null) { continue; } if (!gameObject.activeSelf) { continue; } if (ignoreObjects.Contains(gameObject)) { continue; } OrientedBox objectWorldOrientedBox = gameObject.GetWorldOrientedBox(); if (box.Intersects(objectWorldOrientedBox)) { if (!allowFaceTouch) { return(true); } else { if (!box.AreAllBoxPointsOnOrInFrontOfAnyFacePlane(objectWorldOrientedBox)) { return(true); } } } } return(false); }