diff --git a/src/DevMenu.tsx b/src/DevMenu.tsx index 856e44f9c..62300a430 100644 --- a/src/DevMenu.tsx +++ b/src/DevMenu.tsx @@ -22,6 +22,7 @@ import { StockMarket } from "./DevMenu/ui/StockMarket"; import { Sleeves } from "./DevMenu/ui/Sleeves"; import { Stanek } from "./DevMenu/ui/Stanek"; import { TimeSkip } from "./DevMenu/ui/TimeSkip"; +import { Achievements } from "./DevMenu/ui/Achievements"; import Typography from "@mui/material/Typography"; import { Exploit } from "./Exploits/Exploit"; @@ -61,6 +62,7 @@ export function DevMenuRoot(props: IProps): React.ReactElement { {props.player.augmentations.some((aug) => aug.name === AugmentationNames.StaneksGift1) && } + > ); } diff --git a/src/DevMenu/ui/Achievements.tsx b/src/DevMenu/ui/Achievements.tsx new file mode 100644 index 000000000..2d257dcd3 --- /dev/null +++ b/src/DevMenu/ui/Achievements.tsx @@ -0,0 +1,109 @@ +import React, { useState } from "react"; + +import Accordion from "@mui/material/Accordion"; +import AccordionSummary from "@mui/material/AccordionSummary"; +import AccordionDetails from "@mui/material/AccordionDetails"; +import ExpandMoreIcon from "@mui/icons-material/ExpandMore"; +import Typography from "@mui/material/Typography"; +import Button from "@mui/material/Button"; +import ButtonGroup from "@mui/material/ButtonGroup"; +import { Tooltip } from "@mui/material"; +import LockIcon from '@mui/icons-material/Lock'; +import LockOpenIcon from '@mui/icons-material/LockOpen'; + +import { IPlayer } from "../../PersonObjects/IPlayer"; +import { achievements } from "../../Achievements/Achievements"; +import { IEngine } from "../../IEngine"; + +interface IProps { + player: IPlayer; + engine: IEngine; +} + +export function Achievements(props: IProps): React.ReactElement { + const [playerAchievement, setPlayerAchievements] = useState(props.player.achievements.map(m => m.ID)); + + function grantAchievement(id: string): void { + props.player.giveAchievement(id); + setPlayerAchievements(props.player.achievements.map(m => m.ID)); + } + + function grantAllAchievements(): void { + Object.values(achievements).forEach(a => props.player.giveAchievement(a.ID)); + setPlayerAchievements(props.player.achievements.map(m => m.ID)); + } + + function removeAchievement(id: string): void { + props.player.achievements = props.player.achievements.filter(a => a.ID !== id); + setPlayerAchievements(props.player.achievements.map(m => m.ID)); + } + + function clearAchievements(): void { + props.player.achievements = []; + setPlayerAchievements(props.player.achievements.map(m => m.ID)); + } + + function disableEngine(): void { + props.engine.Counters.achievementsCounter = Number.MAX_VALUE; + } + + function enableEngine(): void { + props.engine.Counters.achievementsCounter = 0 + } + + return ( + + }> + Achievements + + + + + + + + + Achievements: + + + + Grant All + Clear + Disable Engine + Enable Engine + + + + {Object.values(achievements).map((i) => { + const achieved = playerAchievement.includes(i.ID); + return + + {achieved ? ( + + + + ) : ( + + + + )} + + + {i.ID}{i.Description}>}> + {i.Name}: + + + + + grantAchievement(i.ID)}>Grant + removeAchievement(i.ID)}>Clear + + + + })} + + + + + ); +}