private VFXExpression GetPositionFromIndex(VFXExpression indexExpr, IEnumerable <VFXNamedExpression> expressions)
 {
     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;
         return(VFXOperatorUtility.SequentialLine(start, end, indexExpr, count));
     }
     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;
         return(VFXOperatorUtility.SequentialCircle(center, radius, normal, up, indexExpr, count));
     }
     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;
         return(VFXOperatorUtility.Sequential3D(origin, axisX, axisY, axisZ, indexExpr, countX, countY, countZ));
     }
     throw new NotImplementedException();
 }
        protected override VFXExpression[] BuildExpression(VFXExpression[] inputExpression)
        {
            var index  = inputExpression[0];
            var count  = inputExpression[1];
            var center = inputExpression[2];
            var normal = inputExpression[3];
            var up     = inputExpression[4];
            var radius = inputExpression[5];

            return(new[] { VFXOperatorUtility.SequentialCircle(center, radius, normal, up, index, count, mode) });
        }
 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();
     }
 }