Centralize replacement context resolution
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user