// 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 "../numeralFormat"; import { Reputation } from "./Reputation"; import { KillScriptsModal } from "./KillScriptsModal"; import { convertTimeMsToTimeElapsedString } from "../../utils/StringHelperFunctions"; 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 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 { Box, Tooltip } from "@mui/material"; import { CONSTANTS } from "../../Constants"; interface IProps { save: () => void; killScripts: () => void; } function Intelligence(): React.ReactElement { const theme = useTheme(); const player = use.Player(); const classes = useStyles(); if (player.intelligence === 0) return <>; const progress = player.calculateSkillProgress(player.intelligence_exp); return ( <> Int  {numeralWrapper.formatSkill(player.intelligence)} {/*Hook for player scripts*/} {!Settings.DisableOverviewProgressBars && ( )} ); } 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} ); } interface WorkInProgressOverviewProps { tooltip: React.ReactNode; header: React.ReactNode; children: React.ReactNode; onClickFocus: () => void; } function WorkInProgressOverview({ tooltip, children, onClickFocus, header, }: WorkInProgressOverviewProps): React.ReactElement { const classes = useStyles(); return ( <> {tooltip}}> {header} {children} ); } function Work(): React.ReactElement { const player = use.Player(); const router = use.Router(); const onClickFocus = (): void => { player.startFocusing(); router.toWork(); }; if (!player.isWorking || player.focus) return <>; let details = <>; let header = <>; let innerText = <>; if (player.workType === CONSTANTS.WorkTypeCompanyPartTime || player.workType === CONSTANTS.WorkTypeCompany) { details = ( <> {player.jobs[player.companyName]} at {player.companyName} ); header = ( <> Working at {player.companyName} ); innerText = ( <> + rep ); } else if (player.workType === CONSTANTS.WorkTypeFaction) { details = ( <> {player.factionWorkType} for {player.currentWorkFactionName} ); header = ( <> Working for {player.currentWorkFactionName} ); innerText = ( <> + rep ); } else if (player.workType === CONSTANTS.WorkTypeStudyClass) { details = <>{player.workType}; header = <>You are {player.className}; innerText = <>{convertTimeMsToTimeElapsedString(player.timeWorked)}; } else if (player.workType === CONSTANTS.WorkTypeCreateProgram) { details = <>Coding {player.createProgramName}; header = <>Creating a program; innerText = ( <> {player.createProgramName}{" "} {((player.timeWorkedCreateProgram / player.timeNeededToCompleteWork) * 100).toFixed(2)}% ); } return ( {innerText} ); } const useStyles = makeStyles((theme: Theme) => createStyles({ workCell: { textAlign: "center", maxWidth: "200px", borderBottom: "none", padding: 0, margin: 0, }, workHeader: { fontSize: "0.9rem", }, workSubtitles: { fontSize: "0.8rem", }, 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 }: 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, ); 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*/}
setKillOpen(true)}> setKillOpen(false)} killScripts={killScripts} /> ); }