Skip to content

Commit

Permalink
Filter and Bundlizer node completed.
Browse files Browse the repository at this point in the history
  • Loading branch information
sassembla committed Aug 17, 2016
1 parent 712b776 commit 87dafc5
Show file tree
Hide file tree
Showing 5 changed files with 133 additions and 37 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -142,11 +142,14 @@ node generation from GUI
public const string DEFAULT_OUTPUTPOINT_LABEL = "+";
public const string BUNDLIZER_BUNDLE_OUTPUTPOINT_LABEL = "bundles";
public const string BUNDLIZER_RESOURCES_OUTPUTPOINT_LABEL = "bundled assets";

public const string BUNDLIZER_FAKE_CONNECTION_ID = "b_______-____-____-____-____________";

public const string DEFAULT_FILTER_KEYWORD = "keyword";
public const string DEFAULT_FILTER_KEYTYPE = "Any";

public const string FILTER_KEYWORD_WILDCARD = "*";
public const string FILTER_FAKE_CONNECTION_ID = "f_______-____-____-____-____________";


public enum NodeKind : int {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -762,7 +762,7 @@ run after parent run.
var orderedNodeOutputPointIds = nodeDatas.Where(node => node.nodeId == nodeId).SelectMany(node => node.outputPointIds).ToList();

/*
get node's outputPoint ordered connection ids.
get connection ids which is orderd by node's outputPoint-order.
*/
var orderedConnectionIds = new List<string>(nonOrderedConnectionsFromThisNodeToChildNode.Count);
foreach (var orderedNodeOutputPointId in orderedNodeOutputPointIds) {
Expand All @@ -776,7 +776,7 @@ get node's outputPoint ordered connection ids.
}

/*
FilterNode and BundlizerNode uses multiple output connections.
FilterNode and BundlizerNode uses specific multiple output connections.
ExportNode does not have output.
but all other nodes has only one output connection and uses first connection.
*/
Expand Down Expand Up @@ -882,7 +882,28 @@ merge connection result by group key.
}

case AssetBundleGraphSettings.NodeKind.FILTER_GUI: {
var executor = new IntegratedGUIFilter(orderedConnectionIds, currentNodeData.containsKeywords, currentNodeData.containsKeytypes);
/*
Filter requires "outputPoint ordered exist connection Id and Fake connection Id" for
exhausting assets by keyword and type correctly.
outputPoint which has connection can through assets by keyword and keytype,
also outputPoint which doesn't have connection should take assets by keyword and keytype.
*/
var orderedConnectionIdsAndFakeConnectionIds = new string[orderedNodeOutputPointIds.Count];
for (var i = 0; i < orderedNodeOutputPointIds.Count; i++) {
var orderedNodeOutputPointId = orderedNodeOutputPointIds[i];

foreach (var nonOrderedConnectionFromThisNodeToChildNode in nonOrderedConnectionsFromThisNodeToChildNode) {
var connectionOutputPointId = nonOrderedConnectionFromThisNodeToChildNode.fromNodeOutputPointId;
if (orderedNodeOutputPointId == connectionOutputPointId) {
orderedConnectionIdsAndFakeConnectionIds[i] = nonOrderedConnectionFromThisNodeToChildNode.connectionId;
break;
} else {
orderedConnectionIdsAndFakeConnectionIds[i] = AssetBundleGraphSettings.FILTER_FAKE_CONNECTION_ID;
}
}
}
var executor = new IntegratedGUIFilter(orderedConnectionIdsAndFakeConnectionIds, currentNodeData.containsKeywords, currentNodeData.containsKeytypes);
executor.Run(nodeName, nodeId, string.Empty, inputParentResults, alreadyCachedPaths, Output);
break;
}
Expand Down Expand Up @@ -911,21 +932,50 @@ merge connection result by group key.
}

