public void ProcessExpressionSafeNormalize([ValueSource("s_ProcessExpressionSafeNormalizeValues")] Vector2 input) { var valueInput = new VFXValue <Vector2>(input); var expression = VFXOperatorUtility.SafeNormalize(valueInput); var context = new VFXExpression.Context(VFXExpressionContextOption.CPUEvaluation); var resultExpression = context.Compile(expression); var expectedResult = input.normalized; Assert.AreEqual(expectedResult, resultExpression.Get <Vector2>()); }
protected override sealed VFXExpression[] BuildExpression(VFXExpression[] inputExpression) { if (safeNormalize) { return new[] { VFXOperatorUtility.SafeNormalize(inputExpression[0]) } } ; else { return new[] { VFXOperatorUtility.Normalize(inputExpression[0]) } }; }
private void GetPositionAndDirectionFromIndex(VFXExpression indexExpr, IEnumerable <VFXNamedExpression> expressions, out VFXExpression positionExpr, out VFXExpression directionExpr) { if (shape == SequentialShape.Line) { var start = expressions.First(o => o.name == "Start").exp; var end = expressions.First(o => o.name == "End").exp; var count = expressions.First(o => o.name == "Count").exp; positionExpr = VFXOperatorUtility.SequentialLine(start, end, indexExpr, count, mode); directionExpr = VFXOperatorUtility.SafeNormalize(end - start); } else if (shape == SequentialShape.Circle) { var center = expressions.First(o => o.name == "Center").exp; var normal = expressions.First(o => o.name == "Normal").exp; var up = expressions.First(o => o.name == "Up").exp; var radius = expressions.First(o => o.name == "Radius").exp; var count = expressions.First(o => o.name == "Count").exp; positionExpr = VFXOperatorUtility.SequentialCircle(center, radius, normal, up, indexExpr, count, mode); directionExpr = VFXOperatorUtility.SafeNormalize(positionExpr - center); } else if (shape == SequentialShape.ThreeDimensional) { var origin = expressions.First(o => o.name == "Origin").exp; var axisX = expressions.First(o => o.name == "AxisX").exp; var axisY = expressions.First(o => o.name == "AxisY").exp; var axisZ = expressions.First(o => o.name == "AxisZ").exp; var countX = expressions.First(o => o.name == "CountX").exp; var countY = expressions.First(o => o.name == "CountY").exp; var countZ = expressions.First(o => o.name == "CountZ").exp; positionExpr = VFXOperatorUtility.Sequential3D(origin, axisX, axisY, axisZ, indexExpr, countX, countY, countZ, mode); directionExpr = VFXOperatorUtility.SafeNormalize(positionExpr - origin); } else { throw new NotImplementedException(); } }