void render_game(GameState * state) { /* Variables */ Color color = {255, 0, 255, 255}; Color black = {0, 0, 0, 255}; Color white = {255, 255, 255, 255}; char buffer [20]; int i,n; /* Set redraw off */ state->redraw = 0; /* Render world */ render_world(&state->world); /* Render pathfinding, if enabled */ if (SHOW_PATHFINDING) render_paths(state); /* Render towers */ for (i = 0; i < state->towers_length; i++) { render_entity(state->towers[i]); } /* Render enemies if they are alive */ for (i = 0; i < state->enemies_length; i++) { if (state->enemies[i].enemy.alive) render_entity(&state->enemies[i]); } /* Render spellscreen */ render_spellscreen(&state->spells); /* Render projectiles */ for (i = 0; i < state->towers_length; i++) { render_projectiles(state->towers[i]); } /* render selection */ render_mouse_actions(state); /* Render ui on top */ render_ui(state); /* Fps rendering */ n = sprintf(buffer, "%#.1f FPS", get_current_fps()); draw_text(buffer, FONT_LARGE, color, SCREEN_WIDTH-20 -100, 6, ALIGN_RIGHT); /* Game over? */ render_game_over(state); /* Render to screen */ flip_display(); clear_to_color(color); }
void show (void) { ALLEGRO_BITMAP *screen = mr.cell[0][0].screen; switch (video_effect.type) { case VIDEO_NO_EFFECT: flip_display (NULL); return; case VIDEO_OFF: return; default: break; } if (! pause_anim) { if (++effect_counter >= video_effect.duration + 2) { effect_counter = 0; stop_video_effect (); return; } switch (video_effect.type) { case VIDEO_FLICKERING: if (effect_counter % 2 && effect_counter < video_effect.duration) { clear_bitmap (effect_buffer, video_effect.color); convert_mask_to_alpha (screen, BLACK); } else clear_bitmap (effect_buffer, BLACK); draw_bitmap (screen, effect_buffer, 0, 0, 0); break; case VIDEO_FADE_IN: switch (vm) { case CGA: case EGA: draw_shutter (screen, effect_buffer, video_effect.duration / 4, effect_counter); if (effect_counter >= video_effect.duration / 4) effect_counter += video_effect.duration; break; case VGA: draw_fade (screen, effect_buffer, 1 - (float) effect_counter / (float) video_effect.duration); break; } break; case VIDEO_FADE_OUT: switch (vm) { case CGA: case EGA: draw_shutter (black_screen, effect_buffer, video_effect.duration / 4, effect_counter); if (effect_counter >= video_effect.duration / 4) effect_counter += video_effect.duration; break; case VGA: draw_fade (screen, effect_buffer, (float) effect_counter / (float) video_effect.duration); break; } if (effect_counter + 1 >= video_effect.duration) clear_bitmap (effect_buffer, BLACK); break; case VIDEO_ROLL_RIGHT: draw_roll_right (screen, effect_buffer, video_effect.duration, effect_counter); break; default: assert (false); break; } } flip_display (effect_buffer); }