mirror of
https://github.com/bitburner-official/bitburner-src.git
synced 2026-04-24 10:12:53 +02:00
UI: Show hints of BitNode documentation and allow opening it in BitVerse (#2513)
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import React, { useState } from "react";
|
||||
import React, { useEffect, useState } from "react";
|
||||
import { BitNodes } from "../BitNode";
|
||||
import { PortalModal } from "./PortalModal";
|
||||
import { CinematicText } from "../../ui/React/CinematicText";
|
||||
@@ -10,6 +10,8 @@ import Tooltip from "@mui/material/Tooltip";
|
||||
import { Settings } from "../../Settings/Settings";
|
||||
import Button from "@mui/material/Button";
|
||||
import { CompletedProgramName } from "@enums";
|
||||
import { Modal } from "../../ui/React/Modal";
|
||||
import { DocumentationLink } from "../../ui/React/DocumentationLink";
|
||||
|
||||
const useStyles = makeStyles()(() => ({
|
||||
portal: {
|
||||
@@ -57,7 +59,7 @@ function BitNodePortal(props: IPortalProps): React.ReactElement {
|
||||
const { classes } = useStyles();
|
||||
const bitNode = BitNodes[`BitNode${props.n}`];
|
||||
if (bitNode == null) {
|
||||
return <>O</>;
|
||||
throw new Error(`Invalid BitNode: BitNode${props.n}`);
|
||||
}
|
||||
|
||||
let cssClass = classes.level0;
|
||||
@@ -118,6 +120,83 @@ function BitNodePortal(props: IPortalProps): React.ReactElement {
|
||||
);
|
||||
}
|
||||
|
||||
function BitVerseLore({ flume }: { flume: boolean }): React.ReactElement {
|
||||
const [open, setOpen] = useState(false);
|
||||
|
||||
useEffect(() => {
|
||||
// After backdooring WD for the first time, we show the BitVerse UI while Player.sourceFiles is still empty. That
|
||||
// property is only changed after the player chooses their next BitNode.
|
||||
const firstTimeSeeingBitVerse = Player.sourceFiles.size === 0;
|
||||
const flumeWithOnlySF1Dot1 = flume && Player.sourceFiles.size === 1 && Player.sourceFileLvl(1) === 1;
|
||||
// Only show the guides if the player is "new".
|
||||
if (!firstTimeSeeingBitVerse && !flumeWithOnlySF1Dot1) {
|
||||
return;
|
||||
}
|
||||
// Only show after a delay. We should let the player explore the BitVerse on their own at first.
|
||||
const timeOutId = window.setTimeout(() => {
|
||||
setOpen(true);
|
||||
}, 300000);
|
||||
return () => window.clearTimeout(timeOutId);
|
||||
}, [flume]);
|
||||
|
||||
return (
|
||||
<>
|
||||
<Modal open={open} onClose={() => setOpen(false)} canBeDismissedEasily={false}>
|
||||
<Typography component="div">
|
||||
It looks like you are wondering which BitNode you should choose. If you want to get advice on choosing your
|
||||
next BitNode, you can check these BitNode recommendation guides:
|
||||
<br />
|
||||
<ul>
|
||||
<li>
|
||||
<DocumentationLink page="advanced/bitnode_recommendation_short_guide.md">Short guide</DocumentationLink>
|
||||
</li>
|
||||
<li>
|
||||
<DocumentationLink page="advanced/bitnode_recommendation_comprehensive_guide.md">
|
||||
Comprehensive guide
|
||||
</DocumentationLink>
|
||||
</li>
|
||||
</ul>
|
||||
You can read these guides later in the Documentation tab. Make sure to check that tab. Many pages are unlocked
|
||||
now.
|
||||
</Typography>
|
||||
<Button onClick={() => setOpen(false)} sx={{ marginTop: "10px" }}>
|
||||
OK
|
||||
</Button>
|
||||
</Modal>
|
||||
<CinematicText
|
||||
lines={[
|
||||
"> Many decades ago, a humanoid extraterrestrial species which we call the Enders descended on the Earth...violently",
|
||||
"> Our species fought back, but it was futile. The Enders had technology far beyond our own...",
|
||||
"> Instead of killing every last one of us, the human race was enslaved...",
|
||||
"> We were shackled in a digital world, chained into a prison for our minds...",
|
||||
"> Using their advanced technology, the Enders created complex simulations of a virtual reality...",
|
||||
"> Simulations designed to keep us content...ignorant of the truth.",
|
||||
"> Simulations used to trap and suppress our consciousness, to keep us under control...",
|
||||
"> Why did they do this? Why didn't they just end our entire race? We don't know, not yet.",
|
||||
"> Humanity's only hope is to destroy these simulations, destroy the only realities we've ever known...",
|
||||
"> Only then can we begin to fight back...",
|
||||
"> By hacking the daemon that generated your reality, you've just destroyed one simulation, called a BitNode...",
|
||||
"> But there is still a long way to go...",
|
||||
"> The technology the Enders used to enslave the human race wasn't just a single complex simulation...",
|
||||
"> There are tens if not hundreds of BitNodes out there...",
|
||||
"> Each with their own simulations of a reality...",
|
||||
"> Each creating their own universes...a universe of universes",
|
||||
"> And all of which must be destroyed...",
|
||||
"> .......................................",
|
||||
"> Welcome to the Bitverse...",
|
||||
"> ",
|
||||
]}
|
||||
additionalElement={
|
||||
<Typography>
|
||||
{">"} (Enter a new <DocumentationLink page="advanced/bitnodes.md">BitNode</DocumentationLink> using the
|
||||
image above)
|
||||
</Typography>
|
||||
}
|
||||
/>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
interface IProps {
|
||||
flume: boolean;
|
||||
quick: boolean;
|
||||
@@ -190,50 +269,22 @@ export function BitverseRoot(props: IProps): React.ReactElement {
|
||||
if (Settings.DisableASCIIArt) {
|
||||
return (
|
||||
<>
|
||||
{Object.values(BitNodes)
|
||||
.filter((node) => {
|
||||
return node.tagline !== "COMING SOON";
|
||||
})
|
||||
.map((node) => {
|
||||
return (
|
||||
<BitNodePortal
|
||||
key={node.number}
|
||||
n={node.number}
|
||||
level={nextSourceFileLvl(node.number)}
|
||||
flume={props.flume}
|
||||
destroyedBitNode={destroyed}
|
||||
/>
|
||||
);
|
||||
})}
|
||||
{Object.values(BitNodes).map((node) => {
|
||||
return (
|
||||
<BitNodePortal
|
||||
key={node.number}
|
||||
n={node.number}
|
||||
level={nextSourceFileLvl(node.number)}
|
||||
flume={props.flume}
|
||||
destroyedBitNode={destroyed}
|
||||
/>
|
||||
);
|
||||
})}
|
||||
<br />
|
||||
<br />
|
||||
<br />
|
||||
<br />
|
||||
<CinematicText
|
||||
lines={[
|
||||
"> Many decades ago, a humanoid extraterrestrial species which we call the Enders descended on the Earth...violently",
|
||||
"> Our species fought back, but it was futile. The Enders had technology far beyond our own...",
|
||||
"> Instead of killing every last one of us, the human race was enslaved...",
|
||||
"> We were shackled in a digital world, chained into a prison for our minds...",
|
||||
"> Using their advanced technology, the Enders created complex simulations of a virtual reality...",
|
||||
"> Simulations designed to keep us content...ignorant of the truth.",
|
||||
"> Simulations used to trap and suppress our consciousness, to keep us under control...",
|
||||
"> Why did they do this? Why didn't they just end our entire race? We don't know, not yet.",
|
||||
"> Humanity's only hope is to destroy these simulations, destroy the only realities we've ever known...",
|
||||
"> Only then can we begin to fight back...",
|
||||
"> By hacking the daemon that generated your reality, you've just destroyed one simulation, called a BitNode...",
|
||||
"> But there is still a long way to go...",
|
||||
"> The technology the Enders used to enslave the human race wasn't just a single complex simulation...",
|
||||
"> There are tens if not hundreds of BitNodes out there...",
|
||||
"> Each with their own simulations of a reality...",
|
||||
"> Each creating their own universes...a universe of universes",
|
||||
"> And all of which must be destroyed...",
|
||||
"> .......................................",
|
||||
"> Welcome to the Bitverse...",
|
||||
"> ",
|
||||
"> (Enter a new BitNode using the image above)",
|
||||
]}
|
||||
/>
|
||||
<BitVerseLore flume={props.flume} />
|
||||
</>
|
||||
);
|
||||
}
|
||||
@@ -271,29 +322,7 @@ export function BitverseRoot(props: IProps): React.ReactElement {
|
||||
<br />
|
||||
<br />
|
||||
<br />
|
||||
<CinematicText lines={[
|
||||
"> Many decades ago, a humanoid extraterrestrial species which we call the Enders descended on the Earth...violently",
|
||||
"> Our species fought back, but it was futile. The Enders had technology far beyond our own...",
|
||||
"> Instead of killing every last one of us, the human race was enslaved...",
|
||||
"> We were shackled in a digital world, chained into a prison for our minds...",
|
||||
"> Using their advanced technology, the Enders created complex simulations of a virtual reality...",
|
||||
"> Simulations designed to keep us content...ignorant of the truth.",
|
||||
"> Simulations used to trap and suppress our consciousness, to keep us under control...",
|
||||
"> Why did they do this? Why didn't they just end our entire race? We don't know, not yet.",
|
||||
"> Humanity's only hope is to destroy these simulations, destroy the only realities we've ever known...",
|
||||
"> Only then can we begin to fight back...",
|
||||
"> By hacking the daemon that generated your reality, you've just destroyed one simulation, called a BitNode...",
|
||||
"> But there is still a long way to go...",
|
||||
"> The technology the Enders used to enslave the human race wasn't just a single complex simulation...",
|
||||
"> There are tens if not hundreds of BitNodes out there...",
|
||||
"> Each with their own simulations of a reality...",
|
||||
"> Each creating their own universes...a universe of universes",
|
||||
"> And all of which must be destroyed...",
|
||||
"> .......................................",
|
||||
"> Welcome to the Bitverse...",
|
||||
"> ",
|
||||
"> (Enter a new BitNode using the image above)",
|
||||
]} />
|
||||
<BitVerseLore flume={props.flume}/>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user