UI: Add tooltip for reputation/favor in page of faction's augmentation list (#2268)

This commit is contained in:
catloversg
2025-07-25 12:43:26 +07:00
committed by GitHub
parent 8729dc3d1b
commit cd320c307d
4 changed files with 85 additions and 77 deletions

View File

@@ -10,13 +10,13 @@ import { PurchaseAugmentationsOrderSetting } from "../../Settings/SettingEnums";
import { Settings } from "../../Settings/Settings"; import { Settings } from "../../Settings/Settings";
import { Player } from "@player"; import { Player } from "@player";
import { formatBigNumber } from "../../ui/formatNumber"; import { formatBigNumber } from "../../ui/formatNumber";
import { Favor } from "../../ui/React/Favor";
import { Reputation } from "../../ui/React/Reputation";
import { Router } from "../../ui/GameRoot"; import { Router } from "../../ui/GameRoot";
import { Faction } from "../Faction"; import { Faction } from "../Faction";
import { getFactionAugmentationsFiltered, hasAugmentationPrereqs, purchaseAugmentation } from "../FactionHelpers"; import { getFactionAugmentationsFiltered, hasAugmentationPrereqs, purchaseAugmentation } from "../FactionHelpers";
import { CONSTANTS } from "../../Constants"; import { CONSTANTS } from "../../Constants";
import { useRerender } from "../../ui/React/hooks"; import { useRerender } from "../../ui/React/hooks";
import { ReputationInfo } from "../../ui/React/ReputationInfo";
import { FavorInfo } from "../../ui/React/FavorInfo";
/** Root React Component for displaying a faction's "Purchase Augmentations" page */ /** Root React Component for displaying a faction's "Purchase Augmentations" page */
export function AugmentationsPage({ faction }: { faction: Faction }): React.ReactElement { export function AugmentationsPage({ faction }: { faction: Faction }): React.ReactElement {
@@ -202,12 +202,11 @@ export function AugmentationsPage({ faction }: { faction: Faction }): React.Reac
my: 1, my: 1,
}} }}
> >
<>{multiplierComponent}</> {multiplierComponent}
<Typography> <Box>
<b>Reputation:</b> <Reputation reputation={faction.playerReputation} /> <ReputationInfo favor={faction.favor} playerReputation={faction.playerReputation} boldLabel={true} />
<br /> <FavorInfo favor={faction.favor} boldLabel={true} />
<b>Favor:</b> <Favor favor={faction.favor} /> </Box>
</Typography>
</Box> </Box>
<Box sx={{ display: "grid", gridTemplateColumns: "repeat(4, 1fr)" }}> <Box sx={{ display: "grid", gridTemplateColumns: "repeat(4, 1fr)" }}>
<Button onClick={() => switchSortOrder(PurchaseAugmentationsOrderSetting.Cost)}>Sort by Cost</Button> <Button onClick={() => switchSortOrder(PurchaseAugmentationsOrderSetting.Cost)}>Sort by Cost</Button>

View File

