From 22f83b79afa1abf99991012046185c8d75382215 Mon Sep 17 00:00:00 2001 From: Cmdr McDonald Date: Sat, 15 Apr 2017 18:11:09 +0100 Subject: [PATCH] Encode blueprint information event when no active modifications --- ChangeLog.md | 3 ++ src/app/components/ModificationsMenu.jsx | 21 +++----- src/app/shipyard/Ship.js | 66 +++++++++++++++++++----- 3 files changed, 63 insertions(+), 27 deletions(-) diff --git a/ChangeLog.md b/ChangeLog.md index 0f7dda9b..de526ded 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -1,3 +1,6 @@ +#2.3.3 + * Remove unused blueprint when hitting reset + #2.3.2 * Use scan range for DSS rather than scan time * Fix companion API import of Dolphin diff --git a/src/app/components/ModificationsMenu.jsx b/src/app/components/ModificationsMenu.jsx index 1e657e79..5e040613 100644 --- a/src/app/components/ModificationsMenu.jsx +++ b/src/app/components/ModificationsMenu.jsx @@ -130,10 +130,10 @@ export default class ModificationsMenu extends TranslatedComponent { */ _blueprintSelected(fdname, grade) { this.context.tooltip(null); - const { m } = this.props; + const { m, ship } = this.props; const blueprint = getBlueprint(fdname, m); blueprint.grade = grade; - m.blueprint = blueprint; + ship.setModuleBlueprint(m, blueprint); this.setState({ blueprintMenuOpened: false }); this.props.onChange(); @@ -155,15 +155,10 @@ export default class ModificationsMenu extends TranslatedComponent { this.context.tooltip(null); const { m, ship } = this.props; - if (m.blueprint) { - if (special === null) { - m.blueprint.special = null; - } else { - m.blueprint.special = Modifications.specials[special]; - } - ship.recalculateDps(); - ship.recalculateHps(); - ship.recalculateEps(); + if (special === null) { + ship.clearModuelSpecial(m); + } else { + ship.setModuleSpecial(m, Modifications.specials[special]); } this.setState({ specialMenuOpened: false }); @@ -268,7 +263,7 @@ export default class ModificationsMenu extends TranslatedComponent { _reset() { const { m, ship } = this.props; ship.clearModifications(m); - ship.clearBlueprint(m); + ship.clearModuleBlueprint(m); this.props.onChange(); } @@ -294,7 +289,7 @@ export default class ModificationsMenu extends TranslatedComponent { let blueprintLabel; let haveBlueprint = false; let blueprintTt; - if (m.blueprint && !isEmpty(m.blueprint)) { + if (m.blueprint && m.blueprint.name) { blueprintLabel = translate(m.blueprint.name) + ' ' + translate('grade') + ' ' + m.blueprint.grade; haveBlueprint = true; blueprintTt = blueprintTooltip(translate, m.blueprint.grades[m.blueprint.grade], Modifications.modules[m.grp].blueprints[m.blueprint.fdname].grades[m.blueprint.grade].engineers, m.grp); diff --git a/src/app/shipyard/Ship.js b/src/app/shipyard/Ship.js index 0de8b2ef..8f9186a1 100755 --- a/src/app/shipyard/Ship.js +++ b/src/app/shipyard/Ship.js @@ -429,11 +429,45 @@ export default class Ship { } /** - * Clear blueprint for a module - * @param {Number} m The module for which to clear the modifications + * Set blueprint for a module + * @param {Object} m The module for which to set the blueprint + * @param {Object} bp The blueprint */ - clearBlueprint(m) { + setModuleBlueprint(m, bp) { + m.blueprint = bp; + this.updateModificationsString(); + } + + /** + * Clear blueprint for a module + * @param {Object} m The module for which to clear the blueprint + */ + clearModuleBlueprint(m) { m.blueprint = {}; + this.updateModificationsString(); + } + + /** + * Set special for a module + * @param {Object} m The module for which to set the blueprint + * @param {Object} bp The blueprint + */ + setModuleSpecial(m, special) { + if (m.blueprint) { + m.blueprint.special = special; + } + this.recalculateDps().recalculateHps().recalculateEps(); + } + + /** + * Clear special for a module + * @param {Object} m The module for which to clear the blueprint + */ + clearModuleSpecial(m) { + if (m.blueprint) { + m.blueprint.special = null; + } + this.recalculateDps().recalculateHps().recalculateEps(); } /** @@ -1445,16 +1479,20 @@ export default class Ship { // Now work out the size of the binary buffer from our modifications array let bufsize = 0; - for (let slot of slots) { - if (slot.length > 0) { - // Length is 1 for the slot ID, 10 for the blueprint name and grade, 5 for each modification, and 1 for the end marker - bufsize = bufsize + 1 + 10 + (5 * slot.length) + 1; - } - } - for (let special of specials) { - if (special) { - // Length is 5 for each special - bufsize += 5; + for (let i = 0; i < slots.length; i++) { + if (slots[i].length > 0 || (blueprints[i] && blueprints[i].id)) { + // Length is 1 for the slot ID, 5 for each modification, and 1 for the end marker + bufsize = bufsize + 1 + (5 * slots[i].length) + 1; + + if (blueprints[i] && blueprints[i].id) { + // Additional 10 for the blueprint and grade + bufsize += 10; + } + + if (specials[i]) { + // Additional 5 for each special + bufsize += 5; + } } } @@ -1465,7 +1503,7 @@ export default class Ship { let curpos = 0; let i = 0; for (let slot of slots) { - if (slot.length > 0) { + if (slot.length > 0 || (blueprints[i] && blueprints[i].id)) { buffer.writeInt8(i, curpos++); if (blueprints[i] && blueprints[i].id) { buffer.writeInt8(MODIFICATION_ID_BLUEPRINT, curpos++);