mirror of
https://github.com/bitburner-official/bitburner-src.git
synced 2026-04-18 23:38:35 +02:00
78 lines
3.4 KiB
TypeScript
78 lines
3.4 KiB
TypeScript
/**
|
|
* React Component for displaying a single WorkerScript's info as an
|
|
* Accordion element
|
|
*/
|
|
import * as React from "react";
|
|
|
|
import { numeralWrapper } from "../numeralFormat";
|
|
|
|
import { Accordion } from "../React/Accordion";
|
|
import { AccordionButton } from "../React/AccordionButton";
|
|
|
|
import { killWorkerScript } from "../../Netscript/killWorkerScript";
|
|
import { WorkerScript } from "../../Netscript/WorkerScript";
|
|
|
|
import { dialogBoxCreate } from "../../../utils/DialogBox";
|
|
import { logBoxCreate } from "../../../utils/LogBox";
|
|
import { convertTimeMsToTimeElapsedString } from "../../../utils/StringHelperFunctions";
|
|
import { arrayToString } from "../../../utils/helpers/arrayToString";
|
|
import { Money } from "../React/Money";
|
|
|
|
type IProps = {
|
|
workerScript: WorkerScript;
|
|
}
|
|
|
|
export function WorkerScriptAccordion(props: IProps): React.ReactElement {
|
|
const workerScript = props.workerScript;
|
|
const scriptRef = workerScript.scriptRef;
|
|
|
|
const logClickHandler = logBoxCreate.bind(null, scriptRef);
|
|
const killScript = killWorkerScript.bind(null, scriptRef as any, scriptRef.server);
|
|
|
|
function killScriptClickHandler(): void {
|
|
killScript();
|
|
dialogBoxCreate("Killing script");
|
|
}
|
|
|
|
// Calculations for script stats
|
|
const onlineMps = scriptRef.onlineMoneyMade / scriptRef.onlineRunningTime;
|
|
const onlineEps = scriptRef.onlineExpGained / scriptRef.onlineRunningTime;
|
|
const offlineMps = scriptRef.offlineMoneyMade / scriptRef.offlineRunningTime;
|
|
const offlineEps = scriptRef.offlineExpGained / scriptRef.offlineRunningTime;
|
|
|
|
return (
|
|
<Accordion
|
|
headerClass="active-scripts-script-header"
|
|
headerContent={
|
|
<>{props.workerScript.name}</>
|
|
}
|
|
panelClass="active-scripts-script-panel"
|
|
panelContent={
|
|
<>
|
|
<pre>Threads: {numeralWrapper.formatThreads(props.workerScript.scriptRef.threads)}</pre>
|
|
<pre>Args: {arrayToString(props.workerScript.args)}</pre>
|
|
<pre>Online Time: {convertTimeMsToTimeElapsedString(scriptRef.onlineRunningTime * 1e3)}</pre>
|
|
<pre>Offline Time: {convertTimeMsToTimeElapsedString(scriptRef.offlineRunningTime * 1e3)}</pre>
|
|
<pre>Total online production: <Money money={scriptRef.onlineMoneyMade} /></pre>
|
|
<pre>{(Array(26).join(" ") + numeralWrapper.formatExp(scriptRef.onlineExpGained) + " hacking exp")}</pre>
|
|
<pre>Online production rate: <Money money={onlineMps} /> / second</pre>
|
|
<pre>{(Array(25).join(" ") + numeralWrapper.formatExp(onlineEps) + " hacking exp / second")}</pre>
|
|
<pre>Total offline production: <Money money={scriptRef.offlineMoneyMade} /></pre>
|
|
<pre>{(Array(27).join(" ") + numeralWrapper.formatExp(scriptRef.offlineExpGained) + " hacking exp")}</pre>
|
|
<pre>Offline production rate: <Money money={offlineMps} /> / second</pre>
|
|
<pre>{(Array(26).join(" ") + numeralWrapper.formatExp(offlineEps) + " hacking exp / second")}</pre>
|
|
|
|
<AccordionButton
|
|
onClick={logClickHandler}
|
|
text="Log"
|
|
/>
|
|
<AccordionButton
|
|
onClick={killScriptClickHandler}
|
|
text="Kill Script"
|
|
/>
|
|
</>
|
|
}
|
|
/>
|
|
)
|
|
}
|