import { toTitleCase } from 'common/string'; import { Fragment } from 'inferno'; import { useBackend } from '../backend'; import { Box, Button, Flex, LabeledList, ProgressBar, Section } from '../components'; import { Window } from '../layouts'; /* Helpers */ const getDockingStatus = (docking_status, docking_override) => { let main = 'ERROR'; let color = 'bad'; let showsOverride = false; if (docking_status === 'docked') { main = 'DOCKED'; color = 'good'; } else if (docking_status === 'docking') { main = 'DOCKING'; color = 'average'; showsOverride = true; } else if (docking_status === 'undocking') { main = 'UNDOCKING'; color = 'average'; showsOverride = true; } else if (docking_status === 'undocked') { main = 'UNDOCKED'; color = '#676767'; } if (showsOverride && docking_override) { main = main + '-MANUAL'; } return {main}; }; /* Templates */ const ShuttleControlSharedShuttleStatus = (props, context) => { const { act, data } = useBackend(context); const { engineName = 'Bluespace Drive' } = props; const { shuttle_status, shuttle_state, has_docking, docking_status, docking_override, docking_codes } = data; return (
{shuttle_status} {(shuttle_state === 'idle' && ( IDLE )) || (shuttle_state === 'warmup' && SPINNING UP) || (shuttle_state === 'in_transit' && ENGAGED) || ERROR} {(has_docking && ( {getDockingStatus(docking_status, docking_override)} )) || null}
); }; const ShuttleControlSharedShuttleControls = (props, context) => { const { act, data } = useBackend(context); const { can_launch, can_cancel, can_force } = data; return (
); }; const ShuttleControlConsoleDefault = (props, context) => { const { act, data } = useBackend(context); return ( ); }; const ShuttleControlConsoleMulti = (props, context) => { const { act, data } = useBackend(context); const { can_cloak, can_pick, legit, cloaked, destination_name } = data; return (
{(can_cloak && ( )) || null}
); }; const ShuttleControlConsoleExploration = (props, context) => { const { act, data } = useBackend(context); const { can_pick, destination_name, fuel_usage, fuel_span, remaining_fuel } = data; return (
{(fuel_usage && ( {remaining_fuel} m/s {fuel_usage} m/s )) || null}
); }; /* Ugh. Just ugh. */ const ShuttleControlConsoleWeb = (props, context) => { const { act, data } = useBackend(context); const { autopilot, can_rename, shuttle_state, is_moving, skip_docking, docking_status, docking_override, shuttle_location, can_cloak, cloaked, can_autopilot, routes, is_in_transit, travel_progress, time_left, doors, sensors, } = data; return ( {(autopilot && (
This vessel will start and stop automatically. Ensure that all non-cycling capable hatches and doors are closed, as the automated system may not be able to control them. Docking and flight controls are locked. To unlock, disable the automated flight system.
)) || null}
act('rename_command')}> Rename )) || null }> {(shuttle_state === 'idle' && ( IDLE )) || (shuttle_state === 'warmup' && SPINNING UP) || (shuttle_state === 'in_transit' && ENGAGED) || ERROR} {(!is_moving && ( {toTitleCase(shuttle_location)} {(!skip_docking && ( }> {getDockingStatus(docking_status, docking_override)} )) || null} {(can_cloak && ( )) || null} {(can_autopilot && ( )) || null} )) || null} {(!is_moving && (
{(routes.length && routes.map((route) => ( ))) || ( No routes found. )}
)) || null}
{(is_in_transit && (
{time_left}s
)) || null} {(Object.keys(doors).length && (
{Object.keys(doors).map((key) => { let door = doors[key]; return ( {(door.open && ( Open )) || ( Closed )}  -  {(door.bolted && ( Bolted )) || ( Unbolted )} ); })}
)) || null} {(Object.keys(sensors).length && (
{Object.keys(sensors).map((key) => { let sensor = sensors[key]; if (sensor.reading === -1) { return ( Unable to get sensor air reading. ); } return ( {sensor.pressure}kPa {sensor.temp}°C {sensor.oxygen}% {sensor.nitrogen}% {sensor.carbon_dioxide}% {sensor.phoron}% {(sensor.other && {sensor.other}%) || null} ); })}
)) || null}
); }; // This may look tempting to convert to require() or some kind of dynamic call // Don't do it. XSS abound. const SubtemplateList = { 'ShuttleControlConsoleDefault': , 'ShuttleControlConsoleMulti': , 'ShuttleControlConsoleExploration': , 'ShuttleControlConsoleWeb': , }; export const ShuttleControl = (props, context) => { const { act, data } = useBackend(context); const { subtemplate } = data; return ( {SubtemplateList[subtemplate]} ); };