martedì 17 marzo 2009

Fumo (per sigaretta o incenso)

Questo è un particle script.
In particolare genera delle particelle che imitano il fumo di una sigaretta.
Nato per generare particelle di vapore io lo uso per gli incensi, se sapete dove modificare si possono ottenere effetti interessanti.

Ecco il codice:

// Particle System 1.0

StartSteam()
{
// MASK FLAGS: set to "TRUE" to enable
integer glow = TRUE; // Makes the particles glow
integer bounce = FALSE; // Make particles bounce on Z plane of objects
integer interpColor = TRUE; // Color - from start value to end value
integer interpSize = TRUE; // Size - from start value to end value
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 = 3; // Life of each particle
float maxSpeed = 0.001; // Max speed each particle is spit out at
float minSpeed = 0.0; // Min speed each particle is spit out at
string texture = "Water Particle - Mist"; // Texture used for particles, default used if blank
float startAlpha = .25; // Start alpha (transparency) value
float endAlpha = 0.0; // End alpha (transparency) value
vector startColor = <0.9,0.9,1>; // Start color of particles
vector endColor = <1,1,1>; // End color of particles (if interpColor == TRUE)
vector startSize = <.1,.1,.3>; // Start size of particles
vector endSize = <0.1,0.1,2>; // End size of particles (if interpSize == TRUE)
vector push = <0,0,0.5>; // Force pushed on particles

// System paramaters

float rate = 0.01; // How fast (rate) to emit particles
float radius = 0.01; // Radius to emit particles for BURST pattern
integer count = 1; // How many particles to emit per BURST
float outerAngle = 0.1; // Outer angle for all ANGLE patterns
float innerAngle = 0.65; // Inner angle for all ANGLE patterns
vector omega = <0,0,0>; // Rotation of ANGLE patterns around the source
float life = 0; // Life in seconds for the system to make particles

// Script variables

integer flags;


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
]);

}
StartSpray ()
{

}

StopSpray()
{
llParticleSystem([]);
}



default
{
state_entry()
{
StartSteam();
}

listen(integer channel, string name, key id, string message)
{

if (0 == llSubStringIndex(message, "spray on"))
{
StartSteam();

}
else if (0 == llSubStringIndex(message, "spray off"))
{
StopSpray();
}
}
}

Nessun commento:

Posta un commento