コード例 #1
0
ファイル: tilemap.cpp プロジェクト: pmprog/0Wave
void TileMap::Render( int OffsetX, int OffsetY, float ScaleX, float ScaleY )
{
	// Prevent non-graphical tilemaps from drawing
	if( tileGraphics == 0 )
	{
		return;
	}

	float scaledTileW = tileWidth * ScaleX;
	float scaledTileH = tileHeight * ScaleY;
	int startX = OffsetX / scaledTileW;
	int startY = OffsetY / scaledTileH;
	int endX = startX + (DISPLAY->GetWidth() / scaledTileW) + 1;
	int endY = startY + (DISPLAY->GetHeight() / scaledTileH) + 1;

	al_hold_bitmap_drawing( true );

	for( int ty = startY; ty <= endY; ty++ )
	{
		if( ty >= height )
		{
			break;
		}
		int actualy = (ty * scaledTileH) - OffsetY;

		for( int tx = startX; tx <= endX; tx++ )
		{
			if( tx >= width )
			{
				break;
			}
			int actualx = (tx * scaledTileW) - OffsetX;
			int tileIdx = tileData[ (ty * width) + tx ];

			if( tileIdx < 0 )
			{
				// Draw Animated Tile
				int animidx = (tileIdx * -1) - 1;
				if( animidx < (int)tileAnimations.size() )
				{
					Animation* a = tileAnimations.at( animidx );
					a->SetScale( ScaleX, ScaleY );
					a->DrawFrame( actualx, actualy );
				}
			} else {
				// Draw Normal Tile
				tileGraphics->DrawSprite( tileIdx, actualx, actualy, ScaleX, ScaleY, 0 );
			}

		}
	}

	al_hold_bitmap_drawing( false );
}
コード例 #2
0
ファイル: world.cpp プロジェクト: pmprog/deathsnow
void World::Render()
{
	City* c;
	Animation* a;
	int tileScaleW = visualMap->GetTileWidth() * visualMapScale->X;
	int tileScaleH = visualMap->GetTileHeight() * visualMapScale->Y;
	int tileCentreX;
	int tileCentreY;

	visualMap->Render( 0, 0, visualMapScale->X, visualMapScale->Y );

	// Draw shadow
	for( std::vector<City*>::iterator ci = Cities.begin(); ci != Cities.end(); ci++ )
	{
		c = (City*)(*ci);
		tileCentreX = (c->MapPosition->X * tileScaleW) + (tileScaleW / 2);
		tileCentreY = (c->MapPosition->Y * tileScaleH) + (tileScaleH / 2);
		al_draw_filled_ellipse( tileCentreX, tileCentreY, (tileScaleW / 1.5), (tileScaleH / 4), al_map_rgba( 0, 0, 0, 128 ) );
	}

	if( !IsBetweenTurns )
	{
		for( int li = 0; li < Cities.at(AgentWillis->CurrentCity)->LinkedCityNumbers.size(); li++ )
		{
			Vector2* la = Cities.at(AgentWillis->CurrentCity)->MapPosition;
			Vector2* lb = Cities.at(Cities.at(AgentWillis->CurrentCity)->LinkedCityNumbers.at(li))->MapPosition;
			al_draw_line( (la->X * tileScaleW) + (tileScaleW / 2), (la->Y * tileScaleH) + (tileScaleH / 2), (lb->X * tileScaleW) + (tileScaleW / 2), (lb->Y * tileScaleH) + (tileScaleH / 2), al_map_rgba( 0, 0, 0, 64 ), 3.0f );
		}

		// Draw Navigation Lines
		if( visualNavigationLineIndex > 0 )
		{
			Line* l = new Line( Cities.at(AgentWillis->CurrentCity)->MapPosition, Cities.at(AgentWillis->TargetCity)->MapPosition );

			Vector2* segA = l->GetSegmentPoint( visualNavigationLineIndex, WORLD_NAVIGATION_LINE_SEGMENTS );
			Vector2* segB = l->GetSegmentPoint( visualNavigationLineIndex - 1, WORLD_NAVIGATION_LINE_SEGMENTS );
			segA->X = (segA->X * tileScaleW) + (tileScaleW / 2);
			segA->Y = (segA->Y * tileScaleH) + (tileScaleH / 2);
			segB->X = (segB->X * tileScaleW) + (tileScaleW / 2);
			segB->Y = (segB->Y * tileScaleH) + (tileScaleH / 2);
			al_draw_line( segA->X, segA->Y, segB->X, segB->Y, al_map_rgba( 255, 240, 64, 192 ), 3.0f );
		}
	}

	// Draw Weather Indicator
	for( std::vector<City*>::iterator ci = Cities.begin(); ci != Cities.end(); ci++ )
	{
		c = (City*)(*ci);
		a = WeatherAnimations.at( c->WeatherCondition );

		tileCentreX = (c->MapPosition->X * tileScaleW) + (tileScaleW / 2);
		tileCentreY = (c->MapPosition->Y * tileScaleH) + (tileScaleH / 2);
		a->DrawFrame( tileCentreX - (visualSprites->GetFrame(0)->Width / 2), tileCentreY - visualSprites->GetFrame(0)->Height);
	}

	ProfessorFrost->WorldRender();
	AgentWillis->WorldRender();

	al_draw_filled_rectangle( 0, FRAMEWORK->Display_GetHeight() - (textFontHeight * 3), FRAMEWORK->Display_GetWidth(), FRAMEWORK->Display_GetHeight(), al_map_rgb( 0, 0, 0 ) );


	int curY = FRAMEWORK->Display_GetHeight() - (textFontHeight * 3);
	int tmpX = (FRAMEWORK->Display_GetWidth() / 2) + 20;
	al_draw_text( textFont, al_map_rgb( 255, 255, 0 ), 20, curY, 0, Cities.at( AgentWillis->CurrentCity )->Name->c_str() );
	al_draw_text( textFont, al_map_rgb( 255, 255, 0 ), tmpX, curY, 0, Cities.at( AgentWillis->TargetCity )->Name->c_str() );
	curY += textFontHeight;

	al_draw_textf( textFont, al_map_rgb( 255, 255, 0 ), 20, curY, 0, "Population: %d", (int)(Cities.at( AgentWillis->CurrentCity )->Population * 1000.0) );
	al_draw_textf( textFont, al_map_rgb( 255, 255, 0 ), tmpX, curY, 0, "Population: %d", (int)(Cities.at( AgentWillis->TargetCity )->Population * 1000.0) );
	curY += textFontHeight;

}