private void CheckDetection() { /* * 3 Transitions/Cases here: * 1. No Object -> New Object * 2. Current Object -> New Object * 3. Current Object -> No Object */ InteractionData interactionData = playerContext.InteractionData; // Case 1 if (interactionData.LastInteractable == null && !interactionData.IsEmpty()) { interactionData.CurrentInteractable.OnDetectionEnter(); interactionData.LastInteractable = interactionData.CurrentInteractable; return; } // Case 2 if (interactionData.LastInteractable != null && interactionData.CurrentInteractable != null) { if (!interactionData.IsSame(interactionData.LastInteractable)) { interactionData.LastInteractable.OnDetectionExit(); interactionData.CurrentInteractable.OnDetectionEnter(); interactionData.LastInteractable = interactionData.CurrentInteractable; return; } } // Case 3 if (interactionData.LastInteractable != null && interactionData.IsEmpty()) { interactionData.LastInteractable.OnDetectionExit(); interactionData.LastInteractable = null; return; } }