//draw grounds first
while(it != end) {
const TilePtr& tile = *it;
Position tilePos = tile->getPosition();
if(tilePos.z != z)
break;
else
++it;
if (g_map.isCovered(tilePos, m_cachedFirstVisibleFloor))
tile->draw(transformPositionTo2D(tilePos, cameraPosition), scaleFactor, Otc::DrawGround);
else
tile->draw(transformPositionTo2D(tilePos, cameraPosition), scaleFactor, Otc::DrawGround, m_lightView.get());
}
it = m_cachedVisibleTiles.begin();
//draw the rest
while (it != end) {
const TilePtr& tile = *it;
Position tilePos = tile->getPosition();
if (tilePos.z != z)
break;
else
++it;
if (g_map.isCovered(tilePos, m_cachedFirstVisibleFloor))
tile->draw(transformPositionTo2D(tilePos, cameraPosition), scaleFactor, drawFlags);
else
tile->draw(transformPositionTo2D(tilePos, cameraPosition), scaleFactor, drawFlags, m_lightView.get());
}
if(drawFlags & Otc::DrawMissiles) {
for(const MissilePtr& missile : g_map.getFloorMissiles(z)) {
missile->draw(transformPositionTo2D(missile->getPosition(), cameraPosition), scaleFactor, drawFlags & Otc::DrawAnimations, m_lightView.get());
}
}
}