Jump to content

How to make particles go up a certain amount?


Rhyleas
 Share

You are about to reply to a thread that has been inactive for 3679 days.

Please take a moment to consider if this thread is worth bumping.

Recommended Posts

Hello! :matte-motes-tongue:

I have been playing around with a particle script out of boredom, and I have been having fun discovering with the various things I can do with it. I noticed that when the particles go up, they seem to go up into the sky for a loooooong way.

Can particles be made to go up for only a certain amount? Like, for example...floating up three or seven (or any other amount of) meters and then stopping and / or vanishing once they hit that point? Or do they just go up into the SL sky forever while mystified residents see particles floating up through their skyboxes?

I have been playing with a freebie script which seems to be for a touch on / touch off particle generator, so I will post it here for you to see in case it is possible for particles to only go up a certain amount and then stop, and the line needs to be pointed out.

 

// Particle Script 0.3
// Created by Ama Omega
// 10-10-2003 -boeh!

// Mask Flags - set to TRUE to enable
integer glow = TRUE;            // Make the particles glow
integer bounce = FALSE;          // Make particles bounce on Z plan of object
integer interpColor = TRUE;     // Go from start to end color
integer interpSize = TRUE;      // Go from start to end size
integer wind = FALSE;           // Particles effected by wind
integer followSource = FALSE;    // Particles follow the source
integer followVel = FALSE;       // Particles turn to velocity direction

// Choose a pattern from the following:
// PSYS_SRC_PATTERN_EXPLODE
// PSYS_SRC_PATTERN_DROP
// PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY
// PSYS_SRC_PATTERN_ANGLE_CONE
// PSYS_SRC_PATTERN_ANGLE
integer pattern = PSYS_SRC_PATTERN_ANGLE_CONE;

// Select a target for particles to go towards
// "" for no target, "owner" will follow object owner 
//    and "self" will target this object
//    or put the key of an object for particles to go to
key target = "";

// Particle paramaters
float age = 9.5;                  // Life of each particle
float maxSpeed = 0.1;            // Max speed each particle is spit out at
float minSpeed = 0.1;            // Min speed each particle is spit out at
string texture = "smilyface";                  // Texture used for particles, default used if blank
float startAlpha = 1;           // Start alpha (transparency) value
float endAlpha = 1;           // End alpha (transparency) value
vector startColor = <1,1,1>;    // Start color of particles <R,G,B>
vector endColor = <1,1,1>;      // End color of particles <R,G,B> (if interpColor == TRUE)
vector startSize = <.7,.7,.7>;     // Start size of particles 
vector endSize = <1,1,1>;       // End size of particles (if interpSize == TRUE)
vector push = <0,0,1>;          // Force pushed on particles

// System paramaters
float rate = .01;            // How fast (rate) to emit particles
float radius = 1;          // Radius to emit particles for BURST pattern
integer count = 1;        // How many particles to emit per BURST 
float outerAngle = 0;    // Outer angle for all ANGLE patterns
float innerAngle = 0;    // Inner angle for all ANGLE patterns
vector omega = <0,0,0>;    // Rotation of ANGLE patterns around the source
float life = 0.12;             // Life in seconds for the system to make particles

// Script variables
integer flags;

