Difference between revisions of "User:Toady Nakamura/Particle Mist for Fountains Script"

From Second Life Wiki
Jump to navigation Jump to search
m (added "mist for fountains" script - we use this one in classes a lot, I've been giving it away at least since 2010)
 
m (Visit my LSL wiki page for my library of simple scripts ! Toady Nakamura)
 
Line 4: Line 4:
* Be sure you keep a scripted copy in inventory in case you wish to use it later.
* Be sure you keep a scripted copy in inventory in case you wish to use it later.


 
<source lang="lsl2">
<lsl>
// Particle System 1.0
// Particle System 1.0
// This script will make steady mist, useful for fountains, fire logs, small waterfalls and so on.
// This script will make steady mist, useful for fountains, fire logs, small waterfalls and so on.
Line 114: Line 113:
     }
     }
}
}
</lsl>
</source>
Visit my LSL wiki page for my library of simple scripts !  [[User:Toady Nakamura|Toady Nakamura]]

Latest revision as of 15:22, 30 July 2015

Particle System 1.0

  • This script will make steady mist, useful for fountains, fire logs, small waterfalls and so on.
  • Once the script has done its job and made the particles, you can take the script out of the prim to save on script load.
  • Be sure you keep a scripted copy in inventory in case you wish to use it later.
// Particle System 1.0
// This script will make steady mist, useful for fountains, fire logs, small waterfalls and so on.
// Once the script has done its job and made the particles, you can take the script out of the prim
// to save on script load.  Be sure you keep a scripted copy in inventory in case you wish to use it later. 

// --->> first is a user defined function to create the particle display.  

StartSteam()
{
//---->>>> This first part is where you make choices in how your particles will appear.
    
// MASK FLAGS: set  to "TRUE" to enable
integer glow = TRUE;                                // Makes the particles glow
integer bounce = TRUE;                             // Make particles bounce on Z plane of objects
integer interpColor = TRUE;                         // Color - from start value to end value
integer interpSize = TRUE;                          // Size - from start value to end value
integer wind = FALSE;                               // Particles effected by wind
integer followSource = FALSE;                       // Particles follow the source
integer followVel = TRUE;                           // 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_EXPLODE;

// 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 parameters
                            
float age = 3;                                  // Life of each particle
float maxSpeed = 0.05;                          // Max speed each particle is spit out at
float minSpeed = 0.0;                           // Min speed each particle is spit out at
string texture = "";                     // Texture used for particles, default used if blank
float startAlpha = .25;                         // Start alpha (transparency) value
float endAlpha = 0.0;                           // End alpha (transparency) value
vector startColor = <0.9,0.9,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 = <.25,.25,.25>;               // Start size of particles 
vector endSize = <3,3,3>;                       // End size of particles (if interpSize == TRUE)
vector push = <0,0,0.5>;                        // Force pushed on particles

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

//--->> This is the part where your choices are assembled into machine readable code.
//--->> You don't have to change anything from here down.
                            
    integer flags; 


      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
                            ]);
}

default
{
    state_entry()
    {  // makes particles as soon as placed in prim
        // or after you hit "save>reset" if you change things 
         StartSteam();
    }
}

Visit my LSL wiki page for my library of simple scripts ! Toady Nakamura