mirror of
https://github.com/EDCD/coriolis.git
synced 2025-12-10 07:05:35 +00:00
Update multiple-slot actions to ed-forge
This commit is contained in:
@@ -5,6 +5,8 @@ import { MountFixed, MountGimballed, MountTurret } from '../components/SvgIcons'
|
|||||||
import { stopCtxPropagation } from '../utils/UtilityFunctions';
|
import { stopCtxPropagation } from '../utils/UtilityFunctions';
|
||||||
import autoBind from 'auto-bind';
|
import autoBind from 'auto-bind';
|
||||||
|
|
||||||
|
const SIZE_ORDER = ['huge', 'large', 'medium', 'small'];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Hardpoint slot section
|
* Hardpoint slot section
|
||||||
*/
|
*/
|
||||||
@@ -22,30 +24,37 @@ export default class HardpointSlotSection extends SlotSection {
|
|||||||
* Empty all slots
|
* Empty all slots
|
||||||
*/
|
*/
|
||||||
_empty() {
|
_empty() {
|
||||||
// TODO:
|
this.props.ship.getHardpoints(undefined, true).forEach((slot) => slot.reset());
|
||||||
// this.props.ship.emptyWeapons();
|
|
||||||
this._close();
|
this._close();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fill slots with specified module
|
* Fill slots with specified module
|
||||||
* @param {string} group Group name
|
* @param {string} type Type of item
|
||||||
* @param {string} mount Mount Type - F, G, T
|
* @param {string} rating Mount Type - (fixed, gimbal, turret)
|
||||||
* @param {SyntheticEvent} event Event
|
* @param {SyntheticEvent} event Event
|
||||||
*/
|
*/
|
||||||
_fill(group, mount, event) {
|
_fill(type, rating, event) {
|
||||||
// TODO:
|
const fillAll = event.getModifierState('Alt');
|
||||||
// this.props.ship.useWeapon(group, mount, null, event.getModifierState('Alt'));
|
this.props.ship.getHardpoints(undefined, true).forEach((slot) => {
|
||||||
|
if (slot.isEmpty() || fillAll) {
|
||||||
|
const slotSize = slot.getSize();
|
||||||
|
const fittingSizes = SIZE_ORDER.slice(SIZE_ORDER.findIndex((e) => e === slotSize));
|
||||||
|
for (const size of fittingSizes) {
|
||||||
|
try {
|
||||||
|
slot.setItem(type, size, rating);
|
||||||
|
} catch (err) {
|
||||||
|
// Try next item if this doesn't fit/exist
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
// If still here, we were able to apply the module
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
this._close();
|
this._close();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Empty all on section header right click
|
|
||||||
*/
|
|
||||||
_contextMenu() {
|
|
||||||
this._empty();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generate the slot React Components
|
* Generate the slot React Components
|
||||||
* @return {Array} Array of Slots
|
* @return {Array} Array of Slots
|
||||||
@@ -58,7 +67,6 @@ export default class HardpointSlotSection extends SlotSection {
|
|||||||
for (let h of ship.getHardpoints(undefined, true)) {
|
for (let h of ship.getHardpoints(undefined, true)) {
|
||||||
slots.push(<Slot
|
slots.push(<Slot
|
||||||
key={h.object.Slot}
|
key={h.object.Slot}
|
||||||
maxClass={h.getSize()}
|
|
||||||
currentMenu={currentMenu}
|
currentMenu={currentMenu}
|
||||||
drag={this._drag.bind(this, h)}
|
drag={this._drag.bind(this, h)}
|
||||||
dragOver={this._dragOverSlot.bind(this, h)}
|
dragOver={this._dragOverSlot.bind(this, h)}
|
||||||
@@ -85,61 +93,61 @@ export default class HardpointSlotSection extends SlotSection {
|
|||||||
|
|
||||||
return <div className='select hardpoint' onClick={(e) => e.stopPropagation()} onContextMenu={stopCtxPropagation}>
|
return <div className='select hardpoint' onClick={(e) => e.stopPropagation()} onContextMenu={stopCtxPropagation}>
|
||||||
<ul>
|
<ul>
|
||||||
<li className='lc' tabIndex="0" onClick={this._empty} ref={smRef => this.sectionRefArr['emptyall'] = smRef}>{translate('empty all')}</li>
|
<li className='lc' tabIndex="0" onClick={this._empty}>{translate('empty all')}</li>
|
||||||
<li className='optional-hide' style={{ textAlign: 'center', marginTop: '1em' }}>{translate('PHRASE_ALT_ALL')}</li>
|
<li className='optional-hide' style={{ textAlign: 'center', marginTop: '1em' }}>{translate('PHRASE_ALT_ALL')}</li>
|
||||||
</ul>
|
</ul>
|
||||||
<div className='select-group cap'>{translate('pl')}</div>
|
<div className='select-group cap'>{translate('pulselaser')}</div>
|
||||||
<ul>
|
<ul>
|
||||||
<li className="c" tabIndex="0" onClick={_fill.bind(this, 'pl', 'F')}><MountFixed className='lg'/></li>
|
<li className="c hardpoint" tabIndex="0" onClick={_fill.bind(this, 'pulselaser', 'fixed')}><MountFixed className='lg'/></li>
|
||||||
<li className="c" tabIndex="0" onClick={_fill.bind(this, 'pl', 'G')}><MountGimballed className='lg'/></li>
|
<li className="c hardpoint" tabIndex="0" onClick={_fill.bind(this, 'pulselaser', 'gimbal')}><MountGimballed className='lg'/></li>
|
||||||
<li className="c" tabIndex="0" onClick={_fill.bind(this, 'pl', 'T')}><MountTurret className='lg'/></li>
|
<li className="c hardpoint" tabIndex="0" onClick={_fill.bind(this, 'pulselaser', 'turret')}><MountTurret className='lg'/></li>
|
||||||
</ul>
|
</ul>
|
||||||
<div className='select-group cap'>{translate('ul')}</div>
|
<div className='select-group cap'>{translate('burstlaser')}</div>
|
||||||
<ul>
|
<ul>
|
||||||
<li className="c" tabIndex="0" onClick={_fill.bind(this, 'ul', 'F')}><MountFixed className='lg'/></li>
|
<li className="c hardpoint" tabIndex="0" onClick={_fill.bind(this, 'burstlaser', 'fixed')}><MountFixed className='lg'/></li>
|
||||||
<li className="c" tabIndex="0" onClick={_fill.bind(this, 'ul', 'G')}><MountGimballed className='lg'/></li>
|
<li className="c hardpoint" tabIndex="0" onClick={_fill.bind(this, 'burstlaser', 'gimbal')}><MountGimballed className='lg'/></li>
|
||||||
<li className="c" tabIndex="0" onClick={_fill.bind(this, 'ul', 'T')}><MountTurret className='lg'/></li>
|
<li className="c hardpoint" tabIndex="0" onClick={_fill.bind(this, 'burstlaser', 'turret')}><MountTurret className='lg'/></li>
|
||||||
</ul>
|
</ul>
|
||||||
<div className='select-group cap'>{translate('bl')}</div>
|
<div className='select-group cap'>{translate('beamlaser')}</div>
|
||||||
<ul>
|
<ul>
|
||||||
<li className="c" tabIndex="0" onClick={_fill.bind(this, 'bl', 'F')}><MountFixed className='lg'/></li>
|
<li className="c hardpoint" tabIndex="0" onClick={_fill.bind(this, 'beamlaser', 'fixed')}><MountFixed className='lg'/></li>
|
||||||
<li className="c" tabIndex="0" onClick={_fill.bind(this, 'bl', 'G')}><MountGimballed className='lg'/></li>
|
<li className="c hardpoint" tabIndex="0" onClick={_fill.bind(this, 'beamlaser', 'gimbal')}><MountGimballed className='lg'/></li>
|
||||||
<li className="c" tabIndex="0" onClick={_fill.bind(this, 'bl', 'T')}><MountTurret className='lg'/></li>
|
<li className="c hardpoint" tabIndex="0" onClick={_fill.bind(this, 'beamlaser', 'turret')}><MountTurret className='lg'/></li>
|
||||||
</ul>
|
</ul>
|
||||||
<div className='select-group cap'>{translate('mc')}</div>
|
<div className='select-group cap'>{translate('multicannon')}</div>
|
||||||
<ul>
|
<ul>
|
||||||
<li className="c" tabIndex="0" onClick={_fill.bind(this, 'mc', 'F')}><MountFixed className='lg'/></li>
|
<li className="c hardpoint" tabIndex="0" onClick={_fill.bind(this, 'multicannon', 'fixed')}><MountFixed className='lg'/></li>
|
||||||
<li className="c" tabIndex="0" onClick={_fill.bind(this, 'mc', 'G')}><MountGimballed className='lg'/></li>
|
<li className="c hardpoint" tabIndex="0" onClick={_fill.bind(this, 'multicannon', 'gimbal')}><MountGimballed className='lg'/></li>
|
||||||
<li className="c" tabIndex="0" onClick={_fill.bind(this, 'mc', 'T')}><MountTurret className='lg'/></li>
|
<li className="c hardpoint" tabIndex="0" onClick={_fill.bind(this, 'multicannon', 'turret')}><MountTurret className='lg'/></li>
|
||||||
</ul>
|
</ul>
|
||||||
<div className='select-group cap'>{translate('c')}</div>
|
<div className='select-group cap'>{translate('cannon')}</div>
|
||||||
<ul>
|
<ul>
|
||||||
<li className="c" tabIndex="0" onClick={_fill.bind(this, 'c', 'F')}><MountFixed className='lg'/></li>
|
<li className="c hardpoint" tabIndex="0" onClick={_fill.bind(this, 'cannon', 'fixed')}><MountFixed className='lg'/></li>
|
||||||
<li className="c" tabIndex="0" onClick={_fill.bind(this, 'c', 'G')}><MountGimballed className='lg'/></li>
|
<li className="c hardpoint" tabIndex="0" onClick={_fill.bind(this, 'cannon', 'gimbal')}><MountGimballed className='lg'/></li>
|
||||||
<li className="c" tabIndex="0" onClick={_fill.bind(this, 'c', 'T')}><MountTurret className='lg'/></li>
|
<li className="c hardpoint" tabIndex="0" onClick={_fill.bind(this, 'cannon', 'turret')}><MountTurret className='lg'/></li>
|
||||||
</ul>
|
</ul>
|
||||||
<div className='select-group cap'>{translate('fc')}</div>
|
<div className='select-group cap'>{translate('fragcannon')}</div>
|
||||||
<ul>
|
<ul>
|
||||||
<li className="c" tabIndex="0" onClick={_fill.bind(this, 'fc', 'F')}><MountFixed className='lg'/></li>
|
<li className="c hardpoint" tabIndex="0" onClick={_fill.bind(this, 'fragcannon', 'fixed')}><MountFixed className='lg'/></li>
|
||||||
<li className="c" tabIndex="0" onClick={_fill.bind(this, 'fc', 'G')}><MountGimballed className='lg'/></li>
|
<li className="c hardpoint" tabIndex="0" onClick={_fill.bind(this, 'fragcannon', 'gimbal')}><MountGimballed className='lg'/></li>
|
||||||
<li className="c" tabIndex="0" onClick={_fill.bind(this, 'fc', 'T')}><MountTurret className='lg'/></li>
|
<li className="c hardpoint" tabIndex="0" onClick={_fill.bind(this, 'fragcannon', 'turret')}><MountTurret className='lg'/></li>
|
||||||
</ul>
|
</ul>
|
||||||
<div className='select-group cap'>{translate('pa')}</div>
|
<div className='select-group cap'>{translate('plasmaacc')}</div>
|
||||||
<ul>
|
<ul>
|
||||||
<li className='lc' tabIndex="0" onClick={_fill.bind(this, 'pa', 'F')}>{translate('pa')}</li>
|
<li className='lc' tabIndex="0" onClick={_fill.bind(this, 'plasmaacc', 'fixed')}>{translate('pa')}</li>
|
||||||
</ul>
|
</ul>
|
||||||
<div className='select-group cap'>{translate('rg')}</div>
|
<div className='select-group cap'>{translate('railgun')}</div>
|
||||||
<ul>
|
<ul>
|
||||||
<li className='lc' tabIndex="0" onClick={_fill.bind(this, 'rg', 'F')}>{translate('rg')}</li>
|
<li className='lc' tabIndex="0" onClick={_fill.bind(this, 'railgun', 'fixed')}>{translate('rg')}</li>
|
||||||
</ul>
|
</ul>
|
||||||
<div className='select-group cap'>{translate('nl')}</div>
|
<div className='select-group cap'>{translate('minelauncher')}</div>
|
||||||
<ul>
|
<ul>
|
||||||
<li className='lc' tabIndex="0" onClick={_fill.bind(this, 'nl', 'F')}>{translate('nl')}</li>
|
<li className='lc' tabIndex="0" onClick={_fill.bind(this, 'minelauncher', 'fixed')}>{translate('nl')}</li>
|
||||||
</ul>
|
</ul>
|
||||||
<div className='select-group cap'>{translate('rfl')}</div>
|
<div className='select-group cap'>{translate('flaklauncher')}</div>
|
||||||
<ul>
|
<ul>
|
||||||
<li className="c" tabIndex="0" onClick={_fill.bind(this, 'rfl', 'F')}><MountFixed className='lg'/></li>
|
<li className="c hardpoint" tabIndex="0" onClick={_fill.bind(this, 'flaklauncher', 'fixed')}><MountFixed className='lg'/></li>
|
||||||
<li className="c" tabIndex="0" onClick={_fill.bind(this, 'rfl', 'T')}><MountTurret className='lg'/></li>
|
<li className="c hardpoint" tabIndex="0" onClick={_fill.bind(this, 'flaklauncher', 'turret')}><MountTurret className='lg'/></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>;
|
</div>;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,25 @@ import SlotSection from './SlotSection';
|
|||||||
import Slot from './Slot';
|
import Slot from './Slot';
|
||||||
import { stopCtxPropagation } from '../utils/UtilityFunctions';
|
import { stopCtxPropagation } from '../utils/UtilityFunctions';
|
||||||
import autoBind from 'auto-bind';
|
import autoBind from 'auto-bind';
|
||||||
|
import { TYPES } from 'ed-forge/lib/src/data/slots';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets all empty slots of a ship to a item of the given size.
|
||||||
|
* @param {Ship} ship Ship to set items for
|
||||||
|
* @param {boolean} fillAll True to also fill occupied
|
||||||
|
* @param {string} type Item type
|
||||||
|
* @param {string} rating Item rating
|
||||||
|
*/
|
||||||
|
function setAllEmpty(ship, fillAll, type, rating = '') {
|
||||||
|
ship.getModules(TYPES.ANY_INTERNAL, undefined, true).forEach((slot) => {
|
||||||
|
if (slot.isEmpty() || fillAll) {
|
||||||
|
try {
|
||||||
|
// Maybe the item does not exist. Simply catch this error.
|
||||||
|
slot.setItem(type, slot.getSize(), rating);
|
||||||
|
} catch (e) {}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Internal slot section
|
* Internal slot section
|
||||||
@@ -21,8 +40,7 @@ export default class InternalSlotSection extends SlotSection {
|
|||||||
* Empty all slots
|
* Empty all slots
|
||||||
*/
|
*/
|
||||||
_empty() {
|
_empty() {
|
||||||
// TODO:
|
this.props.ship.getModules(TYPES.ANY_INTERNAL).forEach((slot) => slot.reset());
|
||||||
// this.props.ship.emptyInternal();
|
|
||||||
this._close();
|
this._close();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -31,13 +49,8 @@ export default class InternalSlotSection extends SlotSection {
|
|||||||
* @param {SyntheticEvent} event Event
|
* @param {SyntheticEvent} event Event
|
||||||
*/
|
*/
|
||||||
_fillWithCargo(event) {
|
_fillWithCargo(event) {
|
||||||
let clobber = event.getModifierState('Alt');
|
const fillAll = event.getModifierState('Alt');
|
||||||
let ship = this.props.ship;
|
setAllEmpty(this.props.ship, fillAll, 'cargorack');
|
||||||
ship.internal.forEach((slot) => {
|
|
||||||
if ((clobber || !slot.m) && canMount(ship, slot, 'cr')) {
|
|
||||||
ship.use(slot, ModuleUtils.findInternal('cr', slot.maxClass, 'E'));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
this._close();
|
this._close();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -46,13 +59,8 @@ export default class InternalSlotSection extends SlotSection {
|
|||||||
* @param {SyntheticEvent} event Event
|
* @param {SyntheticEvent} event Event
|
||||||
*/
|
*/
|
||||||
_fillWithFuelTanks(event) {
|
_fillWithFuelTanks(event) {
|
||||||
let clobber = event.getModifierState('Alt');
|
const fillAll = event.getModifierState('Alt');
|
||||||
let ship = this.props.ship;
|
setAllEmpty(this.props.ship, fillAll, 'fueltank', '3');
|
||||||
ship.internal.forEach((slot) => {
|
|
||||||
if ((clobber || !slot.m) && canMount(ship, slot, 'ft')) {
|
|
||||||
ship.use(slot, ModuleUtils.findInternal('ft', slot.maxClass, 'C'));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
this._close();
|
this._close();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -61,13 +69,8 @@ export default class InternalSlotSection extends SlotSection {
|
|||||||
* @param {SyntheticEvent} event Event
|
* @param {SyntheticEvent} event Event
|
||||||
*/
|
*/
|
||||||
_fillWithLuxuryCabins(event) {
|
_fillWithLuxuryCabins(event) {
|
||||||
let clobber = event.getModifierState('Alt');
|
const fillAll = event.getModifierState('Alt');
|
||||||
let ship = this.props.ship;
|
setAllEmpty(this.props.ship, fillAll, 'passengercabins', '4');
|
||||||
ship.internal.forEach((slot) => {
|
|
||||||
if ((clobber || !slot.m) && canMount(ship, slot, 'pcq')) {
|
|
||||||
ship.use(slot, ModuleUtils.findInternal('pcq', Math.min(slot.maxClass, 6), 'B')); // Passenger cabins top out at 6
|
|
||||||
}
|
|
||||||
});
|
|
||||||
this._close();
|
this._close();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -76,13 +79,8 @@ export default class InternalSlotSection extends SlotSection {
|
|||||||
* @param {SyntheticEvent} event Event
|
* @param {SyntheticEvent} event Event
|
||||||
*/
|
*/
|
||||||
_fillWithFirstClassCabins(event) {
|
_fillWithFirstClassCabins(event) {
|
||||||
let clobber = event.getModifierState('Alt');
|
const fillAll = event.getModifierState('Alt');
|
||||||
let ship = this.props.ship;
|
setAllEmpty(this.props.ship, fillAll, 'passengercabins', '3');
|
||||||
ship.internal.forEach((slot) => {
|
|
||||||
if ((clobber || !slot.m) && canMount(ship, slot, 'pcm')) {
|
|
||||||
ship.use(slot, ModuleUtils.findInternal('pcm', Math.min(slot.maxClass, 6), 'C')); // Passenger cabins top out at 6
|
|
||||||
}
|
|
||||||
});
|
|
||||||
this._close();
|
this._close();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -91,13 +89,8 @@ export default class InternalSlotSection extends SlotSection {
|
|||||||
* @param {SyntheticEvent} event Event
|
* @param {SyntheticEvent} event Event
|
||||||
*/
|
*/
|
||||||
_fillWithBusinessClassCabins(event) {
|
_fillWithBusinessClassCabins(event) {
|
||||||
let clobber = event.getModifierState('Alt');
|
const fillAll = event.getModifierState('Alt');
|
||||||
let ship = this.props.ship;
|
setAllEmpty(this.props.ship, fillAll, 'passengercabins', '2');
|
||||||
ship.internal.forEach((slot) => {
|
|
||||||
if ((clobber || !slot.m) && canMount(ship, slot, 'pci')) {
|
|
||||||
ship.use(slot, ModuleUtils.findInternal('pci', Math.min(slot.maxClass, 6), 'D')); // Passenger cabins top out at 6
|
|
||||||
}
|
|
||||||
});
|
|
||||||
this._close();
|
this._close();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -106,13 +99,8 @@ export default class InternalSlotSection extends SlotSection {
|
|||||||
* @param {SyntheticEvent} event Event
|
* @param {SyntheticEvent} event Event
|
||||||
*/
|
*/
|
||||||
_fillWithEconomyClassCabins(event) {
|
_fillWithEconomyClassCabins(event) {
|
||||||
let clobber = event.getModifierState('Alt');
|
const fillAll = event.getModifierState('Alt');
|
||||||
let ship = this.props.ship;
|
setAllEmpty(this.props.ship, fillAll, 'passengercabins', '1');
|
||||||
ship.internal.forEach((slot) => {
|
|
||||||
if ((clobber || !slot.m) && canMount(ship, slot, 'pce')) {
|
|
||||||
ship.use(slot, ModuleUtils.findInternal('pce', Math.min(slot.maxClass, 6), 'E')); // Passenger cabins top out at 6
|
|
||||||
}
|
|
||||||
});
|
|
||||||
this._close();
|
this._close();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -121,16 +109,8 @@ export default class InternalSlotSection extends SlotSection {
|
|||||||
* @param {SyntheticEvent} event Event
|
* @param {SyntheticEvent} event Event
|
||||||
*/
|
*/
|
||||||
_fillWithCells(event) {
|
_fillWithCells(event) {
|
||||||
let clobber = event.getModifierState('Alt');
|
const fillAll = event.getModifierState('Alt');
|
||||||
let ship = this.props.ship;
|
setAllEmpty(this.props.ship, fillAll, 'scb', '5');
|
||||||
let chargeCap = 0; // Capacity of single activation
|
|
||||||
ship.internal.forEach(function(slot) {
|
|
||||||
if ((clobber && !(slot.m && ModuleUtils.isShieldGenerator(slot.m.grp)) || !slot.m) && canMount(ship, slot, 'scb')) {
|
|
||||||
ship.use(slot, ModuleUtils.findInternal('scb', slot.maxClass, 'A'));
|
|
||||||
ship.setSlotEnabled(slot, chargeCap <= ship.shieldStrength); // Don't waste cell capacity on overcharge
|
|
||||||
chargeCap += slot.m.recharge;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
this._close();
|
this._close();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -139,13 +119,8 @@ export default class InternalSlotSection extends SlotSection {
|
|||||||
* @param {SyntheticEvent} event Event
|
* @param {SyntheticEvent} event Event
|
||||||
*/
|
*/
|
||||||
_fillWithArmor(event) {
|
_fillWithArmor(event) {
|
||||||
let clobber = event.getModifierState('Alt');
|
const fillAll = event.getModifierState('Alt');
|
||||||
let ship = this.props.ship;
|
setAllEmpty(this.props.ship, fillAll, 'hrp', '2');
|
||||||
ship.internal.forEach((slot) => {
|
|
||||||
if ((clobber || !slot.m) && canMount(ship, slot, 'hr')) {
|
|
||||||
ship.use(slot, ModuleUtils.findInternal('hr', Math.min(slot.maxClass, 5), 'D')); // Hull reinforcements top out at 5D
|
|
||||||
}
|
|
||||||
});
|
|
||||||
this._close();
|
this._close();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -154,23 +129,11 @@ export default class InternalSlotSection extends SlotSection {
|
|||||||
* @param {SyntheticEvent} event Event
|
* @param {SyntheticEvent} event Event
|
||||||
*/
|
*/
|
||||||
_fillWithModuleReinforcementPackages(event) {
|
_fillWithModuleReinforcementPackages(event) {
|
||||||
let clobber = event.getModifierState('Alt');
|
const fillAll = event.getModifierState('Alt');
|
||||||
let ship = this.props.ship;
|
setAllEmpty(this.props.ship, fillAll, 'mrp', '2');
|
||||||
ship.internal.forEach((slot) => {
|
|
||||||
if ((clobber || !slot.m) && canMount(ship, slot, 'mrp')) {
|
|
||||||
ship.use(slot, ModuleUtils.findInternal('mrp', Math.min(slot.maxClass, 5), 'D')); // Module reinforcements top out at 5D
|
|
||||||
}
|
|
||||||
});
|
|
||||||
this._close();
|
this._close();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Empty all on section header right click
|
|
||||||
*/
|
|
||||||
_contextMenu() {
|
|
||||||
this._empty();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generate the slot React Components
|
* Generate the slot React Components
|
||||||
* @return {Array} Array of Slots
|
* @return {Array} Array of Slots
|
||||||
@@ -217,7 +180,7 @@ export default class InternalSlotSection extends SlotSection {
|
|||||||
<li className='lc' tabIndex='0' onClick={this._fillWithEconomyClassCabins}>{translate('pce')}</li>
|
<li className='lc' tabIndex='0' onClick={this._fillWithEconomyClassCabins}>{translate('pce')}</li>
|
||||||
<li className='lc' tabIndex='0' onClick={this._fillWithBusinessClassCabins}>{translate('pci')}</li>
|
<li className='lc' tabIndex='0' onClick={this._fillWithBusinessClassCabins}>{translate('pci')}</li>
|
||||||
<li className='lc' tabIndex='0' onClick={this._fillWithFirstClassCabins} onKeyDown={ship.luxuryCabins ? '' : this._keyDown}>{translate('pcm')}</li>
|
<li className='lc' tabIndex='0' onClick={this._fillWithFirstClassCabins} onKeyDown={ship.luxuryCabins ? '' : this._keyDown}>{translate('pcm')}</li>
|
||||||
{ ship.luxuryCabins ? <li className='lc' tabIndex='0' onClick={this._fillWithLuxuryCabins}>{translate('pcq')}</li> : ''}
|
{ ship.readMeta('luxuryCabins') ? <li className='lc' tabIndex='0' onClick={this._fillWithLuxuryCabins}>{translate('pcq')}</li> : ''}
|
||||||
<li className='optional-hide' style={{ textAlign: 'center', marginTop: '1em' }}>{translate('PHRASE_ALT_ALL')}</li>
|
<li className='optional-hide' style={{ textAlign: 'center', marginTop: '1em' }}>{translate('PHRASE_ALT_ALL')}</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>;
|
</div>;
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import cn from 'classnames';
|
|
||||||
import SlotSection from './SlotSection';
|
import SlotSection from './SlotSection';
|
||||||
import Slot from './Slot';
|
import Slot from './Slot';
|
||||||
import autoBind from 'auto-bind';
|
import autoBind from 'auto-bind';
|
||||||
import { stopCtxPropagation, moduleGet } from '../utils/UtilityFunctions';
|
import { stopCtxPropagation, moduleGet } from '../utils/UtilityFunctions';
|
||||||
import { ShipProps, Module } from 'ed-forge';
|
import { ShipProps, Module } from 'ed-forge';
|
||||||
|
import { getModuleInfo } from 'ed-forge/lib/src/data/items';
|
||||||
const { CONSUMED_RETR, LADEN_MASS } = ShipProps;
|
const { CONSUMED_RETR, LADEN_MASS } = ShipProps;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -22,65 +22,35 @@ export default class StandardSlotSection extends SlotSection {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Use the lightest/optimal available standard modules
|
* Resets all modules of the ship
|
||||||
*/
|
*/
|
||||||
_optimizeStandard() {
|
_emptyAll() {
|
||||||
this.props.ship.useLightestStandard();
|
this.props.ship.getModules().forEach((slot) => slot.reset());
|
||||||
this._close();
|
this._close();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fill all standard slots with the specificed rating (using max class)
|
* Sets all modules to a specific rating
|
||||||
* @param {Boolean} shielded True if shield generator should be included
|
* @param {string} rating Module rating to set
|
||||||
* @param {integer} bulkheadIndex Bulkhead to use see Constants.BulkheadNames
|
* @param {string} fsdPPException Custom rating for FSD
|
||||||
*/
|
*/
|
||||||
_multiPurpose(shielded, bulkheadIndex) {
|
_nRated(rating, fsdPPException) {
|
||||||
ShipRoles.multiPurpose(this.props.ship, shielded, bulkheadIndex);
|
const { ship } = this.props;
|
||||||
|
const pp = ship.getPowerPlant();
|
||||||
|
pp.setItem('powerplant', pp.getSize(), fsdPPException || rating);
|
||||||
|
const eng = ship.getThrusters();
|
||||||
|
eng.setItem('thrusters', eng.getSize(), rating);
|
||||||
|
const fsd = ship.getFSD();
|
||||||
|
fsd.setItem('fsd', fsd.getSize(), fsdPPException || rating);
|
||||||
|
const ls = ship.getLifeSupport();
|
||||||
|
ls.setItem('lifesupport', ls.getSize(), rating);
|
||||||
|
const pd = ship.getPowerDistributor();
|
||||||
|
pd.setItem('powerdistributor', pd.getSize(), rating);
|
||||||
|
const sen = ship.getSensors();
|
||||||
|
sen.setItem('sensors', sen.getSize(), rating);
|
||||||
this._close();
|
this._close();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Trader Build
|
|
||||||
* @param {Boolean} shielded True if shield generator should be included
|
|
||||||
*/
|
|
||||||
_optimizeCargo(shielded) {
|
|
||||||
ShipRoles.trader(this.props.ship, shielded);
|
|
||||||
this._close();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Miner Build
|
|
||||||
* @param {Boolean} shielded True if shield generator should be included
|
|
||||||
*/
|
|
||||||
_optimizeMiner(shielded) {
|
|
||||||
ShipRoles.miner(this.props.ship, shielded);
|
|
||||||
this._close();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Explorer role
|
|
||||||
* @param {Boolean} planetary True if Planetary Vehicle Hangar (PVH) should be included
|
|
||||||
*/
|
|
||||||
_optimizeExplorer(planetary) {
|
|
||||||
ShipRoles.explorer(this.props.ship, planetary);
|
|
||||||
this._close();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Racer role
|
|
||||||
*/
|
|
||||||
_optimizeRacer() {
|
|
||||||
ShipRoles.racer(this.props.ship);
|
|
||||||
this._close();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* On right click optimize the standard modules
|
|
||||||
*/
|
|
||||||
_contextMenu() {
|
|
||||||
this._optimizeStandard();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a new slot for a given module.
|
* Creates a new slot for a given module.
|
||||||
* @param {Module} m Module to create the slot for
|
* @param {Module} m Module to create the slot for
|
||||||
@@ -134,17 +104,13 @@ export default class StandardSlotSection extends SlotSection {
|
|||||||
const { translate } = this.context.language;
|
const { translate } = this.context.language;
|
||||||
return <div className='select' onClick={(e) => e.stopPropagation()} onContextMenu={stopCtxPropagation}>
|
return <div className='select' onClick={(e) => e.stopPropagation()} onContextMenu={stopCtxPropagation}>
|
||||||
<ul>
|
<ul>
|
||||||
<li className='lc' tabIndex="0" onClick={this._optimizeStandard}>{translate('Maximize Jump Range')}</li>
|
<li className='lc' tabIndex="0" onClick={this._emptyAll}>{translate('empty all slots')}</li>
|
||||||
</ul>
|
</ul>
|
||||||
<div className='select-group cap'>{translate('roles')}</div>
|
<div className='select-group cap'>{translate('core')}</div>
|
||||||
<ul>
|
<ul>
|
||||||
<li className='lc' tabIndex="0" onClick={this._multiPurpose.bind(this, false, 0)}>{translate('Multi-purpose')}</li>
|
<li className='lc' tabIndex="0" onClick={this._nRated.bind(this, '5', undefined)}>{translate('A-rated')}</li>
|
||||||
<li className='lc' tabIndex="0" onClick={this._multiPurpose.bind(this, true, 2)}>{translate('Combat')}</li>
|
<li className='lc' tabIndex="0" onClick={this._nRated.bind(this, '2', undefined)}>{translate('D-rated')}</li>
|
||||||
<li className='lc' tabIndex="0" onClick={this._optimizeCargo.bind(this, true)}>{translate('Trader')}</li>
|
<li className='lc' tabIndex="0" onClick={this._nRated.bind(this, '2', '5')}>{translate('D-rated + A-rated FSD/PP')}</li>
|
||||||
<li className='lc' tabIndex="0" onClick={this._optimizeExplorer.bind(this, false)}>{translate('Explorer')}</li>
|
|
||||||
<li className='lc' tabIndex="0" onClick={this._optimizeExplorer.bind(this, true)}>{translate('Planetary Explorer')}</li>
|
|
||||||
<li className='lc' tabIndex="0" onClick={this._optimizeMiner.bind(this, true)}>{translate('Miner')}</li>
|
|
||||||
<li className='lc' tabIndex="0" onClick={this._optimizeRacer.bind(this)}>{translate('Racer')}</li>
|
|
||||||
</ul>
|
</ul>
|
||||||
</div>;
|
</div>;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,31 +21,26 @@ export default class UtilitySlotSection extends SlotSection {
|
|||||||
* Empty all utility slots and close the menu
|
* Empty all utility slots and close the menu
|
||||||
*/
|
*/
|
||||||
_empty() {
|
_empty() {
|
||||||
this.props.ship.emptyUtility();
|
this.props.ship.getUtilities().forEach((slot) => slot.reset());
|
||||||
this.props.onChange();
|
|
||||||
this._close();
|
this._close();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Mount module in utility slot, replace all if Alt is held
|
* Mount module in utility slot, replace all if Alt is held
|
||||||
* @param {string} group Module Group name
|
* @param {string} type Module type
|
||||||
* @param {string} rating Module Rating
|
* @param {string} rating Module Rating
|
||||||
* @param {string} name Module name
|
|
||||||
* @param {Synthetic} event Event
|
* @param {Synthetic} event Event
|
||||||
*/
|
*/
|
||||||
_use(group, rating, name, event) {
|
_use(type, rating, event) {
|
||||||
this.props.ship.useUtility(group, rating, name, event.getModifierState('Alt'));
|
const fillAll = event.getModifierState('Alt');
|
||||||
this.props.onChange();
|
for (const slot of this.props.ship.getUtilities(undefined, true)) {
|
||||||
|
if (slot.isEmpty() || fillAll) {
|
||||||
|
slot.setItem(type, '', rating);
|
||||||
|
}
|
||||||
|
}
|
||||||
this._close();
|
this._close();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Empty all utility slots on right-click
|
|
||||||
*/
|
|
||||||
_contextMenu() {
|
|
||||||
this._empty();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create all HardpointSlots (React component) for the slots
|
* Create all HardpointSlots (React component) for the slots
|
||||||
* @return {Array} Array of HardpointSlots
|
* @return {Array} Array of HardpointSlots
|
||||||
@@ -58,8 +53,6 @@ export default class UtilitySlotSection extends SlotSection {
|
|||||||
for (let h of ship.getUtilities(undefined, true)) {
|
for (let h of ship.getUtilities(undefined, true)) {
|
||||||
slots.push(<Slot
|
slots.push(<Slot
|
||||||
key={h.object.Slot}
|
key={h.object.Slot}
|
||||||
maxClass={h.getSize()}
|
|
||||||
onChange={this.props.onChange}
|
|
||||||
currentMenu={currentMenu}
|
currentMenu={currentMenu}
|
||||||
drag={this._drag.bind(this, h)}
|
drag={this._drag.bind(this, h)}
|
||||||
dragOver={this._dragOverSlot.bind(this, h)}
|
dragOver={this._dragOverSlot.bind(this, h)}
|
||||||
@@ -91,23 +84,23 @@ export default class UtilitySlotSection extends SlotSection {
|
|||||||
</ul>
|
</ul>
|
||||||
<div className='select-group cap'>{translate('sb')}</div>
|
<div className='select-group cap'>{translate('sb')}</div>
|
||||||
<ul>
|
<ul>
|
||||||
<li className='c' tabIndex='0' onClick={_use.bind(this, 'sb', 'A', null)}>A</li>
|
<li className='c' tabIndex='0' onClick={_use.bind(this, 'shieldbooster', '5')}>A</li>
|
||||||
<li className='c' tabIndex='0' onClick={_use.bind(this, 'sb', 'B', null)}>B</li>
|
<li className='c' tabIndex='0' onClick={_use.bind(this, 'shieldbooster', '4')}>B</li>
|
||||||
<li className='c' tabIndex='0' onClick={_use.bind(this, 'sb', 'C', null)}>C</li>
|
<li className='c' tabIndex='0' onClick={_use.bind(this, 'shieldbooster', '3')}>C</li>
|
||||||
<li className='c' tabIndex='0' onClick={_use.bind(this, 'sb', 'D', null)}>D</li>
|
<li className='c' tabIndex='0' onClick={_use.bind(this, 'shieldbooster', '2')}>D</li>
|
||||||
<li className='c' tabIndex='0' onClick={_use.bind(this, 'sb', 'E', null)}>E</li>
|
<li className='c' tabIndex='0' onClick={_use.bind(this, 'shieldbooster', '1')}>E</li>
|
||||||
</ul>
|
</ul>
|
||||||
<div className='select-group cap'>{translate('hs')}</div>
|
<div className='select-group cap'>{translate('hs')}</div>
|
||||||
<ul>
|
<ul>
|
||||||
<li className='lc' tabIndex='0' onClick={_use.bind(this, 'hs', null, 'Heat Sink Launcher')}>{translate('Heat Sink Launcher')}</li>
|
<li className='lc' tabIndex='0' onClick={_use.bind(this, 'heatsinklauncher', '')}>{translate('Heat Sink Launcher')}</li>
|
||||||
</ul>
|
</ul>
|
||||||
<div className='select-group cap'>{translate('ch')}</div>
|
<div className='select-group cap'>{translate('ch')}</div>
|
||||||
<ul>
|
<ul>
|
||||||
<li className='lc' tabIndex='0' onClick={_use.bind(this, 'ch', null, 'Chaff Launcher')}>{translate('Chaff Launcher')}</li>
|
<li className='lc' tabIndex='0' onClick={_use.bind(this, 'chafflauncher', '')}>{translate('Chaff Launcher')}</li>
|
||||||
</ul>
|
</ul>
|
||||||
<div className='select-group cap'>{translate('po')}</div>
|
<div className='select-group cap'>{translate('po')}</div>
|
||||||
<ul>
|
<ul>
|
||||||
<li className='lc' tabIndex='0' onClick={_use.bind(this, 'po', null, 'Point Defence')}>{translate('Point Defence')}</li>
|
<li className='lc' tabIndex='0' onClick={_use.bind(this, 'pointdefence', '')}>{translate('Point Defence')}</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>;
|
</div>;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user