updateParticles()
{
    flags = 0;
    if (target == "owner") target = llGetOwner();
    if (target == "self") target = llGetKey();
    if (glow) flags = flags | PSYS_PART_EMISSIVE_MASK;
    if (bounce) flags = flags | PSYS_PART_BOUNCE_MASK;
    if (interpColor) flags = flags | PSYS_PART_INTERP_COLOR_MASK;
    if (interpSize) flags = flags | PSYS_PART_INTERP_SCALE_MASK;
    if (wind) flags = flags | PSYS_PART_WIND_MASK;
    if (followSource) flags = flags | PSYS_PART_FOLLOW_SRC_MASK;
    if (followVel) flags = flags | PSYS_PART_FOLLOW_VELOCITY_MASK;
    if (target != "") flags = flags | PSYS_PART_TARGET_POS_MASK;

    llParticleSystem([  PSYS_PART_MAX_AGE,age,
                        PSYS_PART_FLAGS,flags,
                        PSYS_PART_START_COLOR, startColor,
                        PSYS_PART_END_COLOR, endColor,
                        PSYS_PART_START_SCALE,startSize,
                        PSYS_PART_END_SCALE,endSize, 
                        PSYS_SRC_PATTERN, pattern,
                        PSYS_SRC_BURST_RATE,rate,
                        PSYS_SRC_ACCEL, push,
                        PSYS_SRC_BURST_PART_COUNT,count,
                        PSYS_SRC_BURST_RADIUS,radius,
                        PSYS_SRC_BURST_SPEED_MIN,minSpeed,
                        PSYS_SRC_BURST_SPEED_MAX,maxSpeed,
                        PSYS_SRC_TARGET_KEY,target,
                        PSYS_SRC_INNERANGLE,innerAngle, 
                        PSYS_SRC_OUTERANGLE,outerAngle,
                        PSYS_SRC_OMEGA, omega,
                        PSYS_SRC_MAX_AGE, life,
                        PSYS_SRC_TEXTURE, texture,
                        PSYS_PART_START_ALPHA, startAlpha,
                        PSYS_PART_END_ALPHA, endAlpha
                            ]);
}



integer particleOn = 0;

stopParticle()
{
    particleOn = 0;
    llParticleSystem([]);
}


default
{
    state_entry()
        {
            stopParticle();
        }
    on_rez(integer start_params)
        {
            stopParticle();
        }
    touch_start(integer num_detected)
        {
            if(!particleOn)
            {
                particleOn = 1;
                updateParticles();
                llPlaySound("squeak",1.0);
            }
            else
                stopParticle();
        }
}

 

Thanks for looking it over! :matte-motes-little-laugh:

 

Link to comment
Share on other sites

Hi Rhyleas,

To make particles go up, then down, you'll have to add some downward (-Z) acceleration. You'd emit the particles upward, as you're already doing, and the downward acceleration would eventually bring them to a stop. If you want the particles to vanish at the top of their trajectory, you'll have to balance the initial upward velocity, downward acceleration and particle lifetime.

If PSYS_SRC_BURST_SPEED_MIN and MAX are the same, all the particles will die at the same altitude. If they're different, there will be a spread of altitudes at which the particles will die. You can also set the end alpha so they particles fade out.

Your current script has an upward acceleration. It's in 

vector push = <0,0,1>;

Which is an upward acceleration of (I think) 1m/s/s. That's what's sending your particles off into the heavens. Change the vector to <0,0,-1> and you'll see them turn around and fall. Adjust that third (Z) component, along with minSpeed and maxSpeed and life, to get the effect you want.

Have fun!

  • Like 1
Link to comment
Share on other sites

You're welome, Rhyleas.

I think Rolig might agree that llParticleSystem is the coolest call in all of LSL. I don't know if the Africa sim is still around, but it had a termite hill with hundreds li'l termites wandering away and back, all while wiggling. Close inspection revealed them to be... particles! The wiggling was achieved by using "bounce".

Link to comment
Share on other sites

number of particles ( after  some seconds of starting)  are 

PSYS_PART_MAX_AGE * PSYS_SRC_BURST_PART_COUNT / PSYS_SRC_BURST_RATE

 In your script :

PSYS_PART_MAX_AGE  filled with max_age = 9.5

PSYS_SRC_BURST_PART_COUNT filled with count   = 1

PSYS_SRC_BURST_RATE filled with rate = 0.01

 

After some seconds , your system creates 9.5*1/0.01= 950 partiicles by second .

It s a bit big

 

 

Play with these 3 parameters to change the number of particles.

 

Nevertheless , number of particles don t change the "density" of particles . You could "feel" there are more particles in changing other variables when in fact there are the same number or even less

Link to comment
Share on other sites

You are about to reply to a thread that has been inactive for 3679 days.

Please take a moment to consider if this thread is worth bumping.

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
 Share

×
×
  • Create New...