/// <summary> /// NOTE: intended to be called from 'VRCAvatarManager.SafetyCheckAndComponentScan' /// but temporarily disabled (until we enable texture streaming) /// </summary> public static void ReportTexturesWithoutMipMapStreaming(VRC.Core.ApiAvatar avatar, GameObject target) { var badTextures = new List <Texture2D>(); foreach (Renderer r in target.GetComponentsInChildren <Renderer>()) { foreach (Material m in r.sharedMaterials) { foreach (int i in m.GetTexturePropertyNameIDs()) { Texture2D t = m.GetTexture(i) as Texture2D; if (!t) { continue; } if ((t.mipmapCount > 0) && !t.streamingMipmaps) { badTextures.Add(t); } } } } if (badTextures.Count > 0) { string warning = "[" + avatar.name + "]==> One or more avatar textures have non-streaming mipmaps: "; foreach (Texture2D t in badTextures) { warning += "'" + t.name + "', "; } warning = warning.Remove(warning.LastIndexOf(",")); Debug.LogWarning(warning + "."); } }
public override void VRChat_OnUiManagerInit() { ShowUserMethod = typeof(QuickMenu).GetMethods().Where(it => it.GetParameters().Length == 2 && it.GetParameters()[0].ParameterType.ToString() == "System.Int32" && it.GetParameters()[1].ParameterType.ToString() == "System.Boolean").First(); GameObject pageUserInfoObj = GameObject.Find("UserInterface/MenuContent/Screens/UserInfo"); if (pageUserInfoObj != null) { pageUserInfo = pageUserInfoObj.GetComponent <VRC.UI.PageUserInfo>(); if (pageUserInfo != null) { pageAvatar = Resources.FindObjectsOfTypeAll <VRC.UI.PageAvatar>().First(p => (p.transform.Find("Change Button") != null)); if (pageAvatar != null) { GameObject statspopup = GameObject.Find("UserInterface/MenuContent/Popups/AvatarStatsPopup"); if (statspopup != null) { Transform documentationbutton = statspopup.transform.Find("AvatarStatsMenu/_Buttons/DocumentationButton"); if (documentationbutton != null) { RectTransform recttrans = documentationbutton.GetComponent <RectTransform>(); if (recttrans != null) { recttrans.sizeDelta = new Vector2((recttrans.sizeDelta.x - 600), recttrans.sizeDelta.y); recttrans.localPosition = new Vector3((recttrans.localPosition.x - 300), recttrans.localPosition.y, recttrans.localPosition.z); } Transform buttontxt_trans = documentationbutton.Find("Text"); if (buttontxt_trans != null) { Text buttontxt = buttontxt_trans.GetComponent <Text>(); if (buttontxt != null) { buttontxt.fontSize -= 10; } } Transform buttonoverheadtxt_trans = documentationbutton.Find("Text (1)"); if (buttonoverheadtxt_trans != null) { RectTransform recttranstxt = buttonoverheadtxt_trans.GetComponent <RectTransform>(); if (recttranstxt != null) { recttranstxt.sizeDelta = new Vector2((recttranstxt.sizeDelta.x + 600), recttranstxt.sizeDelta.y); recttranstxt.localPosition = new Vector3((recttranstxt.localPosition.x + 300), recttranstxt.localPosition.y, recttranstxt.localPosition.z); } } Transform showcreatorbutton_trans = DuplicateButton(documentationbutton, "Show Avatar Author", new Vector2(600, 0)); Button showcreatorbutton = showcreatorbutton_trans.GetComponent <Button>(); showcreatorbutton.onClick = new Button.ButtonClickedEvent(); showcreatorbutton.onClick.AddListener(DelegateSupport.ConvertDelegate <UnityAction>(new Action(() => { if ((pageUserInfo != null) && (pageAvatar != null) && (pageAvatar.field_Public_SimpleAvatarPedestal_0 != null)) { VRC.Core.ApiAvatar currentApiAvatar = pageAvatar.field_Public_SimpleAvatarPedestal_0.field_Internal_ApiAvatar_0; if (currentApiAvatar != null) { string authorid = currentApiAvatar.authorId; if (!string.IsNullOrEmpty(authorid)) { HideCurrentPopup(); VRCUiManager.prop_VRCUiManager_0.Method_Public_Void_Boolean_1(true); VRC.Core.APIUser.FetchUser(authorid, new Action <VRC.Core.APIUser>((user) => { QuickMenu.prop_QuickMenu_0.prop_APIUser_0 = user; ShowUserMethod.Invoke(QuickMenu.prop_QuickMenu_0, new object[] { 4, false }); }), null); } } } }))); } } } } } }
IEnumerator WaitForUIManager() { yield return(VRCUiManagerUtils.WaitForUiManagerInit()); GameObject pageUserInfoObj = GameObject.Find("UserInterface/MenuContent/Screens/UserInfo"); if (pageUserInfoObj != null) { pageUserInfo = pageUserInfoObj.GetComponent <VRC.UI.PageUserInfo>(); if (pageUserInfo != null) { pageAvatar = Resources.FindObjectsOfTypeAll <VRC.UI.PageAvatar>().First(p => (p.transform.Find("Change Button") != null)); if (pageAvatar != null) { GameObject statspopup = GameObject.Find("UserInterface/MenuContent/Popups/AvatarStatsPopup"); if (statspopup != null) { Transform documentationbutton = statspopup.transform.Find("AvatarStatsMenu/_Buttons/DocumentationButton"); if (documentationbutton != null) { RectTransform recttrans = documentationbutton.GetComponent <RectTransform>(); if (recttrans != null) { recttrans.sizeDelta = new Vector2((recttrans.sizeDelta.x - 600), recttrans.sizeDelta.y); recttrans.localPosition = new Vector3((recttrans.localPosition.x - 300), recttrans.localPosition.y, recttrans.localPosition.z); } Transform buttontxt_trans = documentationbutton.Find("Text"); if (buttontxt_trans != null) { Text buttontxt = buttontxt_trans.GetComponent <Text>(); if (buttontxt != null) { buttontxt.fontSize -= 10; } } Transform buttonoverheadtxt_trans = documentationbutton.Find("Text (1)"); if (buttonoverheadtxt_trans != null) { RectTransform recttranstxt = buttonoverheadtxt_trans.GetComponent <RectTransform>(); if (recttranstxt != null) { recttranstxt.sizeDelta = new Vector2((recttranstxt.sizeDelta.x + 600), recttranstxt.sizeDelta.y); recttranstxt.localPosition = new Vector3((recttranstxt.localPosition.x + 300), recttranstxt.localPosition.y, recttranstxt.localPosition.z); } } Transform showcreatorbutton_trans = UnityUiUtils.DuplicateButton(documentationbutton, "Show Avatar Author", new Vector2(600, 0)); Button showcreatorbutton = showcreatorbutton_trans.GetComponent <Button>(); showcreatorbutton.onClick = new Button.ButtonClickedEvent(); showcreatorbutton.onClick.AddListener(() => { if ((pageUserInfo != null) && (pageAvatar != null) && (pageAvatar.avatar != null)) { VRC.Core.ApiAvatar currentApiAvatar = pageAvatar.avatar.apiAvatar; if (currentApiAvatar != null) { string authorid = currentApiAvatar.authorId; if (!string.IsNullOrEmpty(authorid)) { VRC.Core.APIUser.FetchUser(authorid, (VRC.Core.APIUser user) => { VRCUiManagerUtils.GetVRCUiManager().ShowScreen(pageUserInfo); pageUserInfo.SetupUserInfo(user); VRCUiPopupManagerUtils.GetVRCUiPopupManager().HideCurrentPopup(); }, null); } } } }); } } } } } }