Project: Fountain with synchronized jets

Back to project

File name: Fountain.lsl
Code: View Raw Code
vector sColor;

integer total = 20;

list COLORSET =  [   <1.0, 0.0, 0.0>, <0.0, 1.0, 0.0>, <0.0, 0.0, 1.0>,
                    <1.0, 1.0, 0.0>, <1.0, 0.0, 1.0>, <1.0, 1.0 ,1.0>,
                   <1.0, 0.5, 0.0>, <0.5, 1.0, 0.0>, <0.0, 0.5, 1.0>,
                   <0.5, 0.0, 1.0>, <1.0, 0.0, 0.0>, <0.0, 1.0, 0.0>,
                    <0.0, 0.0, 1.0>, <1.0, 1.0, 0.0>, <1.0, 0.0, 1.0>,
                    <0.0, 1.0 ,1.0>, <1.0, 0.5, 0.0>, <0.5, 1.0, 0.0>,
                   <0.0, 0.5, 1.0>, <0.5, 0.0, 1.0>, <1.0, 0.0, 0.0>,
                   <0.0, 1.0, 0.0>, <0.0, 0.0, 1.0>, <1.0, 1.0, 0.0>,
                     <1.0, 0.0, 1.0>, <0.0, 1.0 ,1.0>, <1.0, 0.5, 0.0>,
                  <1.0, 1.0, 0.0>, <0.0, 0.5, 1.0>, <0.5, 0.0, 1.0>]; 


    

part(integer link,float  spd,integer duration)
{
       // vector sColor = <1,1,1>;
        //if (link < 7)  sColor = <1,0.,0>;
        //if (link > 14) sColor = <0,0.3,1>;
         //  sColor = llList2Vector(COLORSET, (integer)llFrand(llGetListLength(COLORSET)) );      //Uncomment for random color
        llLinkParticleSystem(link,
        [
            PSYS_SRC_PATTERN,PSYS_SRC_PATTERN_ANGLE_CONE,
            PSYS_SRC_BURST_RADIUS,0.9,
            PSYS_SRC_ANGLE_BEGIN,0,
            PSYS_SRC_ANGLE_END,0.05,
            PSYS_PART_START_COLOR,sColor,
            PSYS_PART_END_COLOR, sColor,
            PSYS_PART_START_ALPHA,.7,
            PSYS_PART_END_ALPHA,0,
            PSYS_PART_START_GLOW,0,
            PSYS_PART_END_GLOW,0,
            PSYS_PART_BLEND_FUNC_SOURCE,PSYS_PART_BF_SOURCE_ALPHA,
            PSYS_PART_BLEND_FUNC_DEST,PSYS_PART_BF_ONE_MINUS_SOURCE_ALPHA,
            PSYS_PART_START_SCALE,<0.2,4 ,0.000000>,
            PSYS_PART_END_SCALE,<3.,4.000000,0.000000>,
            PSYS_SRC_TEXTURE,"smoke-01",
            PSYS_SRC_MAX_AGE,5.0,
            PSYS_PART_MAX_AGE,12,
            PSYS_SRC_BURST_RATE,.02,
            PSYS_SRC_BURST_PART_COUNT,2,
            PSYS_SRC_ACCEL,<0.000000,0.000000,-2.000>,
            PSYS_SRC_OMEGA,<0.000000,0.000000,.000000>,
            PSYS_SRC_BURST_SPEED_MIN,spd/2.,
            PSYS_SRC_BURST_SPEED_MAX,spd/2.+0 ,
            PSYS_PART_FLAGS,
                0 |
                PSYS_PART_EMISSIVE_MASK |
                PSYS_PART_INTERP_COLOR_MASK |
                PSYS_PART_BOUNCE_MASK| 
                PSYS_PART_INTERP_SCALE_MASK
        ]);
}


party(integer number)
{
        integer i;
        //number = 5;

        integer half= total/2;
    if (number ==1)
    {
        for (i=total; i>0; i--)
        {
            //llSleep(0.3);
            part(i, half+i/1.4, 2);
        }
    }
    else if (number ==2)
    {
        for (i=0; i <half; i++)
        {
            //llSleep(0.3);
            part(half-i , total-i/.7, 2);
            part(half+1+i, total-i/.7, 2);

        }
    }
    else if (number ==3)
    {
        for (i=half-1; i >=0; i--)
        {
            //llSleep(0.3);
            part(half-i , half-1+i/.7, 2);
            part(half+1+i, half-1+i/.7, 2);
        }
    }
    else
    {
        for (i=1; i <= total; i++)
        {
            part(i, total+2-i/1.5, 2);
        }
    }
}

integer run=0;
default
{
    
    state_entry()
    {
        llSetTimerEvent(11);
    }
    
    touch_start(integer n)
    {
        run = !run;
        llSetTimerEvent(run*23.);
        party(1);
    }
    
    timer()
    {

        party((integer)llFrand(5.));
    }
}