std::vector<dimension_size_type> TileInfo::tileCoverage(PlaneRegion region) const { std::vector<dimension_size_type> ret; dimension_size_type samplelimit = 1; if (impl->planarconfig == SEPARATE) // planar samplelimit = impl->samples; // Iterate over all samples for (dimension_size_type sample = 0; sample < samplelimit; ++sample) { // Compute row and column subrange for the covered region dimension_size_type tile1 = tileIndex(region.x, region.y, sample); dimension_size_type tile2 = tileIndex(region.x + region.w - 1, region.y, sample); dimension_size_type tile3 = tileIndex(region.x, region.y + region.h - 1, sample); dimension_size_type colstart = tileColumn(tile1); dimension_size_type collimit = tileColumn(tile2) + 1; dimension_size_type rowstart = tileRow(tile1); dimension_size_type rowlimit = tileRow(tile3) + 1; // Iterate over row and column subranges for (dimension_size_type row = rowstart; row < rowlimit; ++row) for (dimension_size_type col = colstart; col < collimit; ++col) { // Compute tile index for the row/column/sample indexes dimension_size_type index = (sample * impl->ntiles) + (row * impl->ncols) + col; ret.push_back(index); } } return ret; }
void Levels::getLevel(vector<vector<Tile>> *tile, int levelnum){ int sizeY = level[levelnum].size(); int sizeX = level[levelnum][0].size(); tile->reserve(sizeY); for(int i=0; i<sizeY; i++){ vector<Tile> tileRow(sizeX); for(int j=0; j<sizeX; j++){ if(level[levelnum][i][j]=='X') tileRow[j]=Wall; if(level[levelnum][i][j]==' ') tileRow[j]=Grass; if(level[levelnum][i][j]=='*') tileRow[j]=Box; if(level[levelnum][i][j]=='.') tileRow[j]=Exit; if(level[levelnum][i][j]=='&') tileRow[j]=ExitBox; if(level[levelnum][i][j]=='@') { tileRow[j]=GrassPlayer; //actor->put(j,i); } } tile->push_back(tileRow); tileRow.clear(); } return; }
PlaneRegion TileInfo::tileRegion(dimension_size_type index) const { // Compute origin of tile from its row and column dimension_size_type row = tileRow(index); dimension_size_type col = tileColumn(index); dimension_size_type x = col * impl->tilewidth; dimension_size_type y = row * impl->tileheight; return PlaneRegion(x, y, impl->tilewidth, impl->tileheight); }