fix tracks to all be EW. no more NS tracks
This commit is contained in:
+9
-4
@@ -16,6 +16,7 @@ import type { CarType, Hand, TrackGeometry } from './content.ts';
|
||||
import { check, areaOf, destinationsFor } from './apply.ts';
|
||||
import type { Intent } from './intents.ts';
|
||||
import type { GameState, GridCoord, PlayerIndex } from './state.ts';
|
||||
import { variantsFor } from './track.ts';
|
||||
|
||||
const CAR_TYPES: readonly CarType[] = ['coach', 'boxcar', 'reefer', 'hopper', 'tank', 'caboose'];
|
||||
|
||||
@@ -139,7 +140,10 @@ function localOpsCandidates(s: GameState, player: PlayerIndex): Intent[] {
|
||||
// Six is the widest set (turnouts); `check` discards the ones whose ports do not meet.
|
||||
const targets = s.cards.get(cardId)?.kind.kind === 'enhancement' ? attachments : placements;
|
||||
for (const placement of targets) {
|
||||
for (let variant = 0; variant < 6; variant++) {
|
||||
// A printed card turns but does not flip, so the widest variant set is TWO. This offered six
|
||||
// per placement per card back when a curve could be laid at all four rotations; four of every
|
||||
// six were dead weight in an option list the bot scores in full.
|
||||
for (let variant = 0; variant < 2; variant++) {
|
||||
out.push({ type: 'card.play', cardId, placement, variant });
|
||||
}
|
||||
}
|
||||
@@ -151,7 +155,8 @@ function localOpsCandidates(s: GameState, player: PlayerIndex): Intent[] {
|
||||
if (count < 1) continue;
|
||||
const [geometry, hand] = key.split(':') as [TrackGeometry, Hand];
|
||||
for (const placement of placements) {
|
||||
for (let variant = 0; variant < 2; variant++) {
|
||||
// 0° and 180°. A straight is the same card either way; `check` discards the duplicate.
|
||||
for (let variant = 0; variant < variantsFor(geometry, hand).length; variant++) {
|
||||
out.push({ type: 'track.lay', geometry, hand, placement, variant });
|
||||
}
|
||||
}
|
||||
@@ -249,8 +254,8 @@ function placementCandidates(s: GameState, player: PlayerIndex): GridCoord[] {
|
||||
{ row: row!, col: col! - 1 },
|
||||
];
|
||||
for (const c of around) {
|
||||
// Q7 — a district hangs BELOW the Running Track; there is nothing above it.
|
||||
if (c.row > area.runningRow) continue;
|
||||
// A district grows on BOTH sides of the Running Track: a turnout turned 180° sends its 45°
|
||||
// leg north instead of south. The rows above used to be filtered out here on Q7's authority.
|
||||
const k = `${c.row},${c.col}`;
|
||||
if (seen.has(k)) continue;
|
||||
// The Limits signs are candidates even though they are occupied: laying track there is how
|
||||
|
||||
Reference in New Issue
Block a user