public List <GameObject> GetOverlappedObjects(List <GameObject> gameObjects, Camera camera, ObjectBounds.QueryConfig boundsQConfig, MultiSelectOverlapMode overlapMode) { if (gameObjects.Count == 0 || !IsBigEnoughForOverlap()) { return(new List <GameObject>()); } List <GameObject> overlappedObjects = new List <GameObject>(gameObjects.Count); if (overlapMode == MultiSelectOverlapMode.Partial) { foreach (GameObject gameObject in gameObjects) { Rect objectScreenRect = ObjectBounds.CalcScreenRect(gameObject, camera, boundsQConfig); if (_enclosingRect.Overlaps(objectScreenRect, true)) { overlappedObjects.Add(gameObject); } } } else { foreach (GameObject gameObject in gameObjects) { Rect objectScreenRect = ObjectBounds.CalcScreenRect(gameObject, camera, boundsQConfig); if (_enclosingRect.ContainsAllPoints(objectScreenRect.GetCornerPoints())) { overlappedObjects.Add(gameObject); } } } return(overlappedObjects); }
public bool OverlapsObject(GameObject gameObject, Camera camera, ObjectBounds.QueryConfig boundsQConfig, MultiSelectOverlapMode overlapMode) { if (!IsBigEnoughForOverlap()) { return(false); } if (overlapMode == MultiSelectOverlapMode.Partial) { Rect objectScreenRect = ObjectBounds.CalcScreenRect(gameObject, camera, boundsQConfig); return(_enclosingRect.Overlaps(objectScreenRect, true)); } else { Rect objectScreenRect = ObjectBounds.CalcScreenRect(gameObject, camera, boundsQConfig); return(_enclosingRect.ContainsAllPoints(objectScreenRect.GetCornerPoints())); } }
private void GatherDestinationObjects() { Camera focusCamera = RTFocusCamera.Get.TargetCamera; _destinationObjects.Clear(); IInputDevice inputDevice = RTInputDevice.Get.Device; if (!inputDevice.HasPointer()) { return; } Vector2 inputDevicePos = inputDevice.GetPositionYAxisUp(); var boundsQConfig = new ObjectBounds.QueryConfig(); boundsQConfig.ObjectTypes = GameObjectTypeHelper.AllCombined; boundsQConfig.NoVolumeSize = Vector3Ex.FromValue(1e-5f); List <GameObject> visibleObjects = RTFocusCamera.Get.GetVisibleObjects(); List <GameObject> targetObjects = new List <GameObject>(_targetObjects); visibleObjects.RemoveAll(a => targetObjects.Contains(a) || !ObjectBounds.CalcScreenRect(a, focusCamera, boundsQConfig).Contains(inputDevicePos) || targetObjects.FindAll(b => a.transform.IsChildOf(b.transform)).Count != 0); foreach (var visibleObject in visibleObjects) { if (!CanUseObjectAsSnapDestination(visibleObject)) { continue; } GameObjectType objectType = visibleObject.GetGameObjectType(); if (objectType == GameObjectType.Mesh || objectType == GameObjectType.Sprite) { _destinationObjects.Add(visibleObject); } } }