private void FixRule(AssetAuditTreeElement assetAuditTreeElement) { AssetAuditor.FixRule(assetAuditTreeElement, assetRules[selected]); elements = new List <AssetAuditTreeElement>(); AssetAuditor.queueComplete += OnGatherDataComplete; AssetAuditor.AddEnumerator(AssetAuditor.GatherData(assetRules[selected], elements, selectedSelective)); }
public static void FixRule(AssetAuditTreeElement data, AssetRule assetRule) { string ruleAssetPath = AssetDatabase.GUIDToAssetPath(assetRule.AssetGuid); string affectedAssetPath = data.projectPath; switch (data.assetType) { case AssetType.Texture: TextureImporter ruleTexImporter = AssetImporter.GetAtPath(ruleAssetPath) as TextureImporter; TextureImporter affectedAssetTexImporter = AssetImporter.GetAtPath(affectedAssetPath) as TextureImporter; if (assetRule.SelectiveMode) { SerializedObject ruleImporterSO = new SerializedObject(ruleTexImporter); SerializedObject affectedAssetImporterSO = new SerializedObject(affectedAssetTexImporter); CopySelectiveProperties(affectedAssetImporterSO, ruleImporterSO, assetRule); } else { EditorUtility.CopySerialized(ruleTexImporter, affectedAssetTexImporter); } affectedAssetTexImporter.userData = ""; affectedAssetTexImporter.SaveAndReimport(); break; case AssetType.Model: ModelImporter ruleModelImporter = AssetImporter.GetAtPath(ruleAssetPath) as ModelImporter; ModelImporter affectedAssetModelImporter = AssetImporter.GetAtPath(affectedAssetPath) as ModelImporter; if (assetRule.SelectiveMode) { SerializedObject ruleImporterSO = new SerializedObject(ruleModelImporter); SerializedObject affectedAssetImporterSO = new SerializedObject(affectedAssetModelImporter); CopySelectiveProperties(affectedAssetImporterSO, ruleImporterSO, assetRule); } else { EditorUtility.CopySerialized(ruleModelImporter, affectedAssetModelImporter); } affectedAssetModelImporter.userData = ""; affectedAssetModelImporter.SaveAndReimport(); break; case AssetType.Audio: AudioImporter ruleAudioImporter = AssetImporter.GetAtPath(ruleAssetPath) as AudioImporter; AudioImporter affectedAssetAudioImporter = AssetImporter.GetAtPath(affectedAssetPath) as AudioImporter; if (assetRule.SelectiveMode) { SerializedObject ruleImporterSO = new SerializedObject(ruleAudioImporter); SerializedObject affectedAssetImporterSO = new SerializedObject(affectedAssetAudioImporter); CopySelectiveProperties(affectedAssetImporterSO, ruleImporterSO, assetRule); } else { EditorUtility.CopySerialized(ruleAudioImporter, affectedAssetAudioImporter); } affectedAssetAudioImporter.userData = ""; affectedAssetAudioImporter.SaveAndReimport(); break; case AssetType.Folder: break; default: throw new ArgumentOutOfRangeException(); } data.conforms = true; }
public static IEnumerable <float> GatherData(AssetRule assetRule, List <AssetAuditTreeElement> elements, int selectedSelective) { int id = -1; // get the affected assets string[] affectedAssets = GetAffectedAssets(); if (affectedAssets == null) { Debug.Log(" null affected assets"); } // build the directory tree from the affected assets elements.Add(new AssetAuditTreeElement("Root", "", -1, 0, false, false, AssetType.Folder)); // early out if there are no affected assets if (affectedAssets.Length == 0) { Debug.Log("no affected assets "); if (queueComplete != null) { queueComplete.Invoke(); } yield break; } AssetAuditTreeElement assetsFolder = new AssetAuditTreeElement("Assets", "Assets", 0, id++, false, false, AssetType.Folder); // add the project root "Assets" folder elements.Add(assetsFolder); if (assetsFolder.children == null) { assetsFolder.children = new List <TreeElement>(); } float progress = 0f; foreach (var affectedAsset in affectedAssets) { // split the path string path = affectedAsset.Substring(7); var strings = path.Split(new[] { '/' }, StringSplitOptions.None); string projectPath = "Assets"; // the first entries have lower depth for (int i = 0; i < strings.Length; i++) { projectPath += "/" + strings[i]; // the last element is the asset itself if (i == strings.Length - 1) { var result = CheckAffectedAsset(affectedAsset, assetRule, selectedSelective); var element = new AssetAuditTreeElement(strings[i], projectPath, i + 1, id + 1, true, result, assetRule.assetType); elements.Add(element); id++; } else if (!elements.Exists(element => element.name == strings[i] && element.projectPath == projectPath)) { var assetAuditTreeElement = new AssetAuditTreeElement(strings[i], projectPath, i + 1, id + 1, false, false, AssetType.Folder); elements.Add(assetAuditTreeElement); id++; } } progress += 1f; yield return(progress / affectedAssets.Length); } }