diff --git a/app.js b/app.js index f6da13c..5952c8c 100644 --- a/app.js +++ b/app.js @@ -341,8 +341,7 @@ function updateAnalysis() { } function renderReplacementComparison(totals, currentDps, currentRegen, pieceScores) { - const targetPiece = getReplacementTargetPiece(state.newItem.target, pieceScores); - const candidate = createNewItemCandidate(state.newItem.target); + const { targetPiece, candidate } = getReplacementContext(pieceScores); const replacementTotals = replacePieceInTotals(totals, targetPiece, candidate); const replacementDps = calculateDps(replacementTotals, state.combatStyle); const replacementRegen = calculateRegenDetails(replacementTotals, replacementDps).total; @@ -415,6 +414,17 @@ function getFixedReplacementTarget(target) { return match ? FIXED_ITEMS[Number(match[1])] : null; } +function getReplacementContext(pieceScores) { + const target = state.newItem.target; + const targetPiece = getReplacementTargetPiece(target, pieceScores); + return { + target, + targetPiece, + targetIndex: targetPiece ? state.pieces.indexOf(targetPiece) : -1, + candidate: createNewItemCandidate(target), + }; +} + function getReplacementTargetPiece(target, pieceScores) { if (state.newItem.targetPieceId) { const pinned = state.pieces.find((piece) => piece.id === state.newItem.targetPieceId); @@ -477,13 +487,11 @@ function swapInNewItem() { const profile = PROFILES[state.profile]; const totals = calculateTotals(); const pieceScores = state.pieces.map((piece) => scorePiece(piece, profile, totals)); - const targetPiece = getReplacementTargetPiece(state.newItem.target, pieceScores); - if (!targetPiece) return; - const index = state.pieces.indexOf(targetPiece); - const candidate = createNewItemCandidate(state.newItem.target); + const { targetPiece, targetIndex, candidate } = getReplacementContext(pieceScores); + if (!targetPiece || targetIndex < 0) return; const previousPiece = clonePiece(targetPiece); const previousNewItem = cloneNewItem(state.newItem); - state.pieces[index] = createPieceFromCandidate(targetPiece, candidate); + state.pieces[targetIndex] = createPieceFromCandidate(targetPiece, candidate); state.newItem = createNewItemFromPiece(previousPiece, previousNewItem.target, targetPiece.id); render(); }