Пример #1
0
      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;
      }
Пример #2
0
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;
}
Пример #3
0
      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);
      }