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)); }
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)); }
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); }