private void Filter(List <Asset> assets, Action <string, List <string> > FilterResultReceiver)
{
var exhaustiveAssets = new List <ExhaustiveAssetPathData>();
foreach (var asset in assets)
{
exhaustiveAssets.Add(new ExhaustiveAssetPathData(asset.absoluteAssetPath, asset.importFrom));
}
for (var i = 0; i < connectionIdsFromThisNodeToChildNodesOrFakeIds.Length; i++)
{
// these 3 parameters depends on their contents order.
var connectionId = connectionIdsFromThisNodeToChildNodesOrFakeIds[i];
var keyword = containsKeywords[i];
var keytype = containsKeytypes[i];
// filter by keyword first
List <ExhaustiveAssetPathData> keywordContainsAssets = exhaustiveAssets.Where(
assetData =>
!assetData.isFilterExhausted &&
Regex.IsMatch(assetData.importFrom, keyword, RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace)
).ToList();
var typeMatchedAssetsAbsolutePaths = new List <string>();
// then, filter by type
foreach (var containedAssetData in keywordContainsAssets)
{
if (keytype != AssetBundleGraphSettings.DEFAULT_FILTER_KEYTYPE)
{
var assumedType = TypeUtility.FindTypeOfAsset(containedAssetData.importFrom);
if (assumedType == null || keytype != assumedType.ToString())
{
continue;
}
}
typeMatchedAssetsAbsolutePaths.Add(containedAssetData.absoluteAssetPath);
}
// mark assets as exhausted.
foreach (var exhaustiveAsset in exhaustiveAssets)
{
if (typeMatchedAssetsAbsolutePaths.Contains(exhaustiveAsset.absoluteAssetPath))
{
exhaustiveAsset.isFilterExhausted = true;
}
}
if (connectionId != AssetBundleGraphSettings.FILTER_FAKE_CONNECTION_ID)
{
FilterResultReceiver(connectionId, typeMatchedAssetsAbsolutePaths);
}
}
}