示例#1
0
void Construction::computeAccessRoads()
{
	_accessRoads.clear();

	Tilemap& tilemap = Scenario::instance().getCity().getTilemap();
	int mi = _master_tile->getI();
	int mj = _master_tile->getJ();

	Uint8 maxDst2road = getMaxDistance2Road();
	std::list<Tile*> rect = tilemap.getRectangle( mi-maxDst2road, mj-maxDst2road, mi+_size+maxDst2road-1, mj+_size+maxDst2road-1, false);
	for (std::list<Tile*>::iterator itTiles = rect.begin(); itTiles != rect.end(); ++itTiles)
	{
		Tile* tile = *itTiles;

		if( tile->get_terrain().isRoad() )
		{
			_accessRoads.push_back( tile );
		}
	}
}
示例#2
0
// here the problem lays: if we remove road, it is left in _accessRoads array
// also we need to recompute _accessRoads if we place new road tile
// on next to this road tile buildings
void Construction::computeAccessRoads()
{
  _accessRoads.clear();
  if( !_master_tile )
      return;

  Tilemap& tilemap = Scenario::instance().getCity().getTilemap();

  Uint8 maxDst2road = getMaxDistance2Road();
  std::list<Tile*> rect = tilemap.getRectangle( _master_tile->getIJ() + TilePos( -maxDst2road, -maxDst2road ),
                                                _master_tile->getIJ() + TilePos( _size + maxDst2road - 1, _size + maxDst2road - 1 ), 
                                                !Tilemap::checkCorners );
  for (std::list<Tile*>::iterator itTiles = rect.begin(); itTiles != rect.end(); ++itTiles)
  {
    Tile* tile = *itTiles;

    if ( tile->get_terrain().isRoad() )
    {
      _accessRoads.push_back( tile );
    }
  }
}