Script Operator オペレータの例

説明:

既定の Script オペレータ スクリプトのサンプル (詳細コメント付き) を示します。

用途:

Script_Operator は、これを既定のスクリプトとして使用します。

効果:

このスクリプトは、パーティクルの速度を遅くします。パーティクルの速度が十分に低下すると、最初の 50 パーティクルが分離されてワールド X 軸の負の方向に移動するストリームに入れられ、残りのパーティクルは反対方向に移動します。

例:

    --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.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 total number of particles:
    count = pCont.NumParticles()
    --Define slow speed as one unit per frame:
    slowSpeed = 1/160.0
    --Define very slow speed as 0.01 units per frame:
    verySlowSpeed = 0.01/160.0
    --Define random angular deviation per frame
    divAngle = 12.0
    --Get the start time in ticks
    --(when conerting time values to float, the result is ticks)
    tStart = pCont.getTimeStart() as float
    --Get the end time in ticks
    tEnd = pCont.getTimeEnd() as float
    --Calculate the length of the time interval in ticks
    timeDif = tEnd - tStart
    --Then convert to frames (160 ticks/frame when using 30 fps NTSC)
    timeDif /= 160.0
    --Define a drag coefficient
    dragCoef = 0.08


    --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:
    pCont.particleIndex = i

    --If the particle is faster, then slow it down
    if length (pCont.particleSpeed) > slowSpeed then
    pCont.particleSpeed -= dragCoef*timeDif*pCont.particleSpeed

    --Calculate the length of the particle speed vector
    newLen = length(pCont.particleSpeed)
    --If the current speed is higher than the defined very slow speed
    --then calculate a random divergence using the deviation angle.
    --If it is slower (very slow!), then don’t use the angle but a
    --fixed value.
    if newLen > verySlowSpeed then
    pCont.particleSpeed = pCont.randDivergeVector(pCont.particleSpeed)(divAngle/(160*newLen))
    else
    pCont.particleSpeed = pCont.randDivergeVector(pCont.particleSpeed)(180.0)

    --If slow enough, the first 50 particles go to the left.
    --The particles with ID above 50 go to the right.
    if length(pCont.particleSpeed) < 1.5*slowSpeed then
    (
    if pCont.particleID < 50 then
    pCont.particleSpeed += [-0.005*timeDif, 0, 0]
    else
    pCont.particleSpeed += [0.005*timeDif, 0, 0]
    )
    )
    )

    --The Release handler is used to do cleanup work.
    --Not used in this case.
    on Release pCont do
    (
    )