Centralize replacement context resolution
This commit is contained in:
@@ -341,8 +341,7 @@ function updateAnalysis() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function renderReplacementComparison(totals, currentDps, currentRegen, pieceScores) {
|
function renderReplacementComparison(totals, currentDps, currentRegen, pieceScores) {
|
||||||
const targetPiece = getReplacementTargetPiece(state.newItem.target, pieceScores);
|
const { targetPiece, candidate } = getReplacementContext(pieceScores);
|
||||||
const candidate = createNewItemCandidate(state.newItem.target);
|
|
||||||
const replacementTotals = replacePieceInTotals(totals, targetPiece, candidate);
|
const replacementTotals = replacePieceInTotals(totals, targetPiece, candidate);
|
||||||
const replacementDps = calculateDps(replacementTotals, state.combatStyle);
|
const replacementDps = calculateDps(replacementTotals, state.combatStyle);
|
||||||
const replacementRegen = calculateRegenDetails(replacementTotals, replacementDps).total;
|
const replacementRegen = calculateRegenDetails(replacementTotals, replacementDps).total;
|
||||||
@@ -415,6 +414,17 @@ function getFixedReplacementTarget(target) {
|
|||||||
return match ? FIXED_ITEMS[Number(match[1])] : null;
|
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) {
|
function getReplacementTargetPiece(target, pieceScores) {
|
||||||
if (state.newItem.targetPieceId) {
|
if (state.newItem.targetPieceId) {
|
||||||
const pinned = state.pieces.find((piece) => piece.id === 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 profile = PROFILES[state.profile];
|
||||||
const totals = calculateTotals();
|
const totals = calculateTotals();
|
||||||
const pieceScores = state.pieces.map((piece) => scorePiece(piece, profile, totals));
|
const pieceScores = state.pieces.map((piece) => scorePiece(piece, profile, totals));
|
||||||
const targetPiece = getReplacementTargetPiece(state.newItem.target, pieceScores);
|
const { targetPiece, targetIndex, candidate } = getReplacementContext(pieceScores);
|
||||||
if (!targetPiece) return;
|
if (!targetPiece || targetIndex < 0) return;
|
||||||
const index = state.pieces.indexOf(targetPiece);
|
|
||||||
const candidate = createNewItemCandidate(state.newItem.target);
|
|
||||||
const previousPiece = clonePiece(targetPiece);
|
const previousPiece = clonePiece(targetPiece);
|
||||||
const previousNewItem = cloneNewItem(state.newItem);
|
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);
|
state.newItem = createNewItemFromPiece(previousPiece, previousNewItem.target, targetPiece.id);
|
||||||
render();
|
render();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user