in cpp/VirtualSurfaces/VirtualSurfaces/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);
}
}