Jump to content

Is there a way?


Purrrwicca
 Share

You are about to reply to a thread that has been inactive for 3314 days.

Please take a moment to consider if this thread is worth bumping.

Recommended Posts

Is there a way to make paw print or foot prints flat to the ground? Not at an angle?

 

integer Step = 0;
// Mask Flags - set to TRUE to enable
integer glow = TRUE; // Make the particles glow
integer bounce = FALSE; // Make particles bounce on Z plan of object
integer interpColor = TRUE; // Go from start to end color
integer interpSize = FALSE; // Go from start to end size
integer wind = FALSE; // Particles effected by wind
integer followSource = FALSE; // Particles follow the source
integer followVel = FALSE; // 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_DROP;

// 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 = 133; // Life of each particle
float maxSpeed = .1; // Max speed each particle is spit out at
float minSpeed = .1; // Min speed each particle is spit out at
string texture = "59f587f3-f9ad-cb73-57b2-eb3de678f2d6"; // Texture used for particles, default used if blank
float startAlpha = 1.0; // Start alpha (transparency) value
float endAlpha = 0.0; // End alpha (transparency) value
vector startColor = <0,0,0>; // Start color of particles <R,G,B>
vector endColor = <0,0,0>; // End color of particles <R,G,B> (if interpColor == TRUE)
vector startSize = <.4,.2,.7>; // Start size of particles
vector endSize = <.4,.4,.7>; // End size of particles (if interpSize == TRUE)
vector push = <0,0,0.0>; // Force pushed on particles

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

// Script variables
integer flags;

updateParticles()
{
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;
vector C;
if(Step==0)
C = <0,0,0>;
else if(Step==1)
C = <0,0,0>;
else if(Step==2)
C = <0,0,0>;
else if(Step==3)
C = <0,0,0>;
else if(Step==4)
C = <0,0,0>;
else if(Step==5)
C = <0,0,0>;
else if(Step==6)
C = <0,0,0>;
Step++;
if(Step==7) Step = 0;
llParticleSystem([ PSYS_PART_MAX_AGE,age,
PSYS_PART_FLAGS,flags,
PSYS_PART_START_COLOR, C,
PSYS_PART_END_COLOR, C,
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
]);
}

default
{
state_entry()
{
updateParticles();
llSetTimerEvent(.6);
}

timer()
{
string anim = llGetAnimation(llGetOwner());
if ((anim == "Walking") || (anim == "Running") || (anim == "Turning Left") || (anim == "Turning Right") || (anim == "CrouchWalking"))
{
updateParticles();
}
else
{
llParticleSystem([]);
}
}
}

Link to comment
Share on other sites

Hi Purrwicca,

http://wiki.secondlife.com/wiki/LlParticleSystem

I think you'll want to set the particle mask bit PSYS_PART_RIBBON_MASK, which will do two things...

  1. Emit particles that link end to end, and stretch as necessary to ensure that.
  2. Orient themselves along the Z axis of the emitter prim.

#2 is the behavior you want, #1 is not. So I think you may have to start and stop the system for each paw print, which you could do by adding a little code to your timer routine to only start the particle generator on every other timer event. You could do that by incrementing a local variable, then peforming a modulo comparison on it.

For example, in your timer event code, replace your call to updateParticles with something like this...

integer skip;if (skip++%3 == 0){    updateParticles();}
else { llParticleSystem([]);}

That will only fire the particle system once every three timer events. The other two times, it will shut down the particle system. Change that 3 to something else if you want a larger pause between paws. If you set the burst rate and count to fire only one particle over the duration of your timer cycle, it should lay down just one paw print at a time. You'll also have to experiment with the emitter prim's orientation to make the particles face the way you want.

I've never tried the ribbon mask, so my advice might be a bit... wrong.

More reading/viewing...

http://community.secondlife.com/t5/LSL-Scripting/ribbon-particle/m-p/2125231

Good luck, have fun!

Link to comment
Share on other sites

  • 4 weeks later...

Maddy's suggestion is the only thing I can think of.  That script is a bit odd, though.  I can't figure out what purpose this section of code serves:

vector C;if(Step==0)C = <0,0,0>;else if(Step==1)C = <0,0,0>;else if(Step==2)C = <0,0,0>;else if(Step==3)C = <0,0,0>;else if(Step==4)C = <0,0,0>;else if(Step==5)C = <0,0,0>;else if(Step==6)C = <0,0,0>;Step++;if(Step==7) Step = 0;

 No matter what value Step has, C is always = <0,0,0>, so why do you bother changing Step at all?  That whole section has the effect of saying

vector C = ZERO_VECTOR;

Your particles aren't even changing color over their own lifetimes, since

PSYS_PART_START_COLOR, C,
PSYS_PART_END_COLOR, C,

They're always black, no matter what.

Link to comment
Share on other sites

You are about to reply to a thread that has been inactive for 3314 days.

Please take a moment to consider if this thread is worth bumping.

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
 Share

×
×
  • Create New...