Пример #1
0
 private static IEnumerator WaitForUIManager()
 {
     VRCModLogger.Log("WaitForUIManager");
     if (uiManagerInstance == null)
     {
         FieldInfo[] nonpublicStaticFields = typeof(VRCUiManager).GetFields(BindingFlags.NonPublic | BindingFlags.Static);
         if (nonpublicStaticFields.Length == 0)
         {
             VRCModLogger.Log("[VRCToolsUpdater] nonpublicStaticFields.Length == 0");
             yield break;
         }
         FieldInfo uiManagerInstanceField = nonpublicStaticFields.First(field => field.FieldType == typeof(VRCUiManager));
         if (uiManagerInstanceField == null)
         {
             VRCModLogger.Log("[VRCToolsUpdater] uiManagerInstanceField == null");
             yield break;
         }
         uiManagerInstance = uiManagerInstanceField.GetValue(null) as VRCUiManager;
         VRCModLogger.Log("[VRCToolsUpdater] Waiting for UI Manager...");
         while (uiManagerInstance == null)
         {
             uiManagerInstance = uiManagerInstanceField.GetValue(null) as VRCUiManager;
             yield return(null);
         }
         VRCModLogger.Log("[VRCToolsUpdater] UI Manager loaded");
     }
 }
Пример #2
0
        public static void ShowUIPage(VRCUiPage page, bool removeHeader = true, bool setupBody = true)
        {
            if (!setupBody)
            {
                VRCUiManager.ShowScreen(page);
                return;
            }

            IEnumerator placeUi()
            {
                for (int i = 0; i < 4; i++)
                {
                    yield return(null);
                }
                VRCUiManager.PlaceUi();

                if (removeHeader)
                {
                    VRCEUi.ScreenHeader.SetActive(false);
                }
            }

            VRCUiManager.ShowUi(false, true);
            VRCUiManager.StartCoroutine(placeUi());
            VRCUiManager.ShowScreen(page);
        }
Пример #3
0
 // Fetch the VRCUiManager instance
 public static VRCUiManager GetVRCUiMInstance()
 {
     if (vrcuimInstance == null)
     {
         vrcuimInstance = VRCUiManager.prop_VRCUiManager_0;
     }
     return(vrcuimInstance);
 }
Пример #4
0
 // Fetch the VRCUiManager instance
 public static VRCUiManager GetVRCUiMInstance()
 {
     if (vrcuimInstance == null)
     {
         vrcuimInstance = VRCUiManager.field_Protected_Static_VRCUiManager_0;
     }
     return(vrcuimInstance);
 }
Пример #5
0
        private static bool PlaceUiPatch(VRCUiManager __instance, bool __0)
        {
            if (!Utils.IsInVR() || !_comfyVRMenu)
            {
                return(true);
            }
            float scale = Utils.GetVRCTrackingManager() != null?Utils.GetVRCTrackingManager().transform.localScale.x : 1f;

            if (scale <= 0f)
            {
                scale = 1f;
            }
            __instance.playerTrackingDisplay.position = Utils.GetWorldCameraPosition();
            Vector3 rotation = GameObject.Find("Camera (eye)").transform.rotation.eulerAngles;
            Vector3 euler    = new Vector3(rotation.x - 30f, rotation.y, 0f);

            if (Utils.GetVRCPlayer() == null)
            {
                euler.x = euler.z = 0f;
            }
            if (!__0)
            {
                __instance.playerTrackingDisplay.rotation = Quaternion.Euler(euler);
            }
            else
            {
                Quaternion quaternion = Quaternion.Euler(euler);
                if (!(Quaternion.Angle(__instance.playerTrackingDisplay.rotation, quaternion) < __instance.QuantizedAngleDegrees))
                {
                    if (!(Quaternion.Angle(__instance.playerTrackingDisplay.rotation, quaternion) < __instance.MaxAngleDegrees))
                    {
                        __instance.playerTrackingDisplay.rotation = Quaternion.RotateTowards(__instance.playerTrackingDisplay.rotation, quaternion, __instance.MaxDeltaDegreesFast);
                    }
                    else
                    {
                        __instance.playerTrackingDisplay.rotation = Quaternion.RotateTowards(__instance.playerTrackingDisplay.rotation, quaternion, __instance.MaxDeltaDegrees);
                    }
                }
            }
            if (scale >= 0f)
            {
                __instance.playerTrackingDisplay.localScale = scale * Vector3.one;
            }
            else
            {
                __instance.playerTrackingDisplay.localScale = Vector3.one;
            }
            if (scale > float.Epsilon)
            {
                __instance.unscaledUIRoot.localScale = 1f / scale * Vector3.one;
            }
            else
            {
                __instance.unscaledUIRoot.localScale = Vector3.one;
            }
            return(false);
        }
 public static VRCUiManager GetVRCUiMInstance()
 {
     if (ModComponent.VrcuimInstance == null)
     {
         var method = typeof(VRCUiManager).GetMethod("get_Instance", BindingFlags.Static | BindingFlags.Public);
         if (method == null)
         {
             return(null);
         }
         ModComponent.VrcuimInstance = (VRCUiManager)method.Invoke(null, new object[0]);
     }
     return(VrcuimInstance);
 }
