/// <summary>
    /// Handles possible interactions when the subscribed cursor is within a target.
    /// This includes contingencies like the gazeTarget being null, subscribing to the functions that wait
    /// for a nod or dwell time and calling the DeselectHoveredObject to handle unsubscribing.
    /// </summary>
    /// <param name="gazeTarget"></param>
    private void HandleTrackedObject(EyeGazeTarget gazeTarget)
    {
        if (gazeTarget == null)
        {
            DeselectHoveredObject();
            return;
        }
        if (!gazeTarget.IsDisabled)
        {
            if (gazeTarget != _currentHoveredTarget)
            {
                if (_currentHoveredTarget != null)
                {
                    DeselectHoveredObject();
                }
                _currentHoveredTarget = gazeTarget;
                switch (CurrentConfirmationMethod)
                {
                case TestBlock.ConfirmationMethod.Dwell:
                    _currentHoveredTarget.OnDwell += WaitForDwell;
                    break;

                case TestBlock.ConfirmationMethod.HeadGesture:
                    HasNodded         += OnNod;
                    _waitingForGesture = true;
                    break;
                }
            }
            gazeTarget.OnEyeIn();
        }
    }
Example #2
0
    private EyeGazeTarget SpawnTarget(int sequenceIndex, int stepNumber, bool activeTarget)
    {
        float   angle         = TestBlockData.Sequences[sequenceIndex].Trials[stepNumber].TargetAngle;
        float   amplitude     = TestBlockData.Sequences[sequenceIndex].TargetAmplitude;
        float   size          = TestBlockData.Sequences[sequenceIndex].TargetWidth;
        Vector2 spawnPosition = GetTargetSpawnPosition(amplitude, angle);

        GameObject target = Instantiate(activeTarget ? _eyeGazeTargetPrefab : _eyeGazeInactiveTargetPrefab, Vector3.zero, Quaternion.identity);

        target.transform.SetParent(_targetCanvas.transform, false);
        if (activeTarget)
        {
            target.transform.SetAsFirstSibling();
        }

        EyeGazeTarget eyeGazeTarget = target.GetComponent <EyeGazeTarget>();

        eyeGazeTarget.SetSize(size);
        eyeGazeTarget.SetPosition(spawnPosition.x, spawnPosition.y);

        CurrentTarget = target.GetComponent <EyeGazeTarget>();

        CurrentTarget.OnFixate    += TargetFixated;
        CurrentTarget.OnActivated += TargetActivated;
        CurrentTarget.OnReleased  += TargetReleased;
        eyeGazeTarget.transform.SetAsLastSibling();
        return(eyeGazeTarget);
    }
Example #3
0
    /// <summary>
    /// If the other object has an EyeGazeTarget component,
    /// signal the subscriber to the appropriate event in VREyeTrackercontroller.cs.
    /// </summary>
    /// <param name="other"> The collider of the other object.</param>
    void OnTriggerEnter(Collider other)
    {
        EyeGazeTarget target = other.transform.parent.GetComponent <EyeGazeTarget>();

        if (target == null)
        {
            return;
        }

        if (_trackedTarget != null)
        {
            if (_trackedTarget == target)
            {
                return;
            }
            if (TargetUnhovered != null)
            {
                TargetUnhovered(_trackedTarget);
            }
        }
        _trackedTarget = target;
        if (TargetHovered != null)
        {
            TargetHovered(target);
        }
    }
Example #4
0
    /// <summary>
    /// If the other object has an EyeGazeTarget component, signal the TargetStayed event's subscriber.
    /// </summary>
    /// <param name="other"> The collider of the other object.</param>
    void OnTriggerStay(Collider other)
    {
        EyeGazeTarget target = other.transform.parent.GetComponent <EyeGazeTarget>();

        if (target != null)
        {
            if (TargetStayed != null)
            {
                TargetStayed(target);
            }
        }
    }
Example #5
0
    /// <summary>
    /// If the other object has an EyeGazeTarget component, signal the TargetUnhovered event's subscriber.
    /// </summary>
    /// <param name="other"> The collider of the other object.</param>
    void OnTriggerExit(Collider other)
    {
        EyeGazeTarget target = other.transform.parent.GetComponent <EyeGazeTarget>();

        if (target != null)
        {
            if (TargetUnhovered != null)
            {
                TargetUnhovered(target);
            }
        }
        _trackedTarget = null;
    }
    /// <summary>
    /// Handles unsubscribing when cursor leaves target.
    /// </summary>
    private void DeselectHoveredObject()
    {
        if (_currentHoveredTarget == null)
        {
            return;
        }
        switch (CurrentConfirmationMethod)
        {
        case TestBlock.ConfirmationMethod.Dwell:
            _currentHoveredTarget.OnDwell -= WaitForDwell;
            break;

        case TestBlock.ConfirmationMethod.HeadGesture:
            HasNodded -= OnNod;
            break;
        }
        _currentHoveredTarget.OnEyeOut();
        _currentHoveredTarget = null;
    }
 private void OnCursorUnhover(EyeGazeTarget target)
 {
     HandleTrackedObject(null);
 }
 private void OnCursorStay(EyeGazeTarget target)
 {
     HandleTrackedObject(target);
 }
 private void OnCursorHover(EyeGazeTarget target)
 {
     OnCursorStay(target);
 }