示例#1
0
        private IEnumerator PrintAll()
        {
            yield return(VRCUiManagerUtils.WaitForUiManagerInit());

            foreach (GameObject gameObject in QuickMenuUtils.GetQuickMenuInstance().gameObject.scene.GetRootGameObjects())
            {
                if (gameObject != null)
                {
                    PrintHierarchy(gameObject.transform, 0);
                }
            }
            yield break;
        }
示例#2
0
        internal static void OnUpdate()
        {
            if (CustomAvatarFavorites.PublicAvatarList == null || CustomAvatarFavorites.FavoriteButtonNew == null || RoomManager.field_Internal_Static_ApiWorld_0 == null)
            {
                return;
            }
            if (CustomAvatarFavorites.searchBox == null && CustomAvatarFavorites.NewAvatarList.gameObject.activeInHierarchy)
            {
                VRCUiPageHeader componentInChildren = QuickMenuUtils.GetVRCUiMInstance().GetComponentInChildren <VRCUiPageHeader>(true);
                if (componentInChildren != null)
                {
                    CustomAvatarFavorites.searchBox = componentInChildren.field_Public_UiInputField_0;
                }
            }
            if (CustomAvatarFavorites.searchBoxAction == null)
            {
                CustomAvatarFavorites.searchBoxAction = DelegateSupport.ConvertDelegate <UnityAction <string> >(new Action <string>(delegate(string searchTerm)
                {
                    if (searchTerm == "" || searchTerm.Length < 2)
                    {
                        return;
                    }

                    MelonCoroutines.Start(CustomAvatarFavorites.SearchAvatars(searchTerm));
                }));
            }
            if (CustomAvatarFavorites.searchBox != null && CustomAvatarFavorites.searchBox.field_Public_Button_0 != null && !CustomAvatarFavorites.searchBox.field_Public_Button_0.interactable && CustomAvatarFavorites.PublicAvatarList.activeInHierarchy && BetterEmmVRC.BetterEmmVRC.NetworkLib.authToken != null && RoomManager.field_Internal_Static_ApiWorld_0 != null)
            {
                CustomAvatarFavorites.searchBox.field_Public_Button_0.interactable  = true;
                CustomAvatarFavorites.searchBox.field_Public_UnityAction_1_String_0 = CustomAvatarFavorites.searchBoxAction;
            }
            if (CustomAvatarFavorites.PublicAvatarList.activeSelf && BetterEmmVRC.BetterEmmVRC.NetworkLib.authToken != null)
            {
                CustomAvatarFavorites.NewAvatarList.collapsedCount = 500;
                CustomAvatarFavorites.NewAvatarList.expandedCount  = 500;
                if (!CustomAvatarFavorites.menuJustActivated)
                {
                    CustomAvatarFavorites.Searching       = false;
                    CustomAvatarFavorites.avTextText.text = "(" + CustomAvatarFavorites.LoadedAvatars.Count.ToString() + ") BetterEmmVRC Favorites";
                    MelonCoroutines.Start(CustomAvatarFavorites.RefreshMenu(1f));
                    CustomAvatarFavorites.menuJustActivated = true;
                }
                if (CustomAvatarFavorites.menuJustActivated && (CustomAvatarFavorites.NewAvatarList.pickers.Count < CustomAvatarFavorites.LoadedAvatars.Count || CustomAvatarFavorites.NewAvatarList.isOffScreen))
                {
                    CustomAvatarFavorites.menuJustActivated = false;
                }
                if (CustomAvatarFavorites.currPageAvatar != null && CustomAvatarFavorites.currPageAvatar.field_Public_SimpleAvatarPedestal_0 != null && CustomAvatarFavorites.currPageAvatar.field_Public_SimpleAvatarPedestal_0.field_Internal_ApiAvatar_0 != null && CustomAvatarFavorites.LoadedAvatars != null && CustomAvatarFavorites.FavoriteButtonNew != null)
                {
                    bool flag = false;
                    for (int i = 0; i < CustomAvatarFavorites.LoadedAvatars.Count; i++)
                    {
                        if (CustomAvatarFavorites.LoadedAvatars[i].id == CustomAvatarFavorites.currPageAvatar.field_Public_SimpleAvatarPedestal_0.field_Internal_ApiAvatar_0.id)
                        {
                            flag = true;
                        }
                    }
                    if (!flag)
                    {
                        CustomAvatarFavorites.FavoriteButtonNewText.text = "<color=#FF69B4>emmVRC</color> Favorite";
                    }
                    else
                    {
                        CustomAvatarFavorites.FavoriteButtonNewText.text = "<color=#FF69B4>emmVRC</color> Unfavorite";
                    }
                }
            }
            if ((BetterEmmVRC.BetterEmmVRC.NetworkLib.authToken == null) && (CustomAvatarFavorites.PublicAvatarList.activeSelf || CustomAvatarFavorites.FavoriteButtonNew.activeSelf))
            {
                CustomAvatarFavorites.PublicAvatarList.SetActive(false);
                CustomAvatarFavorites.FavoriteButtonNew.SetActive(false);
            }
            else if ((!CustomAvatarFavorites.PublicAvatarList.activeSelf || !CustomAvatarFavorites.FavoriteButtonNew.activeSelf) && BetterEmmVRC.BetterEmmVRC.NetworkLib.authToken != null)
            {
                CustomAvatarFavorites.PublicAvatarList.SetActive(true);
                CustomAvatarFavorites.FavoriteButtonNew.SetActive(true);
            }
            if (CustomAvatarFavorites.error && !CustomAvatarFavorites.errorWarned)
            {
                CustomAvatarFavorites.errorWarned = true;
            }
        }
