using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
namespace XGame.Editor.Build.AssetBundles
{
public partial class ABPackerInfoManifest : ScriptableObject
{
public AssetBundleNameMode bundleNameMode;
///
/// 是否合并shader
/// 将*.shadervariants文件和其所依赖的shader一起打在一个包内
///
public bool isMergeShader;
[SerializeField]
private List packerInfos;
public List PackerInfos
{
get
{
if (packerInfos == null)
{
packerInfos = new List();
}
return packerInfos;
}
}
public bool AddPackerInfo(ABPackerInfo info)
{
if (packerInfos == null)
{
packerInfos = new List();
}
int index = packerInfos.FindIndex((item => item.GUID.Equals(info.GUID)));
if (index < 0)
{
packerInfos.Add(info);
return true;
}
else
{
Debug.LogError($"Add PackerInfo. but it's repeat. {info}");
}
return false;
}
public bool IsContainGUID(string guid)
{
if (!string.IsNullOrEmpty(guid))
{
var index = packerInfos?.FindIndex((info) => info.GUID.Equals(guid)) ?? -1;
if (index != -1)
{
return true;
}
}
return false;
}
public bool IsContainAssetPath(string assetPath)
{
var guid = AssetDatabase.AssetPathToGUID(assetPath);
return IsContainGUID(guid);
}
public bool TryGetPackerInfoByGUID(string guid, out ABPackerInfo packerInfo)
{
if (!string.IsNullOrEmpty(guid))
{
var index = packerInfos?.FindIndex((info) => info.GUID.Equals(guid)) ?? -1;
if (index != -1)
{
packerInfo = packerInfos[index];
return true;
}
}
packerInfo = default;
return false;
}
public bool TryGetPackerInfoByAssetPath(string assetPath, out ABPackerInfo packerInfo)
{
return TryGetPackerInfoByGUID(AssetDatabase.AssetPathToGUID(assetPath), out packerInfo);
}
public bool VerifyInfoRepeat()
{
var listGUID = new List();
bool result = true;
if (packerInfos != null)
{
foreach (var info in packerInfos)
{
if (listGUID.Contains(info.GUID))
{
Debug.LogError($"PackerInfo repeat. {info}");
result = false;
continue;
}
listGUID.Add(info.GUID);
}
}
listGUID.Clear();
return result;
}
public void Save()
{
EditorUtility.SetDirty(this);
AssetDatabase.SaveAssets();
AssetDatabase.Refresh();
}
}
}