mirror of
https://github.com/EDCD/coriolis.git
synced 2025-12-10 15:15:34 +00:00
Compare commits
4 Commits
feature/su
...
2.9.7
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
48ccab152b | ||
|
|
f3bc900f16 | ||
|
|
ec148847a9 | ||
|
|
0474af912a |
@@ -5,7 +5,7 @@ root = true
|
|||||||
|
|
||||||
# change these settings to your own preference
|
# change these settings to your own preference
|
||||||
indent_style = space
|
indent_style = space
|
||||||
indent_size = 2
|
indent_size = 4
|
||||||
|
|
||||||
# we recommend you to keep these unchanged
|
# we recommend you to keep these unchanged
|
||||||
end_of_line = lf
|
end_of_line = lf
|
||||||
|
|||||||
2
package-lock.json
generated
2
package-lock.json
generated
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "coriolis_shipyard",
|
"name": "coriolis_shipyard",
|
||||||
"version": "2.9.11",
|
"version": "2.9.7",
|
||||||
"lockfileVersion": 1,
|
"lockfileVersion": 1,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "coriolis_shipyard",
|
"name": "coriolis_shipyard",
|
||||||
"version": "2.9.11",
|
"version": "2.9.7",
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/EDCD/coriolis"
|
"url": "https://github.com/EDCD/coriolis"
|
||||||
|
|||||||
@@ -56,11 +56,7 @@ const GRPCAT = {
|
|||||||
'ch': 'defence',
|
'ch': 'defence',
|
||||||
'po': 'defence',
|
'po': 'defence',
|
||||||
'ec': 'defence',
|
'ec': 'defence',
|
||||||
'sfn': 'defence',
|
'sfn': 'defence'
|
||||||
// Standard
|
|
||||||
'gpp': 'guardian',
|
|
||||||
'gpc': 'guardian',
|
|
||||||
'ggc': 'guardian'
|
|
||||||
};
|
};
|
||||||
// Order here is the order in which items will be shown in the modules menu
|
// Order here is the order in which items will be shown in the modules menu
|
||||||
const CATEGORIES = {
|
const CATEGORIES = {
|
||||||
@@ -86,10 +82,7 @@ const CATEGORIES = {
|
|||||||
'defence': ['ch', 'po', 'ec'],
|
'defence': ['ch', 'po', 'ec'],
|
||||||
'scanners': ['sc', 'ss', 'cs', 'kw', 'ws'], // Overloaded with internal scanners
|
'scanners': ['sc', 'ss', 'cs', 'kw', 'ws'], // Overloaded with internal scanners
|
||||||
// Experimental
|
// Experimental
|
||||||
'experimental': ['axmc', 'axmr', 'rfl', 'xs', 'sfn'],
|
'experimental': ['axmc', 'axmr', 'rfl', 'xs', 'sfn']
|
||||||
|
|
||||||
// Guardian
|
|
||||||
'guardian': ['gpp', 'gpc', 'ggc']
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -206,8 +199,8 @@ export default class AvailableModulesMenu extends TranslatedComponent {
|
|||||||
/**
|
/**
|
||||||
* Generate React Components for Module Group
|
* Generate React Components for Module Group
|
||||||
* @param {Function} translate Translate function
|
* @param {Function} translate Translate function
|
||||||
* @param {Object} mountedModule Mounted Module
|
* @param {Objecy} mountedModule Mounted Module
|
||||||
* @param {Function} warningFunc Warning function
|
* @param {Funciton} warningFunc Warning function
|
||||||
* @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
|
||||||
@@ -215,7 +208,7 @@ export default class AvailableModulesMenu extends TranslatedComponent {
|
|||||||
* @return {React.Component} Available Module Group contents
|
* @return {React.Component} Available Module Group contents
|
||||||
*/
|
*/
|
||||||
_buildGroup(translate, mountedModule, warningFunc, mass, onSelect, grp, modules) {
|
_buildGroup(translate, mountedModule, warningFunc, mass, onSelect, grp, modules) {
|
||||||
let prevClass = null, prevRating = null, prevName;
|
let prevClass = null, prevRating = null;
|
||||||
let elems = [];
|
let elems = [];
|
||||||
|
|
||||||
const sortedModules = modules.sort(this._moduleOrder);
|
const sortedModules = modules.sort(this._moduleOrder);
|
||||||
@@ -230,7 +223,6 @@ 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;
|
||||||
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
|
||||||
disabled = mass > m.maxmass;
|
disabled = mass > m.maxmass;
|
||||||
@@ -266,10 +258,7 @@ export default class AvailableModulesMenu extends TranslatedComponent {
|
|||||||
case 'G': mount = <MountGimballed className={'lg'}/>; break;
|
case 'G': mount = <MountGimballed className={'lg'}/>; break;
|
||||||
case 'T': mount = <MountTurret className={'lg'}/>; break;
|
case 'T': mount = <MountTurret className={'lg'}/>; break;
|
||||||
}
|
}
|
||||||
if (m.name && m.name === prevName) {
|
|
||||||
// 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 == 6 || 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;
|
||||||
@@ -284,7 +273,6 @@ export default class AvailableModulesMenu extends TranslatedComponent {
|
|||||||
itemsOnThisRow++;
|
itemsOnThisRow++;
|
||||||
prevClass = m.class;
|
prevClass = m.class;
|
||||||
prevRating = m.rating;
|
prevRating = m.rating;
|
||||||
prevName = m.name;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return <ul key={'modules' + grp} >{elems}</ul>;
|
return <ul key={'modules' + grp} >{elems}</ul>;
|
||||||
|
|||||||
@@ -6,14 +6,7 @@ import { isEmpty, stopCtxPropagation } from '../utils/UtilityFunctions';
|
|||||||
import cn from 'classnames';
|
import cn from 'classnames';
|
||||||
import { Modifications } from 'coriolis-data/dist';
|
import { Modifications } from 'coriolis-data/dist';
|
||||||
import Modification from './Modification';
|
import Modification from './Modification';
|
||||||
import {
|
import { getBlueprint, blueprintTooltip, setPercent, setRandom } from '../utils/BlueprintFunctions';
|
||||||
getBlueprint,
|
|
||||||
blueprintTooltip,
|
|
||||||
setPercent,
|
|
||||||
getPercent,
|
|
||||||
setRandom,
|
|
||||||
specialToolTip
|
|
||||||
} from '../utils/BlueprintFunctions'
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Modifications menu
|
* Modifications menu
|
||||||
@@ -93,33 +86,18 @@ export default class ModificationsMenu extends TranslatedComponent {
|
|||||||
const { m } = props;
|
const { m } = props;
|
||||||
const { language, tooltip, termtip } = context;
|
const { language, tooltip, termtip } = context;
|
||||||
const translate = language.translate;
|
const translate = language.translate;
|
||||||
|
|
||||||
const specials = [];
|
const specials = [];
|
||||||
const specialsId = m.missile && Modifications.modules[m.grp]['specials_' + m.missile] ? 'specials_' + m.missile : 'specials';
|
const specialsId = m.missile && Modifications.modules[m.grp]['specials_' + m.missile] ? 'specials_' + m.missile : 'specials';
|
||||||
if (Modifications.modules[m.grp][specialsId] && Modifications.modules[m.grp][specialsId].length > 0) {
|
if (Modifications.modules[m.grp][specialsId] && Modifications.modules[m.grp][specialsId].length > 0) {
|
||||||
const close = this._specialSelected.bind(this, null);
|
const close = this._specialSelected.bind(this, null);
|
||||||
specials.push(<div style={{ cursor: 'pointer', fontWeight: 'bold' }} className={ 'button-inline-menu warning' } key={ 'none' } onClick={ close }>{translate('PHRASE_NO_SPECIAL')}</div>);
|
specials.push(<div style={{ cursor: 'pointer', fontWeight: 'bold' }} className={ 'button-inline-menu warning' } key={ 'none' } onClick={ close }>{translate('PHRASE_NO_SPECIAL')}</div>);
|
||||||
for (const specialName of Modifications.modules[m.grp][specialsId]) {
|
for (const specialName of Modifications.modules[m.grp][specialsId]) {
|
||||||
if (Modifications.specials[specialName].name.search('Legacy') >= 0) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
const classes = cn('button-inline-menu', {
|
const classes = cn('button-inline-menu', {
|
||||||
active: m.blueprint && m.blueprint.special && m.blueprint.special.edname == specialName
|
active: m.blueprint && m.blueprint.special && m.blueprint.special.edname == specialName
|
||||||
});
|
});
|
||||||
const close = this._specialSelected.bind(this, specialName);
|
const close = this._specialSelected.bind(this, specialName);
|
||||||
if (m.blueprint && m.blueprint.name) {
|
specials.push(<div style={{ cursor: 'pointer' }} className={classes} key={ specialName } onClick={ close }>{translate(Modifications.specials[specialName].name)}</div>);
|
||||||
let tmp = {};
|
|
||||||
if (m.blueprint.special) {
|
|
||||||
tmp = m.blueprint.special;
|
|
||||||
} else {
|
|
||||||
tmp = undefined;
|
|
||||||
}
|
|
||||||
m.blueprint.special = Modifications.specials[specialName];
|
|
||||||
let specialTt = specialToolTip(translate, m.blueprint.grades[m.blueprint.grade], m.grp, m, specialName);
|
|
||||||
m.blueprint.special = tmp;
|
|
||||||
specials.push(<div style={{ cursor: 'pointer' }} className={classes} key={ specialName } onMouseOver={termtip.bind(null, specialTt)} onMouseOut={tooltip.bind(null, null)} onClick={ close }>{translate(Modifications.specials[specialName].name)}</div>);
|
|
||||||
} else {
|
|
||||||
specials.push(<div style={{ cursor: 'pointer' }} className={classes} key={ specialName } onClick={ close }>{translate(Modifications.specials[specialName].name)}</div>);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return specials;
|
return specials;
|
||||||
@@ -261,19 +239,15 @@ export default class ModificationsMenu extends TranslatedComponent {
|
|||||||
let blueprintLabel;
|
let blueprintLabel;
|
||||||
let haveBlueprint = false;
|
let haveBlueprint = false;
|
||||||
let blueprintTt;
|
let blueprintTt;
|
||||||
let blueprintCv;
|
|
||||||
if (m.blueprint && m.blueprint.name) {
|
if (m.blueprint && m.blueprint.name) {
|
||||||
blueprintLabel = translate(m.blueprint.name) + ' ' + translate('grade') + ' ' + m.blueprint.grade;
|
blueprintLabel = translate(m.blueprint.name) + ' ' + translate('grade') + ' ' + m.blueprint.grade;
|
||||||
haveBlueprint = true;
|
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);
|
blueprintTt = blueprintTooltip(translate, m.blueprint.grades[m.blueprint.grade], Modifications.modules[m.grp].blueprints[m.blueprint.fdname].grades[m.blueprint.grade].engineers, m.grp);
|
||||||
blueprintCv = getPercent(m);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let specialLabel;
|
let specialLabel;
|
||||||
let specialTt;
|
|
||||||
if (m.blueprint && m.blueprint.special) {
|
if (m.blueprint && m.blueprint.special) {
|
||||||
specialLabel = m.blueprint.special.name;
|
specialLabel = m.blueprint.special.name;
|
||||||
specialTt = specialToolTip(translate, m.blueprint.grades[m.blueprint.grade], m.grp, m, m.blueprint.special.edname);
|
|
||||||
} else {
|
} else {
|
||||||
specialLabel = translate('PHRASE_SELECT_SPECIAL');
|
specialLabel = translate('PHRASE_SELECT_SPECIAL');
|
||||||
}
|
}
|
||||||
@@ -284,8 +258,8 @@ export default class ModificationsMenu extends TranslatedComponent {
|
|||||||
const showSpecial = haveBlueprint && specials.length && !blueprintMenuOpened;
|
const showSpecial = haveBlueprint && specials.length && !blueprintMenuOpened;
|
||||||
const showSpecialsMenu = specialMenuOpened;
|
const showSpecialsMenu = specialMenuOpened;
|
||||||
const showRolls = haveBlueprint && !blueprintMenuOpened && !specialMenuOpened;
|
const showRolls = haveBlueprint && !blueprintMenuOpened && !specialMenuOpened;
|
||||||
const showReset = !blueprintMenuOpened && !specialMenuOpened && haveBlueprint;
|
const showReset = !blueprintMenuOpened && !specialMenuOpened;
|
||||||
const showMods = !blueprintMenuOpened && !specialMenuOpened && haveBlueprint;
|
const showMods = !blueprintMenuOpened && !specialMenuOpened;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
@@ -297,24 +271,25 @@ export default class ModificationsMenu extends TranslatedComponent {
|
|||||||
<div className={ cn('section-menu button-inline-menu', { selected: blueprintMenuOpened })} style={{ cursor: 'pointer' }} onMouseOver={termtip.bind(null, blueprintTt)} onMouseOut={tooltip.bind(null, null)} onClick={_toggleBlueprintsMenu}>{blueprintLabel}</div> :
|
<div className={ cn('section-menu button-inline-menu', { selected: blueprintMenuOpened })} style={{ cursor: 'pointer' }} onMouseOver={termtip.bind(null, blueprintTt)} onMouseOut={tooltip.bind(null, null)} onClick={_toggleBlueprintsMenu}>{blueprintLabel}</div> :
|
||||||
<div className={ cn('section-menu button-inline-menu', { selected: blueprintMenuOpened })} style={{ cursor: 'pointer' }} onClick={_toggleBlueprintsMenu}>{translate('PHRASE_SELECT_BLUEPRINT')}</div> }
|
<div className={ cn('section-menu button-inline-menu', { selected: blueprintMenuOpened })} style={{ cursor: 'pointer' }} onClick={_toggleBlueprintsMenu}>{translate('PHRASE_SELECT_BLUEPRINT')}</div> }
|
||||||
{ showBlueprintsMenu ? this._renderBlueprints(this.props, this.context) : null }
|
{ showBlueprintsMenu ? this._renderBlueprints(this.props, this.context) : null }
|
||||||
{ showSpecial & !showSpecialsMenu ? <div className={ cn('section-menu button-inline-menu', { selected: specialMenuOpened })} style={{ cursor: 'pointer' }} onMouseOver={specialTt ? termtip.bind(null, specialTt) : null} onMouseOut={specialTt ? tooltip.bind(null, null) : null} onClick={_toggleSpecialsMenu}>{specialLabel}</div> : null }
|
{ showSpecial & !showSpecialsMenu ? <div className={ cn('section-menu button-inline-menu', { selected: specialMenuOpened })} style={{ cursor: 'pointer' }} onClick={_toggleSpecialsMenu}>{specialLabel}</div> : null }
|
||||||
{ showSpecialsMenu ? specials : null }
|
{ showSpecialsMenu ? specials : null }
|
||||||
{ showReset ? <div className={'section-menu button-inline-menu warning'} style={{ cursor: 'pointer' }} onClick={_reset} onMouseOver={termtip.bind(null, 'PHRASE_BLUEPRINT_RESET')} onMouseOut={tooltip.bind(null, null)}> { translate('reset') } </div> : null }
|
{ showRolls || showReset ?
|
||||||
{ showRolls ?
|
|
||||||
|
|
||||||
<table style={{ width: '100%', backgroundColor: 'transparent' }}>
|
<table style={{ width: '100%', backgroundColor: 'transparent' }}>
|
||||||
<tbody>
|
<tbody>
|
||||||
{ showRolls ?
|
{ showRolls ?
|
||||||
<tr>
|
<tr>
|
||||||
<td className={ cn('section-menu button-inline-menu', {active: false})}> { translate('roll') }: </td>
|
<td> { translate('roll') }: </td>
|
||||||
<td className={ cn('section-menu button-inline-menu', { active: blueprintCv === 0 })} style={{ cursor: 'pointer' }} onClick={_rollWorst} onMouseOver={termtip.bind(null, 'PHRASE_BLUEPRINT_WORST')} onMouseOut={tooltip.bind(null, null)}> { translate('0%') } </td>
|
<td style={{ cursor: 'pointer' }} onClick={_rollWorst} onMouseOver={termtip.bind(null, 'PHRASE_BLUEPRINT_WORST')} onMouseOut={tooltip.bind(null, null)}> { translate('0%') } </td>
|
||||||
<td className={ cn('section-menu button-inline-menu', { active: blueprintCv === 50 })} style={{ cursor: 'pointer' }} onClick={_rollFifty} onMouseOver={termtip.bind(null, 'PHRASE_BLUEPRINT_FIFTY')} onMouseOut={tooltip.bind(null, null)}> { translate('50%') } </td>
|
<td style={{ cursor: 'pointer' }} onClick={_rollFifty} onMouseOver={termtip.bind(null, 'PHRASE_BLUEPRINT_FIFTY')} onMouseOut={tooltip.bind(null, null)}> { translate('50%') } </td>
|
||||||
<td className={ cn('section-menu button-inline-menu', { active: blueprintCv === 100 })} style={{ cursor: 'pointer' }} onClick={_rollFull} onMouseOver={termtip.bind(null, 'PHRASE_BLUEPRINT_BEST')} onMouseOut={tooltip.bind(null, null)}> { translate('100%') } </td>
|
<td style={{ cursor: 'pointer' }} onClick={_rollFull} onMouseOver={termtip.bind(null, 'PHRASE_BLUEPRINT_BEST')} onMouseOut={tooltip.bind(null, null)}> { translate('100%') } </td>
|
||||||
<td className={ cn('section-menu button-inline-menu', { active: blueprintCv === null || blueprintCv % 50 != 0 })} style={{ cursor: 'pointer' }} onClick={_rollRandom} onMouseOver={termtip.bind(null, 'PHRASE_BLUEPRINT_RANDOM')} onMouseOut={tooltip.bind(null, null)}> { translate('random') } </td>
|
<td style={{ cursor: 'pointer' }} onClick={_rollRandom} onMouseOver={termtip.bind(null, 'PHRASE_BLUEPRINT_RANDOM')} onMouseOut={tooltip.bind(null, null)}> { translate('random') } </td>
|
||||||
|
</tr> : null }
|
||||||
|
{ showReset ?
|
||||||
|
<tr>
|
||||||
|
<td colSpan={'5'} style={{ cursor: 'pointer' }} onClick={_reset}onMouseOver={termtip.bind(null, 'PHRASE_BLUEPRINT_RESET')} onMouseOut={tooltip.bind(null, null)}> { translate('reset') } </td>
|
||||||
</tr> : null }
|
</tr> : null }
|
||||||
</tbody>
|
</tbody>
|
||||||
</table> : null }
|
</table> : null }
|
||||||
{ showMods ? <hr /> : null }
|
|
||||||
{ showMods ?
|
{ showMods ?
|
||||||
<span onMouseOver={termtip.bind(null, 'HELP_MODIFICATIONS_MENU')} onMouseOut={tooltip.bind(null, null)} >
|
<span onMouseOver={termtip.bind(null, 'HELP_MODIFICATIONS_MENU')} onMouseOut={tooltip.bind(null, null)} >
|
||||||
{ this._renderModifications(this.props) }
|
{ this._renderModifications(this.props) }
|
||||||
|
|||||||
@@ -15,30 +15,22 @@ export default class ShipSummaryTable extends TranslatedComponent {
|
|||||||
cargo: PropTypes.number.isRequired,
|
cargo: PropTypes.number.isRequired,
|
||||||
fuel: PropTypes.number.isRequired,
|
fuel: PropTypes.number.isRequired,
|
||||||
marker: PropTypes.string.isRequired,
|
marker: PropTypes.string.isRequired,
|
||||||
pips: PropTypes.object.isRequired
|
|
||||||
};
|
};
|
||||||
|
|
||||||
constructor(props) {
|
|
||||||
super(props)
|
|
||||||
this.didContextChange = this.didContextChange.bind(this);
|
|
||||||
this.state = {
|
|
||||||
shieldColour: 'blue'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Render the table
|
* Render the table
|
||||||
* @return {React.Component} Summary table
|
* @return {React.Component} Summary table
|
||||||
*/
|
*/
|
||||||
render() {
|
render() {
|
||||||
const { ship, cargo, fuel, pips } = this.props;
|
const { ship, cargo, fuel } = this.props;
|
||||||
let { language, tooltip, termtip } = this.context;
|
let { language, tooltip, termtip } = this.context;
|
||||||
let translate = language.translate;
|
let translate = language.translate;
|
||||||
let u = language.units;
|
let u = language.units;
|
||||||
let formats = language.formats;
|
let formats = language.formats;
|
||||||
let { time, int, round, f1, f2 } = formats;
|
let { time, int, round, f1, f2 } = formats;
|
||||||
let hide = tooltip.bind(null, null);
|
let hide = tooltip.bind(null, null);
|
||||||
const shieldGenerator = ship.findInternalByGroup('sg') || ship.findInternalByGroup('psg');
|
|
||||||
|
const shieldGenerator = ship.findInternalByGroup('sg');
|
||||||
const sgClassNames = cn({ warning: shieldGenerator && !ship.shield, muted: !shieldGenerator });
|
const sgClassNames = cn({ warning: shieldGenerator && !ship.shield, muted: !shieldGenerator });
|
||||||
const sgTooltip = shieldGenerator ? 'TT_SUMMARY_SHIELDS' : 'TT_SUMMARY_SHIELDS_NONFUNCTIONAL';
|
const sgTooltip = shieldGenerator ? 'TT_SUMMARY_SHIELDS' : 'TT_SUMMARY_SHIELDS_NONFUNCTIONAL';
|
||||||
const timeToDrain = Calc.timeToDrainWep(ship, 4);
|
const timeToDrain = Calc.timeToDrainWep(ship, 4);
|
||||||
@@ -46,13 +38,9 @@ export default class ShipSummaryTable extends TranslatedComponent {
|
|||||||
const speedTooltip = canThrust ? 'TT_SUMMARY_SPEED' : 'TT_SUMMARY_SPEED_NONFUNCTIONAL';
|
const speedTooltip = canThrust ? 'TT_SUMMARY_SPEED' : 'TT_SUMMARY_SPEED_NONFUNCTIONAL';
|
||||||
const canBoost = ship.canBoost(cargo, ship.fuelCapacity);
|
const canBoost = ship.canBoost(cargo, ship.fuelCapacity);
|
||||||
const boostTooltip = canBoost ? 'TT_SUMMARY_BOOST' : canThrust ? 'TT_SUMMARY_BOOST_NONFUNCTIONAL' : 'TT_SUMMARY_SPEED_NONFUNCTIONAL';
|
const boostTooltip = canBoost ? 'TT_SUMMARY_BOOST' : canThrust ? 'TT_SUMMARY_BOOST_NONFUNCTIONAL' : 'TT_SUMMARY_SPEED_NONFUNCTIONAL';
|
||||||
const sgMetrics = Calc.shieldMetrics(ship, pips.sys || 2);
|
|
||||||
const armourMetrics = Calc.armourMetrics(ship);
|
|
||||||
this.state = {
|
|
||||||
shieldColour: shieldGenerator && shieldGenerator.m.grp === 'psg' ? 'green' : 'blue'
|
|
||||||
}
|
|
||||||
return <div id='summary'>
|
return <div id='summary'>
|
||||||
<table className={'summaryTable'}>
|
<table id='summaryTable'>
|
||||||
<thead>
|
<thead>
|
||||||
<tr className='main'>
|
<tr className='main'>
|
||||||
<th rowSpan={2} className={ cn({ 'bg-warning-disabled': !canThrust }) }>{translate('speed')}</th>
|
<th rowSpan={2} className={ cn({ 'bg-warning-disabled': !canThrust }) }>{translate('speed')}</th>
|
||||||
@@ -110,66 +98,6 @@ export default class ShipSummaryTable extends TranslatedComponent {
|
|||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<table className={'summaryTable'}>
|
|
||||||
<thead className={this.state.shieldColour}>
|
|
||||||
<tr>
|
|
||||||
<th onMouseEnter={termtip.bind(null, 'shield ', { cap: 0 })} onMouseLeave={hide} className='lft'>{translate('explres')}</th>
|
|
||||||
<th onMouseEnter={termtip.bind(null, 'shield ', { cap: 0 })} onMouseLeave={hide} className='lft'>{translate('kinres')}</th>
|
|
||||||
<th onMouseEnter={termtip.bind(null, 'shield ', { cap: 0 })} onMouseLeave={hide} className='lft'>{translate('thermres')}</th>
|
|
||||||
|
|
||||||
<th onMouseEnter={termtip.bind(null, 'shield ', { cap: 0 })} onMouseLeave={hide} className='lft'>{translate('absolute') + ' ' + translate('HP')}</th>
|
|
||||||
<th onMouseEnter={termtip.bind(null, 'shield ', { cap: 0 })} onMouseLeave={hide} className='lft'>{translate('explosive') + ' ' + translate('HP')}</th>
|
|
||||||
<th onMouseEnter={termtip.bind(null, 'shield ', { cap: 0 })} onMouseLeave={hide} className='lft'>{translate('kinetic') + ' ' + translate('HP')}</th>
|
|
||||||
<th onMouseEnter={termtip.bind(null, 'shield ', { cap: 0 })} onMouseLeave={hide} className='lft'>{translate('thermal') + ' ' + translate('HP')}</th>
|
|
||||||
<th onMouseEnter={termtip.bind(null, 'PHRASE_SG_RECOVER', { cap: 0 })} onMouseLeave={hide} className='lft'>{translate('recovery')}</th>
|
|
||||||
<th onMouseEnter={termtip.bind(null, 'PHRASE_SG_RECHARGE', { cap: 0 })} onMouseLeave={hide} className='lft'>{translate('recharge')}</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<tr >
|
|
||||||
<td>{int(ship.shieldExplRes * 100) + '%'}</td>
|
|
||||||
<td>{int(ship.shieldThermRes * 100) + '%'}</td>
|
|
||||||
<td>{int(ship.shieldKinRes * 100) + '%'}</td>
|
|
||||||
<td>{int(sgMetrics && sgMetrics.generator ? sgMetrics.total / sgMetrics.absolute.total : 0)}</td>
|
|
||||||
<td>{int(sgMetrics && sgMetrics.generator ? sgMetrics.total / sgMetrics.explosive.total : 0)}</td>
|
|
||||||
<td>{int(sgMetrics && sgMetrics.generator ? sgMetrics.total / sgMetrics.kinetic.total : 0 )}</td>
|
|
||||||
<td>{int(sgMetrics && sgMetrics.generator ? sgMetrics.total / sgMetrics.thermal.total : 0 )}</td>
|
|
||||||
<td>{formats.time(sgMetrics.recover)}</td>
|
|
||||||
<td>{formats.time(sgMetrics.recharge)}</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th onMouseEnter={termtip.bind(null, 'armour', { cap: 0 })} onMouseLeave={hide} className='lft'>{translate('explres')}</th>
|
|
||||||
<th onMouseEnter={termtip.bind(null, 'armour', { cap: 0 })} onMouseLeave={hide} className='lft'>{translate('kinres')}</th>
|
|
||||||
<th onMouseEnter={termtip.bind(null, 'armour', { cap: 0 })} onMouseLeave={hide} className='lft'>{translate('thermres')}</th>
|
|
||||||
|
|
||||||
<th onMouseEnter={termtip.bind(null, 'armour', { cap: 0 })} onMouseLeave={hide} className='lft'>{translate('absolute') + ' ' + translate('HP')}</th>
|
|
||||||
<th onMouseEnter={termtip.bind(null, 'armour', { cap: 0 })} onMouseLeave={hide} className='lft'>{translate('explosive') + ' ' + translate('HP')}</th>
|
|
||||||
<th onMouseEnter={termtip.bind(null, 'armour', { cap: 0 })} onMouseLeave={hide} className='lft'>{translate('kinetic') + ' ' + translate('HP')}</th>
|
|
||||||
<th onMouseEnter={termtip.bind(null, 'armour', { cap: 0 })} onMouseLeave={hide} className='lft'>{translate('thermal') + ' ' + translate('HP')}</th>
|
|
||||||
<th onMouseEnter={termtip.bind(null, 'armour', { cap: 0 })} onMouseLeave={hide} className='lft'>{translate('raw module armour')}</th>
|
|
||||||
<th onMouseEnter={termtip.bind(null, 'armour', { cap: 0 })} onMouseLeave={hide} className='lft'>{translate('internal protection')}</th>
|
|
||||||
|
|
||||||
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<tr>
|
|
||||||
<td>{int(ship.hullExplRes * 100) + '%'}</td>
|
|
||||||
<td>{int(ship.hullThermRes * 100) + '%'}</td>
|
|
||||||
<td>{int(ship.hullKinRes * 100) + '%'}</td>
|
|
||||||
<td>{int(armourMetrics.total / armourMetrics.absolute.total)}</td>
|
|
||||||
<td>{int(armourMetrics.total / armourMetrics.explosive.total)}</td>
|
|
||||||
<td>{int(armourMetrics.total / armourMetrics.kinetic.total)}</td>
|
|
||||||
<td>{int(armourMetrics.total / armourMetrics.thermal.total)}</td>
|
|
||||||
<td>{int(armourMetrics.modulearmour)}</td>
|
|
||||||
<td>{int(armourMetrics.moduleprotection * 100) + '%'}</td>
|
|
||||||
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
</div>;
|
</div>;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ export default class StandardSlot extends TranslatedComponent {
|
|||||||
let m = slot.m;
|
let m = slot.m;
|
||||||
let classRating = m.class + m.rating;
|
let classRating = m.class + m.rating;
|
||||||
let menu;
|
let menu;
|
||||||
let validMods = m == null || !Modifications.modules[m.grp] ? [] : (Modifications.modules[m.grp].modifications || []);
|
let validMods = m == null ? [] : (Modifications.modules[m.grp].modifications || []);
|
||||||
let showModuleResistances = Persist.showModuleResistances();
|
let showModuleResistances = Persist.showModuleResistances();
|
||||||
let mass = m.getMass() || m.cargo || m.fuel || 0;
|
let mass = m.getMass() || m.cargo || m.fuel || 0;
|
||||||
|
|
||||||
|
|||||||
@@ -117,10 +117,6 @@
|
|||||||
"pl": "Pulse Laser",
|
"pl": "Pulse Laser",
|
||||||
"po": "Point Defence",
|
"po": "Point Defence",
|
||||||
"pp": "Power Plant",
|
"pp": "Power Plant",
|
||||||
"gpp": "Guardian Hybrid Power Plant",
|
|
||||||
"gpd": "Guardian Hybrid Power Distributor",
|
|
||||||
"gpc": "Guardian Plasma Charger",
|
|
||||||
"ggc": "Guardian Gauss Cannon",
|
|
||||||
"psg": "Prismatic Shield Generator",
|
"psg": "Prismatic Shield Generator",
|
||||||
"pv": "Planetary Vehicle Hangar",
|
"pv": "Planetary Vehicle Hangar",
|
||||||
"rf": "Refinery",
|
"rf": "Refinery",
|
||||||
@@ -213,7 +209,6 @@
|
|||||||
"scanrate": "Scan rate",
|
"scanrate": "Scan rate",
|
||||||
"scantime": "Scan time",
|
"scantime": "Scan time",
|
||||||
"shield": "Shield",
|
"shield": "Shield",
|
||||||
"armour": "Armour",
|
|
||||||
"shieldboost": "Shield boost",
|
"shieldboost": "Shield boost",
|
||||||
"shieldreinforcement": "Shield reinforcement",
|
"shieldreinforcement": "Shield reinforcement",
|
||||||
"shotspeed": "Shot speed",
|
"shotspeed": "Shot speed",
|
||||||
|
|||||||
@@ -602,7 +602,7 @@ export default class OutfittingPage extends Page {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Main tables */}
|
{/* Main tables */}
|
||||||
<ShipSummaryTable ship={ship} fuel={fuel} cargo={cargo} marker={shipSummaryMarker} pips={{sys: this.state.sys, wep: this.state.wep, eng: this.state.eng}} />
|
<ShipSummaryTable ship={ship} fuel={fuel} cargo={cargo} marker={shipSummaryMarker} />
|
||||||
<StandardSlotSection ship={ship} fuel={fuel} cargo={cargo} code={standardSlotMarker} onChange={shipUpdated} onCargoChange={this._cargoUpdated} onFuelChange={this._fuelUpdated} currentMenu={menu} />
|
<StandardSlotSection ship={ship} fuel={fuel} cargo={cargo} code={standardSlotMarker} onChange={shipUpdated} onCargoChange={this._cargoUpdated} onFuelChange={this._fuelUpdated} currentMenu={menu} />
|
||||||
<InternalSlotSection ship={ship} code={internalSlotMarker} onChange={shipUpdated} onCargoChange={this._cargoUpdated} onFuelChange={this._fuelUpdated} currentMenu={menu} />
|
<InternalSlotSection ship={ship} code={internalSlotMarker} onChange={shipUpdated} onCargoChange={this._cargoUpdated} onFuelChange={this._fuelUpdated} currentMenu={menu} />
|
||||||
<HardpointSlotSection ship={ship} code={hardpointsSlotMarker} onChange={shipUpdated} onCargoChange={this._cargoUpdated} onFuelChange={this._fuelUpdated} currentMenu={menu} />
|
<HardpointSlotSection ship={ship} code={hardpointsSlotMarker} onChange={shipUpdated} onCargoChange={this._cargoUpdated} onFuelChange={this._fuelUpdated} currentMenu={menu} />
|
||||||
|
|||||||
@@ -9,16 +9,12 @@ export const StandardArray = [
|
|||||||
'pd', // Power Distributor
|
'pd', // Power Distributor
|
||||||
's', // Sensors
|
's', // Sensors
|
||||||
'ft', // Fuel Tank
|
'ft', // Fuel Tank
|
||||||
'gpp', // Guardian Hybrid Power Plant
|
|
||||||
'gpd' // Guardian Hybrid Power Distributor
|
|
||||||
];
|
];
|
||||||
|
|
||||||
// Map to lookup group labels/names for component grp, used for JSON Serialization
|
// Map to lookup group labels/names for component grp, used for JSON Serialization
|
||||||
export const ModuleGroupToName = {
|
export const ModuleGroupToName = {
|
||||||
// Standard
|
// Standard
|
||||||
pp: 'Power Plant',
|
pp: 'Power Plant',
|
||||||
gpp: 'Guardian Hybrid Power Plant',
|
|
||||||
gpd: 'Guardian Hybrid Power Distributor',
|
|
||||||
t: 'Thrusters',
|
t: 'Thrusters',
|
||||||
fsd: 'Frame Shift Drive',
|
fsd: 'Frame Shift Drive',
|
||||||
ls: 'Life Support',
|
ls: 'Life Support',
|
||||||
@@ -79,9 +75,7 @@ export const ModuleGroupToName = {
|
|||||||
sb: 'Shield Booster',
|
sb: 'Shield Booster',
|
||||||
tp: 'Torpedo Pylon',
|
tp: 'Torpedo Pylon',
|
||||||
sfn: 'Shutdown Field Neutraliser',
|
sfn: 'Shutdown Field Neutraliser',
|
||||||
xs: 'Xeno Scanner',
|
xs: 'Xeno Scanner'
|
||||||
gpc: 'Guardian Plasma Charger',
|
|
||||||
ggc: 'Guardian Gauss Cannon',
|
|
||||||
};
|
};
|
||||||
|
|
||||||
let GrpNameToCodeMap = {};
|
let GrpNameToCodeMap = {};
|
||||||
|
|||||||
@@ -464,17 +464,7 @@ export default class Ship {
|
|||||||
if (m.blueprint) {
|
if (m.blueprint) {
|
||||||
m.blueprint.special = special;
|
m.blueprint.special = special;
|
||||||
}
|
}
|
||||||
this.updatePowerGenerated()
|
this.recalculateDps().recalculateHps().recalculateEps();
|
||||||
.updatePowerUsed()
|
|
||||||
.recalculateMass()
|
|
||||||
.updateJumpStats()
|
|
||||||
.recalculateShield()
|
|
||||||
.recalculateShieldCells()
|
|
||||||
.recalculateArmour()
|
|
||||||
.recalculateDps()
|
|
||||||
.recalculateEps()
|
|
||||||
.recalculateHps()
|
|
||||||
.updateMovement();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -1,67 +1,6 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { Modifications } from 'coriolis-data/dist';
|
import { Modifications } from 'coriolis-data/dist';
|
||||||
|
|
||||||
/**
|
|
||||||
* Generate a tooltip with details of a blueprint's specials
|
|
||||||
* @param {Object} translate The translate object
|
|
||||||
* @param {Object} blueprint The blueprint at the required grade
|
|
||||||
* @param {string} grp The group of the module
|
|
||||||
* @param {Object} m The module to compare with
|
|
||||||
* @param specialName
|
|
||||||
* @returns {Object} The react components
|
|
||||||
*/
|
|
||||||
export function specialToolTip(translate, blueprint, grp, m, specialName) {
|
|
||||||
const effects = [];
|
|
||||||
if (!blueprint || !blueprint.features) {
|
|
||||||
return undefined;
|
|
||||||
}
|
|
||||||
if (m) {
|
|
||||||
// We also add in any benefits from specials that aren't covered above
|
|
||||||
if (m.blueprint) {
|
|
||||||
for (const feature in Modifications.modifierActions[specialName]) {
|
|
||||||
// if (!blueprint.features[feature] && !m.mods.feature) {
|
|
||||||
const featureDef = Modifications.modifications[feature];
|
|
||||||
if (featureDef && !featureDef.hidden) {
|
|
||||||
let symbol = '';
|
|
||||||
if (feature === 'jitter') {
|
|
||||||
symbol = '°';
|
|
||||||
} else if (featureDef.type === 'percentage') {
|
|
||||||
symbol = '%';
|
|
||||||
}
|
|
||||||
let current = m.getModValue(feature) - m.getModValue(feature, true);
|
|
||||||
if (featureDef.type === 'percentage') {
|
|
||||||
current = Math.round(current / 10) / 10;
|
|
||||||
} else if (featureDef.type === 'numeric') {
|
|
||||||
current /= 100;
|
|
||||||
}
|
|
||||||
const currentIsBeneficial = isValueBeneficial(feature, current);
|
|
||||||
|
|
||||||
effects.push(
|
|
||||||
<tr key={feature + '_specialTT'}>
|
|
||||||
<td style={{textAlign: 'left'}}>{translate(feature, grp)}</td>
|
|
||||||
<td> </td>
|
|
||||||
<td className={current === 0 ? '' : currentIsBeneficial ? 'secondary' : 'warning'}
|
|
||||||
style={{textAlign: 'right'}}>{current}{symbol}</td>
|
|
||||||
<td> </td>
|
|
||||||
</tr>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return (
|
|
||||||
<div>
|
|
||||||
<table width='100%'>
|
|
||||||
<tbody>
|
|
||||||
{effects}
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generate a tooltip with details of a blueprint's effects
|
* Generate a tooltip with details of a blueprint's effects
|
||||||
* @param {Object} translate The translate object
|
* @param {Object} translate The translate object
|
||||||
@@ -372,60 +311,3 @@ function _setValue(ship, m, featureName, value) {
|
|||||||
ship.setModification(m, featureName, value);
|
ship.setModification(m, featureName, value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Provide 'percent' primary query
|
|
||||||
* @param {Object} m The module for which to perform the query
|
|
||||||
* @returns {Number} percent The percentage indicator of current applied values.
|
|
||||||
*/
|
|
||||||
export function getPercent(m) {
|
|
||||||
let result = null;
|
|
||||||
const features = m.blueprint.grades[m.blueprint.grade].features;
|
|
||||||
for (const featureName in features) {
|
|
||||||
|
|
||||||
if (features[featureName][0] === features[featureName][1]) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
let value = _getValue(m, featureName);
|
|
||||||
let mult;
|
|
||||||
if (Modifications.modifications[featureName].higherbetter) {
|
|
||||||
// Higher is better, but is this making it better or worse?
|
|
||||||
if (features[featureName][0] < 0 || (features[featureName][0] === 0 && features[featureName][1] < 0)) {
|
|
||||||
mult = Math.round((value - features[featureName][1]) / (features[featureName][0] - features[featureName][1]) * 100);
|
|
||||||
} else {
|
|
||||||
mult = Math.round((value - features[featureName][0]) / (features[featureName][1] - features[featureName][0]) * 100);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// Higher is worse, but is this making it better or worse?
|
|
||||||
if (features[featureName][0] < 0 || (features[featureName][0] === 0 && features[featureName][1] < 0)) {
|
|
||||||
mult = Math.round((value - features[featureName][0]) / (features[featureName][1] - features[featureName][0]) * 100);
|
|
||||||
} else {
|
|
||||||
mult = Math.round((value - features[featureName][1]) / (features[featureName][0] - features[featureName][1]) * 100);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (result && result != mult) {
|
|
||||||
return null;
|
|
||||||
} else if (result != mult) {
|
|
||||||
result = mult;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Query a feature value
|
|
||||||
* @param {Object} m The module for which to perform the query
|
|
||||||
* @param {string} featureName The feature being queried
|
|
||||||
*/
|
|
||||||
function _getValue(m, featureName) {
|
|
||||||
if (Modifications.modifications[featureName].type == 'percentage') {
|
|
||||||
return m.getModValue(featureName, true) / 10000;
|
|
||||||
} else if (Modifications.modifications[featureName].type == 'numeric') {
|
|
||||||
return m.getModValue(featureName, true) / 100;
|
|
||||||
} else {
|
|
||||||
return m.getModValue(featureName, true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -73,14 +73,14 @@ export function shipFromLoadoutJSON (json) {
|
|||||||
let opts = [];
|
let opts = [];
|
||||||
|
|
||||||
for (const module of json.Modules) {
|
for (const module of json.Modules) {
|
||||||
switch (module.Slot.toLowerCase()) {
|
switch (module.Slot) {
|
||||||
// Cargo Hatch.
|
// Cargo Hatch.
|
||||||
case 'cargohatch':
|
case 'CargoHatch':
|
||||||
ship.cargoHatch.enabled = module.On
|
ship.cargoHatch.enabled = module.On
|
||||||
ship.cargoHatch.priority = module.Priority
|
ship.cargoHatch.priority = module.Priority
|
||||||
break
|
break
|
||||||
// Add the bulkheads
|
// Add the bulkheads
|
||||||
case 'armour':
|
case 'Armour':
|
||||||
if (module.Item.toLowerCase().endsWith('_armour_grade1')) {
|
if (module.Item.toLowerCase().endsWith('_armour_grade1')) {
|
||||||
ship.useBulkhead(0, true)
|
ship.useBulkhead(0, true)
|
||||||
} else if (module.Item.toLowerCase().endsWith('_armour_grade2')) {
|
} else if (module.Item.toLowerCase().endsWith('_armour_grade2')) {
|
||||||
@@ -97,49 +97,49 @@ export function shipFromLoadoutJSON (json) {
|
|||||||
ship.bulkheads.enabled = true
|
ship.bulkheads.enabled = true
|
||||||
if (module.Engineering) _addModifications(ship.bulkheads.m, module.Engineering.Modifiers, module.Engineering.BlueprintName, module.Engineering.Level)
|
if (module.Engineering) _addModifications(ship.bulkheads.m, module.Engineering.Modifiers, module.Engineering.BlueprintName, module.Engineering.Level)
|
||||||
break
|
break
|
||||||
case 'powerplant':
|
case 'PowerPlant':
|
||||||
const powerplant = _moduleFromFdName(module.Item)
|
const powerplant = _moduleFromFdName(module.Item)
|
||||||
ship.use(ship.standard[0], powerplant, true)
|
ship.use(ship.standard[0], powerplant, true)
|
||||||
ship.standard[0].enabled = module.On
|
ship.standard[0].enabled = module.On
|
||||||
ship.standard[0].priority = module.Priority
|
ship.standard[0].priority = module.Priority
|
||||||
if (module.Engineering) _addModifications(powerplant, module.Engineering.Modifiers, module.Engineering.BlueprintName, module.Engineering.Level)
|
if (module.Engineering) _addModifications(powerplant, module.Engineering.Modifiers, module.Engineering.BlueprintName, module.Engineering.Level)
|
||||||
break
|
break
|
||||||
case 'mainengines':
|
case 'MainEngines':
|
||||||
const thrusters = _moduleFromFdName(module.Item)
|
const thrusters = _moduleFromFdName(module.Item)
|
||||||
ship.use(ship.standard[1], thrusters, true)
|
ship.use(ship.standard[1], thrusters, true)
|
||||||
ship.standard[1].enabled = module.On
|
ship.standard[1].enabled = module.On
|
||||||
ship.standard[1].priority = module.Priority
|
ship.standard[1].priority = module.Priority
|
||||||
if (module.Engineering) _addModifications(thrusters, module.Engineering.Modifiers, module.Engineering.BlueprintName, module.Engineering.Level)
|
if (module.Engineering) _addModifications(thrusters, module.Engineering.Modifiers, module.Engineering.BlueprintName, module.Engineering.Level)
|
||||||
break
|
break
|
||||||
case 'frameshiftdrive':
|
case 'FrameShiftDrive':
|
||||||
const frameshiftdrive = _moduleFromFdName(module.Item)
|
const frameshiftdrive = _moduleFromFdName(module.Item)
|
||||||
ship.use(ship.standard[2], frameshiftdrive, true)
|
ship.use(ship.standard[2], frameshiftdrive, true)
|
||||||
ship.standard[2].enabled = module.On
|
ship.standard[2].enabled = module.On
|
||||||
ship.standard[2].priority = module.Priority
|
ship.standard[2].priority = module.Priority
|
||||||
if (module.Engineering) _addModifications(frameshiftdrive, module.Engineering.Modifiers, module.Engineering.BlueprintName, module.Engineering.Level)
|
if (module.Engineering) _addModifications(frameshiftdrive, module.Engineering.Modifiers, module.Engineering.BlueprintName, module.Engineering.Level)
|
||||||
break
|
break
|
||||||
case 'lifesupport':
|
case 'LifeSupport':
|
||||||
const lifesupport = _moduleFromFdName(module.Item)
|
const lifesupport = _moduleFromFdName(module.Item)
|
||||||
ship.use(ship.standard[3], lifesupport, true)
|
ship.use(ship.standard[3], lifesupport, true)
|
||||||
ship.standard[3].enabled = module.On === true
|
ship.standard[3].enabled = module.On === true
|
||||||
ship.standard[3].priority = module.Priority
|
ship.standard[3].priority = module.Priority
|
||||||
if (module.Engineering) _addModifications(lifesupport, module.Engineering.Modifiers, module.Engineering.BlueprintName, module.Engineering.Level)
|
if (module.Engineering) _addModifications(lifesupport, module.Engineering.Modifiers, module.Engineering.BlueprintName, module.Engineering.Level)
|
||||||
break
|
break
|
||||||
case 'powerdistributor':
|
case 'PowerDistributor':
|
||||||
const powerdistributor = _moduleFromFdName(module.Item)
|
const powerdistributor = _moduleFromFdName(module.Item)
|
||||||
ship.use(ship.standard[4], powerdistributor, true)
|
ship.use(ship.standard[4], powerdistributor, true)
|
||||||
ship.standard[4].enabled = module.On
|
ship.standard[4].enabled = module.On
|
||||||
ship.standard[4].priority = module.Priority
|
ship.standard[4].priority = module.Priority
|
||||||
if (module.Engineering) _addModifications(powerdistributor, module.Engineering.Modifiers, module.Engineering.BlueprintName, module.Engineering.Level)
|
if (module.Engineering) _addModifications(powerdistributor, module.Engineering.Modifiers, module.Engineering.BlueprintName, module.Engineering.Level)
|
||||||
break
|
break
|
||||||
case 'radar':
|
case 'Radar':
|
||||||
const sensors = _moduleFromFdName(module.Item)
|
const sensors = _moduleFromFdName(module.Item)
|
||||||
ship.use(ship.standard[5], sensors, true)
|
ship.use(ship.standard[5], sensors, true)
|
||||||
ship.standard[5].enabled = module.On
|
ship.standard[5].enabled = module.On
|
||||||
ship.standard[5].priority = module.Priority
|
ship.standard[5].priority = module.Priority
|
||||||
if (module.Engineering) _addModifications(sensors, module.Engineering.Modifiers, module.Engineering.BlueprintName, module.Engineering.Level)
|
if (module.Engineering) _addModifications(sensors, module.Engineering.Modifiers, module.Engineering.BlueprintName, module.Engineering.Level)
|
||||||
break
|
break
|
||||||
case 'fueltank':
|
case 'FuelTank':
|
||||||
const fueltank = _moduleFromFdName(module.Item)
|
const fueltank = _moduleFromFdName(module.Item)
|
||||||
ship.use(ship.standard[6], fueltank, true)
|
ship.use(ship.standard[6], fueltank, true)
|
||||||
ship.standard[6].enabled = true
|
ship.standard[6].enabled = true
|
||||||
@@ -148,7 +148,7 @@ export function shipFromLoadoutJSON (json) {
|
|||||||
default:
|
default:
|
||||||
}
|
}
|
||||||
for (const module of json.Modules) {
|
for (const module of json.Modules) {
|
||||||
if (module.Slot.toLowerCase().search(/hardpoint/) !== -1) {
|
if (module.Slot.search(/Hardpoint/) !== -1) {
|
||||||
// Add hardpoints
|
// Add hardpoints
|
||||||
let hardpoint;
|
let hardpoint;
|
||||||
let hardpointClassNum = -1
|
let hardpointClassNum = -1
|
||||||
@@ -166,7 +166,7 @@ export function shipFromLoadoutJSON (json) {
|
|||||||
|
|
||||||
// Now that we know what we're looking for, find it
|
// Now that we know what we're looking for, find it
|
||||||
const hardpointName = HARDPOINT_NUM_TO_CLASS[hardpointClassNum] + 'Hardpoint' + hardpointSlotNum
|
const hardpointName = HARDPOINT_NUM_TO_CLASS[hardpointClassNum] + 'Hardpoint' + hardpointSlotNum
|
||||||
const hardpointSlot = json.Modules.find(elem => elem.Slot.toLowerCase() === hardpointName.toLowerCase())
|
const hardpointSlot = json.Modules.find(elem => elem.Slot === hardpointName)
|
||||||
if (!hardpointSlot) {
|
if (!hardpointSlot) {
|
||||||
// This can happen with old imports that don't contain new hardpoints
|
// This can happen with old imports that don't contain new hardpoints
|
||||||
} else if (!hardpointSlot) {
|
} else if (!hardpointSlot) {
|
||||||
@@ -181,17 +181,17 @@ export function shipFromLoadoutJSON (json) {
|
|||||||
hardpointArrayNum++
|
hardpointArrayNum++
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (module.Slot.toLowerCase().search(/slot\d/) !== -1) {
|
if (module.Slot.search(/Slot\d/) !== -1) {
|
||||||
let internalSlotNum = 1
|
let internalSlotNum = 1
|
||||||
let militarySlotNum = 1
|
let militarySlotNum = 1
|
||||||
for (let i in shipTemplate.slots.internal) {
|
for (let i in shipTemplate.slots.internal) {
|
||||||
const isMilitary = isNaN(shipTemplate.slots.internal[i]) ? shipTemplate.slots.internal[i].name = 'military' : false
|
const isMilitary = isNaN(shipTemplate.slots.internal[i]) ? shipTemplate.slots.internal[i].name = 'Military' : false
|
||||||
|
|
||||||
// The internal slot might be a standard or a military slot. Military slots have a different naming system
|
// The internal slot might be a standard or a military slot. Military slots have a different naming system
|
||||||
let internalSlot = null
|
let internalSlot = null
|
||||||
if (isMilitary) {
|
if (isMilitary) {
|
||||||
const internalName = 'Military0' + militarySlotNum
|
const internalName = 'Military0' + militarySlotNum
|
||||||
internalSlot = json.Modules.find(elem => elem.Slot.toLowerCase() === internalName.toLowerCase())
|
internalSlot = json.Modules.find(elem => elem.Slot === internalName)
|
||||||
militarySlotNum++
|
militarySlotNum++
|
||||||
} else {
|
} else {
|
||||||
// Slot numbers are not contiguous so handle skips.
|
// Slot numbers are not contiguous so handle skips.
|
||||||
@@ -199,8 +199,8 @@ export function shipFromLoadoutJSON (json) {
|
|||||||
// Slot sizes have no relationship to the actual size, either, so check all possibilities
|
// Slot sizes have no relationship to the actual size, either, so check all possibilities
|
||||||
for (let slotsize = 0; slotsize < 9; slotsize++) {
|
for (let slotsize = 0; slotsize < 9; slotsize++) {
|
||||||
const internalName = 'Slot' + (internalSlotNum <= 9 ? '0' : '') + internalSlotNum + '_Size' + slotsize
|
const internalName = 'Slot' + (internalSlotNum <= 9 ? '0' : '') + internalSlotNum + '_Size' + slotsize
|
||||||
if (json.Modules.find(elem => elem.Slot.toLowerCase() === internalName.toLowerCase())) {
|
if (json.Modules.find(elem => elem.Slot === internalName)) {
|
||||||
internalSlot = json.Modules.find(elem => elem.Slot.toLowerCase() === internalName.toLowerCase());
|
internalSlot = json.Modules.find(elem => elem.Slot === internalName);
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,7 +10,6 @@
|
|||||||
@secondary: #1FB0FF; // Light blue
|
@secondary: #1FB0FF; // Light blue
|
||||||
@warning: #FF3B00; // Dark Orange
|
@warning: #FF3B00; // Dark Orange
|
||||||
@disabled: #555; // Light grey
|
@disabled: #555; // Light grey
|
||||||
@success: #71a052; // Green
|
|
||||||
@primary-disabled: darken(@primary, @disabledDarken);
|
@primary-disabled: darken(@primary, @disabledDarken);
|
||||||
@secondary-disabled: darken(@secondary, @disabledDarken);
|
@secondary-disabled: darken(@secondary, @disabledDarken);
|
||||||
@warning-disabled: darken(@warning, @disabledDarken);
|
@warning-disabled: darken(@warning, @disabledDarken);
|
||||||
|
|||||||
@@ -70,22 +70,10 @@
|
|||||||
padding: 0.5em 0.2em;
|
padding: 0.5em 0.2em;
|
||||||
font-size: 0.9em;
|
font-size: 0.9em;
|
||||||
|
|
||||||
.summaryTable {
|
#summaryTable {
|
||||||
.user-select-none();
|
.user-select-none();
|
||||||
width: 100%;
|
width: 100%;
|
||||||
border-collapse: collapse;
|
border-collapse: collapse;
|
||||||
|
|
||||||
& > thead.blue {
|
|
||||||
background-color: @secondary;
|
|
||||||
border-left: 1px solid @primary-bg;
|
|
||||||
color: @primary-bg;
|
|
||||||
}
|
|
||||||
|
|
||||||
& > thead.green {
|
|
||||||
background-color: @success;
|
|
||||||
border-left: 1px solid @primary-bg;
|
|
||||||
color: @primary-bg;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user