示例#3
0
        internal static void Initialize()
        {
            CustomAvatarFavorites.pageAvatar              = QuickMenuUtils.GetVRCUiMInstance().field_Public_GameObject_0.transform.Find("Screens/Avatar").gameObject;
            CustomAvatarFavorites.FavoriteButton          = QuickMenuUtils.GetVRCUiMInstance().field_Public_GameObject_0.transform.Find("Screens/Avatar/Favorite Button").gameObject;
            CustomAvatarFavorites.FavoriteButtonNew       = UnityEngine.Object.Instantiate <GameObject>(CustomAvatarFavorites.FavoriteButton, QuickMenuUtils.GetVRCUiMInstance().field_Public_GameObject_0.transform.Find("Screens/Avatar/"));
            CustomAvatarFavorites.FavoriteButtonNewButton = CustomAvatarFavorites.FavoriteButtonNew.GetComponent <Button>();
            CustomAvatarFavorites.FavoriteButtonNewButton.onClick.RemoveAllListeners();
            CustomAvatarFavorites.FavoriteButtonNewButton.onClick.AddListener((Action) delegate()
            {
                ApiAvatar apiAvatar = CustomAvatarFavorites.pageAvatar.GetComponent <PageAvatar>().field_Public_SimpleAvatarPedestal_0.field_Internal_ApiAvatar_0;
                bool flag           = false;
                for (int i = 0; i < CustomAvatarFavorites.LoadedAvatars.Count; i++)
                {
                    if (CustomAvatarFavorites.LoadedAvatars[i].id == apiAvatar.id)
                    {
                        flag = true;
                    }
                }
                if (flag)
                {
                    VRCUiPopupManager.field_Private_Static_VRCUiPopupManager_0.ShowStandardPopup("emmVRC", "Are you sure you want to unfavorite the avatar \"" + apiAvatar.name + "\"?", "Yes", delegate()
                    {
                        MelonCoroutines.Start(CustomAvatarFavorites.UnfavoriteAvatar(apiAvatar));
                        VRCUiPopupManager.field_Private_Static_VRCUiPopupManager_0.HideCurrentPopup();
                    }, "No", delegate()
                    {
                        VRCUiPopupManager.field_Private_Static_VRCUiPopupManager_0.HideCurrentPopup();
                    }, null);
                    return;
                }
                if ((!(apiAvatar.releaseStatus == "public") && !(apiAvatar.authorId == APIUser.CurrentUser.id)) || apiAvatar.releaseStatus == null)
                {
                    VRCUiPopupManager.field_Private_Static_VRCUiPopupManager_0.ShowStandardPopup("emmVRC", "Cannot favorite this avatar (it is private!)", "Dismiss", delegate()
                    {
                        VRCUiPopupManager.field_Private_Static_VRCUiPopupManager_0.HideCurrentPopup();
                    }, null);
                    return;
                }
                if (CustomAvatarFavorites.LoadedAvatars.Count < 500)
                {
                    MelonCoroutines.Start(CustomAvatarFavorites.FavoriteAvatar(apiAvatar));
                    return;
                }
                VRCUiPopupManager.field_Private_Static_VRCUiPopupManager_0.ShowStandardPopup("emmVRC", "You have reached the maximum BetterEmmVRC favorites size.", "Dismiss", delegate()
                {
                    VRCUiPopupManager.field_Private_Static_VRCUiPopupManager_0.HideCurrentPopup();
                }, null);
            });
            CustomAvatarFavorites.FavoriteButtonNew.GetComponentInChildren <RectTransform>().localPosition += new Vector3(0f, 165f);
            CustomAvatarFavorites.FavoriteButtonNewText = CustomAvatarFavorites.FavoriteButtonNew.GetComponentInChildren <Text>();
            CustomAvatarFavorites.FavoriteButtonNewText.supportRichText = true;
            try
            {
                CustomAvatarFavorites.FavoriteButtonNew.transform.Find("Horizontal/FavoritesCountSpacingText").gameObject.SetActive(false);
                CustomAvatarFavorites.FavoriteButtonNew.transform.Find("Horizontal/FavoritesCurrentCountText").gameObject.SetActive(false);
                CustomAvatarFavorites.FavoriteButtonNew.transform.Find("Horizontal/FavoritesCountDividerText").gameObject.SetActive(false);
                CustomAvatarFavorites.FavoriteButtonNew.transform.Find("Horizontal/FavoritesMaxAvailableText").gameObject.SetActive(false);
            }
            catch (Exception)
            {
            }
            CustomAvatarFavorites.MigrateButton = UnityEngine.Object.Instantiate <GameObject>(CustomAvatarFavorites.FavoriteButton, QuickMenuUtils.GetVRCUiMInstance().field_Public_GameObject_0.transform.Find("Screens/Avatar/"));
            CustomAvatarFavorites.MigrateButton.GetComponentInChildren <RectTransform>().localPosition += new Vector3(0f, 765f);
            CustomAvatarFavorites.MigrateButton.GetComponentInChildren <Text>().text      = "Migrate";
            CustomAvatarFavorites.MigrateButton.GetComponentInChildren <Button>().onClick = new Button.ButtonClickedEvent();
            CustomAvatarFavorites.MigrateButton.GetComponentInChildren <Button>().onClick.AddListener((Action) delegate()
            {
                VRCUiPopupManager.field_Private_Static_VRCUiPopupManager_0.ShowStandardPopup("emmVRC", "Do you want to migrate your AviFav+ avatars to emmVRC?", "Yes", delegate()
                {
                    System.Collections.Generic.List <AviFavAvatar> list = Decoder.Decode(File.ReadAllText(Path.Combine(Environment.CurrentDirectory, "404Mods/AviFavorites/avatars.json"))).Make <System.Collections.Generic.List <AviFavAvatar> >();

                    System.Collections.Generic.List <string> list2 = new System.Collections.Generic.List <string>();

                    foreach (AviFavAvatar aviFavAvatar in list)
                    {
                        list2.Add(aviFavAvatar.AvatarID);
                    }
                    if (list2.Count > 0)
                    {
                        VRCUiPopupManager.field_Private_Static_VRCUiPopupManager_0.ShowStandardPopup("emmVRC", "Your avatars are being migrated in the background. This may take a few minutes. Please do not close VRChat.", "Dismiss", delegate()
                        {
                            VRCUiPopupManager.field_Private_Static_VRCUiPopupManager_0.HideCurrentPopup();
                        }, null);
                        CustomAvatarFavorites.MigrateButton.GetComponentInChildren <Button>().enabled = false;
                        CustomAvatarFavorites.MigrateButton.GetComponentInChildren <Text>().text      = "Migrating...";
                        MelonCoroutines.Start(AvatarUtilities.fetchAvatars(list2, delegate(System.Collections.Generic.List <ApiAvatar> avatars, bool errored)
                        {
                            MelonCoroutines.Start(AvatarUtilities.FavoriteAvatars(avatars, errored));
                        }));
                    }
                }, "No", delegate()
                {
                    VRCUiPopupManager.field_Private_Static_VRCUiPopupManager_0.HideCurrentPopup();
                }, null);
            });
            if (File.Exists(Path.Combine(Environment.CurrentDirectory, "404Mods/AviFavorites/avatars.json")))
            {
                CustomAvatarFavorites.MigrateButton.SetActive(true);
                CustomAvatarFavorites.MigrateButton.GetComponentInChildren <Button>().enabled = true;
            }
            else
            {
                CustomAvatarFavorites.MigrateButton.SetActive(false);
            }
            GameObject gameObject = QuickMenuUtils.GetVRCUiMInstance().field_Public_GameObject_0.transform.Find("Screens/Avatar/Vertical Scroll View/Viewport/Content/Legacy Avatar List").gameObject;

            CustomAvatarFavorites.PublicAvatarList = UnityEngine.Object.Instantiate <GameObject>(gameObject, gameObject.transform.parent);
            CustomAvatarFavorites.PublicAvatarList.transform.SetAsFirstSibling();
            CustomAvatarFavorites.ChangeButton    = QuickMenuUtils.GetVRCUiMInstance().field_Public_GameObject_0.transform.Find("Screens/Avatar/Change Button").gameObject;
            CustomAvatarFavorites.baseChooseEvent = CustomAvatarFavorites.ChangeButton.GetComponent <Button>().onClick;
            CustomAvatarFavorites.ChangeButton.GetComponent <Button>().onClick = new Button.ButtonClickedEvent();
            CustomAvatarFavorites.ChangeButton.GetComponent <Button>().onClick.AddListener((Action) delegate()
            {
                ApiAvatar selectedAvatar = CustomAvatarFavorites.pageAvatar.GetComponent <PageAvatar>().field_Public_SimpleAvatarPedestal_0.field_Internal_ApiAvatar_0;
                if (!selectedAvatar.id.Contains("local"))
                {
                    API.Fetch <ApiAvatar>(selectedAvatar.id, (Action <ApiContainer>) delegate(ApiContainer cont)
                    {
                        ApiAvatar apiAvatar = cont.Model.Cast <ApiAvatar>();

                        if (apiAvatar.releaseStatus == "private" && apiAvatar.authorId != APIUser.CurrentUser.id && apiAvatar.authorName != "tafi_licensed")
                        {
                            VRCUiPopupManager field_Private_Static_VRCUiPopupManager_ = VRCUiPopupManager.field_Private_Static_VRCUiPopupManager_0;
                            string title       = "emmVRC";
                            string content     = "Cannot switch into this avatar (it is private).\nDo you want to unfavorite it?";
                            string button1Text = "Yes";
                            Action button1Action;

                            button1Action = delegate()
                            {
                                MelonCoroutines.Start(CustomAvatarFavorites.UnfavoriteAvatar(selectedAvatar));
                                VRCUiPopupManager.field_Private_Static_VRCUiPopupManager_0.HideCurrentPopup();
                            };

                            field_Private_Static_VRCUiPopupManager_.ShowStandardPopup(title, content, button1Text, button1Action, "No", delegate()
                            {
                                VRCUiPopupManager.field_Private_Static_VRCUiPopupManager_0.HideCurrentPopup();
                            }, null);
                            return;
                        }
                        CustomAvatarFavorites.baseChooseEvent.Invoke();
                    }, (Action <ApiContainer>) delegate(ApiContainer cont)
                    {
                        VRCUiPopupManager field_Private_Static_VRCUiPopupManager_ = VRCUiPopupManager.field_Private_Static_VRCUiPopupManager_0;
                        string title       = "emmVRC";
                        string content     = "Cannot switch into this avatar (no longer available).\nDo you want to unfavorite it?";
                        string button1Text = "Yes";
                        Action button1Action;
                        button1Action = delegate()
                        {
                            MelonCoroutines.Start(CustomAvatarFavorites.UnfavoriteAvatar(selectedAvatar));
                            VRCUiPopupManager.field_Private_Static_VRCUiPopupManager_0.HideCurrentPopup();
                        };
                        field_Private_Static_VRCUiPopupManager_.ShowStandardPopup(title, content, button1Text, button1Action, "No", delegate()
                        {
                            VRCUiPopupManager.field_Private_Static_VRCUiPopupManager_0.HideCurrentPopup();
                        }, null);
                    }, false);
                    return;
                }
                if (selectedAvatar.releaseStatus == "private" && selectedAvatar.authorId != APIUser.CurrentUser.id && selectedAvatar.authorName != "tafi_licensed")
                {
                    VRCUiPopupManager.field_Private_Static_VRCUiPopupManager_0.ShowStandardPopup("emmVRC", "Cannot switch into this avatar (it is private).\nDo you want to unfavorite it?", "Yes", delegate()
                    {
                        MelonCoroutines.Start(CustomAvatarFavorites.UnfavoriteAvatar(selectedAvatar));
                        VRCUiPopupManager.field_Private_Static_VRCUiPopupManager_0.HideCurrentPopup();
                    }, "No", delegate()
                    {
                        VRCUiPopupManager.field_Private_Static_VRCUiPopupManager_0.HideCurrentPopup();
                    }, null);
                    return;
                }
                if (selectedAvatar.releaseStatus == "unavailable")
                {
                    VRCUiPopupManager.field_Private_Static_VRCUiPopupManager_0.ShowStandardPopup("emmVRC", "Cannot switch into this avatar (no longer available).\nDo you want to unfavorite it?", "Yes", delegate()
                    {
                        MelonCoroutines.Start(CustomAvatarFavorites.UnfavoriteAvatar(selectedAvatar));
                        VRCUiPopupManager.field_Private_Static_VRCUiPopupManager_0.HideCurrentPopup();
                    }, "No", delegate()
                    {
                        VRCUiPopupManager.field_Private_Static_VRCUiPopupManager_0.HideCurrentPopup();
                    }, null);
                    return;
                }
                CustomAvatarFavorites.baseChooseEvent.Invoke();
            });
            CustomAvatarFavorites.avText          = CustomAvatarFavorites.PublicAvatarList.transform.Find("Button").gameObject;
            CustomAvatarFavorites.avTextText      = CustomAvatarFavorites.avText.GetComponentInChildren <Text>();
            CustomAvatarFavorites.avTextText.text = "(0) BetterEmmVRC Favorites";
            CustomAvatarFavorites.currPageAvatar  = CustomAvatarFavorites.pageAvatar.GetComponent <PageAvatar>();
            CustomAvatarFavorites.NewAvatarList   = CustomAvatarFavorites.PublicAvatarList.GetComponent <UiAvatarList>();
            CustomAvatarFavorites.NewAvatarList.clearUnseenListOnCollapse = false;
            CustomAvatarFavorites.NewAvatarList.field_Public_EnumNPublicSealedvaInPuMiFaSpClPuLiCrUnique_0 = UiAvatarList.EnumNPublicSealedvaInPuMiFaSpClPuLiCrUnique.SpecificList;
            CustomAvatarFavorites.SearchAvatarList = CustomAvatarFavorites.PublicAvatarList.GetComponent <UiAvatarList>();
            CustomAvatarFavorites.SearchAvatarList.clearUnseenListOnCollapse = false;
            CustomAvatarFavorites.currPageAvatar.field_Public_SimpleAvatarPedestal_0.field_Public_Single_0 *= 0.85f;
            GameObject gameObject2 = UnityEngine.Object.Instantiate <GameObject>(CustomAvatarFavorites.ChangeButton, CustomAvatarFavorites.avText.transform.parent);

            gameObject2.GetComponentInChildren <Text>().text = "↻";
            gameObject2.GetComponent <Button>().onClick.RemoveAllListeners();
            gameObject2.GetComponent <Button>().onClick.AddListener((Action) delegate()
            {
                CustomAvatarFavorites.Searching = false;

                MelonCoroutines.Start(CustomAvatarFavorites.RefreshMenu(0.5f));

                CustomAvatarFavorites.avText.GetComponentInChildren <Text>().text = "(" + CustomAvatarFavorites.LoadedAvatars.Count.ToString() + ") BetterEmmVRC Favorites";
            });
            gameObject2.GetComponent <RectTransform>().sizeDelta /= new Vector2(4f, 1f);
            gameObject2.transform.SetParent(CustomAvatarFavorites.avText.transform, true);
            gameObject2.GetComponent <RectTransform>().anchoredPosition = CustomAvatarFavorites.avText.transform.Find("ToggleIcon").GetComponent <RectTransform>().anchoredPosition + new Vector2(975f, 0f);
            CustomAvatarFavorites.pageAvatar.transform.Find("AvatarModel").transform.localPosition += new Vector3(0f, 60f, 0f);
            CustomAvatarFavorites.LoadedAvatars   = new Il2CppSystem.Collections.Generic.List <ApiAvatar>();
            CustomAvatarFavorites.SearchedAvatars = new Il2CppSystem.Collections.Generic.List <ApiAvatar>();
        }
