bitburner-src/src/Faction/ui/GangButton.tsx

80 lines
2.1 KiB
TypeScript
Raw Normal View History

2022-04-25 18:02:37 +02:00
import { Button, Typography, Box, Paper, Tooltip } from "@mui/material";
import React, { useState } from "react";
import { GangConstants } from "../../Gang/data/Constants";
2022-09-13 00:00:09 +02:00
import { Router } from "../../ui/GameRoot";
2022-12-04 09:14:06 +01:00
import { Page } from "../../ui/Router";
import { Player } from "@player";
2022-04-25 18:02:37 +02:00
import { Faction } from "../Faction";
import { CreateGangModal } from "./CreateGangModal";
type IProps = {
faction: Faction;
};
export function GangButton({ faction }: IProps): React.ReactElement {
const [gangOpen, setGangOpen] = useState(false);
if (
!GangConstants.Names.includes(faction.name) || // not even a gang
2022-09-13 00:00:09 +02:00
!Player.isAwareOfGang() || // doesn't know about gang
(Player.gang && Player.getGangName() !== faction.name) // already in another gang
2022-04-25 18:02:37 +02:00
) {
return <></>;
}
let data = {
enabled: false,
title: "",
tooltip: "" as string | React.ReactElement,
description: "",
};
if (Player.gang) {
2022-04-25 18:02:37 +02:00
data = {
enabled: true,
title: "Manage Gang",
tooltip: "",
description: "Manage a gang for this Faction. Gangs will earn you money and faction reputation",
};
} else {
data = {
2022-09-13 00:00:09 +02:00
enabled: Player.canAccessGang(),
2022-04-25 18:02:37 +02:00
title: "Create Gang",
2022-09-13 00:00:09 +02:00
tooltip: !Player.canAccessGang() ? (
2022-04-25 18:02:37 +02:00
<Typography>Unlocked when reaching {GangConstants.GangKarmaRequirement} karma</Typography>
) : (
""
),
description: "Create a gang for this Faction. Gangs will earn you money and faction reputation",
};
}
const manageGang = (): void => {
// If player already has a gang, just go to the gang UI
2022-09-13 00:00:09 +02:00
if (Player.inGang()) {
2022-12-04 09:14:06 +01:00
return Router.toPage(Page.Gang);
2022-04-25 18:02:37 +02:00
}
setGangOpen(true);
};
return (
<>
<Box>
<Paper sx={{ my: 1, p: 1 }}>
<Tooltip title={data.tooltip}>
<span>
<Button onClick={manageGang} disabled={!data.enabled}>
{data.title}
</Button>
</span>
</Tooltip>
<Typography>{data.description}</Typography>
</Paper>
</Box>
<CreateGangModal facName={faction.name} open={gangOpen} onClose={() => setGangOpen(false)} />
</>
);
}