/// <summary> /// Returns an error description in case any of these are true for the current SDK info: /// <list type="bullet"> /// <item> <description>Its type doesn't exist anymore.</description> </item> /// <item> <description>It's a fallback SDK.</description> </item> /// <item> <description>It doesn't have its scripting define symbols added.</description> </item> /// <item> <description>It's missing its vendor SDK.</description> </item> /// </list> /// </summary> /// <typeparam name="BaseType">The SDK base type of which to return the error description for. Must be a subclass of SDK_Base.</typeparam> /// <param name="prettyName">The pretty name of the base SDK to use when returning error descriptions.</param> /// <param name="info">The SDK info of which to return the error description for.</param> /// <param name="installedInfos">The installed SDK infos.</param> /// <returns>An error description if there is one, else `null`.</returns> private static string GetSDKErrorDescription <BaseType>(string prettyName, VRTK_SDKInfo info, IEnumerable <VRTK_SDKInfo> installedInfos) where BaseType : SDK_Base { Type selectedType = info.type; Type baseType = typeof(BaseType); Type fallbackType = VRTK_SDKManager.SDKFallbackTypesByBaseType[baseType]; if (selectedType == fallbackType) { return(string.Format("The fallback {0} SDK is being used because there is no other {0} SDK set in the SDK Setup.", prettyName)); } if (!VRTK_SharedMethods.IsTypeAssignableFrom(baseType, selectedType) || VRTK_SharedMethods.IsTypeAssignableFrom(fallbackType, selectedType)) { string description = string.Format("The fallback {0} SDK is being used despite being set to '{1}'.", prettyName, selectedType.Name); if (installedInfos.Select(installedInfo => installedInfo.type).Contains(selectedType)) { return(description + " Its needed scripting define symbols are not added. You can click the GameObject with the `VRTK_SDKManager` script attached to it in Edit Mode and choose to automatically let the manager handle the scripting define symbols."); } return(description + " The needed vendor SDK isn't installed."); } return(null); }