From 42c43d3f2d6581da3041d33ffa1988687571d472 Mon Sep 17 00:00:00 2001 From: Cmdr McDonald Date: Tue, 4 Apr 2017 08:51:02 +0100 Subject: [PATCH] Use single calculation for shield metrics --- .../anaconda-test-detailed-export-v4.json | 2 +- src/app/components/Modification.jsx | 3 ++ src/app/shipyard/Calculations.js | 2 +- src/app/shipyard/Ship.js | 52 +++---------------- 4 files changed, 11 insertions(+), 48 deletions(-) diff --git a/__tests__/fixtures/anaconda-test-detailed-export-v4.json b/__tests__/fixtures/anaconda-test-detailed-export-v4.json index 65893b57..32d622cf 100644 --- a/__tests__/fixtures/anaconda-test-detailed-export-v4.json +++ b/__tests__/fixtures/anaconda-test-detailed-export-v4.json @@ -310,7 +310,7 @@ "unladenRange": 18.74, "yaw": 10, "fullTankRange": 18.36, - "hardness": 170, + "hardness": 65, "ladenRange": 16.59, "unladenFastestRange": 74.2, "ladenFastestRange": 66.96, diff --git a/src/app/components/Modification.jsx b/src/app/components/Modification.jsx index 4212e3e0..4869a694 100644 --- a/src/app/components/Modification.jsx +++ b/src/app/components/Modification.jsx @@ -54,6 +54,9 @@ export default class Modification extends TranslatedComponent { this.setState({ value }); } + /** + * Triggered when an update to slider value is finished i.e. when losing focus + */ _updateFinished() { this.props.onChange(); } diff --git a/src/app/shipyard/Calculations.js b/src/app/shipyard/Calculations.js index ad040e0c..42dc5cee 100644 --- a/src/app/shipyard/Calculations.js +++ b/src/app/shipyard/Calculations.js @@ -342,7 +342,7 @@ export function shieldMetrics(ship, sys) { // Calculate diminishing returns for boosters // Diminishing returns not currently in-game - //boost = Math.min(boost, (1 - Math.pow(Math.E, -0.7 * boost)) * 2.5); + // boost = Math.min(boost, (1 - Math.pow(Math.E, -0.7 * boost)) * 2.5); // Remove base shield generator strength boost -= 1; diff --git a/src/app/shipyard/Ship.js b/src/app/shipyard/Ship.js index d622254e..020e32bc 100755 --- a/src/app/shipyard/Ship.js +++ b/src/app/shipyard/Ship.js @@ -1204,53 +1204,13 @@ export default class Ship { * @return {this} The ship instance (for chaining operations) */ recalculateShield() { - let shield = 0; - let shieldBoost = 1; - let shieldExplRes = null; - let shieldKinRes = null; - let shieldThermRes = null; - let shieldExplDRStart = null; - let shieldExplDREnd = null; - let shieldKinDRStart = null; - let shieldKinDREnd = null; - let shieldThermDRStart = null; - let shieldThermDREnd = null; - - const sgSlot = this.findInternalByGroup('sg'); - if (sgSlot && sgSlot.enabled) { - // Shield from generator - shield = Calc.shieldStrength(this.hullMass, this.baseShieldStrength, sgSlot.m, 1); - shieldExplRes = 1 - sgSlot.m.getExplosiveResistance(); - shieldExplDRStart = shieldExplRes * 0.7; - shieldExplDREnd = 0; - shieldKinRes = 1 - sgSlot.m.getKineticResistance(); - shieldKinDRStart = shieldKinRes * 0.7; - shieldKinDREnd = 0; - shieldThermRes = 1 - sgSlot.m.getThermalResistance(); - shieldThermDRStart = shieldThermRes * 0.7; - shieldThermDREnd = 0; - - // Shield from boosters - for (let slot of this.hardpoints) { - if (slot.enabled && slot.m && slot.m.grp == 'sb') { - shieldBoost += slot.m.getShieldBoost(); - shieldExplRes *= (1 - slot.m.getExplosiveResistance()); - shieldKinRes *= (1 - slot.m.getKineticResistance()); - shieldThermRes *= (1 - slot.m.getThermalResistance()); - } - } - } - - // We apply diminishing returns to the boosted value - shieldBoost = Math.min(shieldBoost, (1 - Math.pow(Math.E, -0.7 * shieldBoost)) * 2.5); - - shield = shield * shieldBoost; - - this.shield = shield; - this.shieldExplRes = shieldExplRes ? 1 - this.diminishingReturns(shieldExplRes, shieldExplDREnd, shieldExplDRStart) : null; - this.shieldKinRes = shieldKinRes ? 1 - this.diminishingReturns(shieldKinRes, shieldKinDREnd, shieldKinDRStart) : null; - this.shieldThermRes = shieldThermRes ? 1 - this.diminishingReturns(shieldThermRes, shieldThermDREnd, shieldThermDRStart) : null; + // Obtain shield metrics with 0 pips to sys (parts affected by SYS aren't used here) + const metrics = Calc.shieldMetrics(this, 0); + this.shield = metrics.generator + metrics.boosters; + this.shieldExplRes = this.shield > 0 ? 1 - metrics.explosive.total : null; + this.shieldKinRes = this.shield > 0 ? 1 - metrics.kinetic.total : null; + this.shieldThermRes = this.shield > 0 ? 1 - metrics.thermal.total : null; return this; }