Exemplo n.º 1
0
void load_all_tiles()
{
	int i;
	int cur_text;
	char str[80];
	for(i=0;i<255;i++)
	{
		sprintf(str,"./3dobjects/tile%i.dds",i);
		if(is_water_tile(i) && is_reflecting(i)) cur_text=load_texture_cache(str,70);
		else cur_text=load_texture_cache(str,255);
		if(cur_text==-1)return;
		tile_list[i]=cur_text;
		tiles_no=i;
#ifdef	OLD_TEXTURE_LOADER
		//map_tiles[i].img=load_bmp8_color_key_no_texture_img(str,map_tiles+i,255);
		load_bmp8_texture(str,map_tiles+i,255);
#else	//OLD_TEXTURE_LOADER
		load_texture(str,map_tiles+i,255);
#endif	//OLD_TEXTURE_LOADER
	}
	map_tiles[255].texture=NULL;
}
Exemplo n.º 2
0
void draw_tile_map()
{
	int x_start,x_end,y_start,y_end;
	int x,y;
	float x_scaled,y_scaled;

	//get only the tiles around the camera
	//we have the axes inverted, btw the go from 0 to -255
	if(camera_x<0)x=(int)(camera_x*-1)/3;
	else x=(int)camera_x/3;
	if(camera_y<0)y=(int)(camera_y*-1)/3;
	else y=(int)camera_y/3;
	x_start=x-(int)zoom_level;
	y_start=y-(int)zoom_level;
	x_end=x+(int)zoom_level;
	y_end=y+(int)zoom_level;
	if(x_start<0)x_start=0;
	if(x_end>=tile_map_size_x)x_end=tile_map_size_x-1;
	if(y_start<0)y_start=0;
	if(y_end>=tile_map_size_y)y_end=tile_map_size_y-1;
	if(!have_multitexture || poor_man)
		{
			for(y=y_start;y<=y_end;y++)
				{
					y_scaled=y*3.0f;
					for(x=x_start;x<=x_end;x++)
						{
							x_scaled=x*3.0f;
							if(is_water_tile(tile_map[y*tile_map_size_x+x]))continue;//lake, skip
							if(tile_map[y*tile_map_size_x+x]==255){
								/*glDisable(GL_TEXTURE_2D);
								glDisable(GL_LIGHTING);
								glBegin(GL_QUADS);
								glColor3f(0.2,0.2,0.2);
				 				glVertex3f(x_scaled,y_scaled+3, -3.0f);
								glVertex3f(x_scaled,y_scaled, -3.0f);
								glVertex3f(x_scaled+3, y_scaled,-3.0f);
								glVertex3f(x_scaled+3, y_scaled+3,-3.0f);
								glColor3f(1.0,1.0,1.0);
				 				glEnd();
								glEnable(GL_LIGHTING);
								glEnable(GL_TEXTURE_2D);*/
								continue;
							}//null, skip
							bind_texture(tile_list[tile_map[y*tile_map_size_x+x]]);
							glBegin(GL_QUADS);
 							glTexCoord2f(0, 0.0f);
			 				glVertex3f(x_scaled,y_scaled+3, 0.0f);
							glTexCoord2f(0, 1.0f);
							glVertex3f(x_scaled,y_scaled, 0.0f);
							glTexCoord2f(1.0f, 1.0f);
							glVertex3f(x_scaled+3, y_scaled,0.0f);
							glTexCoord2f(1.0f, 0.0f);
							glVertex3f(x_scaled+3, y_scaled+3,0.0f);
							glEnd();
						}
				}
		}
	else//we draw the ground details
		{
			//bind the detail texture
			glActiveTextureARB(GL_TEXTURE1_ARB);
			glEnable(GL_TEXTURE_2D);
			bind_texture_unbuffered(ground_detail_text);
			glActiveTextureARB(GL_TEXTURE0_ARB);
			glEnable(GL_TEXTURE_2D);

			for(y=y_start;y<=y_end;y++)
				{
					y_scaled=y*3.0f;
					for(x=x_start;x<=x_end;x++)
						{
							x_scaled=x*3.0f;
							if(is_water_tile(tile_map[y*tile_map_size_x+x]))continue;//lake, skip
							if(tile_map[y*tile_map_size_x+x]==255){
								/*glDisable(GL_TEXTURE_2D);
								glDisable(GL_LIGHTING);
								glBegin(GL_QUADS);
								glColor3f(0.2,0.2,0.2);
				 				glVertex3f(x_scaled,y_scaled+3, -3.0f);
								glVertex3f(x_scaled,y_scaled, -3.0f);
								glVertex3f(x_scaled+3, y_scaled,-3.0f);
								glVertex3f(x_scaled+3, y_scaled+3,-3.0f);
								glColor3f(1.0,1.0,1.0);
				 				glEnd();
								glEnable(GL_LIGHTING);
								glEnable(GL_TEXTURE_2D);*/
								continue;
							}//null, skip
							bind_texture(tile_list[tile_map[y*tile_map_size_x+x]]);
							//draw our normal tile
							glBegin(GL_QUADS);
 							glMultiTexCoord2fARB(GL_TEXTURE0_ARB,0, 0.0f);
 							glMultiTexCoord2fARB(GL_TEXTURE1_ARB,x_scaled/texture_scale+clouds_movement_u, (y_scaled+3.0)/texture_scale+clouds_movement_v);
			 				glVertex3f(x_scaled,y_scaled+3, 0.0f);

							glMultiTexCoord2fARB(GL_TEXTURE0_ARB,0, 1.0f);
							glMultiTexCoord2fARB(GL_TEXTURE1_ARB,x_scaled/texture_scale+clouds_movement_u, y_scaled/texture_scale+clouds_movement_v);
							glVertex3f(x_scaled,y_scaled, 0.0f);

							glMultiTexCoord2fARB(GL_TEXTURE0_ARB,1.0f, 1.0f);
							glMultiTexCoord2fARB(GL_TEXTURE1_ARB,(x_scaled+3.0f)/texture_scale+clouds_movement_u, y_scaled/texture_scale+clouds_movement_v);
							glVertex3f(x_scaled+3, y_scaled,0.0f);

							glMultiTexCoord2fARB(GL_TEXTURE0_ARB,1.0f, 0.0f);
							glMultiTexCoord2fARB(GL_TEXTURE1_ARB,(x_scaled+3.0)/texture_scale+clouds_movement_u, (y_scaled+3.0)/texture_scale+clouds_movement_v);
							glVertex3f(x_scaled+3, y_scaled+3,0.0f);
							glEnd();
						}
				}
			//disable the second texture unit
			glActiveTextureARB(GL_TEXTURE1_ARB);
			glDisable(GL_TEXTURE_2D);
			glActiveTextureARB(GL_TEXTURE0_ARB);

		}

}