Пример #1
0
void az_draw_bad_death_ray(
    const az_baddie_t *baddie, float frozen, az_clock_t clock) {
  assert(baddie->kind == AZ_BAD_DEATH_RAY);
  assert(frozen == 0.0f);
  const float flare = baddie->armor_flare;
  draw_ray(baddie, clock, baddie->cooldown > 0.0 ||
           (baddie->state == 0 && az_clock_mod(2, 10, clock)),
           az_color3f(0.2 + 0.25 * flare, 0.2, 0.1),
           az_color3f(0.3 + 0.25 * flare, 0.3, 0.2),
           az_color3f(0.4 + 0.15 * flare, 0.4, 0.3));
}
Пример #2
0
void az_draw_bad_heat_ray(
    const az_baddie_t *baddie, float frozen, az_clock_t clock) {
  assert(baddie->kind == AZ_BAD_HEAT_RAY);
  assert(frozen == 0.0f);
  const float flare = baddie->armor_flare;
  draw_ray(baddie, clock, baddie->state == 0 ||
           (baddie->cooldown <= 1.0 && az_clock_mod(2, 4, clock)),
           az_color3f(0.35 + 0.25 * flare, 0.25, 0.25),
           az_color3f(0.55 + 0.25 * flare, 0.45, 0.45),
           az_color3f(0.85 + 0.15 * flare, 0.65, 0.65));
}
Пример #3
0
ENTRYPOINT void
draw_camera (ModeInfo *mi)
{
  camera_configuration *bp = &bps[MI_SCREEN(mi)];
  Display *dpy = MI_DISPLAY(mi);
  Window window = MI_WINDOW(mi);
  GLfloat camera_size;
  int i;

  if (!bp->glx_context)
    return;

  glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context));

  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

  glPushMatrix ();

# ifdef HAVE_MOBILE
  glRotatef (current_device_rotation(), 0, 0, 1);  /* right side up */
# endif

  gltrackball_rotate (bp->user_trackball);

# ifdef HAVE_MOBILE
  {
    GLfloat s = 0.6;
    glScalef (s, s, s);
  }
# endif

# ifdef DEBUG
  if (debug_p)
    {
      GLfloat s = 0.2;
      glScalef (s, s, s);
      glRotatef (30, 0, 1, 0);
      glRotatef (15, 1, 0, 0);
      glTranslatef (0, 0, -80);
    }
# endif

  mi->polygon_count = 0;

  camera_size = 5;

  if (MI_COUNT(mi) <= 2)    /* re-frame the scene a little bit */
    glTranslatef (0, -1, 7);
  if (MI_COUNT(mi) >= 20)
    glTranslatef (0, -1.5, -5);
  if (MI_COUNT(mi) >= 40)
    glTranslatef (0, 2, -15);

  glScalef (camera_size, camera_size, camera_size);

  /* +Z is toward sky; +X is toward the right along the back wall;
     +Y is toward the viewer. */
  glRotatef (-90, 1, 0, 0);
  glScalef (1, -1, 1);

  glPushMatrix();
  glScalef (1/camera_size, 1/camera_size, 1/camera_size);
  glTranslatef (0, -2.38, -8);  /* Move the ground down and back */
  glCallList (bp->dlists[GROUND]);
  mi->polygon_count += ground->points;

  glPopMatrix();

  {
    pedestrian *p, *p2;
    for (p = bp->pedestrians, p2 = p ? p->next : 0;
         p;
         p = p2, p2 = p2 ? p2->next : 0)
      {
        mi->polygon_count += draw_pedestrian (mi, p);
        tick_pedestrian (mi, p);  /* might free p */
      }

    if (!bp->pedestrians || !(random() % MAX (1, (int) (200 / speed_arg))))
      add_pedestrian (mi);
  }

  for (i = 0; i < bp->ncameras; i++)
    {
      camera *c = &bp->cameras[i];
      mi->polygon_count += draw_camera_1 (mi, c);
      tick_camera (mi, c);
    }

  for (i = 0; i < bp->ncameras; i++)
    {
      camera *c = &bp->cameras[i];
      if (c->state == ZOT)  /* Do this last, for alpha blending */
        mi->polygon_count += draw_ray (mi, c);
    }

  glPopMatrix ();

  if (mi->fps_p) do_fps (mi);
  glFinish();

  glXSwapBuffers(dpy, window);
}