import React, { useState, useEffect } from "react"; import CircularProgress from "@mui/material/CircularProgress"; import Typography from "@mui/material/Typography"; import Grid from "@mui/material/Grid"; import Box from "@mui/material/Box"; import { Theme } from "@mui/material/styles"; import makeStyles from "@mui/styles/makeStyles"; import createStyles from "@mui/styles/createStyles"; import { Terminal } from "../Terminal"; import { load } from "../db"; import { Player } from "../Player"; import { Engine } from "../engine"; import { GameRoot } from "./GameRoot"; import { CONSTANTS } from "../Constants"; import { ActivateRecoveryMode } from "./React/RecoveryRoot"; import { hash } from "../hash/hash"; import { pushGameReady } from "../Electron"; const useStyles = makeStyles((theme: Theme) => createStyles({ root: { backgroundColor: theme.colors.backgroundprimary, }, }), ); export function LoadingScreen(): React.ReactElement { const classes = useStyles(); const [show, setShow] = useState(false); const [loaded, setLoaded] = useState(false); const version = `v${CONSTANTS.VersionString} (${hash()})`; if (process.env.NODE_ENV === "development") { document.title = `[dev] Bitburner ${version}`; } else { document.title = `Bitburner ${version}`; } useEffect(() => { const id = setTimeout(() => { if (!loaded) setShow(true); }, 2000); return () => clearTimeout(id); }); useEffect(() => { async function doLoad(): Promise { await load() .then((saveString) => { try { Engine.load(saveString); } catch (err: unknown) { ActivateRecoveryMode(); setLoaded(true); throw err; } pushGameReady(); setLoaded(true); }) .catch((reason) => { console.error(reason); Engine.load(""); setLoaded(true); }); } doLoad(); }, []); return ( {loaded ? ( ) : ( Loading Bitburner {version} {show && ( If the game fails to load, consider killing all scripts )} )} ); }