void Asteroid::Draw() { DrawAsteroid(*this); tail.Draw(); }
//renders one frame void Render(void) { LIST * cur; glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); DrawStarfield(&g_starfield); for(cur = g_asteroid_list; cur; cur = cur->next) DrawAsteroid(cur->d); if(g_ships) DrawPlayer(&g_player); else { RenderText(15.2858f, 27.0f, 50.0f, 1.0f, 0.75f, 0.0f, 0.0f, "GAME OVER"); if(!g_hisct_delay) { RenderText(13.1906f, 26.0f, 50.0f, 0.5f, 0.75f, 0.5f, 0.5f, "hit F2 to start a new game"); DrawHiScoreTable(&g_hisct); } } for(cur = g_alien_list; cur; cur = cur->next) DrawAlien(cur->d); for(cur = g_shot_list; cur; cur = cur->next) DrawShot(cur->d); for(cur = g_explosion_list; cur; cur = cur->next) DrawExplosion(cur->d); for(cur = g_burst_list; cur; cur = cur->next) DrawBurst(cur->d); for(cur = g_powerup_list; cur; cur = cur->next) DrawPowerup(cur->d); if(g_paused) { RenderText(0.011792f, 6.0f, 50.0f, 6.36f, 1.0f, 0.5f, 0.5f, "paused"); RenderText(11.0954f, 4.0f, 50.0f, 1.0f, 1.0f, 0.5f, 0.5f, "(hit p to resume)"); } RenderText(29.3f, 28.7f, 50.0f, 1.0f, 0.75f, 0.75f, 0.75f, "%10d", g_score); RenderText(0.1f, 28.7f, 50.0f, 1.0f, 0.75f, 0.75f, 0.75f, "%d", (g_ships ? g_ships - 1 : 0)); if(g_level < 1000) { if(g_time_to_reset) RenderText(7.9526f, 0.5f, 50.0f, 1.0f, 0.25f, 0.25f, 0.25f, "warping to level %03d...", g_level + 1); else if(g_level) RenderText(15.2858f, 0.5f, 50.0f, 1.0f, 0.25f, 0.25f, 0.25f, "level %03d", g_level); } else RenderText(13.1906f, 0.5f, 50.0f, 1.0f, 1.0f, 1.0f, 1.0f, "you are a god"); if(g_ships && g_time_to_reset) { RenderText(15.2858f, 15.0f, 50.0f, 1.0f, 0.0f, 0.75f, 0.0f, "GOOD JOB!"); RenderText(14.5001f, 14.0f, 50.0f, 0.5f, 0.5f, 0.75f, 0.5f, "completion bonus: %3d", (g_level > 99 ? 999 : g_level * 10)); } RenderText(0.1f, 0.2f, 0.0f, 0.5f, 0.5f, 0.0f, 0.5f, "%.1ffps", g_fps); glFlush(); glutSwapBuffers(); }