in ExpressionBuilder/ExpressionBuilder/ExpressionNodes/ExpressionBuilder.ExpressionNode.cs [395:433]
internal protected T SubchannelsInternal<T>(params string[] subchannels) where T : class
{
ExpressionNodeType swizzleNodeType = ExpressionNodeType.Swizzle;
T newNode;
switch (subchannels.GetLength(0))
{
case 1:
newNode = ExpressionFunctions.Function<ScalarNode>(swizzleNodeType, this) as T;
break;
case 2:
newNode = ExpressionFunctions.Function<Vector2Node>(swizzleNodeType, this) as T;
break;
case 3:
newNode = ExpressionFunctions.Function<Vector3Node>(swizzleNodeType, this) as T;
break;
case 4:
newNode = ExpressionFunctions.Function<Vector4Node>(swizzleNodeType, this) as T;
break;
case 6:
newNode = ExpressionFunctions.Function<Matrix3x2Node>(swizzleNodeType, this) as T;
break;
case 16:
newNode = ExpressionFunctions.Function<Matrix4x4Node>(swizzleNodeType, this) as T;
break;
default:
throw new Exception($"Invalid subchannel count ({subchannels.GetLength(0)})");
}
(newNode as ExpressionNode)._subchannels = subchannels;
return newNode;
}