| 149 | } |
| 150 | |
| 151 | cPosition* cRandomMap::getRandomXYByTileID(std::vector<size_t> pTiles, size_t pRadius) { |
| 152 | int32 Radius = (int32) pRadius; |
| 153 | cPosition* Position = new cPosition(); |
| 154 | |
| 155 | cPosition PosStart; |
| 156 | PosStart.mX = pRadius + (mParams.mRandom.getu() % (mParams.mWidth - pRadius)); |
| 157 | PosStart.mY = pRadius + (mParams.mRandom.getu() % (mParams.mHeight - pRadius)); |
| 158 | |
| 159 | // Move 1 tile each direction |
| 160 | for (Position->mY = PosStart.mY; Position->mY < getHeight() - Radius; Position->mY++) { |
| 161 | if (Position->mY != PosStart.mY) |
| 162 | PosStart.mX = 0; |
| 163 | |
| 164 | for (Position->mX = PosStart.mX; Position->mX < getWidth() - Radius; Position->mX++) { |
| 165 | |
| 166 | if (CheckRadiusTileID(pTiles, Position, pRadius)) { |
| 167 | Position->mX *= TILE_WIDTH_PIXELS; |
| 168 | Position->mY *= TILE_HEIGHT_PIXELS; |
| 169 | return Position; |
| 170 | } |
| 171 | } |
| 172 | } |
| 173 | |
| 174 | // Return to start of map |
| 175 | for (Position->mY = 0; Position->mY < PosStart.mY; Position->mY++) { |
| 176 | for (Position->mX = 0; Position->mX <= getWidth() - Radius; Position->mX++) { |
| 177 | |
| 178 | if (CheckRadiusTileID(pTiles, Position, pRadius)) { |
| 179 | Position->mX *= TILE_WIDTH_PIXELS; |
| 180 | Position->mY *= TILE_HEIGHT_PIXELS; |
| 181 | return Position; |
| 182 | } |
| 183 | } |
| 184 | } |
| 185 | |
| 186 | Position->mX = -1; |
| 187 | Position->mY = -1; |
| 188 | return Position; |
| 189 | } |
| 190 | |
| 191 | |
| 192 | cPosition* cRandomMap::getRandomXYByFeatures(std::vector<eTerrainFeature> pFeatures, size_t pRadius, bool pIgnoreSprites) { |