Jump to content

How to make this particle script affect for one face?


Yasojith
 Share

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

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

Recommended Posts

I'm making a mesh lantern string having only 1 Land Impact. There are 5 candle fire and all fire take as one face. The following is the particle script I'm trying to use for the candle fire, but it work only for the center of the mesh. How may I use this script to lighten the candle fire face? Thanks a lot for any kind help.

 

=====================================================================

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 = 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 paramaters
float age = 1.5;                  // Life of each particle
float maxSpeed = .2;            // Max speed each particle is spit out at
float minSpeed = .1;            // Min speed each particle is spit out at
string texture;                 // Texture used for particles, default used if blank
float startAlpha = 10;           // Start alpha (transparency) value
float endAlpha = 10;           // End alpha (transparency) value
vector startColor = <0,25,0>;    // Start color of particles <R,G,B>
vector endColor = <0,75,0>;      // End color of particles <R,G,B> (if interpColor == TRUE)
vector startSize = <.5,.5,.5>;     // 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 = .1;            // How fast (rate) to emit particles
float radius = 0;          // Radius to emit particles for BURST pattern
integer count = 10;        // How many particles to emit per BURST 
float outerAngle = 1.54;    // Outer angle for all ANGLE patterns
float innerAngle = 1.55;    // Inner angle for all ANGLE patterns
vector omega = <0,0,10>;    // Rotation of ANGLE patterns around the source
float life = 0;             // 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
                            ]);
}

default
{
    state_entry()
    {
        updateParticles();
    }
}

 

Link to comment
Share on other sites

Yes, particles are generated relative to the whole prim. To make flame particles originate from the tip of a candle you'd have to add a prim for each source. If you link them all and set them all to convex hull, you'll end up with an LI of 3 or 4, depending on the LI of the lantern itself. You can use llLinkParticleSystem set to LINK_ALL_CHILDREN or LINK_ALL_OTHERS to keep the script count down. So it's bad news, I'm afraid.

One thing you might try is adding a "flame face" (something like two intersecting rectangles using the same material and UV mapping) above each candle and using an animated flame texture on it.

Link to comment
Share on other sites

You can make particles appear to emit from a point that's not the center of the prim by offsetting the flame image from the center of the particle. You'll be wasting a lot of the particle's texture with transparent empty space and any variation in launch angle will affect the actual apparent launch position. The standard SL flame texture has the flame occupying the entire texture area. I'm imagining you might place the flame in perhaps the top 15% of the texture, leaving the rest transparent.

Link to comment
Share on other sites

You can offset the spawn point for particles by using the PSYS_SRC_PATTERN_ANGLE_CONE pattern, setting PSYS_SRC_ANGLE_BEGIN and  PSYS_SRC_ANGLE_END to 0 (PSYS_SRC_INNERANGLE and PSYS_SRC_OUTERANGLE have been deprecated and replaced with ANGLE_BEGIN and ANGLE_END, so the script in the op is outdated), then just use PSYS_SRC_BURST_RADIUS to set the distance from the center of the prim that you want the particles to be generated at.

Link to comment
Share on other sites

You are about to reply to a thread that has been inactive for 2167 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...