case AssetBundleGraphSettings.NodeKind.BUNDLIZER_GUI: {
/*
Bundlizer requires assetOutputConnectionId and additional resourceOutputConnectionId.
both-connected, or both-not-connected, or one of them is connected. 4 patterns exists.
Bundler Node's outputPoint [0] is always the point for assetOutputConnectionId.
Bundler Node's outputPoint [1] is always the point for resourceOutputConnectionId.
if one of these outputPoint don't have connection, use Fake connection id for correct output.
unorderedConnectionId \
----> orderedConnectionIdsAndFakeConnectionIds.
orderedOutputPointId /
*/
var orderedConnectionIdsAndFakeConnectionIds = new string[orderedNodeOutputPointIds.Count];
for (var i = 0; i < orderedNodeOutputPointIds.Count; i++) {
var orderedNodeOutputPointId = orderedNodeOutputPointIds[i];

foreach (var nonOrderedConnectionFromThisNodeToChildNode in nonOrderedConnectionsFromThisNodeToChildNode) {
var connectionOutputPointId = nonOrderedConnectionFromThisNodeToChildNode.fromNodeOutputPointId;
if (orderedNodeOutputPointId == connectionOutputPointId) {
orderedConnectionIdsAndFakeConnectionIds[i] = nonOrderedConnectionFromThisNodeToChildNode.connectionId;
break;
} else {
orderedConnectionIdsAndFakeConnectionIds[i] = AssetBundleGraphSettings.BUNDLIZER_FAKE_CONNECTION_ID;
}
}
}

var bundleNameTemplate = GetCurrentPlatformPackageOrDefaultFromDict(nodeKind, currentNodeData.bundleNameTemplate);
var bundleUseOutputResources = GetCurrentPlatformPackageOrDefaultFromDict(nodeKind, currentNodeData.bundleUseOutput).ToLower();

var useOutputResources = false;
var outputSourceConnectionId = string.Empty;
var resourcesOutputConnectionId = AssetBundleGraphSettings.BUNDLIZER_FAKE_CONNECTION_ID;
switch (bundleUseOutputResources) {
case "true" :{
useOutputResources = true;
outputSourceConnectionId = orderedConnectionIds[1];
resourcesOutputConnectionId = orderedConnectionIdsAndFakeConnectionIds[1];
break;
}
}

var executor = new IntegratedGUIBundlizer(bundleNameTemplate, useOutputResources, outputSourceConnectionId);
executor.Run(nodeName, nodeId, firstConnectionIdFromThisNodeToChildNode, inputParentResults, alreadyCachedPaths, Output);
var executor = new IntegratedGUIBundlizer(bundleNameTemplate, orderedConnectionIdsAndFakeConnectionIds[0], useOutputResources, resourcesOutputConnectionId);
executor.Run(nodeName, nodeId, string.Empty, inputParentResults, alreadyCachedPaths, Output);
break;
}

Expand Down Expand Up @@ -979,7 +1029,28 @@ merge connection result by group key.
}

case AssetBundleGraphSettings.NodeKind.FILTER_GUI: {
var executor = new IntegratedGUIFilter(orderedConnectionIds, currentNodeData.containsKeywords, currentNodeData.containsKeytypes);
/*
Filter requires "outputPoint ordered exist connection Id and Fake connection Id" for
exhausting assets by keyword and type correctly.
outputPoint which has connection can through assets by keyword and keytype,
also outputPoint which doesn't have connection should take assets by keyword and keytype.
*/
var orderedConnectionIdsAndFakeConnectionIds = new string[orderedNodeOutputPointIds.Count];
for (var i = 0; i < orderedNodeOutputPointIds.Count; i++) {
var orderedNodeOutputPointId = orderedNodeOutputPointIds[i];

foreach (var nonOrderedConnectionFromThisNodeToChildNode in nonOrderedConnectionsFromThisNodeToChildNode) {
var connectionOutputPointId = nonOrderedConnectionFromThisNodeToChildNode.fromNodeOutputPointId;
if (orderedNodeOutputPointId == connectionOutputPointId) {
orderedConnectionIdsAndFakeConnectionIds[i] = nonOrderedConnectionFromThisNodeToChildNode.connectionId;
break;
} else {
orderedConnectionIdsAndFakeConnectionIds[i] = AssetBundleGraphSettings.FILTER_FAKE_CONNECTION_ID;
}
}
}
var executor = new IntegratedGUIFilter(orderedConnectionIdsAndFakeConnectionIds, currentNodeData.containsKeywords, currentNodeData.containsKeytypes);
executor.Setup(nodeName, nodeId, string.Empty, inputParentResults, alreadyCachedPaths, Output);
break;
}
Expand Down Expand Up @@ -1014,21 +1085,50 @@ merge connection result by group key.
}

