Exemplo n.º 1
0
    private void RaycastFirst(ref int raydepth, ref bool behindGui)
    {
        Ray        pointerRay = new Ray(transform.position, transform.forward);
        RaycastHit hit;

        if (Physics.Raycast(pointerRay, out hit, rayDistance, mask.value))
        {
            // Something hit, handle Enter and Over events
            PointerParameters pp;

            if (!IsActive(hit, out pp))
            {
                if (HasActives())
                {
                    InvokePointerExit(0, new BasePointerParameters(activeTarget[0][0].target, this));
                    if (clickLock.Contains(activeTarget[0][0].target))
                    {
                        clickLock.Remove(activeTarget[0][0].target);
                    }
                    ClearActives();
                }

                pp = new PointerParameters(hit, raydepth, this, behindGui);
                AddActive(pp);
                InvokePointerEnter(0, new BasePointerParameters(hit, raydepth, this, behindGui));
            }
            else
            {
                var npp = new BasePointerParameters(hit, raydepth, this, behindGui);

                InvokePointerOver(0, npp);

                if ((npp.time - pp.time) > clickTimeSpan && !clickLock.Contains(npp.target))
                {
                    clickLock.Add(npp.target);
                    InvokePointerClicked(0, npp);
                }
            }

            raydepth++;
            if (isGUIPointer)
            {
                behindGui = true;
            }
        }
        else
        {
            // Nothing hit, report Exit event if active objects
            if (HasActives())
            {
                InvokePointerExit(0, new BasePointerParameters(activeTarget[0][0].target, this));
                if (clickLock.Contains(activeTarget[0][0].target))
                {
                    clickLock.Remove(activeTarget[0][0].target);
                }
                ClearActives();
            }
        }
    }
Exemplo n.º 2
0
    void HandleOnPointerClicked(int inputIndex, BasePointerParameters pointerParams, BasePointer sender)
    {
        IPointerClickHandler[] enterHandlers = pointerParams.target.GetComponents <IPointerClickHandler>();

        foreach (var handler in enterHandlers)
        {
            PointerEventData data = new PointerEventData(eventSystem);
            handler.OnPointerClick(data);
        }
    }
Exemplo n.º 3
0
    void HandleOnPointerExit(int inputIndex, BasePointerParameters pointerParams, BasePointer sender)
    {
        IPointerExitHandler[] enterHandlers = pointerParams.target.GetComponents <IPointerExitHandler>();

        foreach (var handler in enterHandlers)
        {
            PointerEventData data = new PointerEventData(null);
            handler.OnPointerExit(data);
        }
    }
Exemplo n.º 4
0
    private void RaycastAll(ref int raydepth, ref bool behindGui)
    {
        Ray pointerRay = new Ray(transform.position, transform.forward);

        RaycastHit[]      raycastHits = Physics.RaycastAll(pointerRay, rayDistance, mask.value);
        List <RaycastHit> tempActives = new List <RaycastHit>();

        foreach (var hit in raycastHits)
        {
            PointerParameters pp;

            if (!IsActive(hit, out pp))
            {
                pp = new PointerParameters(hit, raydepth, this, behindGui);
                AddActive(pp);

                InvokePointerEnter(0, new BasePointerParameters(hit, raydepth, this, behindGui));
            }
            else
            {
                var npp = new BasePointerParameters(hit, raydepth, this, behindGui);

                InvokePointerOver(0, npp);

                if ((npp.time - pp.time) > clickTimeSpan && !clickLock.Contains(npp.target))
                {
                    clickLock.Add(npp.target);
                    InvokePointerClicked(0, npp);
                }
            }
            tempActives.Add(hit);

            //Raise raycounter
            raydepth++;
        }

        //If we hit something and we are a GUIpointer then set behindGui true
        if (tempActives.Count > 0 && isGUIPointer)
        {
            behindGui = true;
        }

        List <PointerParameters> leftTargets = RemoveActivesExcept(tempActives);

        foreach (var tpp in leftTargets)
        {
            InvokePointerExit(0, new BasePointerParameters(tpp.target, this));
            if (clickLock.Contains(tpp.target))
            {
                clickLock.Remove(tpp.target);
            }
        }
    }
Exemplo n.º 5
0
    private void RaycastFirst(ref int raydepth, ref bool behindGui)
    {
        Ray gearRay = new Ray(transform.position, transform.forward);

        InvokeInputRayUpdate(0, gearRay);

        Debug.DrawRay(gearRay.origin, gearRay.direction * 50, Color.red);

        RaycastHit hit;

        if (Physics.Raycast(gearRay, out hit, rayDistance, mask.value))
        {
            // Something hit, handle Enter and Over events
            PointerParameters pp;

            if (!IsActive(hit, out pp))
            {
                if (HasActives())
                {
                    InvokePointerExit(0, new BasePointerParameters(activeTarget[0][0].target, this));
                    ClearActives();
                }

                pp = new PointerParameters(hit, raydepth, this, behindGui);
                AddActive(pp);
                InvokePointerEnter(0, new BasePointerParameters(hit, raydepth, this, behindGui));
            }
            else
            {
                var npp = new BasePointerParameters(hit, raydepth, this, behindGui);

                InvokePointerOver(0, npp);
            }

            raydepth++;
            if (isGUIPointer)
            {
                behindGui = true;
            }
        }
        else
        {
            // Nothing hit, report Exit event if active objects
            if (HasActives())
            {
                InvokePointerExit(0, new BasePointerParameters(activeTarget[0][0].target, this));
                ClearActives();
            }
        }
    }
