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:
Snarling
2022-11-20 08:37:11 -05:00
committed by GitHub
parent 629d610532
commit 88d51e9a7e
34 changed files with 346 additions and 432 deletions
+8 -7
View File
@@ -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>
+1 -1
View File
@@ -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 -13
View File
@@ -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>