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));
        }
Beispiel #2
0
        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;
        }
Beispiel #3
0
        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);
            }
        }