Moved the resistance modifiers value calculation to the setModValue of a Module class.

This commit is contained in:
Alexey Gorb
2021-08-15 14:37:45 +02:00
parent 50f9c0faa1
commit 46bcc2313f
4 changed files with 16 additions and 25 deletions

View File

@@ -44,7 +44,7 @@ export default class Modification extends TranslatedComponent {
if (reCast.endsWith(value) || reCast.startsWith(value)) {
let { m, name, ship } = this.props;
value = Math.max(Math.min(value, 50000), -50000);
ship.setModification(m, name, value, true, true);
ship.setModification(m, name, value, true);
}
}

View File

@@ -70,7 +70,7 @@ export default class Module {
/**
* Set a value for a given modification ID
* @param {Number} name The name of the modification
* @param {String} name The name of the modification
* @param {object} value The value of the modification. If it is a numeric value then it should be an integer scaled so that -2.34% == -234
* @param {Boolean} valueiswithspecial true if the value includes the special effect (when coming from a UI component)
*/
@@ -81,7 +81,13 @@ export default class Module {
if (!this.origVals) {
this.origVals = {};
}
if (valueiswithspecial && this.blueprint && this.blueprint.special) {
if (!valueiswithspecial) {
// Resistance modifiers scale with the base value.
if (name === 'kinres' || name === 'thermres' || name === 'causres' || name === 'explres') {
let baseValue = this.get(name, false);
value = (1 - baseValue) * value;
}
} else if (valueiswithspecial && this.blueprint && this.blueprint.special) {
// This module has a special effect, see if we need to alter the stored value
const modifierActions = Modifications.modifierActions[this.blueprint.special.edname];
if (modifierActions && modifierActions[name]) {
@@ -113,7 +119,7 @@ export default class Module {
/**
* Helper to obtain a module's value.
* @param {String} name The name of the modifier to obtain
* @param {Number} modified Whether to return the raw or modified value
* @param {Boolean} modified Whether to return the raw or modified value
* @return {Number} The value queried
*/
get(name, modified = true) {

View File

@@ -492,25 +492,18 @@ export default class Ship {
* @param {Object} m The module to change
* @param {Object} name The name of the modification to change
* @param {Number} value The new value of the modification. The value of the modification is scaled to provide two decimal places of precision in an integer. For example 1.23% is stored as 123
* @param {bool} sentfromui True if this update was sent from the UI
* @param {bool} isAbsolute True if value is an absolute value and not a
* modification value
* @param {boolean} isAbsolute True if value is an absolute value and not a modification value
*/
setModification(m, name, value, sentfromui, isAbsolute) {
setModification(m, name, value, isAbsolute = false) {
if (isNaN(value)) {
// Value passed is invalid; reset it to 0
value = 0;
}
if (isAbsolute) {
m.setPretty(name, value, sentfromui);
m.setPretty(name, value, isAbsolute);
} else {
// Resistance modifiers scale with the base value
if (name == 'kinres' || name == 'thermres' || name == 'causres' || name == 'explres') {
let baseValue = m.get(name, false);
value = (1 - baseValue) * value;
}
m.setModValue(name, value, sentfromui);
m.setModValue(name, value, false);
}
// Handle special cases
@@ -543,7 +536,7 @@ export default class Ship {
this.recalculateArmour();
} else if (name === 'shieldreinforcement') {
this.recalculateShieldCells();
} else if (name === 'burst' || name == 'burstrof' || name === 'clip' || name === 'damage' || name === 'distdraw' || name === 'jitter' || name === 'piercing' || name === 'range' || name === 'reload' || name === 'rof' || name === 'thermload') {
} else if (name === 'burst' || name === 'burstrof' || name === 'clip' || name === 'damage' || name === 'distdraw' || name === 'jitter' || name === 'piercing' || name === 'range' || name === 'reload' || name === 'rof' || name === 'thermload') {
this.recalculateDps();
this.recalculateHps();
this.recalculateEps();

View File

@@ -293,20 +293,12 @@ function _addModifications(module, modifiers, quality, blueprint, grade, special
// Carry out the required changes
for (const action in modifierActions) {
if (isNaN(modifierActions[action])) {
module.setModValue(action, modifierActions[action]);
} else {
module.setModValue(action, value, true);
}
module.setModValue(action, value, true);
}
}
} else if (quality) {
setQualityCB(module.blueprint, quality, (featureName, value) => {
// The resistance values of bulkheads need an extra adjustment.
if (featureName === 'kinres' || featureName === 'thermres' || featureName === 'causres' || featureName === 'explres') {
let baseValue = module.get(featureName, false);
value = (1 - baseValue) * value;
}
module.setModValue(featureName, value, false);
});
}