using XGame.Framework.Serialization;
namespace XGame.Framework.Asset
{
[System.Serializable]
public class AssetBundleInfo : ISerializable
{
///
/// bundleName,等于originBundleName或者bundleId
///
public string bundleName;
public string variantName;
public string originBundleName;
public uint bundleId;
//public string[] assetPaths;
public string[] assets;
///
/// 依赖的bundle列表
///
public uint[] dependencies;
///
/// bundle的偏移值
///
public uint offset;
public string FullName
{
get
{
if (string.IsNullOrEmpty(bundleName))
{
return string.Empty;
}
return string.IsNullOrEmpty(variantName) ? bundleName : $"{bundleName}.{variantName}";
}
}
public int AssetsCount => assets?.Length ?? 0;
public int DependenciesCount => dependencies?.Length ?? 0;
public bool ContainsAsset(string assetName)
{
if (assets == null || string.IsNullOrEmpty(assetName))
return false;
var index = System.Array.FindIndex(assets, assetName.Equals);
return index >= 0;
}
//public int CompareTo(object obj)
//{
// if (obj is AssetBundleInfo compareInfo)
// {
// //多语言的bundle排前面
// var idx_0 = originBundleName.Contains("/") ? -1 : 1;
// var idx_1 = compareInfo.originBundleName.Contains("/") ? -1 : 1;
// var remain = idx_0 - idx_1;
// if (remain != 0)
// {
// return remain;
// }
// //ResStatic的bundle排最后
// //idx_0 = originBundleName.Contains("/res/static/") ? 1 : -1;
// //idx_1 = compareInfo.originBundleName.StartsWith("/res/static/") ? 1 : -1;
// //remain = idx_0 - idx_1;
// //if (remain != 0)
// //{
// // return remain;
// //}
// return string.CompareOrdinal(originBundleName, compareInfo.originBundleName);
// }
// return -1;
//}
void ISerializable.Serialize(IWriter writer)
{
writer.Write(bundleName);
writer.Write(variantName);
writer.Write(bundleId);
writer.Write(assets);
writer.Write(dependencies);
writer.Write(offset);
}
void ISerializable.Deserialize(IReader reader)
{
bundleName = reader.ReadString();
variantName = reader.ReadString();
bundleId = reader.ReadUInt();
assets = reader.ReadEnumerable();
dependencies = reader.ReadEnumerable();
offset = reader.ReadUInt();
}
}
}