コード例 #1
0
ファイル: game.c プロジェクト: tivervac/UGentProjects
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);
}
コード例 #2
0
ファイル: client_render.cpp プロジェクト: mikedw/synquake_stm
void renderSingleFrame()
{
	coord_t px,py;			/* player position */
	value_t life;
	float pfx,pfy;			/* interpolated player position (for main player) */

	if( !cl.updated )		return;

	SDL_LockMutex(cl.game_mutex);

	px = cl.pl->r.v1.x;
	py = cl.pl->r.v1.y;
	life = cl.pl->attrs[PL_LIFE];

	/* get new player position */
	updatePosition(&pmd, px,py);
	pfx = pmd.pfx;
	pfy = pmd.pfy;

	/* compute render range */
	vect_init( &cl.pl->r.v1, (coord_t)pfx, (coord_t)pfy );
	vect_add( &cl.pl->r.v1, &cl.pl->size, &cl.pl->r.v2 );
	rect_t render_r = game_action_range( AC_VIEW, cl.pl, &wm.map_r );
	vect_init( &cl.pl->r.v1, px, py );
	vect_add( &cl.pl->r.v1, &cl.pl->size, &cl.pl->r.v2 );

	/* begin rendering */
	w.beginRender();

	/* set camera and lights */  /* position */  /* look at */  /* up direction */
	action_range_t* ar = &action_ranges[AC_VIEW];
	gluLookAt( pfx-ar->front,1.5*ar->front,pfy-ar->front, 	pfx-0.1*ar->front,0.0,pfy-0.1*ar->front,	0,1,0);

	/* draw floor */
	int i, j;
	for ( i = render_r.v1.x; i <= render_r.v2.x; i++ )
		for ( j = render_r.v1.y; j <= render_r.v2.y; j++ )
			floor_model->render(i,j);

	/* draw entities */
	int et;
	for( et = n_entity_types-1; et >= 0; et-- )
	{
		pentity_set_t* pe_set = worldmap_get_entities( &render_r, 1 << et );
		elem_t* pos;
		pentity_set_for_each( pos, pe_set )
			render_entity( ((pentity_t*)pos)->ent );
		pentity_set_destroy( pe_set );
	}


	SDL_UnlockMutex(cl.game_mutex);


	/* get coordinates for the status area */
	SDL_Surface *screen = w.getScreen();
	SDL_Rect rect;
	rect.w = cl.resx;
	rect.h = 40;
	rect.x = 0;
	rect.y = cl.resy - rect.h;

	/* display status */
	SDL_FillRect( screen, &rect, SDL_MapRGB( screen->format, 0x00, 0x00, 0x00 ) );
	SDL_UpdateRect(screen, rect.x,rect.y, rect.w,rect.h);

	char sbuffer[256];
	SDL_WM_SetCaption( cl.name, NULL);
	if ( cl.state != PLAYING )		sprintf(sbuffer, "%s", client_states[cl.state]);
	else	sprintf(sbuffer, "playing -> %s ( coord = %d,%d life = %d )",	AI_state_names[cl.purpose],	px, py, life);
	font->render(rect.x + 9, rect.y + 2, sbuffer, screen);

	sprintf(sbuffer, "update interval: average = %.1lfms, last = %.1lfms, fps = %.1f",
		cl.average_update_interval, cl.last_update_interval, 1000.0 / frame_render_interval );
	font->render(rect.x + 9, rect.y + 21, sbuffer, screen);

	SDL_UpdateRect(screen, rect.x,rect.y, rect.w,rect.h);

	/* finish frame rendering */
	updateMovementDataVectors();
	w.endRender();
}