From 30c3ab5a894fb2af3bdc43ded1e823835504f542 Mon Sep 17 00:00:00 2001 From: rgriffith Date: Sat, 4 Apr 2026 17:01:39 -0400 Subject: [PATCH] fix: pass gameState to _canAfford in MacroActionMapper Static method was referencing bare gameState which is always null. Now accepts gameState as parameter, and all 5 callers pass it through. Co-Authored-By: Claude Opus 4.6 --- lan-client/ai-bridge.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lan-client/ai-bridge.js b/lan-client/ai-bridge.js index 2f1364d..c42b684 100644 --- a/lan-client/ai-bridge.js +++ b/lan-client/ai-bridge.js @@ -707,7 +707,7 @@ class MacroActionMapper { if (castable.length === 0) return false; castable.sort((a, b) => (MacroActionMapper._cmc(b) - MacroActionMapper._cmc(a))); for (const card of castable) { - if (MacroActionMapper._canAfford(playerIdx, card)) { + if (MacroActionMapper._canAfford(playerIdx, card, gameState)) { const idx = hand.indexOf(card); if (idx !== -1) { if (!card.imageUrl) card.imageUrl = generateAiCardSVG(card); @@ -728,7 +728,7 @@ class MacroActionMapper { }); for (const card of creatures) { - if (MacroActionMapper._canAfford(playerIdx, card)) { + if (MacroActionMapper._canAfford(playerIdx, card, gameState)) { const idx = hand.indexOf(card); if (idx !== -1) { if (!card.imageUrl) card.imageUrl = generateAiCardSVG(card); @@ -752,7 +752,7 @@ class MacroActionMapper { if (removal.length === 0) return false; for (const card of removal) { - if (MacroActionMapper._canAfford(playerIdx, card)) { + if (MacroActionMapper._canAfford(playerIdx, card, gameState)) { const idx = hand.indexOf(card); if (idx !== -1) { if (!card.imageUrl) card.imageUrl = generateAiCardSVG(card); @@ -781,7 +781,7 @@ class MacroActionMapper { ); for (const card of drawSpells) { - if (MacroActionMapper._canAfford(playerIdx, card)) { + if (MacroActionMapper._canAfford(playerIdx, card, gameState)) { const idx = hand.indexOf(card); if (idx !== -1) { if (!card.imageUrl) card.imageUrl = generateAiCardSVG(card); @@ -826,7 +826,7 @@ class MacroActionMapper { ); for (const card of rampSpells) { - if (MacroActionMapper._canAfford(playerIdx, card)) { + if (MacroActionMapper._canAfford(playerIdx, card, gameState)) { const idx = hand.indexOf(card); if (idx !== -1) { if (!card.imageUrl) card.imageUrl = generateAiCardSVG(card); @@ -884,7 +884,7 @@ class MacroActionMapper { return 0; } - static _canAfford(playerIdx, card) { + static _canAfford(playerIdx, card, gameState) { if (!gameState) return false; const available = typeof aiCountUntappedLands === 'function' ? aiCountUntappedLands(playerIdx)