Centralize replacement context resolution

This commit is contained in:
Jan Bader
2026-06-17 22:33:32 +02:00
parent c16adb87b6
commit 019bb5f860
+15 -7
View File
@@ -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();
}