From c61c17d4656d231a75d67d22b5ee700dfd5edd50 Mon Sep 17 00:00:00 2001 From: Cmdr McDonald Date: Fri, 13 Jan 2017 10:27:13 +0000 Subject: [PATCH 1/5] Add framework for help --- src/app/components/Header.jsx | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/app/components/Header.jsx b/src/app/components/Header.jsx index 8b679a6b..40a158c1 100644 --- a/src/app/components/Header.jsx +++ b/src/app/components/Header.jsx @@ -74,6 +74,7 @@ export default class Header extends TranslatedComponent { this._openBuilds = this._openMenu.bind(this, 'b'); this._openComp = this._openMenu.bind(this, 'comp'); this._openSettings = this._openMenu.bind(this, 'settings'); + this._openHelp = this._openMenu.bind(this, 'help'); this.languageOptions = []; this.insuranceOptions = []; this.state = { @@ -359,6 +360,23 @@ export default class Header extends TranslatedComponent { ); } + /** + * Generate the help menu + * @return {React.Component} Menu + */ + _getHelpMenu() { + let translate = this.context.language.translate; + + return ( +
e.stopPropagation() } style={{ whiteSpace: 'nowrap' }}> +
{translate('introduction')}
+
{translate('importing your build')}
+
{translate('engineers')}
+
{translate('tricks and tips')}
+
+ ); + } + /** * Generate the settings menu * @return {React.Component} Menu @@ -521,6 +539,12 @@ export default class Header extends TranslatedComponent { {openedMenu == 'settings' ? this._getSettingsMenu() : null} +
+
+ {translate('help')} +
+ {openedMenu == 'help' ? this._getHelpMenu() : null} +
); } From 5d87a6cd56d0b4e74088b819ab8603f89fd90e1c Mon Sep 17 00:00:00 2001 From: Cmdr McDonald Date: Fri, 20 Jan 2017 11:56:32 +0000 Subject: [PATCH 2/5] Add help system and initial help file --- ChangeLog.md | 1 + src/app/Coriolis.jsx | 18 ++++++- src/app/components/Header.jsx | 39 +++++++--------- src/app/components/ModalHelp.jsx | 47 +++++++++++++++++++ src/app/components/SvgIcons.jsx | 19 ++++++++ src/app/i18n/en.js | 80 ++++++++++++++++++++++++++++++++ src/app/pages/OutfittingPage.jsx | 22 ++++++++- 7 files changed, 201 insertions(+), 25 deletions(-) create mode 100644 src/app/components/ModalHelp.jsx diff --git a/ChangeLog.md b/ChangeLog.md index bb6bc4c2..f9ea1149 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -1,6 +1,7 @@ #2.2.10 * Fix detailed export of module reinforcement packages * Use damagedist for exact breakdown of weapons that have more than one type of damage + * Add help system and initial help file #2.2.9 * Use SSL-enabled server for shortlinks diff --git a/src/app/Coriolis.jsx b/src/app/Coriolis.jsx index 0e796d23..49d76485 100644 --- a/src/app/Coriolis.jsx +++ b/src/app/Coriolis.jsx @@ -6,7 +6,10 @@ import Persist from './stores/Persist'; import Header from './components/Header'; import Tooltip from './components/Tooltip'; +import ModalExport from './components/ModalExport'; +import ModalHelp from './components/ModalHelp'; import ModalImport from './components/ModalImport'; +import ModalPermalink from './components/ModalPermalink'; import * as CompanionApiUtils from './utils/CompanionApiUtils'; import { outfitURL } from './utils/UrlGenerators'; @@ -159,14 +162,25 @@ export default class Coriolis extends React.Component { this._hideModal(); this._closeMenu(); break; + case 72: // 'h' + if (e.ctrlKey || e.metaKey) { // CTRL/CMD + h + e.preventDefault(); + this._showModal(); + } + break; case 73: // 'i' if (e.ctrlKey || e.metaKey) { // CTRL/CMD + i e.preventDefault(); this._showModal(); } break; - case 101010: // 's' - if (e.ctrlKey || e.metaKey) { // CTRL/CMD + i + case 76: // 'l' + if (e.ctrlKey || e.metaKey) { // CTRL/CMD + l + e.preventDefault(); + this._showModal(); + } + case 83: // 's' + if (e.ctrlKey || e.metaKey) { // CTRL/CMD + s e.preventDefault(); this.emitter.emit('command', 'save'); } diff --git a/src/app/components/Header.jsx b/src/app/components/Header.jsx index 40a158c1..a3140649 100644 --- a/src/app/components/Header.jsx +++ b/src/app/components/Header.jsx @@ -5,12 +5,13 @@ import { Insurance } from '../shipyard/Constants'; import Link from './Link'; import ActiveLink from './ActiveLink'; import cn from 'classnames'; -import { Cogs, CoriolisLogo, Hammer, Rocket, StatsBars } from './SvgIcons'; +import { Cogs, CoriolisLogo, Hammer, Help, Rocket, StatsBars } from './SvgIcons'; import { Ships } from 'coriolis-data/dist'; import Persist from '../stores/Persist'; import { toDetailedExport } from '../shipyard/Serializer'; import ModalDeleteAll from './ModalDeleteAll'; import ModalExport from './ModalExport'; +import ModalHelp from './ModalHelp'; import ModalImport from './ModalImport'; import Slider from './Slider'; import { outfitURL } from '../utils/UrlGenerators'; @@ -74,7 +75,7 @@ export default class Header extends TranslatedComponent { this._openBuilds = this._openMenu.bind(this, 'b'); this._openComp = this._openMenu.bind(this, 'comp'); this._openSettings = this._openMenu.bind(this, 'settings'); - this._openHelp = this._openMenu.bind(this, 'help'); + this._showHelp = this._showHelp.bind(this); this.languageOptions = []; this.insuranceOptions = []; this.state = { @@ -249,6 +250,17 @@ export default class Header extends TranslatedComponent { />); } + /** + * Show help modal + * @param {SyntheticEvent} e Event + */ + _showHelp(e) { + let translate = this.context.language.translate; + e.preventDefault(); + + this.context.showModal(); + } + /** * Show import modal * @param {SyntheticEvent} e Event @@ -360,23 +372,6 @@ export default class Header extends TranslatedComponent { ); } - /** - * Generate the help menu - * @return {React.Component} Menu - */ - _getHelpMenu() { - let translate = this.context.language.translate; - - return ( -
e.stopPropagation() } style={{ whiteSpace: 'nowrap' }}> -
{translate('introduction')}
-
{translate('importing your build')}
-
{translate('engineers')}
-
{translate('tricks and tips')}
-
- ); - } - /** * Generate the settings menu * @return {React.Component} Menu @@ -539,11 +534,11 @@ export default class Header extends TranslatedComponent { {openedMenu == 'settings' ? this._getSettingsMenu() : null} +
-
- {translate('help')} +
+
- {openedMenu == 'help' ? this._getHelpMenu() : null}
); diff --git a/src/app/components/ModalHelp.jsx b/src/app/components/ModalHelp.jsx new file mode 100644 index 00000000..3783f943 --- /dev/null +++ b/src/app/components/ModalHelp.jsx @@ -0,0 +1,47 @@ +import React from 'react'; +import { findDOMNode } from 'react-dom'; +import TranslatedComponent from './TranslatedComponent'; + +/** + * Help Modal + */ +export default class ModalHelp extends TranslatedComponent { + + static propTypes = { + title: React.PropTypes.string + }; + + /** + * Constructor + * @param {Object} props React Component properties + */ + constructor(props) { + super(props); + } + + /** + * Focus on textarea and select all + */ + componentDidMount() { + const e = findDOMNode(this.refs.exportField); + if (e) { + e.focus(); + e.select(); + } + } + + /** + * Render the modal + * @return {React.Component} Modal Content + */ + render() { + const translate = this.context.language.translate; + const text = translate('HELP_TEXT'); + + return
e.stopPropagation() }> +

{translate(this.props.title || 'Help')}

+
+ +
; + } +} diff --git a/src/app/components/SvgIcons.jsx b/src/app/components/SvgIcons.jsx index 6093b050..41db111a 100644 --- a/src/app/components/SvgIcons.jsx +++ b/src/app/components/SvgIcons.jsx @@ -534,6 +534,25 @@ export class Rocket extends SvgIcon { } } +/** + * Help + */ +export class Help extends SvgIcon { + /** + * Overriden view box + * @return {String} view box + */ + viewBox() { return '0 0 200 200'; } + + /** + * Generate the SVG + * @return {React.Component} SVG Contents + */ + svg() { + return ; + } +} + /** * ListModifications (engineers) */ diff --git a/src/app/i18n/en.js b/src/app/i18n/en.js index 091cb560..57150fd9 100644 --- a/src/app/i18n/en.js +++ b/src/app/i18n/en.js @@ -170,4 +170,84 @@ export const terms = { thermres: 'Thermal resistance', wepcap: 'Weapons capacity', weprate: 'Weapons recharge rate', + + // Help text + HELP_TEXT: ` +

Introduction

+Coriolis is a ship builder for Elite: Dangerous. This help file provides you with the information you need to use Coriolis. + +

Importing Your Ship Into Coriolis

+Often, you will want to start with your existing ship in Coriolis and see how particular changes might affect it, for example upgrading your FSD. There are a number of tools that can be used to import your ship without you having to create it manually. This has the added benefit of copying over any engineering modifications that have taken place as well.

+ +

Importing Your Ship From EDDI

+To import your ship from EDDI first ensure that your connection to the Frontier servers' companion API is working. To do this check the 'Companion App' tab where you should see "Your connection to the companion app is operational". If not then follow the instructions in the companion app tab in EDDI to connect to the Frontier servers.

+ +Once you have a working companion API connection go to the 'Shipyard' tab. At the right-hand side of each ship is an 'Export to Coriolis' button that will open your default web browser in Coriolis with the ship's build.

+ +Note that Internet Explorer and Edge might not import correctly, due to their internal restrictions on URL length. If you find that this is the case then please change your default browser to Chrome.

+ +

Importing Your Ship From EDMC

+ +

Understanding And Using The Outfitting Panels

+The outfitting page is where you will spend most of your time, and contains the information for your ship. Information on each of the panels is provided below.

+ +

Key Values

+Along the top of the screen are some of the key values for your build. This is a handy reference for the values, but more information is provided for the values in the further panels.

+ +Here, along with most places in Coriolis, acronyms will have tooltips explaining what they mean. Hover over the acronym to obtain more detail, or look in the glossary at the end of this help.

+ +

Modules

+The next set of panels laid out horizontally across the screen contain the modules you have put in your build. From left to right these are the core modules, the internal modules, the hardpoints and the utility mounts. These represent the available slots in your ship and cannot be altered. Each slot has a class, or size, and in general any module up to a given size can fit in a given slot (exceptions being bulkheads, life support and sensors in core modules and restricted internal slots, which can only take a subset of module depending on their restrictions).

+ +To add a module to a slot left-click on the slot and select the required module. Only the modules capable of fitting in the selected slot will be shown.

+ +To remove a module from a slot right-click on the module.

+ +To move a module from one slot to another drag it. If you instead want to copy the module drag it whilst holding down the 'Alt' key.

+ +

Power Management

+The power management panel provides information about power usage and priorities. It allows you to enable and disable individual modules, as well as set power priorities for each module. + +

Costs

+ +By default Coriolis uses the standard costs, however discounts for your ship, modules and insurance can be altered in the 'Settings' at the top-right of the page. + +

Offence Summary

+ +

Defence Summary

+ +

Movement Summary

+ +

Jump Range

+ +

Damage Dealt

+ +

Damage Received

+ +

Keyboard Shortcuts

+
+
Ctrl-e
open export dialogue (outfitting page only)
+
Ctrl-h
open help dialogue
+
Ctrl-i
open import dialogue
+
Ctrl-l
open shortlink dialogue
+
Esc
close any open dialogue
+
+

Glossary

+
+
Absolute damage
A type of damage, without any protection. Absolute damage is always dealt at 100% regardless of if the damage is to shields, hull or modules, and irrespective of resistances
+
DPS
Damage per second; the amount of damage that a weapon or a ship can deal per second to a target under optimum conditions
+
EPS
Energy per second; the amount of energy that a weapon or a ship drains from the weapons capacitor per second when firing
+
HPS
Heat per second; the amount of heat that a weapon or a ship generates per second when firing
+
Effectivness
A comparison of the maximum DPS of a given weapon to the actual DPS of the given weapon in a specific situation. DPS can be reduced by range to the target, the target's hull and shield resistances, and the target's hardness
+
Explosive damage
A type of damage, protected against by explosive resistance
+
Hardness
The inherent resistance to damage of a ship's hull. Hardness is defined on a per-ship basis and there is currently nothing that can be done to change it. Hardness of a ship's hull is compared to the piercing of weapons: if piercing is higher than hardness the weapon does 100% damage, otherwise it does a fraction of its damage calculated as piercing/hardness
+
Falloff
The distance at which a weapons starts to do less damage than its stated DPS
+
Kinetic damage
A type of damage, protected against by kinetic resistance
+
SDPS
Sustained damage per second; the amount of damage that a weapon or a ship can deal per second to a target, taking in to account ammunition reload
+
SEPS
Sustained energy per second; the amount of energy that a weapon or a ship drains from the weapons capacitor per second when firing, taking in to account ammunition reload
+
SHPS
Sustained heat per second; the amount of heat that a weapon or a ship generates per second when firing, taking in to account ammunition reload
+
Thermal damage
A type of damage, protected against by thermal resistance
+
+ + `, }; diff --git a/src/app/pages/OutfittingPage.jsx b/src/app/pages/OutfittingPage.jsx index 1edadf1c..49af9ffa 100644 --- a/src/app/pages/OutfittingPage.jsx +++ b/src/app/pages/OutfittingPage.jsx @@ -52,6 +52,8 @@ export default class OutfittingPage extends Page { constructor(props, context) { super(props, context); this.state = this._initState(context); + this._keyDown = this._keyDown.bind(this); + this._exportBuild = this._exportBuild.bind(this); } /** @@ -181,7 +183,7 @@ export default class OutfittingPage extends Page { let translate = this.context.language.translate; let { buildName, ship } = this.state; this.context.showModal(); @@ -258,6 +260,7 @@ export default class OutfittingPage extends Page { */ componentWillMount() { this.resizeListener = this.context.onWindowResize(this._updateDimensions); + document.addEventListener('keydown', this._keyDown); } /** @@ -281,6 +284,23 @@ export default class OutfittingPage extends Page { this.context.showModal(); } + /** + * Handle Key Down + * @param {Event} e Keyboard Event + */ + _keyDown(e) { + // .keyCode will eventually be replaced with .key + switch (e.keyCode) { + case 69: // 'e' + if (e.ctrlKey || e.metaKey) { // CTRL/CMD + e + e.preventDefault(); + console.log('Export') + this._exportBuild(); + } + break; + } + } + /** * Render the Page * @return {React.Component} The page contents From 0d646c61935bbd3420e5d29e6fcc98bc8c8f72cd Mon Sep 17 00:00:00 2001 From: Cmdr McDonald Date: Fri, 13 Jan 2017 10:27:13 +0000 Subject: [PATCH 3/5] Add framework for help --- src/app/components/Header.jsx | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/app/components/Header.jsx b/src/app/components/Header.jsx index 8b679a6b..40a158c1 100644 --- a/src/app/components/Header.jsx +++ b/src/app/components/Header.jsx @@ -74,6 +74,7 @@ export default class Header extends TranslatedComponent { this._openBuilds = this._openMenu.bind(this, 'b'); this._openComp = this._openMenu.bind(this, 'comp'); this._openSettings = this._openMenu.bind(this, 'settings'); + this._openHelp = this._openMenu.bind(this, 'help'); this.languageOptions = []; this.insuranceOptions = []; this.state = { @@ -359,6 +360,23 @@ export default class Header extends TranslatedComponent { ); } + /** + * Generate the help menu + * @return {React.Component} Menu + */ + _getHelpMenu() { + let translate = this.context.language.translate; + + return ( +
e.stopPropagation() } style={{ whiteSpace: 'nowrap' }}> +
{translate('introduction')}
+
{translate('importing your build')}
+
{translate('engineers')}
+
{translate('tricks and tips')}
+
+ ); + } + /** * Generate the settings menu * @return {React.Component} Menu @@ -521,6 +539,12 @@ export default class Header extends TranslatedComponent {
{openedMenu == 'settings' ? this._getSettingsMenu() : null}
+
+
+ {translate('help')} +
+ {openedMenu == 'help' ? this._getHelpMenu() : null} +
); } From 92246302b9df198e1da228bdaa845627eb091c56 Mon Sep 17 00:00:00 2001 From: Cmdr McDonald Date: Fri, 20 Jan 2017 11:56:32 +0000 Subject: [PATCH 4/5] Add help system and initial help file --- ChangeLog.md | 3 ++ src/app/Coriolis.jsx | 18 ++++++- src/app/components/Header.jsx | 39 +++++++--------- src/app/components/ModalHelp.jsx | 47 +++++++++++++++++++ src/app/components/SvgIcons.jsx | 19 ++++++++ src/app/i18n/en.js | 80 ++++++++++++++++++++++++++++++++ src/app/pages/OutfittingPage.jsx | 22 ++++++++- 7 files changed, 203 insertions(+), 25 deletions(-) create mode 100644 src/app/components/ModalHelp.jsx diff --git a/ChangeLog.md b/ChangeLog.md index bc86add2..b617f0ba 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -1,3 +1,6 @@ +#2.2.11 + * Add help system and initial help file + #2.2.10 * Fix detailed export of module reinforcement packages * Use damagedist for exact breakdown of weapons that have more than one type of damage diff --git a/src/app/Coriolis.jsx b/src/app/Coriolis.jsx index 0e796d23..49d76485 100644 --- a/src/app/Coriolis.jsx +++ b/src/app/Coriolis.jsx @@ -6,7 +6,10 @@ import Persist from './stores/Persist'; import Header from './components/Header'; import Tooltip from './components/Tooltip'; +import ModalExport from './components/ModalExport'; +import ModalHelp from './components/ModalHelp'; import ModalImport from './components/ModalImport'; +import ModalPermalink from './components/ModalPermalink'; import * as CompanionApiUtils from './utils/CompanionApiUtils'; import { outfitURL } from './utils/UrlGenerators'; @@ -159,14 +162,25 @@ export default class Coriolis extends React.Component { this._hideModal(); this._closeMenu(); break; + case 72: // 'h' + if (e.ctrlKey || e.metaKey) { // CTRL/CMD + h + e.preventDefault(); + this._showModal(); + } + break; case 73: // 'i' if (e.ctrlKey || e.metaKey) { // CTRL/CMD + i e.preventDefault(); this._showModal(); } break; - case 101010: // 's' - if (e.ctrlKey || e.metaKey) { // CTRL/CMD + i + case 76: // 'l' + if (e.ctrlKey || e.metaKey) { // CTRL/CMD + l + e.preventDefault(); + this._showModal(); + } + case 83: // 's' + if (e.ctrlKey || e.metaKey) { // CTRL/CMD + s e.preventDefault(); this.emitter.emit('command', 'save'); } diff --git a/src/app/components/Header.jsx b/src/app/components/Header.jsx index 40a158c1..a3140649 100644 --- a/src/app/components/Header.jsx +++ b/src/app/components/Header.jsx @@ -5,12 +5,13 @@ import { Insurance } from '../shipyard/Constants'; import Link from './Link'; import ActiveLink from './ActiveLink'; import cn from 'classnames'; -import { Cogs, CoriolisLogo, Hammer, Rocket, StatsBars } from './SvgIcons'; +import { Cogs, CoriolisLogo, Hammer, Help, Rocket, StatsBars } from './SvgIcons'; import { Ships } from 'coriolis-data/dist'; import Persist from '../stores/Persist'; import { toDetailedExport } from '../shipyard/Serializer'; import ModalDeleteAll from './ModalDeleteAll'; import ModalExport from './ModalExport'; +import ModalHelp from './ModalHelp'; import ModalImport from './ModalImport'; import Slider from './Slider'; import { outfitURL } from '../utils/UrlGenerators'; @@ -74,7 +75,7 @@ export default class Header extends TranslatedComponent { this._openBuilds = this._openMenu.bind(this, 'b'); this._openComp = this._openMenu.bind(this, 'comp'); this._openSettings = this._openMenu.bind(this, 'settings'); - this._openHelp = this._openMenu.bind(this, 'help'); + this._showHelp = this._showHelp.bind(this); this.languageOptions = []; this.insuranceOptions = []; this.state = { @@ -249,6 +250,17 @@ export default class Header extends TranslatedComponent { />); } + /** + * Show help modal + * @param {SyntheticEvent} e Event + */ + _showHelp(e) { + let translate = this.context.language.translate; + e.preventDefault(); + + this.context.showModal(); + } + /** * Show import modal * @param {SyntheticEvent} e Event @@ -360,23 +372,6 @@ export default class Header extends TranslatedComponent { ); } - /** - * Generate the help menu - * @return {React.Component} Menu - */ - _getHelpMenu() { - let translate = this.context.language.translate; - - return ( -
e.stopPropagation() } style={{ whiteSpace: 'nowrap' }}> -
{translate('introduction')}
-
{translate('importing your build')}
-
{translate('engineers')}
-
{translate('tricks and tips')}
-
- ); - } - /** * Generate the settings menu * @return {React.Component} Menu @@ -539,11 +534,11 @@ export default class Header extends TranslatedComponent { {openedMenu == 'settings' ? this._getSettingsMenu() : null} +
-
- {translate('help')} +
+
- {openedMenu == 'help' ? this._getHelpMenu() : null}
); diff --git a/src/app/components/ModalHelp.jsx b/src/app/components/ModalHelp.jsx new file mode 100644 index 00000000..3783f943 --- /dev/null +++ b/src/app/components/ModalHelp.jsx @@ -0,0 +1,47 @@ +import React from 'react'; +import { findDOMNode } from 'react-dom'; +import TranslatedComponent from './TranslatedComponent'; + +/** + * Help Modal + */ +export default class ModalHelp extends TranslatedComponent { + + static propTypes = { + title: React.PropTypes.string + }; + + /** + * Constructor + * @param {Object} props React Component properties + */ + constructor(props) { + super(props); + } + + /** + * Focus on textarea and select all + */ + componentDidMount() { + const e = findDOMNode(this.refs.exportField); + if (e) { + e.focus(); + e.select(); + } + } + + /** + * Render the modal + * @return {React.Component} Modal Content + */ + render() { + const translate = this.context.language.translate; + const text = translate('HELP_TEXT'); + + return
e.stopPropagation() }> +

{translate(this.props.title || 'Help')}

+
+ +
; + } +} diff --git a/src/app/components/SvgIcons.jsx b/src/app/components/SvgIcons.jsx index 6093b050..41db111a 100644 --- a/src/app/components/SvgIcons.jsx +++ b/src/app/components/SvgIcons.jsx @@ -534,6 +534,25 @@ export class Rocket extends SvgIcon { } } +/** + * Help + */ +export class Help extends SvgIcon { + /** + * Overriden view box + * @return {String} view box + */ + viewBox() { return '0 0 200 200'; } + + /** + * Generate the SVG + * @return {React.Component} SVG Contents + */ + svg() { + return ; + } +} + /** * ListModifications (engineers) */ diff --git a/src/app/i18n/en.js b/src/app/i18n/en.js index 03c96387..e258ace0 100644 --- a/src/app/i18n/en.js +++ b/src/app/i18n/en.js @@ -182,4 +182,84 @@ export const terms = { thermres: 'Thermal resistance', wepcap: 'Weapons capacity', weprate: 'Weapons recharge rate', + + // Help text + HELP_TEXT: ` +

Introduction

+Coriolis is a ship builder for Elite: Dangerous. This help file provides you with the information you need to use Coriolis. + +

Importing Your Ship Into Coriolis

+Often, you will want to start with your existing ship in Coriolis and see how particular changes might affect it, for example upgrading your FSD. There are a number of tools that can be used to import your ship without you having to create it manually. This has the added benefit of copying over any engineering modifications that have taken place as well.

+ +

Importing Your Ship From EDDI

+To import your ship from EDDI first ensure that your connection to the Frontier servers' companion API is working. To do this check the 'Companion App' tab where you should see "Your connection to the companion app is operational". If not then follow the instructions in the companion app tab in EDDI to connect to the Frontier servers.

+ +Once you have a working companion API connection go to the 'Shipyard' tab. At the right-hand side of each ship is an 'Export to Coriolis' button that will open your default web browser in Coriolis with the ship's build.

+ +Note that Internet Explorer and Edge might not import correctly, due to their internal restrictions on URL length. If you find that this is the case then please change your default browser to Chrome.

+ +

Importing Your Ship From EDMC

+ +

Understanding And Using The Outfitting Panels

+The outfitting page is where you will spend most of your time, and contains the information for your ship. Information on each of the panels is provided below.

+ +

Key Values

+Along the top of the screen are some of the key values for your build. This is a handy reference for the values, but more information is provided for the values in the further panels.

+ +Here, along with most places in Coriolis, acronyms will have tooltips explaining what they mean. Hover over the acronym to obtain more detail, or look in the glossary at the end of this help.

+ +

Modules

+The next set of panels laid out horizontally across the screen contain the modules you have put in your build. From left to right these are the core modules, the internal modules, the hardpoints and the utility mounts. These represent the available slots in your ship and cannot be altered. Each slot has a class, or size, and in general any module up to a given size can fit in a given slot (exceptions being bulkheads, life support and sensors in core modules and restricted internal slots, which can only take a subset of module depending on their restrictions).

+ +To add a module to a slot left-click on the slot and select the required module. Only the modules capable of fitting in the selected slot will be shown.

+ +To remove a module from a slot right-click on the module.

+ +To move a module from one slot to another drag it. If you instead want to copy the module drag it whilst holding down the 'Alt' key.

+ +

Power Management

+The power management panel provides information about power usage and priorities. It allows you to enable and disable individual modules, as well as set power priorities for each module. + +

Costs

+ +By default Coriolis uses the standard costs, however discounts for your ship, modules and insurance can be altered in the 'Settings' at the top-right of the page. + +

Offence Summary

+ +

Defence Summary

+ +

Movement Summary

+ +

Jump Range

+ +

Damage Dealt

+ +

Damage Received

+ +

Keyboard Shortcuts

+
+
Ctrl-e
open export dialogue (outfitting page only)
+
Ctrl-h
open help dialogue
+
Ctrl-i
open import dialogue
+
Ctrl-l
open shortlink dialogue
+
Esc
close any open dialogue
+
+

Glossary

+
+
Absolute damage
A type of damage, without any protection. Absolute damage is always dealt at 100% regardless of if the damage is to shields, hull or modules, and irrespective of resistances
+
DPS
Damage per second; the amount of damage that a weapon or a ship can deal per second to a target under optimum conditions
+
EPS
Energy per second; the amount of energy that a weapon or a ship drains from the weapons capacitor per second when firing
+
HPS
Heat per second; the amount of heat that a weapon or a ship generates per second when firing
+
Effectivness
A comparison of the maximum DPS of a given weapon to the actual DPS of the given weapon in a specific situation. DPS can be reduced by range to the target, the target's hull and shield resistances, and the target's hardness
+
Explosive damage
A type of damage, protected against by explosive resistance
+
Hardness
The inherent resistance to damage of a ship's hull. Hardness is defined on a per-ship basis and there is currently nothing that can be done to change it. Hardness of a ship's hull is compared to the piercing of weapons: if piercing is higher than hardness the weapon does 100% damage, otherwise it does a fraction of its damage calculated as piercing/hardness
+
Falloff
The distance at which a weapons starts to do less damage than its stated DPS
+
Kinetic damage
A type of damage, protected against by kinetic resistance
+
SDPS
Sustained damage per second; the amount of damage that a weapon or a ship can deal per second to a target, taking in to account ammunition reload
+
SEPS
Sustained energy per second; the amount of energy that a weapon or a ship drains from the weapons capacitor per second when firing, taking in to account ammunition reload
+
SHPS
Sustained heat per second; the amount of heat that a weapon or a ship generates per second when firing, taking in to account ammunition reload
+
Thermal damage
A type of damage, protected against by thermal resistance
+
+ + `, }; diff --git a/src/app/pages/OutfittingPage.jsx b/src/app/pages/OutfittingPage.jsx index 1edadf1c..49af9ffa 100644 --- a/src/app/pages/OutfittingPage.jsx +++ b/src/app/pages/OutfittingPage.jsx @@ -52,6 +52,8 @@ export default class OutfittingPage extends Page { constructor(props, context) { super(props, context); this.state = this._initState(context); + this._keyDown = this._keyDown.bind(this); + this._exportBuild = this._exportBuild.bind(this); } /** @@ -181,7 +183,7 @@ export default class OutfittingPage extends Page { let translate = this.context.language.translate; let { buildName, ship } = this.state; this.context.showModal(); @@ -258,6 +260,7 @@ export default class OutfittingPage extends Page { */ componentWillMount() { this.resizeListener = this.context.onWindowResize(this._updateDimensions); + document.addEventListener('keydown', this._keyDown); } /** @@ -281,6 +284,23 @@ export default class OutfittingPage extends Page { this.context.showModal(); } + /** + * Handle Key Down + * @param {Event} e Keyboard Event + */ + _keyDown(e) { + // .keyCode will eventually be replaced with .key + switch (e.keyCode) { + case 69: // 'e' + if (e.ctrlKey || e.metaKey) { // CTRL/CMD + e + e.preventDefault(); + console.log('Export') + this._exportBuild(); + } + break; + } + } + /** * Render the Page * @return {React.Component} The page contents From 8fcebf59f62c5485496c60cc56c2abf32bae4d3a Mon Sep 17 00:00:00 2001 From: Cmdr McDonald Date: Mon, 23 Jan 2017 13:17:53 +0000 Subject: [PATCH 5/5] Add beta flag --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 880c6da2..8c156bb4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "coriolis_shipyard", - "version": "2.2.10", + "version": "2.2.11b", "repository": { "type": "git", "url": "https://github.com/EDCD/coriolis"