void MapView::getTile(int x, int y, int z) { if (MapSource.id == None) return; TileRequest request(x,y,z,MapSource); QByteArray *tile = getTileFromDB(z,x,y,MapSource.url); if (tile != 0){ //checks if tile is actually in DB placeTile(tile, x, y, z); } else if (currentZoom == z && !currentRequests.contains(request)) //why currentZoom == z? { /* QNetworkRequest request(QUrl(qPrintable( MapSource.url+QString::number(z)+"/"+ QString::number(x)+"/"+ QString::number(y)+".png"))); */ QElapsedTimer timer; timer.start(); requestStack.removeAll(request); //removes all previous occurences of the request //check if concurrent download count has been reached if (currentRequests.count()<requestLimit) { //if not, proceed to download request networkManager->get(request); currentRequests.append(request); } else { //if it has, put request on stack requestStack.append(request); if (requestStack.count() > maxReqStackSize) { requestStack.removeAt(0); } } qDebug("queueing took "+QString::number(timer.elapsed())); } }
void MapView::placeTile(QByteArray *tileData, int x, int y, int z) { QPixmap tilePixmap; tilePixmap.loadFromData(*tileData); delete tileData; if (tilePixmap.isNull()) {qDebug("tile pixmap null"); return; } OSMTile *tile = new OSMTile(tilePixmap, QPoint(x,y), z); placeTile(tile); }
void MapView::tileDownloaded(QNetworkReply *reply) { //recreate original request from reply and delete it from the current requests QElapsedTimer timer; timer.start(); TileRequest finishedRequest(reply); currentRequests.removeAll(finishedRequest); //check to see if any requests are left in stack if (!requestStack.isEmpty()) { //pop the last request in the stack TileRequest request = requestStack.takeLast(); //proceed to download the request networkManager->get(request); currentRequests.append(request); } QByteArray *data = new QByteArray(reply->readAll()); QByteArray *cpData = new QByteArray(*data); qDebug("curreq"+QString::number(currentRequests.size())+ " reqstck"+QString::number(requestStack.size())); //check if actual data was returned if (data->length()!=0) //todo: check if data is valid { //AddTileToDBThread* t = new AddTileToDBThread(finishedRequest.z(),finishedRequest.x(),finishedRequest.y(),cpData,finishedRequest.mapSource().url); //t->start(); //the method below also checks presence of tile in db addTileToDB(finishedRequest.z(),finishedRequest.x(),finishedRequest.y(),data,finishedRequest.mapSource().url); //qDebug(qPrintable("Tile image file size:" + QString::number(data.length()) + " bits" // "(x:"+QString::number(x)+" y:"+QString::number(y)+" z:"+QString::number(z)+")")); } else emit noNetwork(); qDebug("adding tile to db took "+QString::number(timer.elapsed())); timer.restart(); //check if zoomlevel and map source did not change while downloading if( currentZoom == finishedRequest.z() && finishedRequest.mapSource().url == MapSource.url) placeTile(data, finishedRequest.x(), finishedRequest.y(), finishedRequest.z()); qDebug("placing tile took "+QString::number(timer.elapsed())); reply->deleteLater(); //do not 'delete reply;' }
void ShuffleTiles::update(float time) { Tile *tileArray = (Tile*)_tiles; for (int i = 0; i < _gridSize.width; ++i) { for (int j = 0; j < _gridSize.height; ++j) { tileArray->position = Vec2((float)tileArray->delta.width, (float)tileArray->delta.height) * time; placeTile(Vec2(i, j), tileArray); ++tileArray; } } }
void CCShuffleTiles::update(float time) { int i, j; Tile *tileArray = (Tile*)m_pTiles; for (i = 0; i < m_sGridSize.width; ++i) { for (j = 0; j < m_sGridSize.height; ++j) { tileArray->position = ccpMult(ccp((float)tileArray->delta.width, (float)tileArray->delta.height), time); placeTile(ccp(i, j), tileArray); ++tileArray; } } }
void CCShuffleTiles::update(ccTime time) { int i, j; Tile *tileArray = (Tile*)m_pTiles; for (i = 0; i < m_sGridSize.x; ++i) { for (j = 0; j < m_sGridSize.y; ++j) { tileArray->position = ccpMult(ccp((float)tileArray->delta.x, (float)tileArray->delta.y), time); placeTile(ccg(i, j), tileArray); ++tileArray; } } }