Beispiel #1
0
    // Update is called once per frame
    void Update()
    {
        if (Enabled)
        {
            RaycastHit[] hits = Physics.RaycastAll(transform.position, transform.forward);

            foreach (var hit in hits)
            {
                GazeReceiver receiver = hit.collider.gameObject.GetComponent <GazeReceiver>();
                if (parentRecursive)
                {
                    receiver = hit.collider.gameObject.GetComponentInParent <GazeReceiver>();
                }
                else
                {
                    receiver = hit.collider.gameObject.GetComponent <GazeReceiver>();
                }
                if (receiver)
                {
                    if (receiver.receive)
                    {
                        receiver.OnGazeFrame();
                    }
                }
            }
        }

        //crossHair.Enabled = Enabled;
    }
Beispiel #2
0
    void Update()
    {
        // Clear previous list
        foreach (RaycastHit hit in this._RaycastHitList)
        {
            GazeReceiver gazeReceiver = hit.collider.GetComponent <GazeReceiver>();
            if (gazeReceiver != null)
            {
                gazeReceiver.IsBeingGazed = false;
            }
        }
        this._RaycastHitList.Clear();

        // Get new list
        this._RaycastHitList = (Physics.RaycastAll(this._MainCamera.transform.position, this._MainCamera.transform.forward, 10f, this._DetectLayerMask)).ToList();

        foreach (RaycastHit hit in this._RaycastHitList)
        {
            GazeReceiver currentGR = hit.collider.gameObject.GetComponent <GazeReceiver>();
            if (currentGR != null)
            {
                currentGR.IsBeingGazed = true;
            }
        }
    }
Beispiel #3
0
    // Use this for initialization
    private void Start()
    {
        GazeReceiver gr = GetComponent <GazeReceiver>();

        gr.GazeEnterEvent.AddListener(ChangeCursorOn);
        gr.GazeLeaveEvent.AddListener(ChangeCursorAway);
        gr.TappedEvent.AddListener(Tapped);
    }
    IEnumerator Gazing()
    {
        Debug.Log("starting gazing");
        GazeReceiver focused = null;

        while (gazing)
        {
            //get gaze ray
            //Debug.Log("gazing");
            cameraLocation  = cameraReference.transform.position;
            cameraDirection = cameraReference.transform.forward;
            Ray gazeRay = new Ray(cameraLocation, cameraDirection);

            GazeReceiver newFocused = GetFocusedReceiver(gazeRay);

            if (focused != newFocused)
            {
                if (focused != null)
                {
                    focused.GazeLeave(gazeRay);
                }
                if (newFocused != null)
                {
                    newFocused.GazeEnter(gazeRay);
                }
                focused = newFocused;
            }
            else if (focused != null)
            {
                focused.Gaze(gazeRay);
            }
            if (tapped)
            {
                tapped = false;
                if (focused != null)
                {
                    try
                    {
                        focused.Tapped(gazeRay);
                    }
                    catch (System.Exception e)
                    {
                        Debug.LogWarning(e);
                    }
                }
            }

            yield return(null);
        }
        //Debug.Log("gazing ending");
    }
 // Use this for initialization
 void Start()
 {
     _GazeInput    = GameObjectTrigger.GetComponent <GazeButton>();
     _GazeReceiver = GameObjectTrigger.GetComponent <GazeReceiver>();
     if (!IsBackgroundProcess)
     {
         _CrossHair = GameObjectCrossHair.GetComponent <CrossHair>();
     }
     _ScreenRenderer = GetComponent <Renderer>();
     _ScreenRenderer.material.SetTexture("_MainTex", ScreenTextures[0]);
     _Counter           = 0;
     _ScreenTintColor   = _ScreenRenderer.material.GetColor("_Color");
     _ScreenTintColor.a = 1.0f;
     _Clamp             = 0;
 }
    // Update is called once per frame
    void Update()
    {
        //Ray ray = myCam.ViewportPointToRay(new Vector3(0.5f, 0.5f, 0));
        //RaycastHit hit;
        //Physics.Raycast(ray,)
        //Vector3 start = hmdHead.position;
        //Vector3 end = (hmdHead.position + hmdHead.forward * 100);
        //Ray ray = new Ray(start, end);
        //Physics.Raycast(ray);
        RaycastHit[] hits;
        hits = Physics.RaycastAll(transform.position, transform.forward, 100.0F);

        for (int i = 0; i < hits.Length; i++)
        {
            RaycastHit   hit = hits[i];
            GazeReceiver gr  = hit.transform.gameObject.GetComponent <GazeReceiver>();
            if (gr)
            {
                gr.ReceiveGaze(hit);
            }
        }
    }
    IEnumerator Dragging()
    {
        Debug.Log("starting dragging");

        cameraLocation  = cameraReference.transform.position;
        cameraDirection = cameraReference.transform.forward;
        Ray gazeRay = new Ray(cameraLocation, cameraDirection);

        GazeReceiver startReceiver = GetFocusedReceiver(gazeRay);
        GazeReceiver gazedReceiver = startReceiver;

        Vector3 dragStartLocation = cameraLocation + cameraDirection.normalized * DragStartDistance;

        firstIgnored = false;
        if (startReceiver != null)
        {
            startReceiver.DragStart(gazeRay);
            Debug.LogFormat("starting drag on {0}", startReceiver.gameObject.name);
        }

        yield return(null);

        yield return(null);

        while (dragging)
        {
            cameraLocation = cameraReference.transform.position;
            Vector3 dragDirectionFromCamera = (dragStartLocation + dragChange) - cameraLocation;
            gazeRay = new Ray(cameraLocation, dragDirectionFromCamera);

            GazeReceiver newReceiver = GetFocusedReceiver(gazeRay);

            if (gazedReceiver != newReceiver)
            {
                if (gazedReceiver != null)
                {
                    gazedReceiver.GazeLeave(gazeRay);
                }
                if (newReceiver != null)
                {
                    newReceiver.GazeEnter(gazeRay);
                }
                gazedReceiver = newReceiver;
            }
            else if (gazedReceiver != null)
            {
                gazedReceiver.Drag(gazeRay);
            }

            if (startReceiver != gazedReceiver && startReceiver != null)
            {
                startReceiver.Drag(gazeRay);
            }

            if (Time.time - lastDrag > DragTimeOut)
            {
                dragging = false;
                Debug.Log("dragging timeout");
            }
            firstIgnored = true;
            yield return(null);
        }

        if (startReceiver != null)
        {
            startReceiver.DragEnd(gazeRay);
        }
        if (gazedReceiver != null && gazedReceiver != startReceiver)
        {
            gazedReceiver.DragEnd(gazeRay);
        }

        gazing = true;
        StartCoroutine(Gazing());
        Debug.Log("dragging ending");
    }