Ejemplo n.º 1
0
//by jesse stone
void GenerateSetPerspectiveFOV(float fovy, float aspect, float zNear, float zFar)
{
	PrepareForGL();

	glMatrixMode(GL_PROJECTION);
	
	//we use Clanlib to setup our matrix manually because if we do it in HW we can't always extract it again as android gl doesn't support that
	glLoadIdentity();
	CL_Mat4f mat = CL_Mat4f::identity();

	RotateGLIfNeeded(mat);
	
	float xmin, xmax, ymin, ymax;

	ymax = zNear * float(tan(fovy * M_PI / 360.0f));
	ymin = -ymax;
	xmin = ymin * aspect;
	xmax = ymax * aspect;

	mat.multiply( CL_Mat4f::frustum(xmin, xmax, ymin, ymax, zNear, zFar));
	BaseApp::GetBaseApp()->SetProjectionMatrix(mat);
	
	//glFrustumf(xmin, xmax, ymin, ymax, zNear, zFar);
	glLoadMatrixf((GLfloat*)mat);

	glMatrixMode(GL_MODELVIEW);
}
Ejemplo n.º 2
0
void App::Draw()
{
	//Use this to prepare for raw GL calls
	PrepareForGL();
	
	glClearColor(0.5,0.5,0.5,1);
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
	

	//after our 2d rect call above, we need to prepare for raw GL again. (it keeps it in ortho mode if we don't for speed)
	PrepareForGL();

	if (g_game->game_state_ == 0 || g_game->game_state_ == 4 || g_game->game_state_ == 2 || g_game->game_state_ == 3) //we draw main menu
	{
		g_game->draw_main_menu();
	}
	else if (g_game->game_state_ == 1)
	{
		//tile_map[][] = [[...],...]
		int tile_map_size = g_game->world_size_;
		int tile_width = 80;
		int tile_height = 40;
		int sel_pos_x = 0;
		int sel_pos_y = 0;
	
		// i goes from zero to 9
		// j goes from 1 to 10... f**k

		
		for (int i = 0; i < tile_map_size; i++)
		{
			int j = 13;
			g_game->spritesheet_.BlitFrame((j * tile_width / 2) + (i * tile_width / 2)+10, (i * tile_height / 2) - (j * tile_height / 2)+GetScreenSizeY()/2,"pared_1");
		}
		for (int j = tile_map_size; j > 0; j--)
		{
			int i = -1;
			g_game->spritesheet_.BlitFrame((j * tile_width / 2) + (i * tile_width / 2)+10, (i * tile_height / 2) - (j * tile_height / 2)+GetScreenSizeY()/2,"pared_2");
		}

		for (int i = 0; i < tile_map_size; i++)
		{
			for (int j = tile_map_size; j > 0; j--)
			{
				g_game->spritesheet_.BlitFrame((j * tile_width / 2) + (i * tile_width / 2)+10, (i * tile_height / 2) - (j * tile_height / 2)+GetScreenSizeY()/2,"floor_default");
				//g_game->spritesheet_.BlitFrame((j * tile_width / 2) + (i * tile_width / 2)+10, (i * tile_height / 2) - (j * tile_height / 2)+GetScreenSizeY()/2,"floor_3");

				//we draw the player
				if (g_game->player_.x_ == i && g_game->player_.y_ == (j-1))
				{
					if (g_game->player_.looking_direction_ == 0) //left
					{
						g_game->spritesheet_.BlitFrame((j * tile_width / 2) + (i * tile_width / 2)+10, (i * tile_height / 2) - (j * tile_height / 2)+GetScreenSizeY()/2,"char_0");
					}
					else if (g_game->player_.looking_direction_ == 1) //right
					{
						g_game->spritesheet_.BlitFrame((j * tile_width / 2) + (i * tile_width / 2)+10, (i * tile_height / 2) - (j * tile_height / 2)+GetScreenSizeY()/2,"char_1");
					}
					else if (g_game->player_.looking_direction_ == 2) //up
					{
						g_game->spritesheet_.BlitFrame((j * tile_width / 2) + (i * tile_width / 2)+10, (i * tile_height / 2) - (j * tile_height / 2)+GetScreenSizeY()/2,"char_2");
					}
					else if (g_game->player_.looking_direction_ == 3) //down
					{
						g_game->spritesheet_.BlitFrame((j * tile_width / 2) + (i * tile_width / 2)+10, (i * tile_height / 2) - (j * tile_height / 2)+GetScreenSizeY()/2,"char_3");
					}
				}


				if (g_game->layer_vision[i][j-1] != 0)
				{
					g_game->draw_vision(i,j);
				}

				if (g_game->layer_enemigos[i][j-1] != 0)
				{
					g_game->draw_enemigo(i,j);
				}

				if (g_game->layer_map[i][j-1] != 0)
				{
					g_game->draw_item(i,j);
				}

				if (g_game->layer_top[i][j-1] != 0)
				{
					g_game->draw_item_top(i,j);
				}

				if (g_game->layer_walls[i][j-1] != 0)
				{
					g_game->draw_walls(i,j);
				}
			}
		}
		for (int i = 0; i < tile_map_size; i++)
		{
			for (int j = tile_map_size; j > 0; j--)
			{
				if (g_game->only_render[i][j-1] != 0)
				{
					g_game->draw_item_only_render(i,j);
				}
			}
		}
	}
	
	//the base handles actually drawing the GUI stuff over everything else, if applicable, which in this case it isn't.
	BaseApp::Draw();
}