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";
|
2021-08-16 04:35:43 +02:00
|
|
|
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">
|
2021-10-01 21:39:56 +02:00
|
|
|
<CopyableText variant="h6" color="primary" value={props.skill.name} />
|
2021-09-27 23:09:48 +02:00
|
|
|
{!canLevel || maxLvl ? (
|
|
|
|
<IconButton disabled>
|
|
|
|
<CloseIcon />
|
|
|
|
</IconButton>
|
|
|
|
) : (
|
|
|
|
<IconButton onClick={onClick}>
|
|
|
|
<AddIcon />
|
|
|
|
</IconButton>
|
|
|
|
)}
|
|
|
|
</Box>
|
|
|
|
<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
|
|
|
);
|
|
|
|
}
|