mirror of
https://github.com/bitburner-official/bitburner-src.git
synced 2026-05-06 07:37:56 +02:00
MISC: A bunch of enums stuff. (#212)
* Some game enums moved to utils/enums. Others can eventually be moved there as well. * findEnumMember function for performing fuzzy matching of player input with enum members, without needing separate fuzzy functions for every enum. * Also used findEnumMember for safely loading save games (allows case changes in enum values) * Changed capitalization on some enums. * BREAKING: removed classGains work formulas function * Split ClassType enum into UniversityClassType and GymType. * Added universityGains and gymGains work formulas functions * Provided the new split enums to the player on ns.enums.
This commit is contained in:
@@ -13,15 +13,16 @@ import { Player } from "@player";
|
||||
import { Money } from "../../ui/React/Money";
|
||||
import { Router } from "../../ui/GameRoot";
|
||||
import { Box } from "@mui/material";
|
||||
import { ClassWork, ClassType, Classes } from "../../Work/ClassWork";
|
||||
import { ClassWork, Classes } from "../../Work/ClassWork";
|
||||
import { calculateCost } from "../../Work/Formulas";
|
||||
import { GymType } from "../../utils/enums";
|
||||
|
||||
type IProps = {
|
||||
loc: Location;
|
||||
};
|
||||
|
||||
export function GymLocation(props: IProps): React.ReactElement {
|
||||
function train(stat: ClassType): void {
|
||||
function train(stat: GymType): void {
|
||||
Player.startWork(
|
||||
new ClassWork({
|
||||
classType: stat,
|
||||
@@ -33,20 +34,20 @@ export function GymLocation(props: IProps): React.ReactElement {
|
||||
Router.toWork();
|
||||
}
|
||||
|
||||
const cost = calculateCost(Classes[ClassType.GymStrength], props.loc);
|
||||
const cost = calculateCost(Classes[GymType.strength], props.loc);
|
||||
|
||||
return (
|
||||
<Box sx={{ display: "grid", width: "fit-content" }}>
|
||||
<Button onClick={() => train(ClassType.GymStrength)}>
|
||||
<Button onClick={() => train(GymType.strength)}>
|
||||
Train Strength (<Money money={cost} forPurchase={true} /> / sec)
|
||||
</Button>
|
||||
<Button onClick={() => train(ClassType.GymDefense)}>
|
||||
<Button onClick={() => train(GymType.defense)}>
|
||||
Train Defense (<Money money={cost} forPurchase={true} /> / sec)
|
||||
</Button>
|
||||
<Button onClick={() => train(ClassType.GymDexterity)}>
|
||||
<Button onClick={() => train(GymType.dexterity)}>
|
||||
Train Dexterity (<Money money={cost} forPurchase={true} /> / sec)
|
||||
</Button>
|
||||
<Button onClick={() => train(ClassType.GymAgility)}>
|
||||
<Button onClick={() => train(GymType.agility)}>
|
||||
Train Agility (<Money money={cost} forPurchase={true} /> / sec)
|
||||
</Button>
|
||||
</Box>
|
||||
|
||||
@@ -36,7 +36,7 @@ export function SlumsLocation(): React.ReactElement {
|
||||
{crimes.map((crime) => (
|
||||
<Tooltip title={crime.tooltipText}>
|
||||
<Button onClick={(e) => doCrime(e, crime)}>
|
||||
{crime.name} ({numeralWrapper.formatPercentage(crime.successRate(Player))} chance of success)
|
||||
{crime.type} ({numeralWrapper.formatPercentage(crime.successRate(Player))} chance of success)
|
||||
</Button>
|
||||
</Tooltip>
|
||||
))}
|
||||
|
||||
@@ -14,15 +14,16 @@ import { Router } from "../../ui/GameRoot";
|
||||
import { Player } from "@player";
|
||||
import { Box } from "@mui/material";
|
||||
|
||||
import { ClassWork, ClassType, Classes } from "../../Work/ClassWork";
|
||||
import { ClassWork, Classes } from "../../Work/ClassWork";
|
||||
import { calculateCost } from "../../Work/Formulas";
|
||||
import { UniversityClassType } from "../../utils/enums";
|
||||
|
||||
type IProps = {
|
||||
loc: Location;
|
||||
};
|
||||
|
||||
export function UniversityLocation(props: IProps): React.ReactElement {
|
||||
function take(classType: ClassType): void {
|
||||
function take(classType: UniversityClassType): void {
|
||||
Player.startWork(
|
||||
new ClassWork({
|
||||
classType: classType,
|
||||
@@ -34,11 +35,11 @@ export function UniversityLocation(props: IProps): React.ReactElement {
|
||||
Router.toWork();
|
||||
}
|
||||
|
||||
const dataStructuresCost = calculateCost(Classes[ClassType.DataStructures], props.loc);
|
||||
const networksCost = calculateCost(Classes[ClassType.Networks], props.loc);
|
||||
const algorithmsCost = calculateCost(Classes[ClassType.Algorithms], props.loc);
|
||||
const managementCost = calculateCost(Classes[ClassType.Management], props.loc);
|
||||
const leadershipCost = calculateCost(Classes[ClassType.Leadership], props.loc);
|
||||
const dataStructuresCost = calculateCost(Classes[UniversityClassType.dataStructures], props.loc);
|
||||
const networksCost = calculateCost(Classes[UniversityClassType.networks], props.loc);
|
||||
const algorithmsCost = calculateCost(Classes[UniversityClassType.algorithms], props.loc);
|
||||
const managementCost = calculateCost(Classes[UniversityClassType.management], props.loc);
|
||||
const leadershipCost = calculateCost(Classes[UniversityClassType.leadership], props.loc);
|
||||
|
||||
const earnHackingExpTooltip = `Gain hacking experience!`;
|
||||
const earnCharismaExpTooltip = `Gain charisma experience!`;
|
||||
@@ -46,34 +47,34 @@ export function UniversityLocation(props: IProps): React.ReactElement {
|
||||
return (
|
||||
<Box sx={{ display: "grid", width: "fit-content" }}>
|
||||
<Tooltip title={earnHackingExpTooltip}>
|
||||
<Button onClick={() => take(ClassType.StudyComputerScience)}>Study Computer Science (free)</Button>
|
||||
<Button onClick={() => take(UniversityClassType.computerScience)}>Study Computer Science (free)</Button>
|
||||
</Tooltip>
|
||||
<Tooltip title={earnHackingExpTooltip}>
|
||||
<Button onClick={() => take(ClassType.DataStructures)}>
|
||||
<Button onClick={() => take(UniversityClassType.dataStructures)}>
|
||||
Take Data Structures course (
|
||||
<Money money={dataStructuresCost} forPurchase={true} /> / sec)
|
||||
</Button>
|
||||
</Tooltip>
|
||||
<Tooltip title={earnHackingExpTooltip}>
|
||||
<Button onClick={() => take(ClassType.Networks)}>
|
||||
<Button onClick={() => take(UniversityClassType.networks)}>
|
||||
Take Networks course (
|
||||
<Money money={networksCost} forPurchase={true} /> / sec)
|
||||
</Button>
|
||||
</Tooltip>
|
||||
<Tooltip title={earnHackingExpTooltip}>
|
||||
<Button onClick={() => take(ClassType.Algorithms)}>
|
||||
<Button onClick={() => take(UniversityClassType.algorithms)}>
|
||||
Take Algorithms course (
|
||||
<Money money={algorithmsCost} forPurchase={true} /> / sec)
|
||||
</Button>
|
||||
</Tooltip>
|
||||
<Tooltip title={earnCharismaExpTooltip}>
|
||||
<Button onClick={() => take(ClassType.Management)}>
|
||||
<Button onClick={() => take(UniversityClassType.management)}>
|
||||
Take Management course (
|
||||
<Money money={managementCost} forPurchase={true} /> / sec)
|
||||
</Button>
|
||||
</Tooltip>
|
||||
<Tooltip title={earnCharismaExpTooltip}>
|
||||
<Button onClick={() => take(ClassType.Leadership)}>
|
||||
<Button onClick={() => take(UniversityClassType.leadership)}>
|
||||
Take Leadership course (
|
||||
<Money money={leadershipCost} forPurchase={true} /> / sec)
|
||||
</Button>
|
||||
|
||||
Reference in New Issue
Block a user