Пример #1
0
    // Update is called once per frame
    void Update()
    {
        // Null out the previous runs vars
        nameOfHovered     = string.Empty;
        potential_hit     = null;
        potential_button  = null;
        potential_manager = null;
        origin            = Vector3.zero;
        target            = Vector3.zero;

        // Get the controller model for when you're not in emulator mode.
        if (!emulator && rControllerModel == null)
        {
            rControllerModel = GameObject.FindGameObjectWithTag("LeftController");
        }

        // Decide the raycasting origins
        if (emulator)
        {
            origin = Camera.main.ViewportToWorldPoint(new Vector3(1.5f, 1.5f, 0.05f));
            target = Camera.main.transform.forward * 999f;
        }
        else
        {
            if (rControllerModel == null)
            {
                Debug.LogError("COULD NOT FIND RIGHT CONTROLLER MODEL");
            }
            origin = rControllerModel.transform.position;
            target = rControllerModel.transform.forward * 999f; // Mathf.Infinity;
        }

        if (renderLaserLine)
        {
            if (DoRaycast(out potential_hit, origin, target))
            {
                if (potential_hit.TryGetComponent <DataManager>(out potential_manager))
                {
                    nameOfHovered = potential_manager.nodeData.FullName;
                }
                else if (potential_hit.TryGetComponent <Button>(out potential_button))
                {
                    nameOfHovered = potential_button.name;
                }
                else if (potential_hit.TryGetComponent <Slider>(out potential_slider))
                {
                    nameOfHovered = potential_slider.name;
                }
            }
        }


        if (Input.GetMouseButtonDown(0) || rightControllerTriggerDown)
        {
            renderLaserLine            = true;
            lr.enabled                 = true;
            rightControllerTriggerDown = false;
        }
        else if (Input.GetMouseButtonUp(0) || rightControllerTriggerUp)
        {
            if (potential_manager != null)
            {
                Debug.Log(potential_manager.nodeData.ToString());
                controlMenu.DisplayInformationMenu(potential_manager.nodeData);
            }
            else if (potential_button != null)
            {
                Debug.Log("Button found: " + potential_button.name);
                controlMenu.DisplayInformationMenu(null);
                potential_button.onClick.Invoke();
                controlMenu.SetActiveSlider(null);
            }
            else if (potential_slider != null)
            {
                potential_slider.Select();
                controlMenu.SetActiveSlider(potential_slider);
            }

            renderLaserLine          = false;
            lr.enabled               = false;
            rightControllerTriggerUp = false;
        }

        // Update the laser lines position as long as the line is to be displayed.
        if (renderLaserLine)
        {
            AttemptToSetText(nameOfHovered);

            lr.SetPosition(0, origin);
            lr.SetPosition(1, target);
        }
    }