No more player/router context

This commit is contained in:
Snarling
2022-09-12 18:00:09 -04:00
parent 83d357e758
commit a21b1029d7
56 changed files with 418 additions and 527 deletions
+3 -4
View File
@@ -6,7 +6,7 @@ import * as React from "react";
import { Money } from "../React/Money";
import { MoneyRate } from "../React/MoneyRate";
import { use } from "../Context";
import { Player } from "../../Player";
import Typography from "@mui/material/Typography";
@@ -32,9 +32,8 @@ const useStyles = makeStyles((theme: Theme) =>
}),
);
export function ScriptProduction(): React.ReactElement {
const player = use.Player();
const classes = useStyles();
const prodRateSinceLastAug = player.scriptProdSinceLastAug / (player.playtimeSinceLastAug / 1000);
const prodRateSinceLastAug = Player.scriptProdSinceLastAug / (Player.playtimeSinceLastAug / 1000);
return (
<Table size="small" classes={{ root: classes.size }}>
@@ -45,7 +44,7 @@ export function ScriptProduction(): React.ReactElement {
</TableCell>
<TableCell align="left" classes={{ root: classes.cell }}>
<Typography variant="body2">
<Money money={player.scriptProdSinceLastAug} />
<Money money={Player.scriptProdSinceLastAug} />
</Typography>
</TableCell>
<TableCell align="left" classes={{ root: classes.cell }}>
+80 -85
View File
@@ -9,7 +9,7 @@ import { getPurchaseServerLimit } from "../Server/ServerPurchases";
import { Settings } from "../Settings/Settings";
import { MoneySourceTracker } from "../utils/MoneySourceTracker";
import { convertTimeMsToTimeElapsedString } from "../utils/StringHelperFunctions";
import { use } from "./Context";
import { Player } from "../Player";
import { numeralWrapper } from "./numeralFormat";
import { Modal } from "./React/Modal";
import { Money } from "./React/Money";
@@ -23,13 +23,12 @@ interface EmployersModalProps {
}
const EmployersModal = ({ open, onClose }: EmployersModalProps): React.ReactElement => {
const player = use.Player();
return (
<Modal open={open} onClose={onClose}>
<>
<Typography variant="h5">All Employers</Typography>
<ul>
{Object.keys(player.jobs).map((j) => (
{Object.keys(Player.jobs).map((j) => (
<Typography key={j}>* {j}</Typography>
))}
</ul>
@@ -59,14 +58,13 @@ interface MultTableProps {
}
function MultiplierTable(props: MultTableProps): React.ReactElement {
const player = use.Player();
return (
<Table sx={{ display: "table", width: "100%", mb: (props.noMargin ?? false) === true ? 0 : 2 }}>
<TableBody>
{props.rows.map((data) => {
const { mult, value, effValue = null, color = props.color } = data;
if (effValue !== null && effValue !== value && player.sourceFileLvl(5) > 0) {
if (effValue !== null && effValue !== value && Player.sourceFileLvl(5) > 0) {
return (
<StatsRow key={mult} name={mult} color={color} data={{}}>
<>
@@ -88,14 +86,13 @@ function MultiplierTable(props: MultTableProps): React.ReactElement {
}
function CurrentBitNode(): React.ReactElement {
const player = use.Player();
if (player.sourceFiles.length > 0) {
const index = "BitNode" + player.bitNodeN;
const lvl = Math.min(player.sourceFileLvl(player.bitNodeN) + 1, player.bitNodeN === 12 ? Infinity : 3);
if (Player.sourceFiles.length > 0) {
const index = "BitNode" + Player.bitNodeN;
const lvl = Math.min(Player.sourceFileLvl(Player.bitNodeN) + 1, Player.bitNodeN === 12 ? Infinity : 3);
return (
<Paper sx={{ mb: 1, p: 1 }}>
<Typography variant="h5">
BitNode {player.bitNodeN}: {BitNodes[index].name} (Level {lvl})
BitNode {Player.bitNodeN}: {BitNodes[index].name} (Level {lvl})
</Typography>
<Typography sx={{ whiteSpace: "pre-wrap", overflowWrap: "break-word" }}>{BitNodes[index].info}</Typography>
</Paper>
@@ -111,7 +108,6 @@ interface IMoneyModalProps {
}
function MoneyModal({ open, onClose }: IMoneyModalProps): React.ReactElement {
const player = use.Player();
function convertMoneySourceTrackerToString(src: MoneySourceTracker): React.ReactElement {
const parts: [string, JSX.Element][] = [[`Total:`, <Money money={src.total} />]];
if (src.augmentations) {
@@ -178,10 +174,10 @@ function MoneyModal({ open, onClose }: IMoneyModalProps): React.ReactElement {
Money earned since you last installed Augmentations
</Typography>
<br />
{convertMoneySourceTrackerToString(player.moneySourceA)}
{convertMoneySourceTrackerToString(Player.moneySourceA)}
</>
);
if (player.sourceFiles.length !== 0) {
if (Player.sourceFiles.length !== 0) {
content = (
<>
{content}
@@ -191,7 +187,7 @@ function MoneyModal({ open, onClose }: IMoneyModalProps): React.ReactElement {
Money earned in this BitNode
</Typography>
<br />
{convertMoneySourceTrackerToString(player.moneySourceB)}
{convertMoneySourceTrackerToString(Player.moneySourceB)}
</>
);
}
@@ -204,7 +200,6 @@ function MoneyModal({ open, onClose }: IMoneyModalProps): React.ReactElement {
}
export function CharacterStats(): React.ReactElement {
const player = use.Player();
const [moneyOpen, setMoneyOpen] = useState(false);
const [employersOpen, setEmployersOpen] = useState(false);
const setRerender = useState(false)[1];
@@ -218,18 +213,18 @@ export function CharacterStats(): React.ReactElement {
}, []);
const timeRows = [
["Since last Augmentation installation", convertTimeMsToTimeElapsedString(player.playtimeSinceLastAug)],
["Since last Augmentation installation", convertTimeMsToTimeElapsedString(Player.playtimeSinceLastAug)],
];
if (player.sourceFiles.length > 0) {
timeRows.push(["Since last Bitnode destroyed", convertTimeMsToTimeElapsedString(player.playtimeSinceLastBitnode)]);
if (Player.sourceFiles.length > 0) {
timeRows.push(["Since last Bitnode destroyed", convertTimeMsToTimeElapsedString(Player.playtimeSinceLastBitnode)]);
}
timeRows.push(["Total", convertTimeMsToTimeElapsedString(player.totalPlaytime)]);
timeRows.push(["Total", convertTimeMsToTimeElapsedString(Player.totalPlaytime)]);
let showBitNodeMults = false;
if (player.sourceFileLvl(5) > 0) {
const n = player.bitNodeN;
if (Player.sourceFileLvl(5) > 0) {
const n = Player.bitNodeN;
const maxSfLevel = n === 12 ? Infinity : 3;
const mults = getBitNodeMultipliers(n, Math.min(player.sourceFileLvl(n) + 1, maxSfLevel));
const mults = getBitNodeMultipliers(n, Math.min(Player.sourceFileLvl(n) + 1, maxSfLevel));
showBitNodeMults = !isEqual(mults, defaultMultipliers);
}
return (
@@ -240,20 +235,20 @@ export function CharacterStats(): React.ReactElement {
<Typography variant="h5">General</Typography>
<Table>
<TableBody>
<StatsRow name="Current City" color={Settings.theme.primary} data={{ content: player.city }} />
<StatsRow name="Current City" color={Settings.theme.primary} data={{ content: Player.city }} />
<StatsRow name="Money" color={Settings.theme.money} data={{}}>
<>
<Money money={player.money} />
<Money money={Player.money} />
<IconButton onClick={() => setMoneyOpen(true)} sx={{ p: 0 }}>
<MoreHoriz color="info" />
</IconButton>
</>
</StatsRow>
{player.jobs && Object.keys(player.jobs).length !== 0 ? (
{Player.jobs && Object.keys(Player.jobs).length !== 0 ? (
<StatsRow name="All Employers" color={Settings.theme.primary} data={{}}>
<>
<span style={{ color: Settings.theme.primary }}>{Object.keys(player.jobs).length} total</span>
<span style={{ color: Settings.theme.primary }}>{Object.keys(Player.jobs).length} total</span>
<IconButton onClick={() => setEmployersOpen(true)} sx={{ p: 0 }}>
<MoreHoriz color="info" />
</IconButton>
@@ -265,14 +260,14 @@ export function CharacterStats(): React.ReactElement {
<StatsRow
name="Servers Owned"
color={Settings.theme.primary}
data={{ content: `${player.purchasedServers.length} / ${getPurchaseServerLimit()}` }}
data={{ content: `${Player.purchasedServers.length} / ${getPurchaseServerLimit()}` }}
/>
<StatsRow
name={`Hacknet ${player.bitNodeN === 9 || player.sourceFileLvl(9) > 0 ? "Servers" : "Nodes"} owned`}
name={`Hacknet ${Player.bitNodeN === 9 || Player.sourceFileLvl(9) > 0 ? "Servers" : "Nodes"} owned`}
color={Settings.theme.primary}
data={{
content: `${player.hacknetNodes.length}${
player.bitNodeN === 9 || player.sourceFileLvl(9) > 0
content: `${Player.hacknetNodes.length}${
Player.bitNodeN === 9 || Player.sourceFileLvl(9) > 0
? ` / ${HacknetServerConstants.MaxServers}`
: ""
}`,
@@ -281,7 +276,7 @@ export function CharacterStats(): React.ReactElement {
<StatsRow
name="Augmentations Installed"
color={Settings.theme.primary}
data={{ content: String(player.augmentations.length) }}
data={{ content: String(Player.augmentations.length) }}
/>
</TableBody>
</Table>
@@ -293,38 +288,38 @@ export function CharacterStats(): React.ReactElement {
<StatsRow
name="Hacking"
color={Settings.theme.hack}
data={{ level: player.skills.hacking, exp: player.exp.hacking }}
data={{ level: Player.skills.hacking, exp: Player.exp.hacking }}
/>
<StatsRow
name="Strength"
color={Settings.theme.combat}
data={{ level: player.skills.strength, exp: player.exp.strength }}
data={{ level: Player.skills.strength, exp: Player.exp.strength }}
/>
<StatsRow
name="Defense"
color={Settings.theme.combat}
data={{ level: player.skills.defense, exp: player.exp.defense }}
data={{ level: Player.skills.defense, exp: Player.exp.defense }}
/>
<StatsRow
name="Dexterity"
color={Settings.theme.combat}
data={{ level: player.skills.dexterity, exp: player.exp.dexterity }}
data={{ level: Player.skills.dexterity, exp: Player.exp.dexterity }}
/>
<StatsRow
name="Agility"
color={Settings.theme.combat}
data={{ level: player.skills.agility, exp: player.exp.agility }}
data={{ level: Player.skills.agility, exp: Player.exp.agility }}
/>
<StatsRow
name="Charisma"
color={Settings.theme.cha}
data={{ level: player.skills.charisma, exp: player.exp.charisma }}
data={{ level: Player.skills.charisma, exp: Player.exp.charisma }}
/>
{player.skills.intelligence > 0 && (player.bitNodeN === 5 || player.sourceFileLvl(5) > 0) && (
{Player.skills.intelligence > 0 && (Player.bitNodeN === 5 || Player.sourceFileLvl(5) > 0) && (
<StatsRow
name="Intelligence"
color={Settings.theme.int}
data={{ level: player.skills.intelligence, exp: player.exp.intelligence }}
data={{ level: Player.skills.intelligence, exp: Player.exp.intelligence }}
/>
)}
</TableBody>
@@ -335,7 +330,7 @@ export function CharacterStats(): React.ReactElement {
<Paper sx={{ p: 1, mb: 1 }}>
<Typography variant="h5" color="primary" sx={{ display: "flex", alignItems: "center", flexWrap: "wrap" }}>
Multipliers
{player.sourceFileLvl(5) > 0 && (
{Player.sourceFileLvl(5) > 0 && (
<Tooltip
title={
<Typography>
@@ -361,21 +356,21 @@ export function CharacterStats(): React.ReactElement {
rows={[
{
mult: "Hacking Chance",
value: player.mults.hacking_chance,
value: Player.mults.hacking_chance,
},
{
mult: "Hacking Speed",
value: player.mults.hacking_speed,
value: Player.mults.hacking_speed,
},
{
mult: "Hacking Money",
value: player.mults.hacking_money,
effValue: player.mults.hacking_money * BitNodeMultipliers.ScriptHackMoney,
value: Player.mults.hacking_money,
effValue: Player.mults.hacking_money * BitNodeMultipliers.ScriptHackMoney,
},
{
mult: "Hacking Growth",
value: player.mults.hacking_grow,
effValue: player.mults.hacking_grow * BitNodeMultipliers.ServerGrowthRate,
value: Player.mults.hacking_grow,
effValue: Player.mults.hacking_grow * BitNodeMultipliers.ServerGrowthRate,
},
]}
color={Settings.theme.hack}
@@ -384,13 +379,13 @@ export function CharacterStats(): React.ReactElement {
rows={[
{
mult: "Hacking Level",
value: player.mults.hacking,
effValue: player.mults.hacking * BitNodeMultipliers.HackingLevelMultiplier,
value: Player.mults.hacking,
effValue: Player.mults.hacking * BitNodeMultipliers.HackingLevelMultiplier,
},
{
mult: "Hacking Experience",
value: player.mults.hacking_exp,
effValue: player.mults.hacking_exp * BitNodeMultipliers.HackExpGain,
value: Player.mults.hacking_exp,
effValue: Player.mults.hacking_exp * BitNodeMultipliers.HackExpGain,
},
]}
color={Settings.theme.hack}
@@ -399,12 +394,12 @@ export function CharacterStats(): React.ReactElement {
rows={[
{
mult: "Strength Level",
value: player.mults.strength,
effValue: player.mults.strength * BitNodeMultipliers.StrengthLevelMultiplier,
value: Player.mults.strength,
effValue: Player.mults.strength * BitNodeMultipliers.StrengthLevelMultiplier,
},
{
mult: "Strength Experience",
value: player.mults.strength_exp,
value: Player.mults.strength_exp,
},
]}
color={Settings.theme.combat}
@@ -413,12 +408,12 @@ export function CharacterStats(): React.ReactElement {
rows={[
{
mult: "Defense Level",
value: player.mults.defense,
effValue: player.mults.defense * BitNodeMultipliers.DefenseLevelMultiplier,
value: Player.mults.defense,
effValue: Player.mults.defense * BitNodeMultipliers.DefenseLevelMultiplier,
},
{
mult: "Defense Experience",
value: player.mults.defense_exp,
value: Player.mults.defense_exp,
},
]}
color={Settings.theme.combat}
@@ -427,12 +422,12 @@ export function CharacterStats(): React.ReactElement {
rows={[
{
mult: "Dexterity Level",
value: player.mults.dexterity,
effValue: player.mults.dexterity * BitNodeMultipliers.DexterityLevelMultiplier,
value: Player.mults.dexterity,
effValue: Player.mults.dexterity * BitNodeMultipliers.DexterityLevelMultiplier,
},
{
mult: "Dexterity Experience",
value: player.mults.dexterity_exp,
value: Player.mults.dexterity_exp,
},
]}
color={Settings.theme.combat}
@@ -441,12 +436,12 @@ export function CharacterStats(): React.ReactElement {
rows={[
{
mult: "Agility Level",
value: player.mults.agility,
effValue: player.mults.agility * BitNodeMultipliers.AgilityLevelMultiplier,
value: Player.mults.agility,
effValue: Player.mults.agility * BitNodeMultipliers.AgilityLevelMultiplier,
},
{
mult: "Agility Experience",
value: player.mults.agility_exp,
value: Player.mults.agility_exp,
},
]}
color={Settings.theme.combat}
@@ -455,12 +450,12 @@ export function CharacterStats(): React.ReactElement {
rows={[
{
mult: "Charisma Level",
value: player.mults.charisma,
effValue: player.mults.charisma * BitNodeMultipliers.CharismaLevelMultiplier,
value: Player.mults.charisma,
effValue: Player.mults.charisma * BitNodeMultipliers.CharismaLevelMultiplier,
},
{
mult: "Charisma Experience",
value: player.mults.charisma_exp,
value: Player.mults.charisma_exp,
},
]}
color={Settings.theme.cha}
@@ -473,24 +468,24 @@ export function CharacterStats(): React.ReactElement {
rows={[
{
mult: "Hacknet Node Production",
value: player.mults.hacknet_node_money,
effValue: player.mults.hacknet_node_money * BitNodeMultipliers.HacknetNodeMoney,
value: Player.mults.hacknet_node_money,
effValue: Player.mults.hacknet_node_money * BitNodeMultipliers.HacknetNodeMoney,
},
{
mult: "Hacknet Node Purchase Cost",
value: player.mults.hacknet_node_purchase_cost,
value: Player.mults.hacknet_node_purchase_cost,
},
{
mult: "Hacknet Node RAM Upgrade Cost",
value: player.mults.hacknet_node_ram_cost,
value: Player.mults.hacknet_node_ram_cost,
},
{
mult: "Hacknet Node Core Purchase Cost",
value: player.mults.hacknet_node_core_cost,
value: Player.mults.hacknet_node_core_cost,
},
{
mult: "Hacknet Node Level Upgrade Cost",
value: player.mults.hacknet_node_level_cost,
value: Player.mults.hacknet_node_level_cost,
},
]}
color={Settings.theme.primary}
@@ -499,19 +494,19 @@ export function CharacterStats(): React.ReactElement {
rows={[
{
mult: "Company Reputation Gain",
value: player.mults.company_rep,
value: Player.mults.company_rep,
color: Settings.theme.rep,
},
{
mult: "Faction Reputation Gain",
value: player.mults.faction_rep,
effValue: player.mults.faction_rep * BitNodeMultipliers.FactionWorkRepGain,
value: Player.mults.faction_rep,
effValue: Player.mults.faction_rep * BitNodeMultipliers.FactionWorkRepGain,
color: Settings.theme.rep,
},
{
mult: "Salary",
value: player.mults.work_money,
effValue: player.mults.work_money * BitNodeMultipliers.CompanyWorkMoney,
value: Player.mults.work_money,
effValue: Player.mults.work_money * BitNodeMultipliers.CompanyWorkMoney,
color: Settings.theme.money,
},
]}
@@ -521,35 +516,35 @@ export function CharacterStats(): React.ReactElement {
rows={[
{
mult: "Crime Success Chance",
value: player.mults.crime_success,
value: Player.mults.crime_success,
},
{
mult: "Crime Money",
value: player.mults.crime_money,
effValue: player.mults.crime_money * BitNodeMultipliers.CrimeMoney,
value: Player.mults.crime_money,
effValue: Player.mults.crime_money * BitNodeMultipliers.CrimeMoney,
color: Settings.theme.money,
},
]}
color={Settings.theme.combat}
/>
{player.canAccessBladeburner() && BitNodeMultipliers.BladeburnerRank > 0 && (
{Player.canAccessBladeburner() && BitNodeMultipliers.BladeburnerRank > 0 && (
<MultiplierTable
rows={[
{
mult: "Bladeburner Success Chance",
value: player.mults.bladeburner_success_chance,
value: Player.mults.bladeburner_success_chance,
},
{
mult: "Bladeburner Max Stamina",
value: player.mults.bladeburner_max_stamina,
value: Player.mults.bladeburner_max_stamina,
},
{
mult: "Bladeburner Stamina Gain",
value: player.mults.bladeburner_stamina_gain,
value: Player.mults.bladeburner_stamina_gain,
},
{
mult: "Bladeburner Field Analysis",
value: player.mults.bladeburner_analysis,
value: Player.mults.bladeburner_analysis,
},
]}
color={Settings.theme.primary}
@@ -576,7 +571,7 @@ export function CharacterStats(): React.ReactElement {
{showBitNodeMults && (
<Paper sx={{ p: 1, mb: 1 }}>
<Typography variant="h5">BitNode Multipliers</Typography>
<BitNodeMultipliersDisplay n={player.bitNodeN} />
<BitNodeMultipliersDisplay n={Player.bitNodeN} />
</Paper>
)}
-19
View File
@@ -1,19 +0,0 @@
import React, { useContext } from "react";
import { IPlayer } from "../PersonObjects/IPlayer";
import { IRouter } from "./Router";
export const Context: {
Player: React.Context<IPlayer>;
Router: React.Context<IRouter>;
} = {
Player: React.createContext<IPlayer>({} as IPlayer),
Router: React.createContext<IRouter>({} as IRouter),
};
export const use: {
Player: () => IPlayer;
Router: () => IRouter;
} = {
Player: () => useContext(Context.Player),
Router: () => useContext(Context.Router),
};
+1 -3
View File
@@ -64,8 +64,6 @@ import { PromptManager } from "./React/PromptManager";
import { InvitationModal } from "../Faction/ui/InvitationModal";
import { calculateAchievements } from "../Achievements/Achievements";
import { enterBitNode } from "../RedPill";
import { Context } from "./Context";
import { RecoveryMode, RecoveryRoot } from "./React/RecoveryRoot";
import { AchievementsRoot } from "../Achievements/AchievementsRoot";
import { ErrorBoundary } from "./ErrorBoundary";
@@ -316,7 +314,7 @@ export function GameRoot(): React.ReactElement {
break;
}
case Page.BitVerse: {
mainPage = <BitverseRoot flume={flume} enter={enterBitNode} quick={quick} />;
mainPage = <BitverseRoot flume={flume} quick={quick} />;
withSidebar = false;
withPopups = false;
break;
+54 -61
View File
@@ -20,7 +20,8 @@ import SaveIcon from "@mui/icons-material/Save";
import ClearAllIcon from "@mui/icons-material/ClearAll";
import { Settings } from "../../Settings/Settings";
import { use } from "../Context";
import { Router } from "../GameRoot";
import { Player } from "../../Player";
import { StatsProgressOverviewCell } from "./StatsProgressBar";
import { BitNodeMultipliers } from "../../BitNode/BitNodeMultipliers";
@@ -42,10 +43,9 @@ interface IProps {
function Intelligence(): React.ReactElement {
const theme = useTheme();
const player = use.Player();
const classes = useStyles();
if (player.skills.intelligence === 0) return <></>;
const progress = player.calculateSkillProgress(player.exp.intelligence);
if (Player.skills.intelligence === 0) return <></>;
const progress = Player.calculateSkillProgress(Player.exp.intelligence);
return (
<>
@@ -55,7 +55,7 @@ function Intelligence(): React.ReactElement {
</TableCell>
<TableCell align="right" classes={{ root: classes.cell }}>
<Typography classes={{ root: classes.int }}>
{numeralWrapper.formatSkill(player.skills.intelligence)}
{numeralWrapper.formatSkill(Player.skills.intelligence)}
</Typography>
</TableCell>
<TableCell align="right" classes={{ root: classes.cell }}>
@@ -75,9 +75,8 @@ function Intelligence(): React.ReactElement {
}
function Bladeburner(): React.ReactElement {
const player = use.Player();
const classes = useStyles();
const bladeburner = player.bladeburner;
const bladeburner = Player.bladeburner;
if (bladeburner === null) return <></>;
const action = bladeburner.getTypeAndNameFromActionId(bladeburner.action);
if (action.type === "Idle") return <></>;
@@ -141,32 +140,30 @@ function WorkInProgressOverview({
}
function Work(): React.ReactElement {
const player = use.Player();
const router = use.Router();
const onClickFocus = (): void => {
player.startFocusing();
router.toWork();
Player.startFocusing();
Router.toWork();
};
if (player.currentWork === null || player.focus) return <></>;
if (Player.currentWork === null || Player.focus) return <></>;
let details = <></>;
let header = <></>;
let innerText = <></>;
if (isCrimeWork(player.currentWork)) {
const crime = player.currentWork.getCrime();
const perc = (player.currentWork.unitCompleted / crime.time) * 100;
if (isCrimeWork(Player.currentWork)) {
const crime = Player.currentWork.getCrime();
const perc = (Player.currentWork.unitCompleted / crime.time) * 100;
details = <>{player.currentWork.crimeType}</>;
header = <>You are attempting to {player.currentWork.crimeType}</>;
details = <>{Player.currentWork.crimeType}</>;
header = <>You are attempting to {Player.currentWork.crimeType}</>;
innerText = <>{perc.toFixed(2)}%</>;
}
if (isClassWork(player.currentWork)) {
details = <>{player.currentWork.getClass().youAreCurrently}</>;
header = <>You are {player.currentWork.getClass().youAreCurrently}</>;
innerText = <>{convertTimeMsToTimeElapsedString(player.currentWork.cyclesWorked * CONSTANTS._idleSpeed)}</>;
if (isClassWork(Player.currentWork)) {
details = <>{Player.currentWork.getClass().youAreCurrently}</>;
header = <>You are {Player.currentWork.getClass().youAreCurrently}</>;
innerText = <>{convertTimeMsToTimeElapsedString(Player.currentWork.cyclesWorked * CONSTANTS._idleSpeed)}</>;
}
if (isCreateProgramWork(player.currentWork)) {
const create = player.currentWork;
if (isCreateProgramWork(Player.currentWork)) {
const create = Player.currentWork;
details = <>Coding {create.programName}</>;
header = <>Creating a program</>;
innerText = (
@@ -175,8 +172,8 @@ function Work(): React.ReactElement {
</>
);
}
if (isGraftingWork(player.currentWork)) {
const graft = player.currentWork;
if (isGraftingWork(Player.currentWork)) {
const graft = Player.currentWork;
details = <>Grafting {graft.augmentation}</>;
header = <>Grafting an Augmentation</>;
innerText = (
@@ -186,8 +183,8 @@ function Work(): React.ReactElement {
);
}
if (isFactionWork(player.currentWork)) {
const factionWork = player.currentWork;
if (isFactionWork(Player.currentWork)) {
const factionWork = Player.currentWork;
header = (
<>
Working for <strong>{factionWork.factionName}</strong>
@@ -201,11 +198,11 @@ function Work(): React.ReactElement {
</>
);
}
if (isCompanyWork(player.currentWork)) {
const companyWork = player.currentWork;
if (isCompanyWork(Player.currentWork)) {
const companyWork = Player.currentWork;
details = (
<>
{player.jobs[companyWork.companyName]} at <strong>{companyWork.companyName}</strong>
{Player.jobs[companyWork.companyName]} at <strong>{companyWork.companyName}</strong>
</>
);
header = (
@@ -215,7 +212,7 @@ function Work(): React.ReactElement {
);
innerText = (
<>
<Reputation reputation={companyWork.getCompany().playerReputation} /> rep
<Reputation reputation={companyWork.getCompany().PlayerReputation} /> rep
<br />(
<ReputationRate reputation={companyWork.getGainRates().reputation * (1000 / CONSTANTS._idleSpeed)} />)
</>
@@ -281,41 +278,37 @@ 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.exp.hacking,
player.mults.hacking * BitNodeMultipliers.HackingLevelMultiplier,
const hackingProgress = Player.calculateSkillProgress(
Player.exp.hacking,
Player.mults.hacking * BitNodeMultipliers.HackingLevelMultiplier,
);
const strengthProgress = player.calculateSkillProgress(
player.exp.strength,
player.mults.strength * BitNodeMultipliers.StrengthLevelMultiplier,
const strengthProgress = Player.calculateSkillProgress(
Player.exp.strength,
Player.mults.strength * BitNodeMultipliers.StrengthLevelMultiplier,
);
const defenseProgress = player.calculateSkillProgress(
player.exp.defense,
player.mults.defense * BitNodeMultipliers.DefenseLevelMultiplier,
const defenseProgress = Player.calculateSkillProgress(
Player.exp.defense,
Player.mults.defense * BitNodeMultipliers.DefenseLevelMultiplier,
);
const dexterityProgress = player.calculateSkillProgress(
player.exp.dexterity,
player.mults.dexterity * BitNodeMultipliers.DexterityLevelMultiplier,
const dexterityProgress = Player.calculateSkillProgress(
Player.exp.dexterity,
Player.mults.dexterity * BitNodeMultipliers.DexterityLevelMultiplier,
);
const agilityProgress = player.calculateSkillProgress(
player.exp.agility,
player.mults.agility * BitNodeMultipliers.AgilityLevelMultiplier,
const agilityProgress = Player.calculateSkillProgress(
Player.exp.agility,
Player.mults.agility * BitNodeMultipliers.AgilityLevelMultiplier,
);
const charismaProgress = player.calculateSkillProgress(
player.exp.charisma,
player.mults.charisma * BitNodeMultipliers.CharismaLevelMultiplier,
const charismaProgress = Player.calculateSkillProgress(
Player.exp.charisma,
Player.mults.charisma * BitNodeMultipliers.CharismaLevelMultiplier,
);
return (
@@ -328,7 +321,7 @@ export function CharacterOverview({ save, killScripts }: IProps): React.ReactEle
</TableCell>
<TableCell align="right" classes={{ root: classes.cellNone }}>
<Typography classes={{ root: classes.hp }}>
{numeralWrapper.formatHp(player.hp.current)}&nbsp;/&nbsp;{numeralWrapper.formatHp(player.hp.max)}
{numeralWrapper.formatHp(Player.hp.current)}&nbsp;/&nbsp;{numeralWrapper.formatHp(Player.hp.max)}
</Typography>
</TableCell>
<TableCell align="right" classes={{ root: classes.cellNone }}>
@@ -343,7 +336,7 @@ export function CharacterOverview({ save, killScripts }: IProps): React.ReactEle
<Typography classes={{ root: classes.money }}>Money&nbsp;</Typography>
</TableCell>
<TableCell align="right" classes={{ root: classes.cellNone }}>
<Typography classes={{ root: classes.money }}>{numeralWrapper.formatMoney(player.money)}</Typography>
<Typography classes={{ root: classes.money }}>{numeralWrapper.formatMoney(Player.money)}</Typography>
</TableCell>
<TableCell align="right" classes={{ root: classes.cellNone }}>
<Typography id="overview-money-hook" classes={{ root: classes.money }}>
@@ -358,7 +351,7 @@ export function CharacterOverview({ save, killScripts }: IProps): React.ReactEle
</TableCell>
<TableCell align="right" classes={{ root: classes.cellNone }}>
<Typography classes={{ root: classes.hack }}>
{numeralWrapper.formatSkill(player.skills.hacking)}
{numeralWrapper.formatSkill(Player.skills.hacking)}
</Typography>
</TableCell>
</TableRow>
@@ -384,7 +377,7 @@ export function CharacterOverview({ save, killScripts }: IProps): React.ReactEle
</TableCell>
<TableCell align="right" classes={{ root: classes.cellNone }}>
<Typography classes={{ root: classes.combat }}>
{numeralWrapper.formatSkill(player.skills.strength)}
{numeralWrapper.formatSkill(Player.skills.strength)}
</Typography>
</TableCell>
<TableCell align="right" classes={{ root: classes.cellNone }}>
@@ -405,7 +398,7 @@ export function CharacterOverview({ save, killScripts }: IProps): React.ReactEle
</TableCell>
<TableCell align="right" classes={{ root: classes.cellNone }}>
<Typography classes={{ root: classes.combat }}>
{numeralWrapper.formatSkill(player.skills.defense)}
{numeralWrapper.formatSkill(Player.skills.defense)}
</Typography>
</TableCell>
<TableCell align="right" classes={{ root: classes.cellNone }}>
@@ -426,7 +419,7 @@ export function CharacterOverview({ save, killScripts }: IProps): React.ReactEle
</TableCell>
<TableCell align="right" classes={{ root: classes.cellNone }}>
<Typography classes={{ root: classes.combat }}>
{numeralWrapper.formatSkill(player.skills.dexterity)}
{numeralWrapper.formatSkill(Player.skills.dexterity)}
</Typography>
</TableCell>
<TableCell align="right" classes={{ root: classes.cellNone }}>
@@ -447,7 +440,7 @@ export function CharacterOverview({ save, killScripts }: IProps): React.ReactEle
</TableCell>
<TableCell align="right" classes={{ root: classes.cell }}>
<Typography classes={{ root: classes.combat }}>
{numeralWrapper.formatSkill(player.skills.agility)}
{numeralWrapper.formatSkill(Player.skills.agility)}
</Typography>
</TableCell>
<TableCell align="right" classes={{ root: classes.cell }}>
@@ -468,7 +461,7 @@ export function CharacterOverview({ save, killScripts }: IProps): React.ReactEle
</TableCell>
<TableCell align="right" classes={{ root: classes.cellNone }}>
<Typography classes={{ root: classes.cha }}>
{numeralWrapper.formatSkill(player.skills.charisma)}
{numeralWrapper.formatSkill(Player.skills.charisma)}
</Typography>
</TableCell>
<TableCell align="right" classes={{ root: classes.cellNone }}>
+2 -3
View File
@@ -7,7 +7,7 @@ import KeyboardArrowDownIcon from "@mui/icons-material/KeyboardArrowDown";
import KeyboardArrowUpIcon from "@mui/icons-material/KeyboardArrowUp";
import EqualizerIcon from "@mui/icons-material/Equalizer";
import SchoolIcon from "@mui/icons-material/School";
import { use } from "../Context";
import { Router } from "../GameRoot";
import { Page } from "../Router";
import { Settings } from "../../Settings/Settings";
import { Box, Button, Typography } from "@mui/material";
@@ -69,7 +69,6 @@ export function Overview({ children, mode }: IProps): React.ReactElement {
const [x, setX] = useState(Settings.overview.x);
const [y, setY] = useState(Settings.overview.y);
const classes = useStyles();
const router = use.Router();
const CurrentIcon = open ? KeyboardArrowUpIcon : KeyboardArrowDownIcon;
const LeftIcon = mode === "tutorial" ? SchoolIcon : EqualizerIcon;
@@ -113,7 +112,7 @@ export function Overview({ children, mode }: IProps): React.ReactElement {
node.dispatchEvent(clickEvent);
};
if (router.page() === Page.BitVerse || router.page() === Page.Loading || router.page() === Page.Recovery)
if (Router.page() === Page.BitVerse || Router.page() === Page.Loading || Router.page() === Page.Recovery)
return <></>;
return (
<Draggable handle=".drag" bounds="body" onStop={handleStop} defaultPosition={{ x, y }}>