Пример #7
0
        private static void HideCurrentPopup()
        {
            VRCUiManager vRCUiManager = GetVRCUiManager();

            if (vRCUiManager == null)
            {
                return;
            }
            if (!vRCUiManager.field_Internal_Dictionary_2_String_VRCUiPage_0.ContainsKey("POPUP"))
            {
                return;
            }
            VRCUiPage item = vRCUiManager.field_Internal_Dictionary_2_String_VRCUiPage_0["POPUP"];

            item.gameObject.SetActive(false);
            if (item.field_Public_Action_1 != null)
            {
                item.field_Public_Action_1.Invoke();
            }
            vRCUiManager.field_Internal_Dictionary_2_String_VRCUiPage_0.Remove("POPUP");
        }
Пример #8
0
        public IEnumerator WaitForQM()
        {
            while (GameObject.Find("/UserInterface/Canvas_QuickMenu(Clone)/Container/Window/MicButton") == null) //Why wait for the MicButton, because I use this in other mods so I only need to fix one thing if it breaks in the future! Also you can't open the camera without going through the QM
            {
                yield return(new WaitForSeconds(1f));
            }
            _uiManagerInstance = (VRCUiManager)typeof(VRCUiManager).GetMethods().First(x => x.ReturnType == typeof(VRCUiManager)).Invoke(null, new object[0]);
            vertical           = VRCInputManager.field_Private_Static_Dictionary_2_String_VRCInput_0["Vertical"];
            horizontal         = VRCInputManager.field_Private_Static_Dictionary_2_String_VRCInput_0["Horizontal"];
            CreateIndicators();
            if (movementToggle.Value)
            {
                coroutine = MelonCoroutines.Start(AutoSet());
            }

            Logger.Msg(ConsoleColor.Green, $"Listing JoystickNames");
            foreach (var name in Input.GetJoystickNames())
            {
                Logger.Msg(ConsoleColor.Green, $"{name}");
            }
        }
Пример #9
0
        public static VRCUiManager GetVRCUiManager()
        {
            if (uiManagerInstance == null)
            {
                FieldInfo[] nonpublicStaticPopupFields = typeof(VRCUiManager).GetFields(BindingFlags.NonPublic | BindingFlags.Static);
                if (nonpublicStaticPopupFields.Length == 0)
                {
                    VRCModLogger.Log("[VRCUiManagerUtils] nonpublicStaticPopupFields.Length == 0");
                    return(null);
                }
                FieldInfo uiManagerInstanceField = nonpublicStaticPopupFields.First(field => field.FieldType == typeof(VRCUiManager));
                if (uiManagerInstanceField == null)
                {
                    VRCModLogger.Log("[VRCUiManagerUtils] uiManagerInstanceField == null");
                    return(null);
                }
                uiManagerInstance = uiManagerInstanceField.GetValue(null) as VRCUiManager;
            }

            return(uiManagerInstance);
        }
Пример #10
0
 public static void ShowScreen(this VRCUiManager vrcUiManager, string screen, bool additive = false)
 {
     vrcUiManager.Method_Public_Void_String_Boolean_0(screen, additive);
 }
