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

66 lines
1.8 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";
import { formatNumber } from "../../../utils/StringHelperFunctions";
import { IBladeburner } from "../IBladeburner";
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;
if (
props.bladeburner.skills[skillName] &&
!isNaN(props.bladeburner.skills[skillName])
) {
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;
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 (
<>
<h2 style={{ display: "inline-block" }}>
<CopyableText value={props.skill.name} />
</h2>
<a
onClick={onClick}
style={{ display: "inline-block", margin: "3px", padding: "3px" }}
className={
canLevel && !maxLvl ? "a-link-button" : "a-link-button-inactive"
}
>
Level
</a>
<br />
<br />
<p style={{ display: "block" }}>Level: {currentLevel}</p>
{maxLvl ? (
<p style={{ color: "red", display: "block" }}>MAX LEVEL</p>
) : (
<p style={{ display: "block" }}>
Skill Points required: {formatNumber(pointCost, 0)}
</p>
)}
<p
style={{ display: "inline-block" }}
dangerouslySetInnerHTML={{ __html: props.skill.desc }}
/>
</>
);
}