// Root React Component for the Corporation UI import React, { useState, useEffect } from "react"; import { Theme, useTheme } from "@mui/material/styles"; import makeStyles from "@mui/styles/makeStyles"; import createStyles from "@mui/styles/createStyles"; import { numeralWrapper } from "../../ui/numeralFormat"; import { Reputation } from "./Reputation"; import { KillScriptsModal } from "./KillScriptsModal"; import Table from "@mui/material/Table"; import TableBody from "@mui/material/TableBody"; import TableCell from "@mui/material/TableCell"; import TableRow from "@mui/material/TableRow"; import Typography from "@mui/material/Typography"; import Button from "@mui/material/Button"; import IconButton from "@mui/material/IconButton"; import SaveIcon from "@mui/icons-material/Save"; import ArrowBackIcon from '@mui/icons-material/ArrowBack'; import ClearAllIcon from "@mui/icons-material/ClearAll"; import { Settings } from "../../Settings/Settings"; import { use } from "../Context"; import { StatsProgressOverviewCell } from "./StatsProgressBar"; import { BitNodeMultipliers } from "../../BitNode/BitNodeMultipliers"; import { IRouter, Page } from "../Router"; import { Box, Tooltip } from "@mui/material"; interface IProps { save: () => void; killScripts: () => void; router: IRouter; allowBackButton: boolean; } function Intelligence(): React.ReactElement { const player = use.Player(); const classes = useStyles(); if (player.intelligence === 0) return <>; return ( Int  {numeralWrapper.formatSkill(player.intelligence)} {/*Hook for player scripts*/} ); } function Bladeburner(): React.ReactElement { const player = use.Player(); const classes = useStyles(); const bladeburner = player.bladeburner; if (bladeburner === null) return <>; const action = bladeburner.getTypeAndNameFromActionId(bladeburner.action); if (action.type === "Idle") return <>; return ( <> Bladeburner: {action.type}: {action.name} ); } function Work(): React.ReactElement { const player = use.Player(); const router = use.Router(); const classes = useStyles(); if (!player.isWorking || player.focus) return <>; if (player.className !== "") { return ( <> Work in progress: {player.className} ); } if (player.createProgramName !== "") { return ( <> Work in progress: {player.createProgramName}{" "} {((player.timeWorkedCreateProgram / player.timeNeededToCompleteWork) * 100).toFixed(2)}% ); } return ( <> Work in progress: + rep ); } const useStyles = makeStyles((theme: Theme) => createStyles({ cellNone: { borderBottom: "none", padding: 0, margin: 0, }, cell: { padding: 0, margin: 0, }, hp: { color: theme.colors.hp, }, money: { color: theme.colors.money, }, hack: { color: theme.colors.hack, }, combat: { color: theme.colors.combat, }, cha: { color: theme.colors.cha, }, int: { color: theme.colors.int, }, }), ); export { useStyles as characterOverviewStyles }; export function CharacterOverview({ save, killScripts, router, allowBackButton }: IProps): React.ReactElement { const [killOpen, setKillOpen] = useState(false); const player = use.Player(); const setRerender = useState(false)[1]; useEffect(() => { const id = setInterval(() => setRerender((old) => !old), 600); return () => clearInterval(id); }, []); const classes = useStyles(); const theme = useTheme(); const hackingProgress = player.calculateSkillProgress( player.hacking_exp, player.hacking_mult * BitNodeMultipliers.HackingLevelMultiplier, ); const strengthProgress = player.calculateSkillProgress( player.strength_exp, player.strength_mult * BitNodeMultipliers.StrengthLevelMultiplier, ); const defenseProgress = player.calculateSkillProgress( player.defense_exp, player.defense_mult * BitNodeMultipliers.DefenseLevelMultiplier, ); const dexterityProgress = player.calculateSkillProgress( player.dexterity_exp, player.dexterity_mult * BitNodeMultipliers.DexterityLevelMultiplier, ); const agilityProgress = player.calculateSkillProgress( player.agility_exp, player.agility_mult * BitNodeMultipliers.AgilityLevelMultiplier, ); const charismaProgress = player.calculateSkillProgress( player.charisma_exp, player.charisma_mult * BitNodeMultipliers.CharismaLevelMultiplier, ); const previousPageName = router.previousPage() < 0 ? '' : Page[router.previousPage() ?? 0].replace(/([a-z])([A-Z])/g, '$1 $2'); return ( <> HP  {numeralWrapper.formatHp(player.hp)} / {numeralWrapper.formatHp(player.max_hp)} {/*Hook for player scripts*/} Money  {numeralWrapper.formatMoney(player.money)} {/*Hook for player scripts*/} Hack  {numeralWrapper.formatSkill(player.hacking)} {!Settings.DisableOverviewProgressBars && ( )} {/*Hook for player scripts*/} Str  {numeralWrapper.formatSkill(player.strength)} {/*Hook for player scripts*/} {!Settings.DisableOverviewProgressBars && ( )} Def  {numeralWrapper.formatSkill(player.defense)} {/*Hook for player scripts*/} {!Settings.DisableOverviewProgressBars && ( )} Dex  {numeralWrapper.formatSkill(player.dexterity)} {/*Hook for player scripts*/} {!Settings.DisableOverviewProgressBars && ( )} Agi  {numeralWrapper.formatSkill(player.agility)} {/*Hook for player scripts*/} {!Settings.DisableOverviewProgressBars && ( )} Cha  {numeralWrapper.formatSkill(player.charisma)} {/*Hook for player scripts*/} {!Settings.DisableOverviewProgressBars && ( )} {/*Hook for player scripts*/} {/*Hook for player scripts*/} {/*Hook for player scripts*/}
{allowBackButton && ( router.toPreviousPage()}> )} setKillOpen(true)}> setKillOpen(false)} killScripts={killScripts} /> ); }