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.
The default script modifies particle speed and direction, causing particles to follow a bulb-shaped path:
--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
Every Step Update Example
PF_Source : GeometryClass
Particle Flow Sample Scripts