Ejemplo n.º 1
0
void update_particle(int i) {
  if(tinymt32_generate_float01(&rndstate) < 0.4F) {
    particles[i].dx += random_in_rangef(-JITTER, JITTER);
    particles[i].dy += random_in_rangef(-JITTER, JITTER);
  }

  // gravitate towards goal
  particles[i].dx += -(particles[i].position.x - particles[i].grav_center.x)/particles[i].power;
  particles[i].dy += -(particles[i].position.y - particles[i].grav_center.y)/particles[i].power;

  // stop swarming if goal reached
  if (particles[i].swarming) {
    float dx, dy;
    dx = particles[i].position.x - particles[i].grav_center.x;
    dy = particles[i].position.y - particles[i].grav_center.y;
    if (((dx*dx)+(dy*dy)) < GOAL_DISTANCE) {
      particles[i].swarming = false;
    }
  }

  // damping
  particles[i].dx *= 0.999F;
  particles[i].dy *= 0.999F;

  // snap to max
  float speed;
  if (particles[i].swarming)
    speed = SWARM_SPEED;
  else
    speed = MAX_SPEED;
  if(particles[i].dx >  speed) particles[i].dx =  speed;
  if(particles[i].dx < -speed) particles[i].dx = -speed;
  if(particles[i].dy >  speed) particles[i].dy =  speed;
  if(particles[i].dy < -speed) particles[i].dy = -speed;

  particles[i].position.x += particles[i].dx;
  particles[i].position.y += particles[i].dy;

  // update size
  // when we're showing the time, don't blink like you normally would
  if(showing_time == 0) {
    if((abs(particles[i].size - MIN_SIZE) < 0.001F) && (tinymt32_generate_float01(&rndstate) < 0.0008F)) {
      particles[i].goal_size = MAX_SIZE;
    }

    if(abs(particles[i].size - MAX_SIZE) < 0.001F) {
      particles[i].goal_size = MIN_SIZE;
    }
  }

  particles[i].ds += -(particles[i].size - particles[i].goal_size)/random_in_rangef(1000.0F, 5000.0F);
  if(abs(particles[i].size - particles[i].goal_size) > 0.01) {
    particles[i].size += particles[i].ds;
  }
  if(particles[i].size > MAX_SIZE) particles[i].size = MAX_SIZE;
  if(particles[i].size < MIN_SIZE) particles[i].size = MIN_SIZE;
}
Ejemplo n.º 2
0
float 
nv_rand(void)
{
	int thread_id = nv_omp_thread_id();
	NV_ASSERT(thread_id < NV_RAND_THREAD_MAX);
	return tinymt32_generate_float01(&g_state[thread_id]);
}
Ejemplo n.º 3
0
float random_in_rangef(float min, float max) {
  return min + (float)(tinymt32_generate_float01(&rndstate) * ((max - min)));
}
Ejemplo n.º 4
0
int random_in_range(int min, int max) {
  return min + (int)(tinymt32_generate_float01(&rndstate) * ((max - min) + 1));
}