private void ShowText(EVRButtonId button, string text, bool highlightButton = true)
 {
     if (this.buttonHintInfos.ContainsKey(button))
     {
         ControllerButtonHints.ButtonHintInfo buttonHintInfo = this.buttonHintInfos[button];
         buttonHintInfo.textHintObject.SetActive(true);
         buttonHintInfo.textHintActive = true;
         if (buttonHintInfo.text != null)
         {
             buttonHintInfo.text.text = text;
         }
         if (buttonHintInfo.textMesh != null)
         {
             buttonHintInfo.textMesh.text = text;
         }
         this.UpdateTextHint(buttonHintInfo);
         if (highlightButton)
         {
             this.ShowButtonHint(new EVRButtonId[]
             {
                 button
             });
         }
         this.renderModel.gameObject.SetActive(true);
     }
 }
 private void ShowButtonHint(params EVRButtonId[] buttons)
 {
     this.renderModel.gameObject.SetActive(true);
     this.renderModel.GetComponentsInChildren <MeshRenderer>(this.renderers);
     for (int i = 0; i < this.renderers.Count; i++)
     {
         Texture mainTexture = this.renderers[i].material.mainTexture;
         this.renderers[i].sharedMaterial       = this.controllerMaterial;
         this.renderers[i].material.mainTexture = mainTexture;
         this.renderers[i].material.renderQueue = this.controllerMaterial.shader.renderQueue;
     }
     for (int j = 0; j < buttons.Length; j++)
     {
         if (this.buttonHintInfos.ContainsKey(buttons[j]))
         {
             ControllerButtonHints.ButtonHintInfo buttonHintInfo = this.buttonHintInfos[buttons[j]];
             foreach (MeshRenderer item in buttonHintInfo.renderers)
             {
                 if (!this.flashingRenderers.Contains(item))
                 {
                     this.flashingRenderers.Add(item);
                 }
             }
         }
     }
     this.startTime = Time.realtimeSinceStartup;
     this.tickCount = 0f;
 }
 private string GetActiveHintText(EVRButtonId button)
 {
     if (this.buttonHintInfos.ContainsKey(button))
     {
         ControllerButtonHints.ButtonHintInfo buttonHintInfo = this.buttonHintInfos[button];
         if (buttonHintInfo.textHintActive)
         {
             return(buttonHintInfo.text.text);
         }
     }
     return(string.Empty);
 }
 private void HideText(EVRButtonId button)
 {
     if (this.buttonHintInfos.ContainsKey(button))
     {
         ControllerButtonHints.ButtonHintInfo buttonHintInfo = this.buttonHintInfos[button];
         buttonHintInfo.textHintObject.SetActive(false);
         buttonHintInfo.textHintActive = false;
         this.HideButtonHint(new EVRButtonId[]
         {
             button
         });
     }
 }
 private bool IsButtonHintActive(EVRButtonId button)
 {
     if (this.buttonHintInfos.ContainsKey(button))
     {
         ControllerButtonHints.ButtonHintInfo buttonHintInfo = this.buttonHintInfos[button];
         foreach (MeshRenderer item in buttonHintInfo.renderers)
         {
             if (this.flashingRenderers.Contains(item))
             {
                 return(true);
             }
         }
         return(false);
     }
     return(false);
 }
        private void HideButtonHint(params EVRButtonId[] buttons)
        {
            Color color = this.controllerMaterial.GetColor(this.colorID);

            for (int i = 0; i < buttons.Length; i++)
            {
                if (this.buttonHintInfos.ContainsKey(buttons[i]))
                {
                    ControllerButtonHints.ButtonHintInfo buttonHintInfo = this.buttonHintInfos[buttons[i]];
                    foreach (MeshRenderer meshRenderer in buttonHintInfo.renderers)
                    {
                        meshRenderer.material.color = color;
                        this.flashingRenderers.Remove(meshRenderer);
                    }
                }
            }
            if (this.flashingRenderers.Count == 0)
            {
                this.renderModel.gameObject.SetActive(false);
            }
        }
        private void UpdateTextHint(ControllerButtonHints.ButtonHintInfo hintInfo)
        {
            Transform  hmdTransform = this.player.hmdTransform;
            Vector3    forward      = hmdTransform.position - hintInfo.canvasOffset.position;
            Quaternion a            = Quaternion.LookRotation(forward, Vector3.up);
            Quaternion b            = Quaternion.LookRotation(forward, hmdTransform.up);
            float      t;

            if (hmdTransform.forward.y > 0f)
            {
                t = Util.RemapNumberClamped(hmdTransform.forward.y, 0.6f, 0.4f, 1f, 0f);
            }
            else
            {
                t = Util.RemapNumberClamped(hmdTransform.forward.y, -0.8f, -0.6f, 1f, 0f);
            }
            hintInfo.canvasOffset.rotation = Quaternion.Slerp(a, b, t);
            Transform transform = hintInfo.line.transform;

            hintInfo.line.useWorldSpace = false;
            hintInfo.line.SetPosition(0, transform.InverseTransformPoint(hintInfo.textStartAnchor.position));
            hintInfo.line.SetPosition(1, transform.InverseTransformPoint(hintInfo.textEndAnchor.position));
        }
        private void CreateAndAddButtonInfo(EVRButtonId buttonID)
        {
            Transform           transform = null;
            List <MeshRenderer> list      = new List <MeshRenderer>();
            string      text        = "Looking for button: " + buttonID;
            EVRButtonId evrbuttonId = buttonID;

            if (buttonID == EVRButtonId.k_EButton_Grip && SteamVR.instance.hmd_TrackingSystemName.ToLowerInvariant().Contains("oculus"))
            {
                evrbuttonId = EVRButtonId.k_EButton_Axis2;
            }
            ulong  num = 1UL << (int)evrbuttonId;
            string text2;

            foreach (KeyValuePair <string, ulong> keyValuePair in this.componentButtonMasks)
            {
                if ((keyValuePair.Value & num) == num)
                {
                    text2 = text;
                    text  = string.Concat(new object[]
                    {
                        text2,
                        "\nFound component: ",
                        keyValuePair.Key,
                        " ",
                        keyValuePair.Value
                    });
                    Transform transform2 = this.renderModel.FindComponent(keyValuePair.Key);
                    transform = transform2;
                    text2     = text;
                    text      = string.Concat(new object[]
                    {
                        text2,
                        "\nFound componentTransform: ",
                        transform2,
                        " buttonTransform: ",
                        transform
                    });
                    list.AddRange(transform2.GetComponentsInChildren <MeshRenderer>());
                }
            }
            text2 = text;
            text  = string.Concat(new object[]
            {
                text2,
                "\nFound ",
                list.Count,
                " renderers for ",
                buttonID
            });
            foreach (MeshRenderer meshRenderer in list)
            {
                text = text + "\n\t" + meshRenderer.name;
            }
            this.HintDebugLog(text);
            if (transform == null)
            {
                this.HintDebugLog("Couldn't find buttonTransform for " + buttonID);
                return;
            }
            ControllerButtonHints.ButtonHintInfo buttonHintInfo = new ControllerButtonHints.ButtonHintInfo();
            this.buttonHintInfos.Add(buttonID, buttonHintInfo);
            buttonHintInfo.componentName  = transform.name;
            buttonHintInfo.renderers      = list;
            buttonHintInfo.localTransform = transform.Find("attach");
            ControllerButtonHints.OffsetType offsetType = ControllerButtonHints.OffsetType.Right;
            switch (buttonID)
            {
            case EVRButtonId.k_EButton_System:
                offsetType = ControllerButtonHints.OffsetType.Right;
                break;

            case EVRButtonId.k_EButton_ApplicationMenu:
                offsetType = ControllerButtonHints.OffsetType.Right;
                break;

            case EVRButtonId.k_EButton_Grip:
                offsetType = ControllerButtonHints.OffsetType.Forward;
                break;

            default:
                if (buttonID != EVRButtonId.k_EButton_Axis0)
                {
                    if (buttonID == EVRButtonId.k_EButton_Axis1)
                    {
                        offsetType = ControllerButtonHints.OffsetType.Right;
                    }
                }
                else
                {
                    offsetType = ControllerButtonHints.OffsetType.Up;
                }
                break;
            }
            switch (offsetType)
            {
            case ControllerButtonHints.OffsetType.Up:
                buttonHintInfo.textEndOffsetDir = buttonHintInfo.localTransform.up;
                break;

            case ControllerButtonHints.OffsetType.Right:
                buttonHintInfo.textEndOffsetDir = buttonHintInfo.localTransform.right;
                break;

            case ControllerButtonHints.OffsetType.Forward:
                buttonHintInfo.textEndOffsetDir = buttonHintInfo.localTransform.forward;
                break;

            case ControllerButtonHints.OffsetType.Back:
                buttonHintInfo.textEndOffsetDir = -buttonHintInfo.localTransform.forward;
                break;
            }
            Vector3 position = buttonHintInfo.localTransform.position + buttonHintInfo.localTransform.forward * 0.01f;

            buttonHintInfo.textHintObject      = UnityEngine.Object.Instantiate <GameObject>(this.textHintPrefab, position, Quaternion.identity);
            buttonHintInfo.textHintObject.name = "Hint_" + buttonHintInfo.componentName + "_Start";
            buttonHintInfo.textHintObject.transform.SetParent(this.textHintParent);
            buttonHintInfo.textHintObject.layer = base.gameObject.layer;
            buttonHintInfo.textHintObject.tag   = base.gameObject.tag;
            buttonHintInfo.textStartAnchor      = buttonHintInfo.textHintObject.transform.Find("Start");
            buttonHintInfo.textEndAnchor        = buttonHintInfo.textHintObject.transform.Find("End");
            buttonHintInfo.canvasOffset         = buttonHintInfo.textHintObject.transform.Find("CanvasOffset");
            buttonHintInfo.line       = buttonHintInfo.textHintObject.transform.Find("Line").GetComponent <LineRenderer>();
            buttonHintInfo.textCanvas = buttonHintInfo.textHintObject.GetComponentInChildren <Canvas>();
            buttonHintInfo.text       = buttonHintInfo.textCanvas.GetComponentInChildren <Text>();
            buttonHintInfo.textMesh   = buttonHintInfo.textCanvas.GetComponentInChildren <TextMesh>();
            buttonHintInfo.textHintObject.SetActive(false);
            buttonHintInfo.textStartAnchor.position = position;
            if (buttonHintInfo.text != null)
            {
                buttonHintInfo.text.text = buttonHintInfo.componentName;
            }
            if (buttonHintInfo.textMesh != null)
            {
                buttonHintInfo.textMesh.text = buttonHintInfo.componentName;
            }
            this.centerPosition += buttonHintInfo.textStartAnchor.position;
            buttonHintInfo.textCanvas.transform.localScale      = Vector3.Scale(buttonHintInfo.textCanvas.transform.localScale, this.player.transform.localScale);
            buttonHintInfo.textStartAnchor.transform.localScale = Vector3.Scale(buttonHintInfo.textStartAnchor.transform.localScale, this.player.transform.localScale);
            buttonHintInfo.textEndAnchor.transform.localScale   = Vector3.Scale(buttonHintInfo.textEndAnchor.transform.localScale, this.player.transform.localScale);
            buttonHintInfo.line.transform.localScale            = Vector3.Scale(buttonHintInfo.line.transform.localScale, this.player.transform.localScale);
        }