mirror of
https://github.com/EDCD/coriolis.git
synced 2025-12-08 22:33:24 +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,
|
||||
shipMass: PropTypes.number,
|
||||
warning: PropTypes.func,
|
||||
disable: PropTypes.func,
|
||||
firstSlotId: PropTypes.string,
|
||||
lastSlotId: PropTypes.string,
|
||||
activeSlotId: PropTypes.string,
|
||||
@@ -159,7 +160,7 @@ export default class AvailableModulesMenu extends TranslatedComponent {
|
||||
*/
|
||||
_initState(props, context) {
|
||||
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 buildGroup = this._buildGroup.bind(
|
||||
@@ -167,6 +168,7 @@ export default class AvailableModulesMenu extends TranslatedComponent {
|
||||
translate,
|
||||
m,
|
||||
warning,
|
||||
disable,
|
||||
shipMass - (m && m.mass ? m.mass : 0),
|
||||
(m, event) => {
|
||||
this._hideDiff(event);
|
||||
@@ -258,6 +260,7 @@ export default class AvailableModulesMenu extends TranslatedComponent {
|
||||
* @param {Function} translate Translate function
|
||||
* @param {Object} mountedModule Mounted Module
|
||||
* @param {Function} warningFunc Warning function
|
||||
* @param {Function} disableFunc Function when selection should be disabled
|
||||
* @param {number} mass Mass
|
||||
* @param {function} onSelect Select/Mount callback
|
||||
* @param {string} grp Group name
|
||||
@@ -266,7 +269,7 @@ export default class AvailableModulesMenu extends TranslatedComponent {
|
||||
* @param {string} lastSlotId id of last slot item
|
||||
* @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 elems = [];
|
||||
|
||||
@@ -284,6 +287,7 @@ export default class AvailableModulesMenu extends TranslatedComponent {
|
||||
let m = sortedModules[i];
|
||||
let mount = null;
|
||||
let disabled = false;
|
||||
let softDisabled = disableFunc && disableFunc(m);
|
||||
prevName = m.name;
|
||||
if (ModuleUtils.isShieldGenerator(m.grp)) {
|
||||
// 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 classes = cn(m.name ? 'lc' : 'c', {
|
||||
warning: !disabled && warningFunc && warningFunc(m),
|
||||
warning: !disabled && (softDisabled || (warningFunc && warningFunc(m))),
|
||||
active,
|
||||
disabled
|
||||
});
|
||||
@@ -316,7 +320,7 @@ export default class AvailableModulesMenu extends TranslatedComponent {
|
||||
this.lastSlotId = sortedModules[i].id;
|
||||
|
||||
let showDiff = this._showDiff.bind(this, mountedModule, m);
|
||||
let select = onSelect.bind(null, m);
|
||||
let select = softDisabled ? () => {} : onSelect.bind(null, m);
|
||||
|
||||
eventHandlers = {
|
||||
onMouseEnter: this._over.bind(this, showDiff),
|
||||
@@ -344,7 +348,7 @@ export default class AvailableModulesMenu extends TranslatedComponent {
|
||||
// elems.push(<br key={'b' + m.grp + i} />);
|
||||
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}/>);
|
||||
itemsOnThisRow = 0;
|
||||
}
|
||||
|
||||
@@ -7,6 +7,20 @@ import ModificationsMenu from './ModificationsMenu';
|
||||
import { diffDetails } from '../utils/SlotFunctions';
|
||||
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
|
||||
*/
|
||||
@@ -133,6 +147,7 @@ export default class Slot extends TranslatedComponent {
|
||||
warning={warning}
|
||||
diffDetails={diffDetails.bind(ship, this.context.language)}
|
||||
slotDiv = {this.slotDiv}
|
||||
disable={experimentalTracker(ship)}
|
||||
/>;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user