示例#4
0
        // -1050 1470
        // 420x420

        private IEnumerator Setup()
        {
            isReady = false;
            while (!isReady)
            {
                yield return(VRCUiManagerUtils.WaitForUiManagerInit());

                isReady = true;
            }
            Transform ButtonBase = QuickMenuUtils.GetQuickMenuInstance().transform.Find("ShortcutMenu/SettingsButton");

            if (ButtonBase != null)
            {
                // Log window button
                ToggleLog      = UnityUiUtils.DuplicateButton(ButtonBase, "Toggle\nConsole", new Vector2(0f, 0f));
                ToggleLog.name = "ToggleLogButton";
                ToggleLog.GetComponent <Button>().onClick.RemoveAllListeners();
                ToggleLog.GetComponent <Button>().onClick.AddListener(delegate
                {
                    ToggleLogWindow();
                });
                ToggleLog.GetComponent <RectTransform>().SetParent(ButtonBase.parent, true);
                ToggleLog.GetComponent <RectTransform>().localPosition = new Vector3(-1050f, 1470f, 0f);
                ToggleLog.GetComponent <RectTransform>().localRotation = Quaternion.identity;

                // Clear Log window button
                ClearLog      = UnityUiUtils.DuplicateButton(ButtonBase, "Clear\nConsole", new Vector2(0f, 0f));
                ClearLog.name = "ClearLogButton";
                ClearLog.GetComponent <Button>().onClick.RemoveAllListeners();
                ClearLog.GetComponent <Button>().onClick.AddListener(delegate
                {
                    ConsoleLogs.Clear();
                });
                ClearLog.GetComponent <RectTransform>().SetParent(ButtonBase.parent, true);
                ClearLog.GetComponent <RectTransform>().localPosition = new Vector3(-1050f, 1050f, 0f);
                ClearLog.GetComponent <RectTransform>().localRotation = Quaternion.identity;

                // Third person button
                ToggleTP      = UnityUiUtils.DuplicateButton(ButtonBase, "Toggle\nThird\nPerson", new Vector2(0f, 0f));
                ToggleTP.name = "ToggleTPButton";
                ToggleTP.GetComponent <Button>().onClick.RemoveAllListeners();
                ToggleTP.GetComponent <Button>().onClick.AddListener(delegate
                {
                    ToggleThirdPerson();
                });
                ToggleTP.GetComponent <RectTransform>().SetParent(ButtonBase.parent, true);
                ToggleTP.GetComponent <RectTransform>().localPosition = new Vector3(-1050f, 1890f, 0f);
                ToggleTP.GetComponent <RectTransform>().localRotation = Quaternion.identity;

                // Enable jumping
                AddJump      = UnityUiUtils.DuplicateButton(ButtonBase, "Enable\nJumping", new Vector2(0f, 0f));
                AddJump.name = "ToggleJumpButton";
                AddJump.GetComponent <Button>().onClick.RemoveAllListeners();
                AddJump.GetComponent <Button>().onClick.AddListener(delegate
                {
                    EnableJumping();
                });
                AddJump.GetComponent <RectTransform>().SetParent(ButtonBase.parent, true);
                AddJump.GetComponent <RectTransform>().localPosition = new Vector3(1050f, 1890f, 0f);
                AddJump.GetComponent <RectTransform>().localRotation = Quaternion.identity;

                // Enable no gravity
                ToggleGravity      = UnityUiUtils.DuplicateButton(ButtonBase, "Toggle\nGravity", new Vector2(0f, 0f));
                ToggleGravity.name = "ToggleGravityButton";
                ToggleGravity.GetComponent <Button>().onClick.RemoveAllListeners();
                ToggleGravity.GetComponent <Button>().onClick.AddListener(delegate
                {
                    toggleGravity();
                });
                ToggleGravity.GetComponent <RectTransform>().SetParent(ButtonBase.parent, true);
                ToggleGravity.GetComponent <RectTransform>().localPosition = new Vector3(1050f, 630f, 0f);
                ToggleGravity.GetComponent <RectTransform>().localRotation = Quaternion.identity;

                // Enable noclip
                ToggleNoclip      = UnityUiUtils.DuplicateButton(ButtonBase, "Toggle\nNoclip", new Vector2(0f, 0f));
                ToggleNoclip.name = "ToggleNoclipButton";
                ToggleNoclip.GetComponent <Button>().onClick.RemoveAllListeners();
                ToggleNoclip.GetComponent <Button>().onClick.AddListener(delegate
                {
                    toggleNoclip();
                });
                ToggleNoclip.GetComponent <RectTransform>().SetParent(ButtonBase.parent, true);
                ToggleNoclip.GetComponent <RectTransform>().localPosition = new Vector3(-1050f, 630f, 0f);
                ToggleNoclip.GetComponent <RectTransform>().localRotation = Quaternion.identity;
            }
            else
            {
                AddDebugLine("Failed to find Button Base");
            }
            InvokeRepeating("WatchForPlayers", 0f, 5f);
        }