@@ -7,39 +7,17 @@ import React from "react";
import { Faction } from "../Faction"; import { Faction } from "../Faction";
import { FactionInfo } from "../FactionInfo"; import { FactionInfo } from "../FactionInfo";
import { Reputation } from "../../ui/React/Reputation";
import { Favor } from "../../ui/React/Favor";
import { MathJax } from "better-react-mathjax";
import { makeStyles } from "tss-react/mui";
import Typography from "@mui/material/Typography"; import Typography from "@mui/material/Typography";
import Tooltip from "@mui/material/Tooltip";
import Box from "@mui/material/Box";
import InfoIcon from "@mui/icons-material/Info";
import { useCycleRerender } from "../../ui/React/hooks"; import { useCycleRerender } from "../../ui/React/hooks";
import { addRepToFavor } from "../formulas/favor";
import { knowAboutBitverse } from "../../BitNode/BitNodeUtils"; import { knowAboutBitverse } from "../../BitNode/BitNodeUtils";
import { ReputationInfo } from "../../ui/React/ReputationInfo";
import { FavorInfo } from "../../ui/React/FavorInfo";
interface IProps { interface IProps {
faction: Faction; faction: Faction;
factionInfo: FactionInfo; factionInfo: FactionInfo;
} }
const useStyles = makeStyles()({
noformat: {
whiteSpace: "pre-wrap",
},
repFavorRow: {
display: "flex",
alignItems: "center",
whiteSpace: "pre-wrap",
},
infoIcon: {
fontSize: "1.1em",
marginLeft: "10px",
},
});
function DefaultAssignment(): React.ReactElement { function DefaultAssignment(): React.ReactElement {
return ( return (
<Typography> <Typography>
@@ -55,13 +33,12 @@ function DefaultAssignment(): React.ReactElement {
export function Info(props: IProps): React.ReactElement { export function Info(props: IProps): React.ReactElement {
useCycleRerender(); useCycleRerender();
const { classes } = useStyles();
const Assignment = props.factionInfo.assignment ?? DefaultAssignment; const Assignment = props.factionInfo.assignment ?? DefaultAssignment;
return ( return (
<> <>
<Typography classes={{ root: classes.noformat }}>{props.factionInfo.infoText}</Typography> <Typography sx={{ whiteSpace: "pre-wrap" }}>{props.factionInfo.infoText}</Typography>
{props.factionInfo.enemies.length > 0 && ( {props.factionInfo.enemies.length > 0 && (
<Typography component="div"> <Typography component="div">
<br /> <br />
@@ -69,50 +46,9 @@ export function Info(props: IProps): React.ReactElement {
</Typography> </Typography>
)} )}
<Typography>-------------------------</Typography> <Typography>-------------------------</Typography>
<Box display="flex"> <ReputationInfo favor={props.faction.favor} playerReputation={props.faction.playerReputation} />
<Tooltip
title={
<>
<Typography>
You will have <Favor favor={addRepToFavor(props.faction.favor, props.faction.playerReputation)} />{" "}
faction favor after installing an Augmentation.
</Typography>
<MathJax>{"\\(\\huge{r = \\text{total faction reputation}}\\)"}</MathJax>
<MathJax>{"\\(\\huge{favor=\\log_{1.02}\\left(1+\\frac{r}{25000}\\right)}\\)"}</MathJax>
</>
}
>
<Typography className={classes.repFavorRow}>
Reputation: <Reputation reputation={props.faction.playerReputation} />
<InfoIcon className={classes.infoIcon} />
</Typography>
</Tooltip>
</Box>
<Typography>-------------------------</Typography> <Typography>-------------------------</Typography>
<FavorInfo favor={props.faction.favor} />
<Box display="flex">
<Tooltip
title={
<>
<Typography>
Faction favor increases the rate at which you earn reputation for this faction by 1% per favor. Faction
favor is gained whenever you install an Augmentation. The amount of favor you gain depends on the total
amount of reputation you earned with this faction across all resets.
</Typography>
<MathJax>{"\\(\\huge{r = reputation}\\)"}</MathJax>
<MathJax>{"\\(\\huge{\\Delta r = \\Delta r \\times \\frac{100+favor}{100}}\\)"}</MathJax>
</>
}
>
<Typography className={classes.repFavorRow}>
Faction Favor: <Favor favor={props.faction.favor} />
<InfoIcon className={classes.infoIcon} />
</Typography>
</Tooltip>
</Box>
<Typography>-------------------------</Typography> <Typography>-------------------------</Typography>
<Assignment /> <Assignment />
</> </>

View File

@@ -0,0 +1,32 @@
import React from "react";
import { MathJax } from "better-react-mathjax";
import InfoIcon from "@mui/icons-material/Info";
import Tooltip from "@mui/material/Tooltip";
import Typography from "@mui/material/Typography";
import { Favor } from "../../ui/React/Favor";
export function FavorInfo({ favor, boldLabel }: { favor: number; boldLabel?: boolean }): React.ReactElement {
return (
<Tooltip
title={
<>
<Typography>
Faction favor increases the rate at which you earn reputation for this faction by 1% per favor. Faction
favor is gained whenever you install an Augmentation. The amount of favor you gain depends on the total
amount of reputation you earned with this faction across all resets.
</Typography>
<MathJax>{"\\(\\huge{r = reputation}\\)"}</MathJax>
<MathJax>{"\\(\\huge{\\Delta r = \\Delta r \\times \\frac{100+favor}{100}}\\)"}</MathJax>
</>
}
>
<Typography component="div" sx={{ display: "flex", alignItems: "center", whiteSpace: "pre-wrap" }}>
<Typography sx={{ fontWeight: `${boldLabel ? "bold" : "normal"}` }}>Favor: </Typography>
<Favor favor={favor} />
<InfoIcon sx={{ fontSize: "1.1em", marginLeft: "10px" }} />
</Typography>
</Tooltip>
);
}

View File

@@ -0,0 +1,41 @@
import React from "react";
import { MathJax } from "better-react-mathjax";
import InfoIcon from "@mui/icons-material/Info";
import Tooltip from "@mui/material/Tooltip";
import Typography from "@mui/material/Typography";
import { addRepToFavor } from "../../Faction/formulas/favor";
import { Favor } from "../../ui/React/Favor";
import { Reputation } from "./Reputation";
export function ReputationInfo({
favor,
playerReputation,
boldLabel,
}: {
favor: number;
playerReputation: number;
boldLabel?: boolean;
}): React.ReactElement {
return (
<Tooltip
title={
<>
<Typography>
You will have <Favor favor={addRepToFavor(favor, playerReputation)} /> faction favor after installing an
Augmentation.
</Typography>
<MathJax>{"\\(\\huge{r = \\text{total faction reputation}}\\)"}</MathJax>
<MathJax>{"\\(\\huge{favor=\\log_{1.02}\\left(1+\\frac{r}{25000}\\right)}\\)"}</MathJax>
</>
}
>
<Typography component="div" sx={{ display: "flex", alignItems: "center", whiteSpace: "pre-wrap" }}>
<Typography sx={{ fontWeight: `${boldLabel ? "bold" : "normal"}` }}>Reputation: </Typography>
<Reputation reputation={playerReputation} />
<InfoIcon sx={{ fontSize: "1.1em", marginLeft: "10px" }} />
</Typography>
</Tooltip>
);
}