Birth Script Example

 

   

Particle Flow - Quick Navigation

Description:

The following example shows the default Birth_Script script with detailed comments.

Can Be Used With:

This script is used as the default script in the Birth_Script action.

Effect:

The script generates a nice particle pattern - a helix built by a sine curve. In order to see the effect of the script, you should:

EXAMPLE

--The ChannelsUsed handler defines the channels
--to be made available to the script.
--For the list of all channels, see
--Interface: MaxscriptParticleContainer
--The parameter pCont passed to the handler
--contains the Particle Container the script is applied to
on ChannelsUsed pCont do
(
pCont.useTime = true--enable the Time channel
pCont.useAge = true--enable the Age channel
pCont.usePosition = true--enable the Position channel
pCont.useSpeed = true--enable the Speed channel
)
 
--The Init handler is called on initialization.
--It is not used in this case.
on Init pCont do
(
)
 
--The Proceed handler contains the main script
--applied to the Particles.
--The parameter pCont passed to the handler
--contains the Particle Container the script is applied to:
on Proceed pCont do
(
--Get the Start Time as float. This converts the time to ticks.
t1 = pCont.getTimeStart() as float
--Get the End Time as float. This converts the time to ticks.
t2 = pCont.getTimeEnd() as float
 
--Clamp negative time values to 0
if (t1 < 0)then(t1 = 0)
 
--If the end time is less than 100 frames
--(100 frames * 160 ticks per frame in 30 fps NTSC)
if (t2 < 100*160) do
(
--then do a loop using the time values divided by 8
--this way a particle will be created every 8 ticks
for i in (t1/8+1) to (t2/8) do
(
--set the variable curTime to the actual time in ticks
curTime = 8*i as float
--give birth to a new particle
pCont.AddParticle()
--get the index of the last particle that was added
pCont.particleIndex = pCont.NumParticles()
--set the current time of the particle in frames
--(160 ticks in one frame at 30 fps NTSC animation)
pCont.particleTime = curTime/160
--Set the age of the particle to 0 - newborn!
pCont.particleAge = 0
--Define a radius variable based on the sine of the current time
sh = 2*sin(5*curTime)
--Define an angle variable based on the current time
ang = 0.2*curTime
--Set the particle position using the above variables
pCont.particlePosition = [sh*sin(ang), sh*cos(ang), 0]
--Define the speed using the same variables and falling down along Z
pCont.particleSpeed = [0.01*sin(ang), 0.01*cos(ang), -0.005]
)
)
)
 
--The Release handler is used to do cleanup work.
--Not used in this case.
on Release pCont do
(
)

See Also