mirror of
https://github.com/EDCD/coriolis.git
synced 2025-12-08 22:33:24 +00:00
Merge pull request #364 from EDCD/feature/stats
Show absolute values next to modification values
This commit is contained in:
@@ -59,9 +59,9 @@ export default class Modification extends TranslatedComponent {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Triggered when an update to slider value is finished i.e. when losing focus
|
* Triggered when an update to slider value is finished i.e. when losing focus
|
||||||
*
|
*
|
||||||
* pnellesen (24/05/2018): added value check below - this should prevent experimental effects from being recalculated
|
* pnellesen (24/05/2018): added value check below - this should prevent experimental effects from being recalculated
|
||||||
* with each onBlur event, even when no change has actually been made to the field.
|
* with each onBlur event, even when no change has actually been made to the field.
|
||||||
*/
|
*/
|
||||||
_updateFinished() {
|
_updateFinished() {
|
||||||
if (this.props.value != this.state.value) {
|
if (this.props.value != this.state.value) {
|
||||||
@@ -76,6 +76,7 @@ export default class Modification extends TranslatedComponent {
|
|||||||
*/
|
*/
|
||||||
render() {
|
render() {
|
||||||
let translate = this.context.language.translate;
|
let translate = this.context.language.translate;
|
||||||
|
let formats = this.context.language.formats;
|
||||||
let { m, name } = this.props;
|
let { m, name } = this.props;
|
||||||
|
|
||||||
if (name === 'damagedist') {
|
if (name === 'damagedist') {
|
||||||
@@ -96,7 +97,34 @@ export default class Modification extends TranslatedComponent {
|
|||||||
return (
|
return (
|
||||||
<div onBlur={this._updateFinished.bind(this)} className={'cb'} key={name} ref={ modItem => this.props.modItems[name] = modItem }>
|
<div onBlur={this._updateFinished.bind(this)} className={'cb'} key={name} ref={ modItem => this.props.modItems[name] = modItem }>
|
||||||
<div className={'cb'}>{translate(name, m.grp)}{symbol}</div>
|
<div className={'cb'}>{translate(name, m.grp)}{symbol}</div>
|
||||||
<NumberEditor className={'cb'} style={{ width: '90%', textAlign: 'center' }} step={0.01} stepModifier={1} decimals={2} value={this.state.value} onValueChange={this._updateValue.bind(this)} onKeyDown={ this.props.onKeyDown } />
|
<table style={{ width: '100%' }}>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td style={{ width: '50%' }}>
|
||||||
|
{/* thermload doesn't have any values set therefore we ignore it */}
|
||||||
|
<div>{this.props.name !== 'thermload' &&
|
||||||
|
this.props.m.formatModifiedValue(
|
||||||
|
this.props.name,
|
||||||
|
this.context.language
|
||||||
|
)
|
||||||
|
}</div>
|
||||||
|
</td>
|
||||||
|
<td style={{ width: '50%' }}>
|
||||||
|
{this.props.editable ?
|
||||||
|
<NumberEditor className={'cb'} value={this.state.value}
|
||||||
|
style={{ textAlign: 'center' }}
|
||||||
|
step={0.01} stepModifier={1} decimals={2}
|
||||||
|
onValueChange={this._updateValue.bind(this)}
|
||||||
|
onKeyDown={ this.props.onKeyDown } /> :
|
||||||
|
<div>
|
||||||
|
<input type="text" value={formats.f2(this.state.value)}
|
||||||
|
disabled style={{ textAlign: 'center', cursor: 'inherit' }}/>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,6 +15,10 @@ import {
|
|||||||
specialToolTip
|
specialToolTip
|
||||||
} from '../utils/BlueprintFunctions';
|
} from '../utils/BlueprintFunctions';
|
||||||
|
|
||||||
|
const MODIFICATIONS_COMPARATOR = (mod1, mod2) => {
|
||||||
|
return mod1.props.name.localeCompare(mod2.props.name);
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Modifications menu
|
* Modifications menu
|
||||||
*/
|
*/
|
||||||
@@ -124,7 +128,7 @@ export default class ModificationsMenu extends TranslatedComponent {
|
|||||||
// Initial modification menu
|
// Initial modification menu
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
this.modItems[this.lastModId].focus();
|
this.modItems[this.lastModId].focus();
|
||||||
return;
|
return;
|
||||||
} else if (event.currentTarget.className.indexOf('button-inline-menu') >= 0 && event.currentTarget.previousElementSibling == null && this.lastNeId != null && this.modItems[this.lastNeId] != null) {
|
} else if (event.currentTarget.className.indexOf('button-inline-menu') >= 0 && event.currentTarget.previousElementSibling == null && this.lastNeId != null && this.modItems[this.lastNeId] != null) {
|
||||||
// shift-tab on first element in modifications menu. set focus to last number editor field if open
|
// shift-tab on first element in modifications menu. set focus to last number editor field if open
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
@@ -205,15 +209,26 @@ export default class ModificationsMenu extends TranslatedComponent {
|
|||||||
*/
|
*/
|
||||||
_renderModifications(props) {
|
_renderModifications(props) {
|
||||||
const { m, onChange, ship } = props;
|
const { m, onChange, ship } = props;
|
||||||
|
const modifiableModifications = [];
|
||||||
const modifications = [];
|
const modifications = [];
|
||||||
for (const modName of Modifications.modules[m.grp].modifications) {
|
for (const modName of Modifications.modules[m.grp].modifications) {
|
||||||
if (!Modifications.modifications[modName].hidden) {
|
if (!Modifications.modifications[modName].hidden) {
|
||||||
const key = modName + (m.getModValue(modName) / 100 || 0);
|
const key = modName + (m.getModValue(modName) / 100 || 0);
|
||||||
|
const editable = modName !== 'fallofffromrange' &&
|
||||||
|
m.blueprint.grades[m.blueprint.grade].features[modName];
|
||||||
this.lastNeId = modName;
|
this.lastNeId = modName;
|
||||||
modifications.push(<Modification key={ key } ship={ ship } m={ m } name={ modName } value={ m.getModValue(modName) / 100 || 0 } onChange={ onChange } onKeyDown={ this._keyDown } modItems={ this.modItems } handleModChange = {this._handleModChange} />);
|
(editable ? modifiableModifications : modifications).push(
|
||||||
|
<Modification key={ key } ship={ ship } m={ m }
|
||||||
|
value={m.getModValue(modName) / 100 || 0} modItems={this.modItems}
|
||||||
|
onChange={onChange} onKeyDown={this._keyDown} name={modName}
|
||||||
|
editable={editable} handleModChange = {this._handleModChange} />
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return modifications;
|
|
||||||
|
modifiableModifications.sort(MODIFICATIONS_COMPARATOR);
|
||||||
|
modifications.sort(MODIFICATIONS_COMPARATOR);
|
||||||
|
return modifiableModifications.concat(modifications);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -60,12 +60,14 @@ export function getLanguage(langCode) {
|
|||||||
},
|
},
|
||||||
translate,
|
translate,
|
||||||
units: {
|
units: {
|
||||||
|
ang: '°', // Angle
|
||||||
CR: <u>{translate('CR')}</u>, // Credits
|
CR: <u>{translate('CR')}</u>, // Credits
|
||||||
kg: <u>{translate('kg')}</u>, // Kilograms
|
kg: <u>{translate('kg')}</u>, // Kilograms
|
||||||
kgs: <u>{translate('kg/s')}</u>, // Kilograms per second
|
kgs: <u>{translate('kg/s')}</u>, // Kilograms per second
|
||||||
km: <u>{translate('km')}</u>, // Kilometers
|
km: <u>{translate('km')}</u>, // Kilometers
|
||||||
Ls: <u>{translate('Ls')}</u>, // Light Seconds
|
Ls: <u>{translate('Ls')}</u>, // Light Seconds
|
||||||
LY: <u>{translate('LY')}</u>, // Light Years
|
LY: <u>{translate('LY')}</u>, // Light Years
|
||||||
|
m: <u>{translate('m')}</u>, // Meters
|
||||||
MJ: <u>{translate('MJ')}</u>, // Mega Joules
|
MJ: <u>{translate('MJ')}</u>, // Mega Joules
|
||||||
'm/s': <u>{translate('m/s')}</u>, // Meters per second
|
'm/s': <u>{translate('m/s')}</u>, // Meters per second
|
||||||
'°/s': <u>{translate('°/s')}</u>, // Degrees per second
|
'°/s': <u>{translate('°/s')}</u>, // Degrees per second
|
||||||
|
|||||||
@@ -178,6 +178,7 @@
|
|||||||
"dpssdps": "Damage per second (sustained damage per second)",
|
"dpssdps": "Damage per second (sustained damage per second)",
|
||||||
"eps": "Energy per second",
|
"eps": "Energy per second",
|
||||||
"epsseps": "Energy per second (sustained energy per second)",
|
"epsseps": "Energy per second (sustained energy per second)",
|
||||||
|
"fallofffromrange": "Falloff",
|
||||||
"hps": "Heat per second",
|
"hps": "Heat per second",
|
||||||
"hpsshps": "Heat per second (sustained heat per second)",
|
"hpsshps": "Heat per second (sustained heat per second)",
|
||||||
"damage by": "Damage by",
|
"damage by": "Damage by",
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
82
src/app/shipyard/StatsFormating.js
Normal file
82
src/app/shipyard/StatsFormating.js
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
export const SI_PREFIXES = {
|
||||||
|
'Y': 1e+24, // Yotta
|
||||||
|
'Z': 1e+21, // Zetta
|
||||||
|
'E': 1e+18, // Peta
|
||||||
|
'P': 1e+15, // Peta
|
||||||
|
'T': 1e+12, // Tera
|
||||||
|
'G': 1e+9, // Giga
|
||||||
|
'M': 1e+6, // Mega
|
||||||
|
'k': 1e+3, // Kilo
|
||||||
|
'h': 1e+2, // Hekto
|
||||||
|
'da': 1e+1, // Deka
|
||||||
|
'': 1,
|
||||||
|
'd': 1e-1, // Dezi
|
||||||
|
'c': 1e-2, // Zenti
|
||||||
|
'm': 1e-3, // Milli
|
||||||
|
'μ': 1e-6, // mikro not supported due to charset
|
||||||
|
'n': 10e-9, // Nano
|
||||||
|
'p': 1e-12, // Nano
|
||||||
|
'f': 1e-15, // Femto
|
||||||
|
'a': 1e-18, // Atto
|
||||||
|
'z': 1e-21, // Zepto
|
||||||
|
'y': 1e-24 // Yokto
|
||||||
|
};
|
||||||
|
|
||||||
|
export const STATS_FORMATING = {
|
||||||
|
'ammo': { 'format': 'int', },
|
||||||
|
'boot': { 'format': 'int', 'unit': 'secs' },
|
||||||
|
'brokenregen': { 'format': 'round1', 'unit': 'ps' },
|
||||||
|
'burst': { 'format': 'int' },
|
||||||
|
'burstrof': { 'format': 'round1', 'unit': 'ps' },
|
||||||
|
'causres': { 'format': 'pct' },
|
||||||
|
'clip': { 'format': 'int' },
|
||||||
|
'damage': { 'format': 'round' },
|
||||||
|
'dps': { 'format': 'round', 'units': 'ps', 'synthetic': 'getDps' },
|
||||||
|
'dpe': { 'format': 'round', 'units': 'ps', 'synthetic': 'getDpe' },
|
||||||
|
'distdraw': { 'format': 'round', 'unit': 'MW' },
|
||||||
|
'duration': { 'format': 'round1', 'unit': 's' },
|
||||||
|
'eff': { 'format': 'round2' },
|
||||||
|
'engcap': { 'format': 'round1', 'unit': 'MJ' },
|
||||||
|
'engrate': { 'format': 'round1', 'unit': 'MW' },
|
||||||
|
'eps': { 'format': 'round', 'units': 'ps', 'synthetic': 'getEps' },
|
||||||
|
'explres': { 'format': 'pct' },
|
||||||
|
'facinglimit': { 'format': 'round1', 'unit': 'ang' },
|
||||||
|
'falloff': { 'format': 'round', 'unit': 'km', 'storedUnit': 'm' },
|
||||||
|
'fallofffromrange': { 'format': 'round', 'unit': 'km', 'storedUnit': 'm', 'synthetic': 'getFalloff' },
|
||||||
|
'hps': { 'format': 'round', 'units': 'ps', 'synthetic': 'getHps' },
|
||||||
|
'hullboost': { 'format': 'pct1' },
|
||||||
|
'hullreinforcement': { 'format': 'int' },
|
||||||
|
'integrity': { 'format': 'round1' },
|
||||||
|
'jitter': { 'format': 'round', 'unit': 'ang' },
|
||||||
|
'kinres': { 'format': 'pct' },
|
||||||
|
'mass': { 'format': 'round1', 'unit': 'T' },
|
||||||
|
'maxfuel': { 'format': 'round1', 'unit': 'T' },
|
||||||
|
'optmass': { 'format': 'int', 'unit': 'T' },
|
||||||
|
'optmul': { 'format': 'pct' },
|
||||||
|
'pgen': { 'format': 'round1', 'unit': 'MW' },
|
||||||
|
'piercing': { 'format': 'int' },
|
||||||
|
'power': { 'format': 'round', 'unit': 'MW' },
|
||||||
|
'protection': { 'format': 'pct' },
|
||||||
|
'range': { 'format': 'f2', 'unit': 'km', 'storedUnit': 'm' },
|
||||||
|
'ranget': { 'format': 'f1', 'unit': 's' },
|
||||||
|
'regen': { 'format': 'round1', 'unit': 'ps' },
|
||||||
|
'reload': { 'format': 'int', 'unit': 's' },
|
||||||
|
'rof': { 'format': 'round1', 'unit': 'ps' },
|
||||||
|
'angle': { 'format': 'round1', 'unit': 'ang' },
|
||||||
|
'scanrate': { 'format': 'int' },
|
||||||
|
'scantime': { 'format': 'round1', 'unit': 's' },
|
||||||
|
'sdps': { 'format': 'round1', 'units': 'ps', 'synthetic': 'getSDps' },
|
||||||
|
'shield': { 'format': 'int', 'unit': 'MJ' },
|
||||||
|
'shieldaddition': { 'format': 'round1', 'unit': 'MJ' },
|
||||||
|
'shieldboost': { 'format': 'pct1' },
|
||||||
|
'shieldreinforcement': { 'format': 'round1', 'unit': 'MJ' },
|
||||||
|
'shotspeed': { 'format': 'int', 'unit': 'm/s' },
|
||||||
|
'spinup': { 'format': 'round1', 'unit': 's' },
|
||||||
|
'syscap': { 'format': 'round1', 'unit': 'MJ' },
|
||||||
|
'sysrate': { 'format': 'round1', 'unit': 'MW' },
|
||||||
|
'thermload': { 'format': 'round1' },
|
||||||
|
'thermres': { 'format': 'pct' },
|
||||||
|
'wepcap': { 'format': 'round1', 'unit': 'MJ' },
|
||||||
|
'weprate': { 'format': 'round1', 'unit': 'MW' },
|
||||||
|
'jumpboost': { 'format': 'round1', 'unit': 'LY' }
|
||||||
|
};
|
||||||
@@ -45,6 +45,11 @@
|
|||||||
border-color:#fff;
|
border-color:#fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
input:disabled {
|
||||||
|
border-color: #888;
|
||||||
|
color: #888;
|
||||||
|
}
|
||||||
|
|
||||||
.l {
|
.l {
|
||||||
text-transform: capitalize;
|
text-transform: capitalize;
|
||||||
margin-right: 0.8em;
|
margin-right: 0.8em;
|
||||||
|
|||||||
Reference in New Issue
Block a user