@pompidup/kingdomino-engine 3.5.0 → 3.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5447,19 +5447,11 @@ var placeDomino = (kingdom, position, rotation, domino, maxKingdomSize = MAX_KIN
5447
5447
  )) {
5448
5448
  return err(ErrorCode.PLACEMENT_EXCEEDS_KINGDOM_SIZE);
5449
5449
  }
5450
- const adjacentTiles = isAdjacent(
5451
- kingdom,
5452
- firstTile.position,
5453
- secondTile.position
5454
- );
5455
- if (adjacentTiles.length === 0) {
5450
+ const adjacentPairs = isAdjacent(kingdom, firstTile, secondTile);
5451
+ if (adjacentPairs.length === 0) {
5456
5452
  return err(ErrorCode.PLACEMENT_NOT_ADJACENT);
5457
5453
  }
5458
- const hasValidAdjacentTiles = hasValidAdjacent(adjacentTiles, [
5459
- firstTile.tile,
5460
- secondTile.tile
5461
- ]);
5462
- if (!hasValidAdjacentTiles) {
5454
+ if (!hasValidAdjacent(adjacentPairs)) {
5463
5455
  return err(ErrorCode.PLACEMENT_INVALID_TERRAIN);
5464
5456
  }
5465
5457
  return ok(placeTiles(kingdom, [firstTile, secondTile]));
@@ -5485,34 +5477,32 @@ var isFreePlace = (kingdom, firstPosition, secondPosition) => {
5485
5477
  }
5486
5478
  return ok(true);
5487
5479
  };
5488
- var isAdjacent = (kingdom, firstPosition, secondPosition) => {
5480
+ var isAdjacent = (kingdom, firstTile, secondTile) => {
5489
5481
  const offsets = [
5490
5482
  { x: -1, y: 0 },
5491
5483
  { x: 1, y: 0 },
5492
5484
  { x: 0, y: -1 },
5493
5485
  { x: 0, y: 1 }
5494
5486
  ];
5495
- const isOwnPosition = (x, y) => x === firstPosition.x && y === firstPosition.y || x === secondPosition.x && y === secondPosition.y;
5496
- const adjacentTiles = [];
5497
- for (const pos of [firstPosition, secondPosition]) {
5487
+ const isOwnPosition = (x, y) => x === firstTile.position.x && y === firstTile.position.y || x === secondTile.position.x && y === secondTile.position.y;
5488
+ const pairs = [];
5489
+ for (const own of [firstTile, secondTile]) {
5498
5490
  for (const offset of offsets) {
5499
- const nx = pos.x + offset.x;
5500
- const ny = pos.y + offset.y;
5491
+ const nx = own.position.x + offset.x;
5492
+ const ny = own.position.y + offset.y;
5501
5493
  if (isOwnPosition(nx, ny)) continue;
5502
5494
  const tile = getTile(kingdom, { x: nx, y: ny });
5503
5495
  if (isOk(tile) && tile.value.type !== "empty") {
5504
- adjacentTiles.push(tile.value);
5496
+ pairs.push({ neighbor: tile.value, own: own.tile });
5505
5497
  }
5506
5498
  }
5507
5499
  }
5508
- return adjacentTiles;
5500
+ return pairs;
5509
5501
  };
5510
- var hasValidAdjacent = (adjacentTiles, tiles) => {
5511
- return adjacentTiles.some((adjacentTile) => {
5512
- return tiles.some((tile) => {
5513
- return tile.type === adjacentTile.type || adjacentTile.type === "castle";
5514
- });
5515
- });
5502
+ var hasValidAdjacent = (pairs) => {
5503
+ return pairs.some(
5504
+ ({ neighbor, own }) => neighbor.type === "castle" || neighbor.type === own.type
5505
+ );
5516
5506
  };
5517
5507
  var checkCastleIsInMiddle = (kingdom) => {
5518
5508
  let castleX;
@@ -5362,19 +5362,11 @@ var placeDomino = (kingdom, position, rotation, domino, maxKingdomSize = MAX_KIN
5362
5362
  )) {
5363
5363
  return err(ErrorCode.PLACEMENT_EXCEEDS_KINGDOM_SIZE);
5364
5364
  }
5365
- const adjacentTiles = isAdjacent(
5366
- kingdom,
5367
- firstTile.position,
5368
- secondTile.position
5369
- );
5370
- if (adjacentTiles.length === 0) {
5365
+ const adjacentPairs = isAdjacent(kingdom, firstTile, secondTile);
5366
+ if (adjacentPairs.length === 0) {
5371
5367
  return err(ErrorCode.PLACEMENT_NOT_ADJACENT);
5372
5368
  }
5373
- const hasValidAdjacentTiles = hasValidAdjacent(adjacentTiles, [
5374
- firstTile.tile,
5375
- secondTile.tile
5376
- ]);
5377
- if (!hasValidAdjacentTiles) {
5369
+ if (!hasValidAdjacent(adjacentPairs)) {
5378
5370
  return err(ErrorCode.PLACEMENT_INVALID_TERRAIN);
5379
5371
  }
5380
5372
  return ok(placeTiles(kingdom, [firstTile, secondTile]));
@@ -5400,34 +5392,32 @@ var isFreePlace = (kingdom, firstPosition, secondPosition) => {
5400
5392
  }
5401
5393
  return ok(true);
5402
5394
  };
5403
- var isAdjacent = (kingdom, firstPosition, secondPosition) => {
5395
+ var isAdjacent = (kingdom, firstTile, secondTile) => {
5404
5396
  const offsets = [
5405
5397
  { x: -1, y: 0 },
5406
5398
  { x: 1, y: 0 },
5407
5399
  { x: 0, y: -1 },
5408
5400
  { x: 0, y: 1 }
5409
5401
  ];
5410
- const isOwnPosition = (x, y) => x === firstPosition.x && y === firstPosition.y || x === secondPosition.x && y === secondPosition.y;
5411
- const adjacentTiles = [];
5412
- for (const pos of [firstPosition, secondPosition]) {
5402
+ const isOwnPosition = (x, y) => x === firstTile.position.x && y === firstTile.position.y || x === secondTile.position.x && y === secondTile.position.y;
5403
+ const pairs = [];
5404
+ for (const own of [firstTile, secondTile]) {
5413
5405
  for (const offset of offsets) {
5414
- const nx = pos.x + offset.x;
5415
- const ny = pos.y + offset.y;
5406
+ const nx = own.position.x + offset.x;
5407
+ const ny = own.position.y + offset.y;
5416
5408
  if (isOwnPosition(nx, ny)) continue;
5417
5409
  const tile = getTile(kingdom, { x: nx, y: ny });
5418
5410
  if (isOk(tile) && tile.value.type !== "empty") {
5419
- adjacentTiles.push(tile.value);
5411
+ pairs.push({ neighbor: tile.value, own: own.tile });
5420
5412
  }
5421
5413
  }
5422
5414
  }
5423
- return adjacentTiles;
5415
+ return pairs;
5424
5416
  };
5425
- var hasValidAdjacent = (adjacentTiles, tiles) => {
5426
- return adjacentTiles.some((adjacentTile) => {
5427
- return tiles.some((tile) => {
5428
- return tile.type === adjacentTile.type || adjacentTile.type === "castle";
5429
- });
5430
- });
5417
+ var hasValidAdjacent = (pairs) => {
5418
+ return pairs.some(
5419
+ ({ neighbor, own }) => neighbor.type === "castle" || neighbor.type === own.type
5420
+ );
5431
5421
  };
5432
5422
  var checkCastleIsInMiddle = (kingdom) => {
5433
5423
  let castleX;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pompidup/kingdomino-engine",
3
- "version": "3.5.0",
3
+ "version": "3.5.1",
4
4
  "description": "A simple engine for the game Kingdomino",
5
5
  "main": "./dist/index.js",
6
6
  "type": "module",