Пример #11
0
        public void OnUiManagerInit()
        {
            VRCUiPageAuthentication authPage = GetAuthPage();

            Button doneButton = authPage.transform.Find("ButtonDone (1)").GetComponent <Button>();

            Button.ButtonClickedEvent doneButton_onClick = doneButton.onClick;
            doneButton.onClick = new Button.ButtonClickedEvent();
            doneButton.onClick.AddListener(new Action(() =>
            {
                SavePlayerPrefs();
                doneButton_onClick.Invoke();
            }));

            GameObject.Find("UserInterface/MenuContent/Screens/Authentication/Login2FA/BoxLogin2FA/ButtonBack").GetComponent <Button>().onClick.AddListener(new Action(LoadPlayerPrefs));

            Transform popupcheckboxtrans = GameObject.Find("UserInterface/MenuContent/Popups/PerformanceSettingsPopup").GetComponent <PopupPerformanceOptions>().dynamicBoneOptionsPage.transform.Find("Checkboxes/LimitDynamicBoneUsage");

            GameObject newcheckbox = GameObject.Instantiate(popupcheckboxtrans.gameObject, authPage.field_Public_UiInputField_0.transform.parent);

            newcheckbox.name = "RememberMe";
            GameObject.Destroy(newcheckbox.transform.GetChild(2).gameObject);
            GameObject.Destroy(newcheckbox.transform.GetChild(3).gameObject);
            GameObject.Destroy(newcheckbox.transform.GetChild(4).gameObject);
            GameObject.Destroy(newcheckbox.transform.GetChild(5).gameObject);

            Transform newcheckbox_desc_trans = newcheckbox.transform.Find("Description");

            newcheckbox_desc_trans.GetComponent <Text>().text = "Remember Me";

            Toggle newcheckbox_toggle = newcheckbox.GetComponent <Toggle>();

            newcheckbox_toggle.isOn           = SecurePlayerPrefs.HasKey(ToggleKey);
            newcheckbox_toggle.onValueChanged = new Toggle.ToggleEvent();
            newcheckbox_toggle.onValueChanged.AddListener(new Action <bool>((newvalue) =>
            {
                if (!newvalue)
                {
                    SecurePlayerPrefs.DeleteKey(ToggleKey);
                }
                else
                {
                    SecurePlayerPrefs.SetString(ToggleKey, "true", SecurePlayerPrefsPassword);
                }
            }));

            newcheckbox.transform.localPosition = new Vector3((authPage.field_Public_UiInputField_1.transform.localPosition.x - 130), (authPage.field_Public_UiInputField_1.transform.localPosition.y - 45), authPage.field_Public_UiInputField_1.transform.localPosition.z);
            authPage.field_Public_UiInputField_0.transform.localPosition = new Vector3(authPage.field_Public_UiInputField_0.transform.localPosition.x, (authPage.field_Public_UiInputField_0.transform.localPosition.y + 30), authPage.field_Public_UiInputField_0.transform.localPosition.z);
            authPage.field_Public_UiInputField_1.transform.localPosition = new Vector3(authPage.field_Public_UiInputField_1.transform.localPosition.x, (authPage.field_Public_UiInputField_1.transform.localPosition.y + 30), authPage.field_Public_UiInputField_1.transform.localPosition.z);

            ValidateTextTargetMethod = typeof(InputFieldValidator).GetMethods(BindingFlags.Instance | BindingFlags.Public)
                                       .Single(it => it.GetParameters().Length == 1 && XrefScanner.XrefScan(it).Any(jt => jt.Type == XrefType.Global && jt.ReadAsObject()?.ToString() == "^([\\w\\.\\-\\+]+)@([\\w\\-]+)((\\.(\\w){2,3})+)$"));

            LoadPlayerPrefs();

            VRCUiManager uiManager = GetVRCUiManager();

            uiManager.field_Private_Action_1_VRCUiPage_0 = (
                (uiManager.field_Private_Action_1_VRCUiPage_0 == null)
                ? new Action <VRCUiPage>(OnPageShown)
                : Il2CppSystem.Delegate.Combine(uiManager.field_Private_Action_1_VRCUiPage_0, (Il2CppSystem.Action <VRCUiPage>) new Action <VRCUiPage>(OnPageShown)).Cast <Il2CppSystem.Action <VRCUiPage> >()
                );
        }
Пример #12
0
        private static bool PlaceUiPatch(VRCUiManager __instance, bool __0)
        {
            if (!Utils.IsInVR())
            {
                return(true);
            }
            float num = Utils.GetVRCTrackingManager() != null?Utils.GetVRCTrackingManager().transform.localScale.x : 1f;

            if (num <= 0f)
            {
                num = 1f;
            }
            var playerTrackingDisplay = __instance.transform;
            var unscaledUIRoot        = __instance.transform.Find("UnscaledUI");

            playerTrackingDisplay.position = Utils.GetWorldCameraPosition();
            Vector3 rotation = GameObject.Find("Camera (eye)").transform.rotation.eulerAngles;
            Vector3 euler    = new Vector3(rotation.x - 30f, rotation.y, 0f);

            //if (rotation.x > 0f && rotation.x < 300f) rotation.x = 0f;
            if (Utils.GetVRCPlayer() == null)
            {
                euler.x = euler.z = 0f;
            }
            if (!__0)
            {
                playerTrackingDisplay.rotation = Quaternion.Euler(euler);
            }
            else
            {
                Quaternion quaternion = Quaternion.Euler(euler);
                if (!(Quaternion.Angle(playerTrackingDisplay.rotation, quaternion) < 15f))
                {
                    if (!(Quaternion.Angle(playerTrackingDisplay.rotation, quaternion) < 25f))
                    {
                        playerTrackingDisplay.rotation = Quaternion.RotateTowards(playerTrackingDisplay.rotation, quaternion, 5f);
                    }
                    else
                    {
                        playerTrackingDisplay.rotation = Quaternion.RotateTowards(playerTrackingDisplay.rotation, quaternion, 1f);
                    }
                }
            }
            if (num >= 0f)
            {
                playerTrackingDisplay.localScale = num * Vector3.one;
            }
            else
            {
                playerTrackingDisplay.localScale = Vector3.one;
            }
            if (num > float.Epsilon)
            {
                unscaledUIRoot.localScale = 1f / num * Vector3.one;
            }
            else
            {
                unscaledUIRoot.localScale = Vector3.one;
            }
            return(false);
        }
Пример #13
0
 public static VRCUiPage GetPage(string pageId) =>
 VRCUiManager?.GetPage(pageId);