Final Step Update Example

Description:

The following example shows the default Final Step Update script with detailed comments.

Can Be Used With:

Used by PF_Source as default Final Step Update script.

Effect:

The default script modifies particle speed and direction, causing particles to follow a bulb-shaped path:

EXAMPLE

   --Get the current particle system executing the script
   pf_node_current = particleFlow.scriptRunner()

   --In case the current particle system is a valid node...
   if (pf_node_current != undefined) then(

   --Get the total number of particles
   count = pf_node_current.NumParticles()
   --Loop from 1 to the number of particles
   for i in 1 to count do(
   --Set the particle index in the container to the current i value.
   --This makes the i-th particle in the container the current one:
   pf_node_current.particleIndex = i

   --Get the age of the particle, multiply by 5 and use as angle
   --to define the particle speed
   --Decreasing the constant 5 will slow down the rotation
   --Increasing the constant will speed up the rotation
   age = 5*pf_node_current.particleAge

   --Calculate a factor variable based on the particle age
   --This variable will define the radius of the bulb and will vary
   --thanks to the sine of the age over time.
   --Change the constant 20 to change the radius.
   factor = 20*(sin(2*age)+1)

   --Finally, calculate and set the particle position
   --using the factor as Radius and the particle index as Angle
   --in the function of the circle. The position of the node has to be
   --added to move the particles to the origin of the Source.
   --Info: In general, a circle can be drawn using an Angle
   --going from 0 to 2*Pi and the following functions for X and Y:
   --X = CenterX+Radius*Cos(Angle)
   --Y = CenterY+Radius*Sin(Angle)
   --In our case, CenterX and CenterY are 0, Radius is set to factor,
   --and Angle is based on the particle index multiplied by 77.
   --The Z position is based on the age.
   pf_node_current.particlePosition = [factor*cos(77*i), factor*sin(77*i), -age] + pf_node_current.pos

   )--end i loop
   )--end if