Exemplo n.º 6
0
    private void RaycastFirst(ref int raydepth, ref bool behindGui)
    {
        Ray pointerRay = GetComponent <Camera>().ScreenPointToRay(MouseInput.position);

        InvokeInputRayUpdate(0, pointerRay);

        RaycastHit hit;

        if (Physics.Raycast(pointerRay, out hit, rayDistance, mask.value))
        {
            // Something hit, handle Enter and Over events
            PointerParameters pp;

            if (!IsActive(hit, out pp))
            {
                if (HasActives())
                {
                    InvokePointerExit(0, new BasePointerParameters(activeTarget[0][0].target, this));
                    ClearActives();
                }

                pp = new PointerParameters(hit, raydepth, this, behindGui);
                AddActive(pp);
                InvokePointerEnter(0, new BasePointerParameters(hit, raydepth, this, behindGui));
            }
            else
            {
                var npp = new BasePointerParameters(hit, raydepth, this, behindGui);

                InvokePointerOver(0, npp);
            }

            raydepth++;
            if (isGUIPointer)
            {
                behindGui = true;
            }
        }
        else
        {
            // Nothing hit, report Exit event if active objects
            if (HasActives())
            {
                InvokePointerExit(0, new BasePointerParameters(activeTarget[0][0].target, this));
                ClearActives();
            }
        }
    }
Exemplo n.º 7
0
    private void RaycastAll(ref int raydepth, ref bool behindGui)
    {
        Ray gearRay = new Ray(transform.position, transform.forward);

        InvokeInputRayUpdate(0, gearRay);

        Debug.DrawRay(gearRay.origin, gearRay.direction * 50, Color.red);

        RaycastHit[]      raycastHits = Physics.RaycastAll(gearRay, rayDistance, mask.value);
        List <RaycastHit> tempActives = new List <RaycastHit>();

        foreach (var hit in raycastHits)
        {
            PointerParameters pp;

            if (!IsActive(hit, out pp))
            {
                pp = new PointerParameters(hit, raydepth, this, behindGui);
                AddActive(pp);

                InvokePointerEnter(0, new BasePointerParameters(hit, raydepth, this, behindGui));
            }
            else
            {
                var npp = new BasePointerParameters(hit, raydepth, this, behindGui);

                InvokePointerOver(0, npp);
            }
            tempActives.Add(hit);

            //Raise raycounter
            raydepth++;
        }

        //If we hit something and we are a GUIpointer then set behindGui true
        if (tempActives.Count > 0 && isGUIPointer)
        {
            behindGui = true;
        }

        List <PointerParameters> leftTargets = RemoveActivesExcept(tempActives);

        foreach (var tpp in leftTargets)
        {
            InvokePointerExit(0, new BasePointerParameters(tpp.target, this));
        }
    }
Exemplo n.º 8
0
    private void RaycastAll(ref int raydepth, ref bool behindGui)
    {
        Ray pointerRay = GetComponent <Camera>().ScreenPointToRay(MouseInput.position);

        InvokeInputRayUpdate(0, pointerRay);

        RaycastHit[]      raycastHits = Physics.RaycastAll(pointerRay, rayDistance, mask.value);
        List <RaycastHit> tempActives = new List <RaycastHit>();

        foreach (var hit in raycastHits)
        {
            PointerParameters pp;

            if (!IsActive(hit, out pp))
            {
                pp = new PointerParameters(hit, raydepth, this, behindGui);
                AddActive(pp);

                InvokePointerEnter(0, new BasePointerParameters(hit, raydepth, this, behindGui));
            }
            else
            {
                var npp = new BasePointerParameters(hit, raydepth, this, behindGui);

                InvokePointerOver(0, npp);
            }
            tempActives.Add(hit);

            //Raise raycounter
            raydepth++;
        }

        //If we hit something and we are a GUIpointer then set behindGui true
        if (tempActives.Count > 0 && isGUIPointer)
        {
            behindGui = true;
        }

        List <PointerParameters> leftTargets = RemoveActivesExcept(tempActives);

        foreach (var tpp in leftTargets)
        {
            InvokePointerExit(0, new BasePointerParameters(tpp.target, this));
        }
    }
Exemplo n.º 9
0
 void HandleOnPointerOver(int inputIndex, BasePointerParameters pointerParams, BasePointer sender)
 {
 }
Exemplo n.º 10
0
 void HandleOnPointerClicked(int inputIndex, BasePointerParameters pointerParams, BasePointer sender)
 {
     pointerParams.target.SendMessage("OnClick", null, SendMessageOptions.DontRequireReceiver);
 }
Exemplo n.º 11
0
 void HandleOnPointerExit(int inputIndex, BasePointerParameters pointerParams, BasePointer sender)
 {
     pointerParams.target.SendMessage("OnHover", false, SendMessageOptions.DontRequireReceiver);
 }