/// <summary>
        /// Make sure the query target is set up before highlighting it.
        /// </summary>
        private void HighlightTarget()
        {
            if (CurrentTarget == null)
            {
                ProceedToNextTarget();
            }

            CurrentTarget.SetActive(true);
            HighlightTarget(highlightColor);
        }
        /// <summary>
        /// Proceed to the next target. If the end is reached, fire an event that the target group has been fully
        /// iterated and restart the scene.
        /// </summary>
        private void ProceedToNextTarget()
        {
            Debug.Log("[TargetGroupIterator] >> Next target: " + currTargetIndex + " / " + nrOfTargetsToSelect);

            ResetAmountOfTries();
            Fire_OnTargetSelected();

            if (currTargetIndex < nrOfTargetsToSelect - 1)
            {
                // 1. Let's reset the highlight for the last target.
                HideHighlights();

                // 2. If "DisableDistractors" is true then let's hide the selected target
                if (DeactiveDistractors)
                {
                    CurrentTarget.SetActive(false);
                }

                // 3. Let's update to highlight the new target.
                currTargetIndex++;
                ShowHighlights();
            }
            else // At the end
            {
                // Fire an event to inform listeners that all targets have been iterated through.
                Fire_OnAllTargetsSelected();

                // Play some audio feedback (e.g., a cheerful applause).
                AudioFeedbackPlayer.Instance.PlaySound(AudioApplauseOnFinish);

                // If a scene is given, reload the scene after a short timeout.
                if (SceneToLoadOnFinish != "")
                {
                    StartCoroutine(EyeTrackingDemoUtils.LoadNewScene(SceneToLoadOnFinish, 0.1f));
                }
            }
        }
예제 #3
0
    /// <summary>
    /// Finds the reticle closest to the center of the screen
    /// </summary>
    /// <returns>The reticle whose average anchors are closest to (0.5, 0.5)</returns>
    public void GetClosestTarget()
    {
        Target result          = CurrentTarget;
        float  closestDistance = float.MaxValue;

        foreach (Target t in Targets)
        {
            float distance = Vector3.Angle(transform.forward, t.transform.position - transform.position);
            if (t != CurrentTarget && distance < closestDistance)
            {
                result          = t;
                closestDistance = distance;
            }
        }
        if (CurrentTarget != null && CurrentTarget != result)
        {
            CurrentTarget.SetActive(false);
        }
        if (result != null && result != CurrentTarget)
        {
            result.SetActive(true);
        }
        CurrentTarget = result;
    }