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

       )
   )