using UnityEngine; using UnityEditor; using UnityEditor.Animations; // ReSharper disable once CheckNamespace namespace AnimatorAsCode.V1 { public interface IAacAssetContainerProvider { void SaveAsPersistenceRequired(Object objectToAdd); void SaveAsRegular(Object objectToAdd); void ClearPreviousAssets(); } internal sealed class AacSimpleAssetContainerProvider : IAacAssetContainerProvider { private readonly AacConfiguration _configuration; internal AacSimpleAssetContainerProvider(AacConfiguration configuration) { _configuration = configuration; } public void SaveAsPersistenceRequired(Object objectToAdd) { if (_configuration.AssetContainer == null) return; if (_configuration.ContainerMode != AacConfiguration.Container.Never) AssetDatabase.AddObjectToAsset(objectToAdd, _configuration.AssetContainer); } public void SaveAsRegular(Object objectToAdd) { if (_configuration.AssetContainer == null) return; if (_configuration.ContainerMode == AacConfiguration.Container.Everything) AssetDatabase.AddObjectToAsset(objectToAdd, _configuration.AssetContainer); } public void ClearPreviousAssets() { if (_configuration.AssetContainer == null) return; var allSubAssets = AssetDatabase.LoadAllAssetsAtPath(AssetDatabase.GetAssetPath(_configuration.AssetContainer)); foreach (var subAsset in allSubAssets) { if ( ( subAsset.name.StartsWith($"{AacInternals.AutoGeneratedPrefix}{_configuration.AssetKey}__") || subAsset.name.StartsWith($"{AacInternals.AutoGeneratedLegacyPrefix}{_configuration.AssetKey}__") ) && (subAsset is AnimationClip || subAsset is BlendTree || subAsset is AvatarMask)) { AssetDatabase.RemoveObjectFromAsset(subAsset); } } } } }