//vel apdate
//properties
float glscale = 1.0;
float vxscale = 1.0;
float densthr = 9;
float distthr = 2;
float vmult = .75;
//set new vel
vxscale *= glscale;
int cls[] = pcfind_radius(1,"P","pscale",1.0,@P,vxscale,1);
if(len(cls)){
vector ptpos = point(1,"P",cls[0]);
vector ptvel = point(1,"v",cls[0]);
float ptscale = point(1,"pscale",cls[0]);
float ptage = point(1,"age",cls[0]);
float ptmaxage = point(1,"maxage",cls[0]);
vector ptlook = @P-ptpos;
vector crvel = v@vel;
float dist = length(ptlook);
ptscale*=distthr;
float ptvmult = chramp("./vba",(ptage/ptmaxage));
ptvmult *= chramp("./vbd",fit(dist,0,ptscale,0,1));
vector outvel = (cross(crvel,normalize(ptvel)));
outvel = cross(normalize(ptlook),outvel) * ptvmult * vmult;
if(f@density>densthr)outvel=0;
if(dist>ptscale)outvel=0;
v@velcurl = outvel;
v@vel += outvel;
}
//vel advect
//prperties
float glscale = 1.0;
float pscalemin = .09;
float pscalemax = .11;
float minage = 1;
float maxage = 3;
//set attributes
float seed = rand(i@ptnum*(f@Frame+1));
f@pscale = fit( seed ,0,1, pscalemin, pscalemax)*glscale;
f@maxage = fit( seed ,0,1, minage, maxage);
v@v = set(0,0,0);
//remove if close to others
int cls[] = pcfind_radius(1,"P","pscale",1.0,@P,f@pscale,1);
if(len(cls)>0)removepoint(0,@ptnum);