|
1 | 1 | import { |
2 | 2 | AllianceRequest, |
| 3 | + Cell, |
3 | 4 | Difficulty, |
4 | 5 | Game, |
5 | 6 | Player, |
@@ -282,14 +283,21 @@ export class BotBehavior { |
282 | 283 | }); |
283 | 284 |
|
284 | 285 | if (filteredPlayers.length > 0) { |
285 | | - const playerCenter = calculateBoundingBoxCenter(this.game, myBorder); |
| 286 | + // Prefer the player's precomputed largestClusterBoundingBox center if available |
| 287 | + const playerCenter = this.player.largestClusterBoundingBox |
| 288 | + ? this.boundingBoxCenter(this.player.largestClusterBoundingBox) |
| 289 | + : calculateBoundingBoxCenter(this.game, myBorder); |
286 | 290 |
|
287 | 291 | const sortedPlayers = filteredPlayers |
288 | 292 | .map((filteredPlayer) => { |
289 | | - const filteredPlayerCenter = calculateBoundingBoxCenter( |
290 | | - this.game, |
291 | | - filteredPlayer.borderTiles(), |
292 | | - ); |
| 293 | + // Prefer filtered player's precomputed largestClusterBoundingBox center if available |
| 294 | + const filteredPlayerCenter = filteredPlayer.largestClusterBoundingBox |
| 295 | + ? this.boundingBoxCenter(filteredPlayer.largestClusterBoundingBox) |
| 296 | + : calculateBoundingBoxCenter( |
| 297 | + this.game, |
| 298 | + filteredPlayer.borderTiles(), |
| 299 | + ); |
| 300 | + |
293 | 301 | const playerCenterTile = this.game.ref( |
294 | 302 | playerCenter.x, |
295 | 303 | playerCenter.y, |
@@ -321,6 +329,14 @@ export class BotBehavior { |
321 | 329 | } |
322 | 330 | } |
323 | 331 |
|
| 332 | + // Compute the integer center cell of a bounding box { min: Cell, max: Cell } |
| 333 | + private boundingBoxCenter(box: { min: Cell; max: Cell }): Cell { |
| 334 | + return new Cell( |
| 335 | + box.min.x + Math.floor((box.max.x - box.min.x) / 2), |
| 336 | + box.min.y + Math.floor((box.max.y - box.min.y) / 2), |
| 337 | + ); |
| 338 | + } |
| 339 | + |
324 | 340 | selectRandomEnemy(): Player | TerraNullius | null { |
325 | 341 | if (this.enemy === null) { |
326 | 342 | // Save up troops until we reach the trigger ratio |
|
0 commit comments