bitburner-src/src/Bladeburner/ui/SkillElem.tsx

65 lines
2.0 KiB
TypeScript
Raw Normal View History

2021-08-19 07:45:26 +02:00
import React from "react";
2021-06-18 09:38:17 +02:00
import { CopyableText } from "../../ui/React/CopyableText";
2021-09-25 20:42:57 +02:00
import { formatNumber } from "../../utils/StringHelperFunctions";
import { IBladeburner } from "../IBladeburner";
2021-06-18 09:38:17 +02:00
2021-09-27 23:09:48 +02:00
import Typography from "@mui/material/Typography";
import IconButton from "@mui/material/IconButton";
import Box from "@mui/material/Box";
import Paper from "@mui/material/Paper";
import AddIcon from "@mui/icons-material/Add";
import CloseIcon from "@mui/icons-material/Close";
2021-06-18 09:38:17 +02:00
interface IProps {
2021-09-05 01:09:30 +02:00
skill: any;
bladeburner: IBladeburner;
onUpgrade: () => void;
2021-06-18 09:38:17 +02:00
}
export function SkillElem(props: IProps): React.ReactElement {
2021-09-05 01:09:30 +02:00
const skillName = props.skill.name;
let currentLevel = 0;
2021-09-09 05:47:34 +02:00
if (props.bladeburner.skills[skillName] && !isNaN(props.bladeburner.skills[skillName])) {
2021-09-05 01:09:30 +02:00
currentLevel = props.bladeburner.skills[skillName];
}
const pointCost = props.skill.calculateCost(currentLevel);
2021-06-18 09:38:17 +02:00
2021-09-05 01:09:30 +02:00
const canLevel = props.bladeburner.skillPoints >= pointCost;
2021-09-09 05:47:34 +02:00
const maxLvl = props.skill.maxLvl ? currentLevel >= props.skill.maxLvl : false;
2021-06-18 09:38:17 +02:00
2021-09-05 01:09:30 +02:00
function onClick(): void {
if (props.bladeburner.skillPoints < pointCost) return;
props.bladeburner.skillPoints -= pointCost;
props.bladeburner.upgradeSkill(props.skill);
props.onUpgrade();
}
2021-06-18 09:38:17 +02:00
2021-09-05 01:09:30 +02:00
return (
2021-09-27 23:09:48 +02:00
<Paper sx={{ my: 1, p: 1 }}>
<Box display="flex" flexDirection="row" alignItems="center">
<Typography>
<CopyableText value={props.skill.name} />
</Typography>
{!canLevel || maxLvl ? (
<IconButton disabled>
<CloseIcon />
</IconButton>
) : (
<IconButton onClick={onClick}>
<AddIcon />
</IconButton>
)}
</Box>
2021-09-05 01:09:30 +02:00
<br />
<br />
2021-09-27 23:09:48 +02:00
<Typography>Level: {currentLevel}</Typography>
2021-09-05 01:09:30 +02:00
{maxLvl ? (
2021-09-27 23:09:48 +02:00
<Typography>MAX LEVEL</Typography>
2021-09-05 01:09:30 +02:00
) : (
2021-09-27 23:09:48 +02:00
<Typography>Skill Points required: {formatNumber(pointCost, 0)}</Typography>
2021-09-05 01:09:30 +02:00
)}
2021-09-27 23:09:48 +02:00
<Typography>{props.skill.desc}</Typography>
</Paper>
2021-09-05 01:09:30 +02:00
);
}