protected override sealed VFXExpression[] BuildExpression(VFXExpression[] inputExpression) { if (mask.Length == 0) { return new VFXExpression[] { } } ; var inputComponents = (inputExpression.Length > 0) ? VFXOperatorUtility.ExtractComponents(inputExpression[0]).ToArray() : new VFXExpression[0]; var componentStack = new Stack <VFXExpression>(); int outputSize = mask.Length; for (int iComponent = 0; iComponent < outputSize; iComponent++) { char componentChar = char.ToLower(mask[iComponent]); int currentComponent = Math.Min(CharToComponentIndex(componentChar), inputComponents.Length - 1); componentStack.Push(inputComponents[currentComponent]); } VFXExpression finalExpression = null; if (componentStack.Count == 1) { finalExpression = componentStack.Pop(); } else { finalExpression = new VFXExpressionCombine(componentStack.Reverse().ToArray()); } return(new[] { finalExpression }); } }
protected override sealed VFXExpression[] BuildExpression(VFXExpression[] inputExpression) { var components = VFXOperatorUtility.ExtractComponents(inputExpression[0]); VFXExpression rgb = new VFXExpressionCombine(components.Take(3).ToArray()); return(new[] { new VFXExpressionRGBtoHSV(rgb) }); }
protected override VFXExpression[] BuildExpression(VFXExpression[] inputExpression) { var density = VFXOperatorUtility .ExtractComponents(new VFXAttributeExpression(FluvioFXAttribute.DensityPressure)) .ToArray() [1]; var range = VFXOperatorUtility.ExtractComponents(inputExpression[0]).ToArray(); return(new VFXExpression[] { InverseLerp(density, range[0], range[1]) }); }
protected override sealed VFXExpression[] BuildExpression(VFXExpression[] inputExpression) { var allComponent = inputExpression.SelectMany(e => VFXOperatorUtility.ExtractComponents(e)) .Take(4) .ToArray(); if (allComponent.Length == 0) { return(new VFXExpression[] {}); } else if (allComponent.Length == 1) { return(allComponent); } return(new[] { new VFXExpressionCombine(allComponent) }); }
protected override sealed VFXExpression[] BuildExpression(VFXExpression[] inputExpression) { var mask = new Component[4] { x, y, z, w }; // var mask = new Component[4] { Component.X, Component.Y, Component.Z, Component.W }; int maskSize = 4; while (maskSize > 1 && mask[maskSize - 1] == Component.None) { --maskSize; } var inputComponents = VFXOperatorUtility.ExtractComponents(inputExpression[0]).ToArray(); var componentStack = new Stack <VFXExpression>(); int outputSize = GetMaskSize(mask); for (int iComponent = 0; iComponent < outputSize; iComponent++) { Component currentComponent = mask[iComponent]; if (currentComponent != Component.None && (int)currentComponent < inputComponents.Length) { componentStack.Push(inputComponents[(int)currentComponent]); } else { componentStack.Push(VFXValue <float> .Default); } } VFXExpression finalExpression = null; if (componentStack.Count == 1) { finalExpression = componentStack.Pop(); } else { finalExpression = new VFXExpressionCombine(componentStack.Reverse().ToArray()); } return(new[] { finalExpression }); }
protected override sealed VFXExpression[] BuildExpression(VFXExpression[] inputExpression) { VFXExpression[] rgb = VFXOperatorUtility.ExtractComponents(new VFXExpressionHSVtoRGB(inputExpression[0])).Take(3).ToArray(); return(new[] { new VFXExpressionCombine(new[] { rgb[0], rgb[1], rgb[2], VFXValue.Constant(1.0f) }) }); }