De DigiWiki.
- Créer un prim avec une rotation de 90° sur l'axe X
- Mettre le script et quelques textures dans l'inventaire du prim
// Rounded Particle Garden v0.2
float MAX_RADIUS = 3;
float RADIUS_INTERVAL = 0.5;
integer IS_ON = FALSE;
float RADIUS = 2;
string TEXTURE = "TEXTURE_UUID";
garden()
{
llParticleSystem ([
PSYS_PART_FLAGS, 0 |
PSYS_PART_EMISSIVE_MASK |
PSYS_PART_INTERP_COLOR_MASK |
PSYS_PART_INTERP_SCALE_MASK,
PSYS_SRC_PATTERN,
PSYS_SRC_PATTERN_ANGLE_CONE,
// Texture / Size / Alpha / Color
PSYS_SRC_TEXTURE, TEXTURE,
PSYS_PART_START_SCALE, <0.2, 0.2, 0>,
PSYS_PART_END_SCALE, <0.5, 0.5, 0>,
PSYS_PART_START_ALPHA, 0,
PSYS_PART_END_ALPHA, 1,
PSYS_PART_START_COLOR, <1,1,1>,
PSYS_PART_END_COLOR, <1,1,1>,
// Flow
PSYS_PART_MAX_AGE, 100.0,
PSYS_SRC_BURST_RATE, 1,
PSYS_SRC_BURST_PART_COUNT, 1,
PSYS_SRC_MAX_AGE, 0,
// Rez position
PSYS_SRC_BURST_RADIUS, RADIUS,
PSYS_SRC_INNERANGLE, PI_BY_TWO,
PSYS_SRC_OUTERANGLE, PI_BY_TWO,
PSYS_SRC_OMEGA, <0,0,0>,
PSYS_SRC_BURST_SPEED_MIN, 0,
PSYS_SRC_BURST_SPEED_MAX, 0]);
}
stop() {llParticleSystem([]);}
default
{
state_entry()
{
if(IS_ON)
{
llSetTimerEvent(RADIUS_INTERVAL);
garden();
}
else {stop();}
}
touch_start(integer num_detected)
{
if(IS_ON)
{
llSetTimerEvent(0.0);
stop();
llWhisper(0, "Le jardin est stoppé");
}
else
{
llSetTimerEvent(RADIUS_INTERVAL);
garden();
llWhisper(0, "Le jardin est démarré");
}
IS_ON = !IS_ON;
}
timer()
{
integer max_inventory = llGetInventoryNumber(INVENTORY_TEXTURE);
if(max_inventory > 0)
{
TEXTURE = llGetInventoryName(INVENTORY_TEXTURE, (integer)llFrand(max_inventory));
}
RADIUS = llFrand(MAX_RADIUS);
garden();
}
changed(integer change) {if (change & CHANGED_INVENTORY) {llResetScript();}}
}