case AssetBundleGraphSettings.NodeKind.BUNDLIZER_GUI: {
/*
Bundlizer requires assetOutputConnectionId and additional resourceOutputConnectionId.
both-connected, or both-not-connected, or one of them is connected. 4 patterns exists.
Bundler Node's outputPoint [0] is always the point for assetOutputConnectionId.
Bundler Node's outputPoint [1] is always the point for resourceOutputConnectionId.
if one of these outputPoint don't have connection, use Fake connection id for correct output.
unorderedConnectionId \
----> orderedConnectionIdsAndFakeConnectionIds.
orderedOutputPointId /
*/
var orderedConnectionIdsAndFakeConnectionIds = new string[orderedNodeOutputPointIds.Count];
for (var i = 0; i < orderedNodeOutputPointIds.Count; i++) {
var orderedNodeOutputPointId = orderedNodeOutputPointIds[i];

foreach (var nonOrderedConnectionFromThisNodeToChildNode in nonOrderedConnectionsFromThisNodeToChildNode) {
var connectionOutputPointId = nonOrderedConnectionFromThisNodeToChildNode.fromNodeOutputPointId;
if (orderedNodeOutputPointId == connectionOutputPointId) {
orderedConnectionIdsAndFakeConnectionIds[i] = nonOrderedConnectionFromThisNodeToChildNode.connectionId;
break;
} else {
orderedConnectionIdsAndFakeConnectionIds[i] = AssetBundleGraphSettings.BUNDLIZER_FAKE_CONNECTION_ID;
}
}
}

var bundleNameTemplate = GetCurrentPlatformPackageOrDefaultFromDict(nodeKind, currentNodeData.bundleNameTemplate);
var bundleUseOutputResources = GetCurrentPlatformPackageOrDefaultFromDict(nodeKind, currentNodeData.bundleUseOutput).ToLower();

var useOutputResources = false;
var outputSourceConnectionId = string.Empty;
var resourcesOutputConnectionId = AssetBundleGraphSettings.BUNDLIZER_FAKE_CONNECTION_ID;
switch (bundleUseOutputResources) {
case "true" :{
useOutputResources = true;
outputSourceConnectionId = orderedConnectionIds[1];
resourcesOutputConnectionId = orderedConnectionIdsAndFakeConnectionIds[1];
break;
}
}

var executor = new IntegratedGUIBundlizer(bundleNameTemplate, useOutputResources, outputSourceConnectionId);
executor.Setup(nodeName, nodeId, firstConnectionIdFromThisNodeToChildNode, inputParentResults, alreadyCachedPaths, Output);
var executor = new IntegratedGUIBundlizer(bundleNameTemplate, orderedConnectionIdsAndFakeConnectionIds[0], useOutputResources, resourcesOutputConnectionId);
executor.Run(nodeName, nodeId, string.Empty, inputParentResults, alreadyCachedPaths, Output);
break;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,18 @@
namespace AssetBundleGraph {
public class IntegratedGUIBundlizer : INodeBase {
private readonly string bundleNameTemplate;
private readonly string assetsOutputConnectionId;
private readonly bool outputResource;
private readonly string outputSourceConnectionId;
private readonly string resourcesOutputConnectionId;

public IntegratedGUIBundlizer (string bundleNameTemplate, bool outputResource, string outputSourceConnectionId) {
public IntegratedGUIBundlizer (string bundleNameTemplate, string assetsConnectionId, bool outputResource, string resourcesConnectionId) {
this.bundleNameTemplate = bundleNameTemplate;
this.assetsOutputConnectionId = assetsConnectionId;
this.outputResource = outputResource;
this.outputSourceConnectionId = outputSourceConnectionId;
this.resourcesOutputConnectionId = resourcesConnectionId;
}

public void Setup (string nodeName, string nodeId, string labelToNext, Dictionary<string, List<InternalAssetData>> groupedSources, List<string> alreadyCached, Action<string, string, Dictionary<string, List<InternalAssetData>>, List<string>> Output) {
public void Setup (string nodeName, string nodeId, string _, Dictionary<string, List<InternalAssetData>> groupedSources, List<string> alreadyCached, Action<string, string, Dictionary<string, List<InternalAssetData>>, List<string>> Output) {

try {
ValidateBundleNameTemplate(
Expand Down Expand Up @@ -49,18 +51,18 @@ public void Setup (string nodeName, string nodeId, string labelToNext, Dictionar
outputDict[groupKey] = outputSources;
}

Output(nodeId, labelToNext, outputDict, new List<string>());
if (assetsOutputConnectionId != AssetBundleGraphSettings.BUNDLIZER_FAKE_CONNECTION_ID) Output(nodeId, assetsOutputConnectionId, outputDict, new List<string>());

/*
generate additional output:
output bundle resources for next node, for generate another AssetBundles with dependency.
*/
if (outputResource) {
Output(nodeId, outputSourceConnectionId, groupedSources, new List<string>());
if (resourcesOutputConnectionId != AssetBundleGraphSettings.BUNDLIZER_FAKE_CONNECTION_ID) Output(nodeId, resourcesOutputConnectionId, groupedSources, new List<string>());
}
}

public void Run (string nodeName, string nodeId, string labelToNext, Dictionary<string, List<InternalAssetData>> groupedSources, List<string> alreadyCached, Action<string, string, Dictionary<string, List<InternalAssetData>>, List<string>> Output) {
public void Run (string nodeName, string nodeId, string _, Dictionary<string, List<InternalAssetData>> groupedSources, List<string> alreadyCached, Action<string, string, Dictionary<string, List<InternalAssetData>>, List<string>> Output) {
ValidateBundleNameTemplate(
bundleNameTemplate,
() => {
Expand All @@ -87,14 +89,14 @@ public void Run (string nodeName, string nodeId, string labelToNext, Dictionary<
outputDict[groupKey] = outputSources;
}

Output(nodeId, labelToNext, outputDict, new List<string>());
if (assetsOutputConnectionId != AssetBundleGraphSettings.BUNDLIZER_FAKE_CONNECTION_ID) Output(nodeId, assetsOutputConnectionId, outputDict, new List<string>());

/*
generate additional output:
output bundle resources for next node, for generate another AssetBundles with dependency.
*/
if (outputResource) {
Output(nodeId, outputSourceConnectionId, groupedSources, new List<string>());
if (resourcesOutputConnectionId != AssetBundleGraphSettings.BUNDLIZER_FAKE_CONNECTION_ID) Output(nodeId, resourcesOutputConnectionId, groupedSources, new List<string>());
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,11 @@

namespace AssetBundleGraph {
public class IntegratedGUIFilter : INodeBase {
private readonly List<string> connectionIdsFromThisNodeToChildNodes;
private readonly string[] connectionIdsFromThisNodeToChildNodesOrFakeIds;
private readonly List<string> containsKeywords;
private readonly List<string> containsKeytypes;
public IntegratedGUIFilter (List<string> connectionIdsFromThisNodeToChildNodes, List<string> containsKeywords, List<string> containsKeytypes) {
this.connectionIdsFromThisNodeToChildNodes = connectionIdsFromThisNodeToChildNodes;
public IntegratedGUIFilter (string[] connectionIdsFromThisNodeToChildNodes, List<string> containsKeywords, List<string> containsKeytypes) {
this.connectionIdsFromThisNodeToChildNodesOrFakeIds = connectionIdsFromThisNodeToChildNodes;
this.containsKeywords = containsKeywords;
this.containsKeytypes = containsKeytypes;
}
Expand Down Expand Up @@ -115,9 +115,9 @@ private void Filter (List<InternalAssetData> assets, Action<string, List<string>
exhaustiveAssets.Add(new ExhaustiveAssetPathData(asset.absoluteSourcePath, asset.importedPath));
}

for (var i = 0; i < connectionIdsFromThisNodeToChildNodes.Count; i++) {
for (var i = 0; i < connectionIdsFromThisNodeToChildNodesOrFakeIds.Length; i++) {
// these 3 parameters depends on their contents order.
var connectionId = connectionIdsFromThisNodeToChildNodes[i];
var connectionId = connectionIdsFromThisNodeToChildNodesOrFakeIds[i];
var keyword = containsKeywords[i];
var keytype = containsKeytypes[i];

Expand All @@ -140,7 +140,7 @@ private void Filter (List<InternalAssetData> assets, Action<string, List<string>
if (typeMatchedAssetsAbsolutePaths.Contains(exhaustiveAsset.absoluteSourcePath)) exhaustiveAsset.isFilterExhausted = true;
}

FilterResultReceiver(connectionId, typeMatchedAssetsAbsolutePaths);
if (connectionId != AssetBundleGraphSettings.FILTER_FAKE_CONNECTION_ID) FilterResultReceiver(connectionId, typeMatchedAssetsAbsolutePaths);
continue;
}

Expand All @@ -150,7 +150,7 @@ private void Filter (List<InternalAssetData> assets, Action<string, List<string>
if (keywordMatchedAssetAbsolutePaths.Contains(exhaustiveAsset.absoluteSourcePath)) exhaustiveAsset.isFilterExhausted = true;
}

FilterResultReceiver(connectionId, keywordMatchedAssetAbsolutePaths);
if (connectionId != AssetBundleGraphSettings.FILTER_FAKE_CONNECTION_ID) FilterResultReceiver(connectionId, keywordMatchedAssetAbsolutePaths);
}
}

Expand Down
9 changes: 0 additions & 9 deletions Assets/AssetBundleGraph/Editor/GUI/AssetBundleGraph.cs
Original file line number Diff line number Diff line change
Expand Up @@ -486,7 +486,6 @@ private void SaveGraph () {

var connectionList = new List<Dictionary<string, string>>();
foreach (var connection in connections) {
try {
var connectionDict = new Dictionary<string, string>{
{AssetBundleGraphSettings.CONNECTION_LABEL, connection.label},
{AssetBundleGraphSettings.CONNECTION_ID, connection.connectionId},
Expand All @@ -496,14 +495,6 @@ private void SaveGraph () {
};

connectionList.Add(connectionDict);
} catch (Exception e) {
Debug.LogError("connection:" + connection);
Debug.LogError("connection.label:" + connection.label);
Debug.LogError("connection.connectionId:" + connection.connectionId);
Debug.LogError("connection.outputNodeId:" + connection.outputNodeId);
Debug.LogError("connection.outputPoint:" + connection.outputPoint);
Debug.LogError("connection.outputPoint.pointId:" + connection.outputPoint.pointId);
}
}

var graphData = new Dictionary<string, object>{
Expand Down

0 comments on commit 87dafc5

Please sign in to comment.