private static HashSet <System.Type> GetWhitelistForSDK(GameObject avatar)
        {
            VRC.SDKBase.VRC_AvatarDescriptor descriptor = avatar.GetComponent <VRC.SDKBase.VRC_AvatarDescriptor>();

#if VRC_SDK_VRCSDK2
            if (descriptor is VRCSDK2.VRC_AvatarDescriptor)
            {
                if (CombinedComponentTypeWhiteListSdk2 == null)
                {
                    List <string> concatenation = new List <string>(ComponentTypeWhiteListCommon);
                    concatenation.AddRange(ComponentTypeWhiteListSdk2);
                    CombinedComponentTypeWhiteListSdk2 = concatenation.ToArray();
                }
                return(ValidationUtils.WhitelistedTypes("avatar-sdk2", CombinedComponentTypeWhiteListSdk2));
            }
#endif
#if VRC_SDK_VRCSDK3
            if (descriptor is VRC.SDK3.Avatars.Components.VRCAvatarDescriptor)
            {
                if (CombinedComponentTypeWhiteListSdk3 == null)
                {
                    List <string> concatenation = new List <string>(ComponentTypeWhiteListCommon);
                    concatenation.AddRange(ComponentTypeWhiteListSdk3);
                    CombinedComponentTypeWhiteListSdk3 = concatenation.ToArray();
                }
                return(ValidationUtils.WhitelistedTypes("avatar-sdk3", CombinedComponentTypeWhiteListSdk3));
            }
#endif
            throw new System.Exception("Malformed avatar");
        }
Esempio n. 2
0
        /// <summary>
        /// Show a window with a target PC avatar.
        /// </summary>
        /// <param name="avatar">Target PC avatar.</param>
        internal static void ShowWindow(VRC_AvatarDescriptor avatar)
        {
            var window = (AvatarConverterWindow)GetWindow(typeof(AvatarConverterWindow));

            window.model.TargetAvatarDescriptor = avatar;
            window.SetArtifactsPath(avatar);
            window.Show();
        }
Esempio n. 3
0
 private static void OnAvatarInstantiated(GameObject __0, VRC.SDKBase.VRC_AvatarDescriptor __1, bool __2)
 {
     if ((__0 == null) || (__1 == null))
     {
         return;
     }
     for (int i = 0; i < CameraParsers.Length; i++)
     {
         CameraParsers[i] = null;
     }
     Camera[] foundcameras = __0.GetComponentsInChildren <Camera>(true);
     if (foundcameras.Length <= 0)
     {
         return;
     }
     if (TempCameraArray == null)
     {
         TempCameraArray = new Camera[CameraParsers.Length];
     }
     else
     {
         for (int i = 0; i < TempCameraArray.Length; i++)
         {
             TempCameraArray[i] = null;
         }
     }
     foreach (Camera cam in foundcameras)
     {
         RenderTexture tex = cam.targetTexture;
         if (tex == null)
         {
             continue;
         }
         for (int i = 0; i < VRCBhaptics_Config.RenderTextureNames.Length; i++)
         {
             if (!tex.name.Equals(VRCBhaptics_Config.RenderTextureNames[i]))
             {
                 continue;
             }
             TempCameraArray[i] = cam;
             break;
         }
     }
     for (int i = 0; i < TempCameraArray.Length; i++)
     {
         if (TempCameraArray[i] == null)
         {
             continue;
         }
         CameraParsers[i] = TempCameraArray[i].gameObject.AddComponent(Il2CppType.Of <VRCBhaptics_CameraParser>()).TryCast <VRCBhaptics_CameraParser>();
         CameraParsers[i].SetupFromConfig(i);
         MelonLogger.Msg(VRCBhaptics_Config.ProperNames[i].ToString() + " Linked!");
     }
 }
 public static bool DetectCustomShaderKeywords(VRC.SDKBase.VRC_AvatarDescriptor ad)
 {
     foreach (Renderer renderer in ad.transform.GetComponentsInChildren <Renderer>(true))
     {
         foreach (Material mat in renderer.sharedMaterials)
         {
             if (mat != null)
             {
                 foreach (string keyword in mat.shaderKeywords)
                 {
                     if (!keywordBlacklist.Contains(keyword))
                     {
                         return(true);
                     }
                 }
             }
         }
     }
     return(false);
 }
Esempio n. 5
0
        private void SetArtifactsPath(VRC_AvatarDescriptor avatar)
        {
            const string ArtifactsRootDir = "Assets/KRT/QuestAvatars";

            model.outputPath = $"{ArtifactsRootDir}/{avatar.name}";
        }
Esempio n. 6
0
 /// <summary>
 /// Initializes a new instance of the <see cref="VRChatAvatar"/> class with an existing avatar.
 /// </summary>
 /// <param name="avatar">VRChat avatar.</param>
 internal VRChatAvatar(VRC_AvatarDescriptor avatar)
 {
     AvatarDescriptor = avatar;
 }