**
** \legal
** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
+** Copyright (c) 2007 Chris Moore
**
** This package is free software; you can redistribute it and/or
** modify it under the terms of the GNU General Public License as
split_angle(Angle::deg(10)),
gravity(0,-0.1),
velocity(0.3),
- perp_velocity(0.3),
+ perp_velocity(0.0),
step(0.01),
sprouts(10)
{
Real f;
int i=0, branch_count = 0, steps = round_to_int(1.0/step);
+ if (steps < 1) steps = 1;
for(f=0.0;f<1.0;f+=step,i++)
{
Point point(curve(f));
IMPORT_PLUS(gradient,needs_sync_=true);
IMPORT_PLUS(velocity,needs_sync_=true);
IMPORT_PLUS(perp_velocity,needs_sync_=true);
- IMPORT_PLUS(step,needs_sync_=true);
+ IMPORT_PLUS(step,{
+ needs_sync_ = true;
+ if (step <= 0)
+ step=0.01; // user is probably clueless - give a good default
+ else if (step < 0.00001)
+ step=0.00001; // 100K should be enough for anyone
+ else if (step > 1)
+ step=1;
+ });
IMPORT_PLUS(splits,needs_sync_=true);
IMPORT_PLUS(sprouts,needs_sync_=true);
IMPORT_PLUS(random_factor,needs_sync_=true);
sync();
std::vector<Particle>::reverse_iterator iter;
+
float radius(size*sqrt(1.0f/(abs(pw)*abs(ph))));
int x1,y1,x2,y2;
color.set_a(1);
}
+ // previously, radius was multiplied by sqrt(step)*12 only if
+ // the radius came out at less than 1 (pixel):
+ // if (radius<=1.0f) radius*=sqrt(step)*12.0f;
+ // seems a little arbitrary - does it help?
+
// calculate the box that this particle will be drawn as
float x1f=(iter->point[0]-tl[0])/pw-(scaled_radius*0.5);
float x2f=(iter->point[0]-tl[0])/pw+(scaled_radius*0.5);