Difference between revisions of "PSYS Template"

From Second Life Wiki
Jump to navigation Jump to search
m (Created page with '{{LSL Header}} ====PSYS Template==== --BETLOG Hax UTC+10: 20090709 2208 [SLT: 20090709 0508] All of the flags for making particles in a script with important...')
 
m (<lsl> tag to <source>)
 
(4 intermediate revisions by 2 users not shown)
Line 1: Line 1:
{{LSL Header}}
{{LSL Header}}
====PSYS Template====
====PSYS Template====
--[[User:BETLOG Hax|BETLOG Hax]] UTC+10: 20090709 2208 [SLT: 20090709 0508]
{{LSL Tip|You might want to use [[llLinkParticleSystem]] instead of [[llParticleSystem]] dependant upon the desired effects.}}
--[[User:BETLOG Hax|BETLOG Hax]] SLT: July 9th 2009


All of the flags for making particles in a script with important inter-relationship comments only.
All of the flags for making particles in a script with important inter-relationship comments only.
<br>  
<br>  
(declaring a bunch of variables instead of just learning to read the actual flag names is stupid)
<source lang="lsl2">
integer hasParticleEffect = TRUE;
list particle_effects()
{
    return
        [PSYS_PART_FLAGS, ( 0
            | PSYS_PART_INTERP_COLOR_MASK
            | PSYS_PART_INTERP_SCALE_MASK
            | PSYS_PART_EMISSIVE_MASK
//          | PSYS_PART_WIND_MASK
//          | PSYS_PART_BOUNCE_MASK
//          | PSYS_PART_FOLLOW_SRC_MASK  //disables BURST_RADIUS
//          | PSYS_PART_FOLLOW_VELOCITY_MASK
//          | PSYS_PART_TARGET_POS_MASK  //target TARGET_KEY
//          | PSYS_PART_TARGET_LINEAR_MASK    //requires TARGET_KEY disables ACCEL, BURST_RADIUS
            ),
        PSYS_PART_START_COLOR,      <1.0, 0.5, 0.0>,
        PSYS_PART_START_ALPHA,      1.0,
        PSYS_PART_END_COLOR,        <0.3, 0.0, 0.0>,
        PSYS_PART_END_ALPHA,        0.0,
        PSYS_PART_START_SCALE,      <0.5, 0.5, 0>,
        PSYS_PART_END_SCALE,        <0.5, 0.5, 0>,
        PSYS_PART_MAX_AGE,          1.0,
        PSYS_SRC_ACCEL,            ZERO_VECTOR,
        PSYS_SRC_PATTERN,          8,
//              DROP (1), EXPLODE (2), ANGLE (4), ANGLE_CONE (8), ANGLE_CONE_EMPTY (10)
//              1 - disables BURST_RADIUS, BURST_SPEED_MIN, BURST_SPEED_MAX
//              4/8/10 - requires ANGLE_BEGIN, ANGLE_END
        PSYS_SRC_TEXTURE,          "",
        PSYS_SRC_BURST_RATE,        0.05,
        PSYS_SRC_BURST_PART_COUNT,  4,
        PSYS_SRC_BURST_RADIUS,      1.0,
        PSYS_SRC_BURST_SPEED_MIN,  0.0,
        PSYS_SRC_BURST_SPEED_MAX,  0.1,
        PSYS_SRC_MAX_AGE,          0.0,
        PSYS_SRC_TARGET_KEY,        NULL_KEY,
        PSYS_SRC_OMEGA,            ZERO_VECTOR,
        PSYS_SRC_ANGLE_BEGIN,      0.5,
        PSYS_SRC_ANGLE_END,        0.5];
}
toggle_particles()
{
    hasParticleEffect = !hasParticleEffect;
    if (hasParticleEffect)
//  {
        llParticleSystem( particle_effects() );
//  }
    else
//  {
        llParticleSystem([]);
//  }
}


