bitburner-src/src/Infiltration/ui/Victory.tsx

98 lines
2.8 KiB
TypeScript
Raw Normal View History

import { Factions } from "../../Faction/Factions";
2021-09-05 01:09:30 +02:00
import React, { useState } from "react";
2021-09-17 01:23:03 +02:00
import Grid from "@mui/material/Grid";
import { Money } from "../../ui/React/Money";
import { Reputation } from "../../ui/React/Reputation";
import { BitNodeMultipliers } from "../../BitNode/BitNodeMultipliers";
2021-09-18 01:43:08 +02:00
import { use } from "../../ui/Context";
2021-10-01 19:08:37 +02:00
import Typography from "@mui/material/Typography";
import Button from "@mui/material/Button";
import MenuItem from "@mui/material/MenuItem";
import Select, { SelectChangeEvent } from "@mui/material/Select";
interface IProps {
2021-09-05 01:09:30 +02:00
StartingDifficulty: number;
Difficulty: number;
MaxLevel: number;
}
export function Victory(props: IProps): React.ReactElement {
2021-09-18 01:43:08 +02:00
const player = use.Player();
const router = use.Router();
2021-09-05 01:09:30 +02:00
const [faction, setFaction] = useState("none");
2021-09-05 01:09:30 +02:00
function quitInfiltration(): void {
2021-09-18 01:43:08 +02:00
router.toCity();
2021-09-05 01:09:30 +02:00
}
2021-09-05 01:09:30 +02:00
const levelBonus = props.MaxLevel * Math.pow(1.01, props.MaxLevel);
2021-09-05 01:09:30 +02:00
const repGain =
Math.pow(props.Difficulty + 1, 1.1) *
Math.pow(props.StartingDifficulty, 1.2) *
30 *
levelBonus *
BitNodeMultipliers.InfiltrationRep;
2021-09-05 01:09:30 +02:00
const moneyGain =
Math.pow(props.Difficulty + 1, 2) *
Math.pow(props.StartingDifficulty, 3) *
3e3 *
levelBonus *
BitNodeMultipliers.InfiltrationMoney;
2021-09-05 01:09:30 +02:00
function sell(): void {
2021-10-27 20:18:33 +02:00
player.gainMoney(moneyGain, "infiltration");
2021-09-05 01:09:30 +02:00
quitInfiltration();
}
2021-09-05 01:09:30 +02:00
function trade(): void {
if (faction === "none") return;
Factions[faction].playerReputation += repGain;
quitInfiltration();
}
2021-10-01 19:08:37 +02:00
function changeDropdown(event: SelectChangeEvent<string>): void {
2021-09-05 01:09:30 +02:00
setFaction(event.target.value);
}
2021-09-05 01:09:30 +02:00
return (
<>
<Grid container spacing={3}>
<Grid item xs={10}>
2021-10-01 19:08:37 +02:00
<Typography variant="h4">Infiltration successful!</Typography>
2021-09-05 01:09:30 +02:00
</Grid>
<Grid item xs={10}>
2021-10-01 19:08:37 +02:00
<Typography variant="h5" color="primary">
You can trade the confidential information you found for money or reputation.
</Typography>
<Select value={faction} onChange={changeDropdown}>
<MenuItem key={"none"} value={"none"}>
2021-09-05 01:09:30 +02:00
{"none"}
2021-10-01 19:08:37 +02:00
</MenuItem>
2021-09-18 01:43:08 +02:00
{player.factions
2021-09-05 01:09:30 +02:00
.filter((f) => Factions[f].getInfo().offersWork())
.map((f) => (
2021-10-01 19:08:37 +02:00
<MenuItem key={f} value={f}>
2021-09-05 01:09:30 +02:00
{f}
2021-10-01 19:08:37 +02:00
</MenuItem>
2021-09-05 01:09:30 +02:00
))}
2021-10-01 19:08:37 +02:00
</Select>
<Button onClick={trade}>
Trade for <Reputation reputation={repGain} /> reputation
</Button>
2021-09-05 01:09:30 +02:00
</Grid>
<Grid item xs={3}>
2021-10-01 19:08:37 +02:00
<Button onClick={sell}>
Sell for&nbsp;
<Money money={moneyGain} />
</Button>
</Grid>
2021-09-05 01:09:30 +02:00
<Grid item xs={3}>
2021-10-01 19:08:37 +02:00
<Button onClick={quitInfiltration}>Quit</Button>
2021-09-05 01:09:30 +02:00
</Grid>
</Grid>
</>
);
}