using System; using System.IO; using System.Xml; using System.Xml.Serialization; using UnityEngine; namespace BuildReportTool { // class for holding options // this is the class that is serialized when saving the options [System.Serializable, XmlRoot("BuildReportToolOptions")] public class SavedOptions { public string EditorLogOverridePath; public string BuildReportFolderName = BuildReportTool.Options.BUILD_REPORTS_DEFAULT_FOLDER_NAME; /// /// Where build reports are saved to:
/// 0: in user's My Documents
/// 1: or outside the project folder. ///
public int SaveType; // ---------------------------------------------------------- public bool CollectBuildInfo = true; public bool CalculateAssetDependencies = true; public bool CalculateAssetDependenciesOnUnusedToo = false; public bool GetProjectSettings = true; public bool IncludeUsedAssetsInReportCreation = true; public bool IncludeUnusedAssetsInReportCreation = true; public bool IncludeUnusedPrefabsInReportCreation = true; public bool IncludeBuildSizeInReportCreation = true; public bool IncludeSvnInUnused = true; public bool IncludeGitInUnused = true; public bool GetSizeBeforeBuildForUsedAssets = true; public bool GetImportedSizesForUnusedAssets = true; // ---------------------------------------------------------- /// /// 0: Use file filters from global config.
/// 1: Use file filters embedded in the saved build report file. ///
public int FilterToUseInt; public int AssetListPaginationLength = 300; public int UnusedAssetsEntriesPerBatch = 1000; public bool DoubleClickOnAssetWillPing = false; /// /// Method of displaying labels that explain how one asset uses another.
/// 0: verbose (use words only)
/// 1: standard (use arrows when possible, use words for extra info)
/// 2: minimal (use arrows only, don't show extra info even if available) ///
public int AssetUsageLabelType; public bool ShowAssetPrimaryUsersInTooltipIfAvailable = true; public bool ShowTooltipThumbnail = true; /// /// 0: Thumbnail should appear when mouse is hovering over asset icon only.
/// 1: Thumbnail should appear when mouse is hovering over asset label too, not just on the icon. ///
public int ShowThumbnailOnHoverType; public int TooltipThumbnailWidth = 256; public int TooltipThumbnailHeight = 256; public int TooltipThumbnailZoomedInWidth = 512; public int TooltipThumbnailZoomedInHeight = 512; public int NumberOfTopLargestUsedAssetsToShow = 10; public int NumberOfTopLargestUnusedAssetsToShow = 10; // ---------------------------------------------------------- public bool AllowDeletingOfUsedAssets; public bool ShowImportedSizeForUsedAssets = false; public bool AutoShowWindowAfterNormalBuild = true; public bool AutoResortAssetsWhenUnityEditorRegainsFocus = false; public bool UseThreadedReportGeneration = true; public bool UseThreadedFileLoading = false; // ---------------------------------------------------------- public void OnBeforeSave() { // get rid of invalid characters for folder name // but still allow slash/backward slash so user could make relative paths BuildReportFolderName = BuildReportFolderName.Replace(":", string.Empty); BuildReportFolderName = BuildReportFolderName.Replace("*", string.Empty); BuildReportFolderName = BuildReportFolderName.Replace("?", string.Empty); BuildReportFolderName = BuildReportFolderName.Replace("\"", string.Empty); BuildReportFolderName = BuildReportFolderName.Replace("<", string.Empty); BuildReportFolderName = BuildReportFolderName.Replace(">", string.Empty); BuildReportFolderName = BuildReportFolderName.Replace("|", string.Empty); } public static void Save(string savePath, SavedOptions optionsToSave) { optionsToSave.OnBeforeSave(); XmlSerializer x = new XmlSerializer( typeof(SavedOptions) ); TextWriter writer = new StreamWriter(savePath); x.Serialize(writer, optionsToSave); writer.Close(); //Debug.LogFormat("Build Report Tool: Saved options to: {0}", savePath); } public static SavedOptions Load(string path) { SavedOptions result = null; XmlSerializer x = new XmlSerializer( typeof(SavedOptions) ); try { using (FileStream fs = new FileStream(path, FileMode.Open)) { if (fs.Length == 0) { // nothing inside return null; } XmlReader reader = new XmlTextReader(fs); result = (SavedOptions) x.Deserialize(reader); fs.Close(); } } catch(Exception e) { Debug.LogFormat("Build Report Tool: Error found upon loading options XML file in {0}\nWill create a new options file instead.\n\nError: {1}", path, e); return new SavedOptions(); } //Debug.LogFormat("Build Report Tool: Loaded options from: {0}", path); return result; } } public static class Options { // ======================================================= // constants public const string BUILD_REPORT_PACKAGE_MOVED_MSG = "BuildReport package seems to have been moved. Finding..."; public const string BUILD_REPORT_PACKAGE_MISSING_MSG = "Unable to find BuildReport package folder! Cannot find suitable GUI Skin.\nTry editing the source code and change the value\nof `BUILD_REPORT_TOOL_DEFAULT_PATH` to what path the Build Report Tool is in.\nMake sure the folder is named \"BuildReport\"."; public const string BUILD_REPORT_TOOL_DEFAULT_PATH = "Assets/BuildReport"; public const string BUILD_REPORT_TOOL_DEFAULT_FOLDER_NAME = "BuildReport"; public const string BUILD_REPORTS_DEFAULT_FOLDER_NAME = "UnityBuildReports"; public const int SAVE_TYPE_PERSONAL = 0; public const int SAVE_TYPE_PROJECT = 1; public const int ASSET_USAGE_LABEL_TYPE_VERBOSE = 0; public const int ASSET_USAGE_LABEL_TYPE_STANDARD = 1; public const int ASSET_USAGE_LABEL_TYPE_MINIMAL = 2; // ======================================================= // static BuildReportTool.SavedOptions _savedOptions; static string _foundPathForSavedOptions; const string SAVED_OPTIONS_FILENAME = "BuildReportToolOptions.xml"; static string DefaultOptionsPath { get { return string.Format("{0}/BuildReport/{1}", Application.dataPath, SAVED_OPTIONS_FILENAME); } } static bool IsBuildReportInRegularPaths { get { return Directory.Exists(string.Format("{0}/BuildReport", Application.dataPath)) || Directory.Exists(string.Format("{0}/Plugins/BuildReport", Application.dataPath)); } } public static string FoundPathForSavedOptions { get { return _foundPathForSavedOptions; } } static void InitializeOptionsIfNeeded() { if (_savedOptions == null) { _foundPathForSavedOptions = string.Empty; } if (string.IsNullOrEmpty(_foundPathForSavedOptions)) { // look for the file in this order: // 1. inside the BuildReport folder // 2. at the very topmost Assets folder // 3. outside the Assets folder // 4. in the ProjectSettings folder // 5. in the User's My Documents folder // --------------------------------------------------- // look in /Assets/BuildReport/ var optionsInBuildReportFolder = DefaultOptionsPath; if (File.Exists(optionsInBuildReportFolder)) { _savedOptions = BuildReportTool.SavedOptions.Load(optionsInBuildReportFolder); _foundPathForSavedOptions = optionsInBuildReportFolder; return; } // --------------------------------------------------- // look in /Assets/Plugins/BuildReport/ var optionsInPluginsBuildReport = string.Format("{0}/Plugins/BuildReport/{1}", Application.dataPath, SAVED_OPTIONS_FILENAME); if (File.Exists(optionsInPluginsBuildReport)) { _savedOptions = BuildReportTool.SavedOptions.Load(optionsInPluginsBuildReport); _foundPathForSavedOptions = optionsInPluginsBuildReport; return; } // --------------------------------------------------- // search for "BuildReport" folder and look in there if (!IsBuildReportInRegularPaths) { string customBuildReportFolder = BuildReportTool.Util.FindAssetFolder(Application.dataPath, BUILD_REPORT_TOOL_DEFAULT_FOLDER_NAME); if (!string.IsNullOrEmpty(customBuildReportFolder)) { var optionsInCustomBuildReportFolder = string.Format("{0}/{1}", customBuildReportFolder, SAVED_OPTIONS_FILENAME); if (File.Exists(optionsInCustomBuildReportFolder)) { _savedOptions = BuildReportTool.SavedOptions.Load(optionsInCustomBuildReportFolder); _foundPathForSavedOptions = optionsInCustomBuildReportFolder; return; } } } // --------------------------------------------------- // look in /Assets/ var optionsInTopmostAssets = string.Format("{0}/{1}", Application.dataPath, SAVED_OPTIONS_FILENAME); if (File.Exists(optionsInTopmostAssets)) { _savedOptions = BuildReportTool.SavedOptions.Load(optionsInTopmostAssets); _foundPathForSavedOptions = optionsInTopmostAssets; return; } // --------------------------------------------------- // look in Unity project folder (where Assets, Library, and ProjectSettings folder are) var outsideAssets = BuildReportTool.Util.GetProjectPath(Application.dataPath); var optionsOutsideAssets = string.Format("{0}{1}", outsideAssets, SAVED_OPTIONS_FILENAME); if (File.Exists(optionsOutsideAssets)) { _savedOptions = BuildReportTool.SavedOptions.Load(optionsOutsideAssets); _foundPathForSavedOptions = optionsOutsideAssets; return; } // --------------------------------------------------- // look inside ProjectSettings folder var optionsInProjectSettings = string.Format("{0}ProjectSettings/{1}", outsideAssets, SAVED_OPTIONS_FILENAME); //Debug.LogFormat("Looking in {0}", optionsInProjectSettings); if (File.Exists(optionsInProjectSettings)) { _savedOptions = BuildReportTool.SavedOptions.Load(optionsInProjectSettings); _foundPathForSavedOptions = optionsInProjectSettings; return; } // --------------------------------------------------- // look in /My Documents/UnityBuildReports/ var optionsInMyDocs = string.Format("{0}/{1}/{2}", BuildReportTool.Util.GetUserHomeFolder(), BUILD_REPORTS_DEFAULT_FOLDER_NAME, SAVED_OPTIONS_FILENAME); //Debug.LogFormat("Looking in {0}", optionsInMyDocs); if (File.Exists(optionsInMyDocs)) { _savedOptions = BuildReportTool.SavedOptions.Load(optionsInMyDocs); _foundPathForSavedOptions = optionsInMyDocs; return; } // --------------------------------------------------- } // if the options file failed to load // one last try // if (_savedOptions == null) { if (!string.IsNullOrEmpty(_foundPathForSavedOptions) && File.Exists(_foundPathForSavedOptions)) { // there's a valid options file already // just load that one _savedOptions = BuildReportTool.SavedOptions.Load(_foundPathForSavedOptions); } } // could not load the file, or there isn't one yet (at least, not in any recognized valid paths). // so create a new one at the default path if (_savedOptions == null) { _savedOptions = new BuildReportTool.SavedOptions(); _foundPathForSavedOptions = DefaultOptionsPath; var defaultFolder = Path.GetDirectoryName(_foundPathForSavedOptions); if (!string.IsNullOrEmpty(defaultFolder) && !Directory.Exists(defaultFolder)) { Directory.CreateDirectory(defaultFolder); } SavedOptions.Save(_foundPathForSavedOptions, _savedOptions); Debug.LogFormat("Build Report Tool: Created a new options file at: {0}", _foundPathForSavedOptions); } } public static void RefreshOptions() { _foundPathForSavedOptions = string.Empty; _savedOptions = null; InitializeOptionsIfNeeded(); } static void SaveOptions() { if (string.IsNullOrEmpty(_foundPathForSavedOptions)) { return; } if (_savedOptions == null || !File.Exists(_foundPathForSavedOptions)) { _foundPathForSavedOptions = string.Empty; return; } SavedOptions.Save(_foundPathForSavedOptions, _savedOptions); } // ======================================================= // user options public static string EditorLogOverridePath { get { InitializeOptionsIfNeeded(); return _savedOptions.EditorLogOverridePath; } set { InitializeOptionsIfNeeded(); if (_savedOptions.EditorLogOverridePath != value) { _savedOptions.EditorLogOverridePath = value; SaveOptions(); } } } public static bool IncludeSvnInUnused { get { InitializeOptionsIfNeeded(); return _savedOptions.IncludeSvnInUnused; } set { InitializeOptionsIfNeeded(); if (_savedOptions.IncludeSvnInUnused != value) { _savedOptions.IncludeSvnInUnused = value; SaveOptions(); } } } public static bool IncludeGitInUnused { get { InitializeOptionsIfNeeded(); return _savedOptions.IncludeGitInUnused; } set { InitializeOptionsIfNeeded(); if (_savedOptions.IncludeGitInUnused != value) { _savedOptions.IncludeGitInUnused = value; SaveOptions(); } } } public static FileFilterDisplay GetOptionFileFilterDisplay() { return FileFilterDisplay.DropDown; } public static bool AllowDeletingOfUsedAssets { get { InitializeOptionsIfNeeded(); return _savedOptions.AllowDeletingOfUsedAssets; } set { InitializeOptionsIfNeeded(); if (_savedOptions.AllowDeletingOfUsedAssets != value) { _savedOptions.AllowDeletingOfUsedAssets = value; SaveOptions(); } } } public static bool CollectBuildInfo { get { InitializeOptionsIfNeeded(); return _savedOptions.CollectBuildInfo; } set { InitializeOptionsIfNeeded(); if (_savedOptions.CollectBuildInfo != value) { _savedOptions.CollectBuildInfo = value; SaveOptions(); } } } public static bool CalculateAssetDependencies { get { InitializeOptionsIfNeeded(); return _savedOptions.CalculateAssetDependencies; } set { InitializeOptionsIfNeeded(); if (_savedOptions.CalculateAssetDependencies != value) { _savedOptions.CalculateAssetDependencies = value; SaveOptions(); } } } public static bool CalculateAssetDependenciesOnUnusedToo { get { InitializeOptionsIfNeeded(); return _savedOptions.CalculateAssetDependenciesOnUnusedToo; } set { InitializeOptionsIfNeeded(); if (_savedOptions.CalculateAssetDependenciesOnUnusedToo != value) { _savedOptions.CalculateAssetDependenciesOnUnusedToo = value; SaveOptions(); } } } public static string BuildReportFolderName { get { InitializeOptionsIfNeeded(); return _savedOptions.BuildReportFolderName; } set { InitializeOptionsIfNeeded(); if (_savedOptions.BuildReportFolderName != value) { _savedOptions.BuildReportFolderName = value; SaveOptions(); } } } /// /// Full path to folder where Build Reports are saved. /// Note: Makes use of Application.dataPath so it has to be called from the main thread. /// public static string BuildReportSavePath { get { if (BuildReportTool.Options.SaveType == BuildReportTool.Options.SAVE_TYPE_PERSONAL) { return BuildReportTool.Util.GetUserHomeFolder() + "/" + BuildReportFolderName; } else { // assume BuildReportTool.Options.SaveType == BuildReportTool.Options.SAVE_TYPE_PROJECT // makes use of Application.dataPath so it has to be called from the main thread return BuildReportTool.ReportGenerator.GetSavePathToProjectFolder() + "/" + BuildReportFolderName; } } } public static int SaveType { get { InitializeOptionsIfNeeded(); return _savedOptions.SaveType; } set { InitializeOptionsIfNeeded(); if (_savedOptions.SaveType != value) { _savedOptions.SaveType = value; SaveOptions(); } } } public enum FileFilterDisplay { DropDown = 0, Buttons = 1 } public enum FilterToUseType { UseConfiguredFile, UseEmbedded } public static FilterToUseType GetOptionFilterToUse() { switch (FilterToUseInt) { case 0: return FilterToUseType.UseConfiguredFile; case 1: return FilterToUseType.UseEmbedded; } return FilterToUseType.UseConfiguredFile; } public static bool ShouldUseConfiguredFileFilters() { //Debug.Log("GetOptionFilterToUse() " + GetOptionFilterToUse()); return GetOptionFilterToUse() == FilterToUseType.UseConfiguredFile; } public static bool ShouldUseEmbeddedFileFilters() { return GetOptionFilterToUse() == FilterToUseType.UseEmbedded; } public static int FilterToUseInt { get { InitializeOptionsIfNeeded(); return _savedOptions.FilterToUseInt; } set { InitializeOptionsIfNeeded(); if (_savedOptions.FilterToUseInt != value) { _savedOptions.FilterToUseInt = value; SaveOptions(); } } } public static int AssetListPaginationLength { get { InitializeOptionsIfNeeded(); return _savedOptions.AssetListPaginationLength; } set { InitializeOptionsIfNeeded(); if (_savedOptions.AssetListPaginationLength != value) { _savedOptions.AssetListPaginationLength = value; SaveOptions(); } } } public static int AssetUsageLabelType { get { InitializeOptionsIfNeeded(); return _savedOptions.AssetUsageLabelType; } set { InitializeOptionsIfNeeded(); if (_savedOptions.AssetUsageLabelType != value) { _savedOptions.AssetUsageLabelType = value; SaveOptions(); } } } public static bool IsAssetUsageLabelTypeOnVerbose { get { InitializeOptionsIfNeeded(); return _savedOptions.AssetUsageLabelType == ASSET_USAGE_LABEL_TYPE_VERBOSE; } } public static bool IsAssetUsageLabelTypeOnStandard { get { InitializeOptionsIfNeeded(); return _savedOptions.AssetUsageLabelType == ASSET_USAGE_LABEL_TYPE_STANDARD; } } public static bool IsAssetUsageLabelTypeOnMinimal { get { InitializeOptionsIfNeeded(); return _savedOptions.AssetUsageLabelType == ASSET_USAGE_LABEL_TYPE_MINIMAL; } } public static bool DoubleClickOnAssetWillPing { get { InitializeOptionsIfNeeded(); return _savedOptions.DoubleClickOnAssetWillPing; } set { InitializeOptionsIfNeeded(); if (_savedOptions.DoubleClickOnAssetWillPing != value) { _savedOptions.DoubleClickOnAssetWillPing = value; SaveOptions(); } } } public static bool ShowAssetPrimaryUsersInTooltipIfAvailable { get { InitializeOptionsIfNeeded(); return _savedOptions.ShowAssetPrimaryUsersInTooltipIfAvailable; } set { InitializeOptionsIfNeeded(); if (_savedOptions.ShowAssetPrimaryUsersInTooltipIfAvailable != value) { _savedOptions.ShowAssetPrimaryUsersInTooltipIfAvailable = value; SaveOptions(); } } } public static bool ShowTooltipThumbnail { get { InitializeOptionsIfNeeded(); return _savedOptions.ShowTooltipThumbnail; } set { InitializeOptionsIfNeeded(); if (_savedOptions.ShowTooltipThumbnail != value) { _savedOptions.ShowTooltipThumbnail = value; SaveOptions(); } } } public static int ShowThumbnailOnHoverType { get { InitializeOptionsIfNeeded(); return _savedOptions.ShowThumbnailOnHoverType; } set { InitializeOptionsIfNeeded(); if (_savedOptions.ShowThumbnailOnHoverType != value) { _savedOptions.ShowThumbnailOnHoverType = value; SaveOptions(); } } } /// /// If thumbnail should appear when mouse is hovering over asset label too, not just on the icon. /// public static bool ShowThumbnailOnHoverLabelToo { get { InitializeOptionsIfNeeded(); return _savedOptions.ShowThumbnailOnHoverType == 1; } } public static int TooltipThumbnailWidth { get { InitializeOptionsIfNeeded(); return _savedOptions.TooltipThumbnailWidth; } set { InitializeOptionsIfNeeded(); if (_savedOptions.TooltipThumbnailWidth != value) { _savedOptions.TooltipThumbnailWidth = value; SaveOptions(); } } } public static int TooltipThumbnailHeight { get { InitializeOptionsIfNeeded(); return _savedOptions.TooltipThumbnailHeight; } set { InitializeOptionsIfNeeded(); if (_savedOptions.TooltipThumbnailHeight != value) { _savedOptions.TooltipThumbnailHeight = value; SaveOptions(); } } } public static int TooltipThumbnailZoomedInWidth { get { InitializeOptionsIfNeeded(); return _savedOptions.TooltipThumbnailZoomedInWidth; } set { InitializeOptionsIfNeeded(); if (_savedOptions.TooltipThumbnailZoomedInWidth != value) { _savedOptions.TooltipThumbnailZoomedInWidth = value; SaveOptions(); } } } public static int TooltipThumbnailZoomedInHeight { get { InitializeOptionsIfNeeded(); return _savedOptions.TooltipThumbnailZoomedInHeight; } set { InitializeOptionsIfNeeded(); if (_savedOptions.TooltipThumbnailZoomedInHeight != value) { _savedOptions.TooltipThumbnailZoomedInHeight = value; SaveOptions(); } } } public static int UnusedAssetsEntriesPerBatch { get { InitializeOptionsIfNeeded(); return _savedOptions.UnusedAssetsEntriesPerBatch; } set { InitializeOptionsIfNeeded(); if (_savedOptions.UnusedAssetsEntriesPerBatch != value) { _savedOptions.UnusedAssetsEntriesPerBatch = value; SaveOptions(); } } } public static int NumberOfTopLargestUsedAssetsToShow { get { InitializeOptionsIfNeeded(); return _savedOptions.NumberOfTopLargestUsedAssetsToShow; } set { InitializeOptionsIfNeeded(); if (_savedOptions.NumberOfTopLargestUsedAssetsToShow != value) { _savedOptions.NumberOfTopLargestUsedAssetsToShow = value; SaveOptions(); } } } public static int NumberOfTopLargestUnusedAssetsToShow { get { InitializeOptionsIfNeeded(); return _savedOptions.NumberOfTopLargestUnusedAssetsToShow; } set { InitializeOptionsIfNeeded(); if (_savedOptions.NumberOfTopLargestUnusedAssetsToShow != value) { _savedOptions.NumberOfTopLargestUnusedAssetsToShow = value; SaveOptions(); } } } // Build Report Calculation // Full report // No prefabs in unused assets calculation // No unused assets calculation, but still has used assets list (won't collect prefabs in scene) // No used assets and unused assets calculation (overview only) public static bool IncludeUsedAssetsInReportCreation { get { InitializeOptionsIfNeeded(); return _savedOptions.IncludeUsedAssetsInReportCreation; } set { InitializeOptionsIfNeeded(); if (_savedOptions.IncludeUsedAssetsInReportCreation != value) { _savedOptions.IncludeUsedAssetsInReportCreation = value; SaveOptions(); } } } public static bool IncludeUnusedAssetsInReportCreation { get { InitializeOptionsIfNeeded(); return _savedOptions.IncludeUnusedAssetsInReportCreation; } set { InitializeOptionsIfNeeded(); if (_savedOptions.IncludeUnusedAssetsInReportCreation != value) { _savedOptions.IncludeUnusedAssetsInReportCreation = value; SaveOptions(); } } } public static bool IncludeUnusedPrefabsInReportCreation { get { InitializeOptionsIfNeeded(); return _savedOptions.IncludeUnusedPrefabsInReportCreation; } set { InitializeOptionsIfNeeded(); if (_savedOptions.IncludeUnusedPrefabsInReportCreation != value) { _savedOptions.IncludeUnusedPrefabsInReportCreation = value; SaveOptions(); } } } public static bool IncludeBuildSizeInReportCreation { get { InitializeOptionsIfNeeded(); return _savedOptions.IncludeBuildSizeInReportCreation; } set { InitializeOptionsIfNeeded(); if (_savedOptions.IncludeBuildSizeInReportCreation != value) { _savedOptions.IncludeBuildSizeInReportCreation = value; SaveOptions(); } } } public static bool ShowImportedSizeForUsedAssets { get { InitializeOptionsIfNeeded(); return _savedOptions.ShowImportedSizeForUsedAssets; } set { InitializeOptionsIfNeeded(); if (_savedOptions.ShowImportedSizeForUsedAssets != value) { _savedOptions.ShowImportedSizeForUsedAssets = value; SaveOptions(); } } } public static bool GetSizeBeforeBuildForUsedAssets { get { InitializeOptionsIfNeeded(); return _savedOptions.GetSizeBeforeBuildForUsedAssets; } set { InitializeOptionsIfNeeded(); if (_savedOptions.GetSizeBeforeBuildForUsedAssets != value) { _savedOptions.GetSizeBeforeBuildForUsedAssets = value; SaveOptions(); } } } public static bool GetImportedSizesForUnusedAssets { get { InitializeOptionsIfNeeded(); return _savedOptions.GetImportedSizesForUnusedAssets; } set { InitializeOptionsIfNeeded(); if (_savedOptions.GetImportedSizesForUnusedAssets != value) { _savedOptions.GetImportedSizesForUnusedAssets = value; SaveOptions(); } } } public static bool GetProjectSettings { get { InitializeOptionsIfNeeded(); return _savedOptions.GetProjectSettings; } set { InitializeOptionsIfNeeded(); if (_savedOptions.GetProjectSettings != value) { _savedOptions.GetProjectSettings = value; SaveOptions(); } } } public static bool IsCalculationLevelAtFull(bool includeUsedAssets, bool includeUnusedAssets, bool includeUnusedPrefabs) { return includeUsedAssets && includeUnusedAssets && includeUnusedPrefabs; } public static bool IsCalculationLevelAtNoUnusedPrefabs(bool includeUsedAssets, bool includeUnusedAssets, bool includeUnusedPrefabs) { return includeUsedAssets && includeUnusedAssets && !includeUnusedPrefabs; } public static bool IsCalculationLevelAtNoUnusedAssets(bool includeUsedAssets, bool includeUnusedAssets, bool includeUnusedPrefabs) { // unused prefabs are not checked. if unused assets are not calculated, it is understood that unused prefabs are not included return includeUsedAssets && !includeUnusedAssets; } public static bool IsCalculationLevelAtOverviewOnly(bool includeUsedAssets, bool includeUnusedAssets, bool includeUnusedPrefabs) { // if used assets not included, it is understood that unused assets are not included too. // if used assets are not included, there is no way to determing if an asset is unused. return !includeUsedAssets; } public static bool IsCurrentCalculationLevelAtFull { get { return IsCalculationLevelAtFull(IncludeUsedAssetsInReportCreation, IncludeUnusedAssetsInReportCreation, IncludeUnusedPrefabsInReportCreation); } } public static bool IsCurrentCalculationLevelAtNoUnusedPrefabs { get { return IsCalculationLevelAtNoUnusedPrefabs(IncludeUsedAssetsInReportCreation, IncludeUnusedAssetsInReportCreation, IncludeUnusedPrefabsInReportCreation); } } public static bool IsCurrentCalculationLevelAtNoUnusedAssets { get { return IsCalculationLevelAtNoUnusedAssets(IncludeUsedAssetsInReportCreation, IncludeUnusedAssetsInReportCreation, IncludeUnusedPrefabsInReportCreation); } } public static bool IsCurrentCalculationLevelAtOverviewOnly { get { return IsCalculationLevelAtOverviewOnly(IncludeUsedAssetsInReportCreation, IncludeUnusedAssetsInReportCreation, IncludeUnusedPrefabsInReportCreation); } } public static void SetCalculationLevelToFull() { IncludeUsedAssetsInReportCreation = true; IncludeUnusedAssetsInReportCreation = true; IncludeUnusedPrefabsInReportCreation = true; } public static void SetCalculationLevelToNoUnusedPrefabs() { IncludeUsedAssetsInReportCreation = true; IncludeUnusedAssetsInReportCreation = true; IncludeUnusedPrefabsInReportCreation = false; } public static void SetCalculationLevelToNoUnusedAssets() { IncludeUsedAssetsInReportCreation = true; IncludeUnusedAssetsInReportCreation = false; IncludeUnusedPrefabsInReportCreation = false; } public static void SetCalculationLevelToOverviewOnly() { IncludeUsedAssetsInReportCreation = false; IncludeUnusedAssetsInReportCreation = false; IncludeUnusedPrefabsInReportCreation = false; } public static bool AutoShowWindowAfterNormalBuild { get { InitializeOptionsIfNeeded(); return _savedOptions.AutoShowWindowAfterNormalBuild; } set { InitializeOptionsIfNeeded(); if (_savedOptions.AutoShowWindowAfterNormalBuild != value) { _savedOptions.AutoShowWindowAfterNormalBuild = value; SaveOptions(); } } } public static bool AutoResortAssetsWhenUnityEditorRegainsFocus { get { InitializeOptionsIfNeeded(); return _savedOptions.AutoResortAssetsWhenUnityEditorRegainsFocus; } set { InitializeOptionsIfNeeded(); if (_savedOptions.AutoResortAssetsWhenUnityEditorRegainsFocus != value) { _savedOptions.AutoResortAssetsWhenUnityEditorRegainsFocus = value; SaveOptions(); } } } public static bool UseThreadedReportGeneration { get { InitializeOptionsIfNeeded(); return _savedOptions.UseThreadedReportGeneration; } set { InitializeOptionsIfNeeded(); if (_savedOptions.UseThreadedReportGeneration != value) { _savedOptions.UseThreadedReportGeneration = value; SaveOptions(); } } } public static bool UseThreadedFileLoading { get { InitializeOptionsIfNeeded(); return _savedOptions.UseThreadedFileLoading; } set { InitializeOptionsIfNeeded(); if (_savedOptions.UseThreadedFileLoading != value) { _savedOptions.UseThreadedFileLoading = value; SaveOptions(); } } } public static bool ShouldShowWindowAfterBuild { get { return (!IsInBatchMode && AutoShowWindowAfterNormalBuild); } } public static bool IsInBatchMode { get { return UnityEditorInternal.InternalEditorUtility.inBatchMode; #if OTHER_BATCH_MODE_DETECTION_CODE // different ways to find out actually. // included here in case a new version of Unity // removes our current way of figuring out batchmode. // check the isHumanControllingUs bool return UnityEditorInternal.InternalEditorUtility.isHumanControllingUs; // check the command line args for "-batchmode" string[] arguments = Environment.GetCommandLineArgs(); for (int n = 0, len = arguments.Length; n < len; ++n) { if (arguments[n] == "-batchmode") { return true; } } return false; #endif } } } }