void TileDrawingManager::UpdateVisibleRegion()

in cpp/AdvancedColorImages/AdvancedColorImages/TileDrawingManager.cpp [43:105]


void TileDrawingManager::UpdateVisibleRegion(float3 currentPosition)
{
	m_currentPosition = currentPosition;
	bool stateUpdate = false;

	int requiredTopTileRow = max((int)m_currentPosition.y / TILESIZE - DRAWAHEADTILECOUNT, 0);
	int requiredBottomTileRow = (int)(m_currentPosition.y + m_viewPortSize.Height) / TILESIZE + DRAWAHEADTILECOUNT;
	int requiredLeftTileColumn = max((int)m_currentPosition.x / TILESIZE - DRAWAHEADTILECOUNT, 0);
	int requiredRightTileColumn = (int)(m_currentPosition.x + m_viewPortSize.Width) / TILESIZE + DRAWAHEADTILECOUNT;

	m_currentTopLeftTileRow = (int)m_currentPosition.y / TILESIZE;
	m_currentTopLeftTileColumn = (int)m_currentPosition.x / TILESIZE;

	//Draws the tiles that are required above the drawn top row.
	int numberOfRows = (m_drawnTopTileRow - requiredTopTileRow);
	int numberOfColumns = (m_drawnRightTileColumn - m_drawnLeftTileColumn) + 1;
	if (numberOfRows > 0 && numberOfColumns > 0)
	{
		DrawTileRange(m_drawnLeftTileColumn, requiredTopTileRow, numberOfColumns, numberOfRows);
		stateUpdate = true;
	}

	//Draws the tiles that are required below the drawn bottom row.
	numberOfRows = (requiredBottomTileRow - m_drawnBottomTileRow);
	numberOfColumns = (m_drawnRightTileColumn - m_drawnLeftTileColumn) + 1;
	if (numberOfRows > 0 && numberOfColumns > 0)
	{
		DrawTileRange(m_drawnLeftTileColumn, m_drawnBottomTileRow + 1, numberOfColumns, numberOfRows);
		stateUpdate = true;
	}

	//Update the current drawn top tile row and current drawn bottom tile row.
	m_drawnTopTileRow = min(requiredTopTileRow, m_drawnTopTileRow);
	m_drawnBottomTileRow = max(requiredBottomTileRow, m_drawnBottomTileRow);

	//Draws the tiles that are required to the left of the drawn columns.
	numberOfRows = (m_drawnBottomTileRow - m_drawnTopTileRow) + 1;
	numberOfColumns = (m_drawnLeftTileColumn - requiredLeftTileColumn);
	if (numberOfRows > 0 && numberOfColumns > 0)
	{
		DrawTileRange(requiredLeftTileColumn, m_drawnTopTileRow, numberOfColumns, numberOfRows);
		stateUpdate = true;
	}

	//Draws the tiles that are required to the right of the drawn columns.
	numberOfRows = (m_drawnBottomTileRow - m_drawnTopTileRow) + 1;
	numberOfColumns = (requiredRightTileColumn - m_drawnRightTileColumn);
	if (numberOfRows > 0 && numberOfColumns > 0)
	{
		DrawTileRange(m_drawnRightTileColumn + 1, m_drawnTopTileRow, numberOfColumns, numberOfRows);
		stateUpdate = true;
	}

	//Update the current drawn left tile columns and current drawn right tile columns.
	m_drawnLeftTileColumn = min(requiredLeftTileColumn, m_drawnLeftTileColumn);
	m_drawnRightTileColumn = max(requiredRightTileColumn, m_drawnRightTileColumn);

	// Trimming the tiles that are not visible on screen
	if (stateUpdate)
	{
		Trim(requiredLeftTileColumn, requiredTopTileRow, requiredRightTileColumn, requiredBottomTileRow);
	}
}