mirror of
https://github.com/EDCD/coriolis.git
synced 2025-12-09 14:45:35 +00:00
Merge pull request #511 from EDCD/fix/data
Not more than 4 experimentals
This commit is contained in:
@@ -128,6 +128,7 @@ export default class AvailableModulesMenu extends TranslatedComponent {
|
|||||||
m: PropTypes.object,
|
m: PropTypes.object,
|
||||||
shipMass: PropTypes.number,
|
shipMass: PropTypes.number,
|
||||||
warning: PropTypes.func,
|
warning: PropTypes.func,
|
||||||
|
disable: PropTypes.func,
|
||||||
firstSlotId: PropTypes.string,
|
firstSlotId: PropTypes.string,
|
||||||
lastSlotId: PropTypes.string,
|
lastSlotId: PropTypes.string,
|
||||||
activeSlotId: PropTypes.string,
|
activeSlotId: PropTypes.string,
|
||||||
@@ -159,7 +160,7 @@ export default class AvailableModulesMenu extends TranslatedComponent {
|
|||||||
*/
|
*/
|
||||||
_initState(props, context) {
|
_initState(props, context) {
|
||||||
let translate = context.language.translate;
|
let translate = context.language.translate;
|
||||||
let { m, warning, shipMass, onSelect, modules, firstSlotId, lastSlotId } = props;
|
let { m, warning, disable, shipMass, onSelect, modules, firstSlotId, lastSlotId } = props;
|
||||||
let list, currentGroup;
|
let list, currentGroup;
|
||||||
|
|
||||||
let buildGroup = this._buildGroup.bind(
|
let buildGroup = this._buildGroup.bind(
|
||||||
@@ -167,6 +168,7 @@ export default class AvailableModulesMenu extends TranslatedComponent {
|
|||||||
translate,
|
translate,
|
||||||
m,
|
m,
|
||||||
warning,
|
warning,
|
||||||
|
disable,
|
||||||
shipMass - (m && m.mass ? m.mass : 0),
|
shipMass - (m && m.mass ? m.mass : 0),
|
||||||
(m, event) => {
|
(m, event) => {
|
||||||
this._hideDiff(event);
|
this._hideDiff(event);
|
||||||
@@ -258,6 +260,7 @@ export default class AvailableModulesMenu extends TranslatedComponent {
|
|||||||
* @param {Function} translate Translate function
|
* @param {Function} translate Translate function
|
||||||
* @param {Object} mountedModule Mounted Module
|
* @param {Object} mountedModule Mounted Module
|
||||||
* @param {Function} warningFunc Warning function
|
* @param {Function} warningFunc Warning function
|
||||||
|
* @param {Function} disableFunc Function when selection should be disabled
|
||||||
* @param {number} mass Mass
|
* @param {number} mass Mass
|
||||||
* @param {function} onSelect Select/Mount callback
|
* @param {function} onSelect Select/Mount callback
|
||||||
* @param {string} grp Group name
|
* @param {string} grp Group name
|
||||||
@@ -266,7 +269,7 @@ export default class AvailableModulesMenu extends TranslatedComponent {
|
|||||||
* @param {string} lastSlotId id of last slot item
|
* @param {string} lastSlotId id of last slot item
|
||||||
* @return {React.Component} Available Module Group contents
|
* @return {React.Component} Available Module Group contents
|
||||||
*/
|
*/
|
||||||
_buildGroup(translate, mountedModule, warningFunc, mass, onSelect, grp, modules, firstSlotId, lastSlotId) {
|
_buildGroup(translate, mountedModule, warningFunc, disableFunc, mass, onSelect, grp, modules, firstSlotId, lastSlotId) {
|
||||||
let prevClass = null, prevRating = null, prevName;
|
let prevClass = null, prevRating = null, prevName;
|
||||||
let elems = [];
|
let elems = [];
|
||||||
|
|
||||||
@@ -284,6 +287,7 @@ export default class AvailableModulesMenu extends TranslatedComponent {
|
|||||||
let m = sortedModules[i];
|
let m = sortedModules[i];
|
||||||
let mount = null;
|
let mount = null;
|
||||||
let disabled = false;
|
let disabled = false;
|
||||||
|
let softDisabled = disableFunc && disableFunc(m);
|
||||||
prevName = m.name;
|
prevName = m.name;
|
||||||
if (ModuleUtils.isShieldGenerator(m.grp)) {
|
if (ModuleUtils.isShieldGenerator(m.grp)) {
|
||||||
// Shield generators care about maximum hull mass
|
// Shield generators care about maximum hull mass
|
||||||
@@ -294,7 +298,7 @@ export default class AvailableModulesMenu extends TranslatedComponent {
|
|||||||
}
|
}
|
||||||
let active = mountedModule && mountedModule.id === m.id;
|
let active = mountedModule && mountedModule.id === m.id;
|
||||||
let classes = cn(m.name ? 'lc' : 'c', {
|
let classes = cn(m.name ? 'lc' : 'c', {
|
||||||
warning: !disabled && warningFunc && warningFunc(m),
|
warning: !disabled && (softDisabled || (warningFunc && warningFunc(m))),
|
||||||
active,
|
active,
|
||||||
disabled
|
disabled
|
||||||
});
|
});
|
||||||
@@ -316,7 +320,7 @@ export default class AvailableModulesMenu extends TranslatedComponent {
|
|||||||
this.lastSlotId = sortedModules[i].id;
|
this.lastSlotId = sortedModules[i].id;
|
||||||
|
|
||||||
let showDiff = this._showDiff.bind(this, mountedModule, m);
|
let showDiff = this._showDiff.bind(this, mountedModule, m);
|
||||||
let select = onSelect.bind(null, m);
|
let select = softDisabled ? () => {} : onSelect.bind(null, m);
|
||||||
|
|
||||||
eventHandlers = {
|
eventHandlers = {
|
||||||
onMouseEnter: this._over.bind(this, showDiff),
|
onMouseEnter: this._over.bind(this, showDiff),
|
||||||
@@ -344,7 +348,7 @@ export default class AvailableModulesMenu extends TranslatedComponent {
|
|||||||
// elems.push(<br key={'b' + m.grp + i} />);
|
// elems.push(<br key={'b' + m.grp + i} />);
|
||||||
itemsOnThisRow = 0;
|
itemsOnThisRow = 0;
|
||||||
}
|
}
|
||||||
if (itemsOnThisRow == 6 || i > 0 && sortedModules.length > 3 && itemsPerClass > 2 && m.class != prevClass && (m.rating != prevRating || m.mount)) {
|
if (itemsOnThisRow == 4 || i > 0 && sortedModules.length > 3 && itemsPerClass > 2 && m.class != prevClass && (m.rating != prevRating || m.mount)) {
|
||||||
elems.push(<br key={'b' + m.grp + i}/>);
|
elems.push(<br key={'b' + m.grp + i}/>);
|
||||||
itemsOnThisRow = 0;
|
itemsOnThisRow = 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,6 +7,20 @@ import ModificationsMenu from './ModificationsMenu';
|
|||||||
import { diffDetails } from '../utils/SlotFunctions';
|
import { diffDetails } from '../utils/SlotFunctions';
|
||||||
import { wrapCtxMenu } from '../utils/UtilityFunctions';
|
import { wrapCtxMenu } from '../utils/UtilityFunctions';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a function that checks that a given module does not exceed the limit
|
||||||
|
* of experimental modules.
|
||||||
|
* @param {Ship} ship Ship to check experimentals for
|
||||||
|
* @return {Function} Checker function that returns true if the number of
|
||||||
|
* experimentals is exceeded
|
||||||
|
*/
|
||||||
|
function experimentalTracker(ship) {
|
||||||
|
return (m) => {
|
||||||
|
return m.experimental &&
|
||||||
|
4 <= ship.hardpoints.reduce((r, o) => o.m && o.m.experimental ? r + 1 : r, 0);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Abstract Slot
|
* Abstract Slot
|
||||||
*/
|
*/
|
||||||
@@ -133,6 +147,7 @@ export default class Slot extends TranslatedComponent {
|
|||||||
warning={warning}
|
warning={warning}
|
||||||
diffDetails={diffDetails.bind(ship, this.context.language)}
|
diffDetails={diffDetails.bind(ship, this.context.language)}
|
||||||
slotDiv = {this.slotDiv}
|
slotDiv = {this.slotDiv}
|
||||||
|
disable={experimentalTracker(ship)}
|
||||||
/>;
|
/>;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user