diff --git a/ChangeLog.md b/ChangeLog.md
index e33785d2..4841ab12 100644
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -3,7 +3,6 @@
* Make scan time visible on scanners where available
* Update power distributor able-to-boost calculation to take fractional MJ values in to account
* Revert to floating header due to issues on iOS
- * Add effective total shield value to defence summary
* Fix issue where new module added to a slot did not reset its enabled status
* Show integrity value for relevant modules
* Reset old modification values when a new roll is applied
@@ -16,6 +15,13 @@
* Ensure that clip size modification imports result in whole numbers
* Rework of separate offence/defence/movement sections to a unified interface
* Use cargo hatch information on import if available
+ * Additional information of power distributor pips, boost, cargo and fuel loads added to build
+ * Additional information of opponent and engagement range added to build
+ * Reworking of offence, defence and movement information in to separate tabs as part of the outfitting screen:
+ * Power and costs section provides the existing 'Power' and 'Costs' sections
+ * Profiles section provides a number of graphs that show how various components of the build (top speed, sustained DPS against opponent's shields and armour etc) are affected by mass, range, etc.
+ * Offence section provides details of your build's damage distribution and per-weapon effectiveness. It also gives summary information for how long it will take for your build to wear down your opponent's shields and armour
+ * Defence section provides details of your build's defences against your selected opponent. It provides details of the effectiveness of your resistances of both shields and armour, and effective strength of each as a result. It also provides key metrics around shield longevity and recovery times, as well as module protection
#2.2.19
* Power management panel now displays modules in descending order of power usage by default
diff --git a/src/app/components/HardpointSlot.jsx b/src/app/components/HardpointSlot.jsx
index bca5ecbc..ca76bd80 100644
--- a/src/app/components/HardpointSlot.jsx
+++ b/src/app/components/HardpointSlot.jsx
@@ -55,7 +55,7 @@ export default class HardpointSlot extends Slot {
modTT = (
{modTT}
- {blueprintTooltip(translate, m.blueprint.grades[m.blueprint.grade].features, m)}
+ {blueprintTooltip(translate, m.blueprint.grades[m.blueprint.grade], m)}
);
}
diff --git a/src/app/components/InternalSlot.jsx b/src/app/components/InternalSlot.jsx
index 7c8c4063..fad3e2cf 100644
--- a/src/app/components/InternalSlot.jsx
+++ b/src/app/components/InternalSlot.jsx
@@ -34,7 +34,7 @@ export default class InternalSlot extends Slot {
modTT = (
{modTT}
- {blueprintTooltip(translate, m.blueprint.grades[m.blueprint.grade].features, m)}
+ {blueprintTooltip(translate, m.blueprint.grades[m.blueprint.grade], m)}
);
}
diff --git a/src/app/components/ModificationsMenu.jsx b/src/app/components/ModificationsMenu.jsx
index 6486d951..108bf578 100644
--- a/src/app/components/ModificationsMenu.jsx
+++ b/src/app/components/ModificationsMenu.jsx
@@ -54,7 +54,7 @@ export default class ModificationsMenu extends TranslatedComponent {
const close = this._blueprintSelected.bind(this, blueprintName, grade);
const key = blueprintName + ':' + grade;
const blueprint = getBlueprint(blueprintName, m);
- const tooltipContent = blueprintTooltip(translate, blueprint.grades[grade].features);
+ const tooltipContent = blueprintTooltip(translate, blueprint.grades[grade]);
blueprints.push({translate(blueprint.name + ' grade ' + grade)}
);
}
}
@@ -279,7 +279,7 @@ export default class ModificationsMenu extends TranslatedComponent {
if (m.blueprint && !isEmpty(m.blueprint)) {
blueprintLabel = translate(m.blueprint.name) + ' ' + translate('grade') + ' ' + m.blueprint.grade;
haveBlueprint = true;
- blueprintTt = blueprintTooltip(translate, m.blueprint.grades[m.blueprint.grade].features);
+ blueprintTt = blueprintTooltip(translate, m.blueprint.grades[m.blueprint.grade]);
}
let specialLabel;
diff --git a/src/app/components/StandardSlot.jsx b/src/app/components/StandardSlot.jsx
index 30d5502f..effc1480 100644
--- a/src/app/components/StandardSlot.jsx
+++ b/src/app/components/StandardSlot.jsx
@@ -57,7 +57,7 @@ export default class StandardSlot extends TranslatedComponent {
modTT = (
{modTT}
- {blueprintTooltip(translate, m.blueprint.grades[m.blueprint.grade].features, m)}
+ {blueprintTooltip(translate, m.blueprint.grades[m.blueprint.grade], m)}
);
}
diff --git a/src/app/utils/BlueprintFunctions.js b/src/app/utils/BlueprintFunctions.js
index 2a55a56d..f5f42dc6 100644
--- a/src/app/utils/BlueprintFunctions.js
+++ b/src/app/utils/BlueprintFunctions.js
@@ -4,14 +4,14 @@ import { Modifications } from 'coriolis-data/dist';
/**
* Generate a tooltip with details of a blueprint's effects
* @param {Object} translate The translate object
- * @param {Object} features The features of the blueprint
+ * @param {Object} blueprint The blueprint at the required grade
* @param {Object} m The module to compare with
* @returns {Object} The react components
*/
-export function blueprintTooltip(translate, features, m) {
- const results = [];
- for (const feature in features) {
- const featureIsBeneficial = isBeneficial(feature, features[feature]);
+export function blueprintTooltip(translate, blueprint, m) {
+ const effects = [];
+ for (const feature in blueprint.features) {
+ const featureIsBeneficial = isBeneficial(feature, blueprint.features[feature]);
const featureDef = Modifications.modifications[feature];
if (!featureDef.hidden) {
let symbol = '';
@@ -20,8 +20,8 @@ export function blueprintTooltip(translate, features, m) {
} else if (featureDef.type === 'percentage') {
symbol = '%';
}
- let lowerBound = features[feature][0];
- let upperBound = features[feature][1];
+ let lowerBound = blueprint.features[feature][0];
+ let upperBound = blueprint.features[feature][1];
if (featureDef.type === 'percentage') {
lowerBound = Math.round(lowerBound * 1000) / 10;
upperBound = Math.round(upperBound * 1000) / 10;
@@ -35,7 +35,7 @@ export function blueprintTooltip(translate, features, m) {
current = Math.round(current / 10) / 10;
}
const currentIsBeneficial = isValueBeneficial(feature, current);
- results.push(
+ effects.push(
| {translate(feature)} |
{lowerBound}{symbol} |
@@ -45,7 +45,7 @@ export function blueprintTooltip(translate, features, m) {
);
} else {
// We do not have a module, no value
- results.push(
+ effects.push(
| {translate(feature)} |
{lowerBound}{symbol} |
@@ -56,8 +56,19 @@ export function blueprintTooltip(translate, features, m) {
}
}
+ const components = [];
+ for (const component in blueprint.components) {
+ components.push(
+
+ | {translate(component)} |
+ {blueprint.components[component]} |
+
+ );
+ }
+
return (
-
+
+
| {translate('feature')} |
@@ -67,9 +78,21 @@ export function blueprintTooltip(translate, features, m) {
- {results}
+ {effects}
+ { m ? null :
+
+
+ | {translate('component')} |
+ {translate('amount')} |
+
+
+
+ {components}
+
+
}
+
);
}