AssetBundleGraph.IntegratedGUIFilter.Filter C# (CSharp) Method

Filter() private method

private Filter ( NodeData node, Dictionary inputGroupAssets, Action Output ) : void
node NodeData
inputGroupAssets Dictionary
Output Action
return void
        private void Filter(NodeData node, Dictionary<string, List<Asset>> inputGroupAssets, Action<ConnectionData, Dictionary<string, List<Asset>>, List<string>> Output)
        {
            foreach(var connToChild in connectionsToChild) {

                var filter = node.FilterConditions.Find(fc => fc.ConnectionPoint.Id == connToChild.FromNodeConnectionPointId);
                UnityEngine.Assertions.Assert.IsNotNull(filter);

                var output = new Dictionary<string, List<Asset>>();

                foreach(var groupKey in inputGroupAssets.Keys) {
                    var assets = inputGroupAssets[groupKey];
                    var filteringAssets = new List<FilterableAsset>();
                    assets.ForEach(a => filteringAssets.Add(new FilterableAsset(a)));

                    // filter by keyword first
                    List<FilterableAsset> keywordContainsAssets = filteringAssets.Where(
                        assetData =>
                        !assetData.isFiltered &&
                        Regex.IsMatch(assetData.asset.importFrom, filter.FilterKeyword, RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace)
                    ).ToList();

                    List<FilterableAsset> finalFilteredAsset = new List<FilterableAsset>();

                    // then, filter by type
                    foreach (var a in keywordContainsAssets) {
                        if (filter.FilterKeytype != AssetBundleGraphSettings.DEFAULT_FILTER_KEYTYPE) {
                            var assumedType = TypeUtility.FindTypeOfAsset(a.asset.importFrom);
                            if (assumedType == null || filter.FilterKeytype != assumedType.ToString()) {
                                continue;
                            }
                        }
                        finalFilteredAsset.Add(a);
                    }

                    // mark assets as exhausted.
                    foreach (var a in finalFilteredAsset) {
                        a.isFiltered = true;
                    }

                    output[groupKey] = finalFilteredAsset.Select(v => v.asset).ToList();
                }

                Output(connToChild, output, null);
            }
        }