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