File tree Expand file tree Collapse file tree 1 file changed +10
-2
lines changed
Expand file tree Collapse file tree 1 file changed +10
-2
lines changed Original file line number Diff line number Diff line change @@ -185,8 +185,16 @@ int32_t ParticleSystem2D::sprayEmit(const PSsource &emitter) {
185185 emitIndex = 0 ;
186186 if (particles[emitIndex].ttl == 0 ) { // find a dead particle
187187 success = true ;
188- particles[emitIndex].vx = emitter.vx + hw_random16 (emitter.var << 1 ) - emitter.var ; // random(-var, var)
189- particles[emitIndex].vy = emitter.vy + hw_random16 (emitter.var << 1 ) - emitter.var ; // random(-var, var)
188+ int32_t dx = hw_random16 (emitter.var << 1 ) - emitter.var ;
189+ int32_t dy = hw_random16 (emitter.var << 1 ) - emitter.var ;
190+ if (emitter.var > 5 ) { // use circular random distribution for large variance to generate nicer "explosions"
191+ while (dx*dx + dy*dy > emitter.var *emitter.var ) { // reject points outside circle
192+ dx = hw_random16 (emitter.var << 1 ) - emitter.var ;
193+ dy = hw_random16 (emitter.var << 1 ) - emitter.var ;
194+ }
195+ }
196+ particles[emitIndex].vx = emitter.vx + dx;
197+ particles[emitIndex].vy = emitter.vy + dy;
190198 particles[emitIndex].x = emitter.source .x ;
191199 particles[emitIndex].y = emitter.source .y ;
192200 particles[emitIndex].hue = emitter.source .hue ;
You can’t perform that action at this time.
0 commit comments