Esempio n. 1
0
void CEnvironmentGrid::PaintMap (CMapViewportCtx &Ctx, CG16bitImage &Dest)

//	PaintMap
//
//	Paint the environment on the map

	{
	int cxHalfTileCount = m_iTileCount / 2;
	int cyHalfTileCount = m_iTileCount / 2;

	//	Compute the size of each tile.

	int cxOrigin;
	int cyOrigin;
	Ctx.Transform(Ctx.GetCenterPos(), &cxOrigin, &cyOrigin);

	int cxTile;
	int cyTile;
	CVector vTile(m_iTileSize * g_KlicksPerPixel, m_iTileSize * g_KlicksPerPixel);
	Ctx.Transform(Ctx.GetCenterPos() + vTile, &cxTile, &cyTile);

	//	+1 because the floating-point conversion is sometimes off.

	cxTile = AlignUp(Absolute(cxTile - cxOrigin), 2) + 1;
	cyTile = AlignUp(Absolute(cyTile - cyOrigin), 2) + 1;

	int cxHalfTile = cxTile / 2;
	int cyHalfTile = cyTile / 2;

	//	Paint all tiles

	STileMapEnumerator k;
	while (HasMoreTiles(k))
		{
		//	Get the tile

		int xTile;
		int yTile;
		CSpaceEnvironmentType *pEnv;
		DWORD dwEdgeMask;

		GetNextTileType(k, &xTile, &yTile, &pEnv, &dwEdgeMask);
		if (pEnv == NULL)
			continue;

		//	Get the position of the tile

		CVector vPos = TileToVector(xTile, yTile);

		//	Fade out based on distance

		int iDist = Max(Absolute(xTile - cxHalfTileCount), Absolute(yTile - cyHalfTileCount));
		DWORD dwFade = (iDist > 5 ? Min(8 * (iDist - 5), 0xC0) : 0);

		//	Transform to map coords

		int x;
		int y;
		Ctx.Transform(vPos, &x, &y);

		//	Paint the tile

		pEnv->PaintMap(Dest, x, y, cxTile, cyTile, dwFade, dwEdgeMask);
		}
	}