<lsl>
//----------------------------------
integer    gOn        = TRUE;
//----------------------------------
default
default
{   on_rez(integer param)
{
     {   llResetScript();
    on_rez(integer start_param)
    }
     {
    touch_start(integer num_detected)
        llResetScript();
    {  gOn = !gOn; 
        state cycle;
     }
     }
     state_entry()
     state_entry()
     {   if(gOn)
     {
        {  llParticleSystem( [
         toggle_particles();
                PSYS_PART_FLAGS, ( 0
                    | PSYS_PART_INTERP_COLOR_MASK
                    | PSYS_PART_INTERP_SCALE_MASK
                    | PSYS_PART_EMISSIVE_MASK
    //                | PSYS_PART_WIND_MASK
    //                | PSYS_PART_BOUNCE_MASK
    //                | PSYS_PART_FOLLOW_SRC_MASK  //disables BURST_RADIUS 
    //                | PSYS_PART_FOLLOW_VELOCITY_MASK
    //                | PSYS_PART_TARGET_POS_MASK  //target TARGET_KEY   
    //                | PSYS_PART_TARGET_LINEAR_MASK    //requires TARGET_KEY disables ACCEL, BURST_RADIUS
                )
                ,PSYS_PART_START_COLOR,    <1.0, 0.5, 0.0>
                ,PSYS_PART_START_ALPHA,    1.0
                ,PSYS_PART_END_COLOR,      <0.3, 0.0, 0.0>
                ,PSYS_PART_END_ALPHA,      0.0
                ,PSYS_PART_START_SCALE,    <0.5, 0.5, 0>
                ,PSYS_PART_END_SCALE,      <0.5, 0.5, 0>
                ,PSYS_PART_MAX_AGE,        1.0    //particle age
                ,PSYS_SRC_ACCEL,            <0.0, 0.0, 0.0>
                ,PSYS_SRC_PATTERN,          8
    //1=DROP,2=EXPLODE,4=ANGLE,8=ANGLE_CONE,10=ANGLE_CONE_EMPTY
    //1 - disables BURST_RADIUS, BURST_SPEED_MIN, BURST_SPEED_MAX
    //4/8/10 - requires ANGLE_BEGIN, ANGLE_END
    //                ,PSYS_SRC_INNERANGLE,      DEPRECIATED
    //                ,PSYS_SRC_OUTERANGLE,      DEPRECIATED   
                ,PSYS_SRC_TEXTURE,
                    llGetInventoryName(INVENTORY_TEXTURE, 0) //the first tex in inv
                ,PSYS_SRC_BURST_RATE,      0.05
    //                ,14,                        UNDOCUMENTED               
                ,PSYS_SRC_BURST_PART_COUNT, 4
                ,PSYS_SRC_BURST_RADIUS,    1.0
                ,PSYS_SRC_BURST_SPEED_MIN,  0.0
                ,PSYS_SRC_BURST_SPEED_MAX,  0.1
                ,PSYS_SRC_MAX_AGE,          0.0 //emission duration
                ,PSYS_SRC_TARGET_KEY,
                        (key)""
    //                    llGetLinkKey(llGetLinkNum() + 1)
    //                    llGetKey()
                ,PSYS_SRC_OMEGA,            <0.0, 0.0, 0.0>
                ,PSYS_SRC_ANGLE_BEGIN,      0.5
                ,PSYS_SRC_ANGLE_END,        0.5
            ]);
        }
        else
         {  llParticleSystem([]);
        }
     }
     }
}
 
//----------------------------------
    touch_start(integer num_detected)
state cycle
     {
{  state_entry()
        toggle_particles();
     {   state default;
     }
     }
}
}
//----------------------------------
</source>
</lsl>
[[Category:LSL Examples]]
[[Category:LSL Examples]]

Latest revision as of 17:38, 24 January 2015

PSYS Template

KBcaution.png Important: You might want to use llLinkParticleSystem instead of llParticleSystem dependant upon the desired effects.

--BETLOG Hax SLT: July 9th 2009

All of the flags for making particles in a script with important inter-relationship comments only.
(declaring a bunch of variables instead of just learning to read the actual flag names is stupid)

integer hasParticleEffect = TRUE;

list particle_effects()
{
    return
        [PSYS_PART_FLAGS, ( 0
            | PSYS_PART_INTERP_COLOR_MASK
            | PSYS_PART_INTERP_SCALE_MASK
            | PSYS_PART_EMISSIVE_MASK
//          | PSYS_PART_WIND_MASK
//          | PSYS_PART_BOUNCE_MASK
//          | PSYS_PART_FOLLOW_SRC_MASK   //disables BURST_RADIUS
//          | PSYS_PART_FOLLOW_VELOCITY_MASK
//          | PSYS_PART_TARGET_POS_MASK   //target TARGET_KEY
//          | PSYS_PART_TARGET_LINEAR_MASK    //requires TARGET_KEY disables ACCEL, BURST_RADIUS
            ),
        PSYS_PART_START_COLOR,      <1.0, 0.5, 0.0>,
        PSYS_PART_START_ALPHA,      1.0,
        PSYS_PART_END_COLOR,        <0.3, 0.0, 0.0>,
        PSYS_PART_END_ALPHA,        0.0,
        PSYS_PART_START_SCALE,      <0.5, 0.5, 0>,
        PSYS_PART_END_SCALE,        <0.5, 0.5, 0>,
        PSYS_PART_MAX_AGE,          1.0,
        PSYS_SRC_ACCEL,             ZERO_VECTOR,
        PSYS_SRC_PATTERN,           8,
//              DROP (1), EXPLODE (2), ANGLE (4), ANGLE_CONE (8), ANGLE_CONE_EMPTY (10)
//              1 - disables BURST_RADIUS, BURST_SPEED_MIN, BURST_SPEED_MAX
//              4/8/10 - requires ANGLE_BEGIN, ANGLE_END
        PSYS_SRC_TEXTURE,           "",
        PSYS_SRC_BURST_RATE,        0.05,
        PSYS_SRC_BURST_PART_COUNT,  4,
        PSYS_SRC_BURST_RADIUS,      1.0,
        PSYS_SRC_BURST_SPEED_MIN,   0.0,
        PSYS_SRC_BURST_SPEED_MAX,   0.1,
        PSYS_SRC_MAX_AGE,           0.0,
        PSYS_SRC_TARGET_KEY,        NULL_KEY,
        PSYS_SRC_OMEGA,             ZERO_VECTOR,
        PSYS_SRC_ANGLE_BEGIN,       0.5,
        PSYS_SRC_ANGLE_END,         0.5];
}

toggle_particles()
{
    hasParticleEffect = !hasParticleEffect;

    if (hasParticleEffect)
//  {
        llParticleSystem( particle_effects() );
//  }
    else
//  {
        llParticleSystem([]);
//  }
}

default
{
    on_rez(integer start_param)
    {
        llResetScript();
    }

    state_entry()
    {
        toggle_particles();
    }

    touch_start(integer num_detected)
    {
        toggle_particles();
    }
}