Example #1
0
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);
}
Example #2
0
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);
}