tgui-next: Tank, spaceheater and some touchups (#47887)

* Tank + spaceheater + touchups

* Mint update
This commit is contained in:
skoglol
2019-11-21 11:25:40 +01:00
committed by Rob Bailey
parent 9d9a1c450c
commit f87db2b114
8 changed files with 195 additions and 17 deletions

View File

@@ -144,7 +144,7 @@
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.hands_state) datum/tgui/master_ui = null, datum/ui_state/state = GLOB.hands_state)
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
if(!ui) if(!ui)
ui = new(user, src, ui_key, "tanks", name, 420, 200, master_ui, state) ui = new(user, src, ui_key, "tanks", name, 400, 120, master_ui, state)
ui.open() ui.open()
/obj/item/tank/ui_data(mob/user) /obj/item/tank/ui_data(mob/user)

View File

@@ -11,15 +11,13 @@ export const Mint = props => {
<Fragment> <Fragment>
<Section <Section
title="Materials" title="Materials"
buttons={(data.processing ? ( buttons={
<Button <Button
content="Stop" icon={data.processing ? "times" : "power-off"}
onClick={() => act(ref, 'stoppress')} /> content={data.processing ? "Stop" : "Start"}
) : ( selected={data.processing}
<Button onClick={() => act(ref, data.processing ? 'stoppress' : 'startpress')} />
content="Start" }>
onClick={() => act(ref, 'startpress')} />
))}>
<LabeledList> <LabeledList>
{inserted_materials.map(material => { {inserted_materials.map(material => {
return ( return (
@@ -28,7 +26,7 @@ export const Mint = props => {
label={material.material} label={material.material}
buttons={( buttons={(
<Button <Button
content="Select" icon={data.chosen_material === material.material ? "check-square" : "square"}
selected={data.chosen_material === material.material} selected={data.chosen_material === material.material}
onClick={() => act(ref, 'changematerial', { onClick={() => act(ref, 'changematerial', {
material_name: material.material, material_name: material.material,

View File

@@ -0,0 +1,106 @@
import { Fragment } from 'inferno';
import { act } from '../byond';
import { Section, ProgressBar, LabeledList, Button, NumberInput, Box } from '../components';
import { LabeledListItem, LabeledListDivider } from '../components/LabeledList';
export const SpaceHeater = props => {
const { state } = props;
const { config, data } = state;
const { ref } = config;
return (
<Fragment>
<Section
title="Power"
buttons={
<Fragment>
<Button
icon="eject"
content="Eject Cell"
disabled={!data.hasPowercell || !data.open}
onClick={() => act(ref, 'eject')} />
<Button
icon={data.on ? 'power-off' : 'times'}
content={data.on ? 'On' : 'Off'}
selected={data.on}
disabled={!data.hasPowercell}
onClick={() => act(ref, 'power')} />
</Fragment>
}>
<LabeledList>
<LabeledListItem label="Cell" color={data.hasPowercell ? "" : "bad"}>
{data.hasPowercell ? (
<ProgressBar
value={data.powerLevel / 100}
content={data.powerLevel + '%'}
ranges={{
good: [0.6, Infinity],
average: [0.3, 0.6],
bad: [-Infinity, 0.3],
}} />
) : ("None")}
</LabeledListItem>
</LabeledList>
</Section>
<Section title="Thermostat">
<LabeledList>
<LabeledListItem label="Current Temperature">
<Box
fontSize="18px"
color={Math.abs(data.targetTemp - data.currentTemp) > 50
? "bad"
: Math.abs(data.targetTemp - data.currentTemp) > 20 ? "average" : "good"}>
{data.currentTemp}°C
</Box>
</LabeledListItem>
<LabeledListItem label="Target Temperature">
{data.open
? (
<NumberInput
animated
value={parseFloat(data.targetTemp)}
width="65px"
unit="°C"
minValue={data.minTemp}
maxValue={data.maxTemp}
onChange={(e, value) => act(ref, 'target', {
target: value,
})} />
) : (
data.targetTemp + "°C"
)}
</LabeledListItem>
<LabeledListItem label="Mode">
{!data.open
? ("Auto"
) : (
<Fragment>
<Button
icon="thermometer-half"
content="Auto"
selected={data.mode === "auto"}
onClick={() => act(ref, 'mode', {
mode: "auto",
})} />
<Button
icon="fire-alt"
content="Heat"
selected={data.mode === "heat"}
onClick={() => act(ref, 'mode', {
mode: "heat",
})} />
<Button
icon="fan"
content="Cool"
selected={data.mode === "cool"}
onClick={() => act(ref, 'mode', {
mode: "cool",
})} />
</Fragment>
)}
</LabeledListItem>
<LabeledListDivider />
</LabeledList>
</Section>
</Fragment>
);
};

View File

@@ -20,7 +20,7 @@ export const StationAlertConsole = props => {
</li> </li>
)} )}
{fire.map(alert => ( {fire.map(alert => (
<li key={alert}> <li key={alert} className="color-average">
{alert} {alert}
</li> </li>
))} ))}
@@ -34,7 +34,7 @@ export const StationAlertConsole = props => {
</li> </li>
)} )}
{atmos.map(alert => ( {atmos.map(alert => (
<li key={alert}> <li key={alert} className="color-average">
{alert} {alert}
</li> </li>
))} ))}
@@ -48,7 +48,7 @@ export const StationAlertConsole = props => {
</li> </li>
)} )}
{power.map(alert => ( {power.map(alert => (
<li key={alert}> <li key={alert} className="color-average">
{alert} {alert}
</li> </li>
))} ))}

View File

@@ -0,0 +1,58 @@
import { Fragment } from 'inferno';
import { act } from '../byond';
import { Section, ProgressBar, LabeledList, Button, NumberInput } from '../components';
import { LabeledListItem } from '../components/LabeledList';
export const Tank = props => {
const { state } = props;
const { config, data } = state;
const { ref } = config;
return (
<Section>
<LabeledList>
<LabeledListItem label="Pressure">
<ProgressBar
value={data.tankPressure / 1013}
content={data.tankPressure + ' kPa'}
ranges={{
good: [0.35, Infinity],
average: [0.15, 0.35],
bad: [-Infinity, 0.15],
}}
/>
</LabeledListItem>
<LabeledListItem label="Pressure Regulator">
<Button
icon="fast-backward"
disabled={data.ReleasePressure === data.minReleasePressure}
onClick={() => act(ref, 'pressure', {
pressure: 'min',
})} />
<NumberInput
animated
value={parseFloat(data.releasePressure)}
width="65px"
unit="kPa"
minValue={data.minReleasePressure}
maxValue={data.maxReleasePressure}
onChange={(e, value) => act(ref, 'pressure', {
pressure: value,
})} />
<Button
icon="fast-forward"
disabled={data.ReleasePressure === data.maxReleasePressure}
onClick={() => act(ref, 'pressure', {
pressure: 'max',
})} />
<Button
icon="undo"
content=""
disabled={data.ReleasePressure === data.defaultReleasePressure}
onClick={() => act(ref, 'pressure', {
pressure: 'reset',
})} />
</LabeledListItem>
</LabeledList>
</Section>
);
};

View File

@@ -12,6 +12,7 @@ export const VaultController = props => {
buttons={( buttons={(
<Button <Button
content={data.doorstatus ? 'Locked' : 'Unlocked'} content={data.doorstatus ? 'Locked' : 'Unlocked'}
icon={data.doorstatus ? 'lock' : 'unlock'}
disabled={data.stored < data.max} disabled={data.stored < data.max}
onClick={() => act(ref, 'togglelock')} onClick={() => act(ref, 'togglelock')}
/> />
@@ -21,6 +22,11 @@ export const VaultController = props => {
<ProgressBar <ProgressBar
value={data.stored / data.max} value={data.stored / data.max}
content={toFixed(data.stored/1000) + ' / ' + data.max/1000 + ' kW'} content={toFixed(data.stored/1000) + ' / ' + data.max/1000 + ' kW'}
ranges={{
good: [1, Infinity],
average: [0.30, 1],
bad: [-Infinity, 0.30],
}}
/> />
</LabeledList.Item> </LabeledList.Item>
</LabeledList> </LabeledList>

File diff suppressed because one or more lines are too long

View File

@@ -33,6 +33,7 @@ import { DisposalUnit } from './interfaces/DisposalUnit';
import { DnaVault } from './interfaces/DnaVault'; import { DnaVault } from './interfaces/DnaVault';
import { EngravedMessage } from './interfaces/EngravedMessage'; import { EngravedMessage } from './interfaces/EngravedMessage';
import { Gps } from './interfaces/Gps'; import { Gps } from './interfaces/Gps';
import { Holodeck } from './interfaces/Holodeck';
import { LanguageMenu } from './interfaces/LanguageMenu'; import { LanguageMenu } from './interfaces/LanguageMenu';
import { MedicalKiosk } from './interfaces/MedicalKiosk'; import { MedicalKiosk } from './interfaces/MedicalKiosk';
import { Mint } from './interfaces/Mint'; import { Mint } from './interfaces/Mint';
@@ -50,17 +51,18 @@ import { RapidPipeDispenser } from './interfaces/RapidPipeDispenser';
import { ShuttleManipulator } from './interfaces/ShuttleManipulator'; import { ShuttleManipulator } from './interfaces/ShuttleManipulator';
import { SmartVend } from './interfaces/SmartVend'; import { SmartVend } from './interfaces/SmartVend';
import { Smes } from './interfaces/Smes'; import { Smes } from './interfaces/Smes';
import { SpawnersMenu } from './interfaces/SpawnersMenu';
import { SolarControl } from './interfaces/SolarControl'; import { SolarControl } from './interfaces/SolarControl';
import { SpaceHeater } from './interfaces/SpaceHeater';
import { StationAlertConsole } from './interfaces/StationAlertConsole'; import { StationAlertConsole } from './interfaces/StationAlertConsole';
import { SuitStorageUnit } from './interfaces/SuitStorageUnit'; import { SuitStorageUnit } from './interfaces/SuitStorageUnit';
import { Tank } from './interfaces/Tank';
import { TankDispenser } from './interfaces/TankDispenser'; import { TankDispenser } from './interfaces/TankDispenser';
import { ThermoMachine } from './interfaces/ThermoMachine'; import { ThermoMachine } from './interfaces/ThermoMachine';
import { TurbineComputer } from './interfaces/TurbineComputer'; import { TurbineComputer } from './interfaces/TurbineComputer';
import { Uplink } from './interfaces/Uplink'; import { Uplink } from './interfaces/Uplink';
import { VaultController } from './interfaces/VaultController'; import { VaultController } from './interfaces/VaultController';
import { Wires } from './interfaces/Wires'; import { Wires } from './interfaces/Wires';
import { Holodeck } from './interfaces/Holodeck';
import { SpawnersMenu } from './interfaces/SpawnersMenu';
const ROUTES = { const ROUTES = {
achievements: { achievements: {
@@ -291,6 +293,10 @@ const ROUTES = {
component: () => SolarControl, component: () => SolarControl,
scrollable: false, scrollable: false,
}, },
space_heater: {
component: () => SpaceHeater,
scrollable: false,
},
spawners_menu: { spawners_menu: {
component: () => SpawnersMenu, component: () => SpawnersMenu,
scrollable: true, scrollable: true,
@@ -303,6 +309,10 @@ const ROUTES = {
component: () => SuitStorageUnit, component: () => SuitStorageUnit,
scrollable: false, scrollable: false,
}, },
tanks: {
component: () => Tank,
scrollable: false,
},
tank_dispenser: { tank_dispenser: {
component: () => TankDispenser, component: () => TankDispenser,
scrollable: false, scrollable: false,