import React, { useCallback } from "react"; import { Accordion, AccordionSummary, AccordionDetails, Button, ButtonGroup, Typography } from "@mui/material"; import ExpandMoreIcon from "@mui/icons-material/ExpandMore"; import { makeStyles } from "@mui/styles"; import { Player } from "@player"; import { Sleeve } from "../../PersonObjects/Sleeve/Sleeve"; import { ButtonWithTooltip } from "../../ui/Components/ButtonWithTooltip"; import { MaxSleevesFromCovenant } from "../../PersonObjects/Sleeve/SleeveCovenantPurchases"; // Update as additional BitNodes get implemented const validSFN = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]; const useStyles = makeStyles({ group: { display: "inline-flex", placeItems: "center", }, extraInfo: { marginLeft: "0.5em", marginRight: "0.5em", }, }); export function SourceFilesDev({ parentRerender }: { parentRerender: () => void }): React.ReactElement { const classes = useStyles(); const setSF = useCallback( (sfN: number, sfLvl: number) => () => { if (sfN === 9) { Player.hacknetNodes = []; } if (sfLvl === 0) { Player.sourceFiles.delete(sfN); if (sfN === 10) Sleeve.recalculateNumOwned(); parentRerender(); return; } Player.sourceFiles.set(sfN, sfLvl); if (sfN === 10) Sleeve.recalculateNumOwned(); parentRerender(); }, [parentRerender], ); const setAllSF = useCallback((sfLvl: number) => () => validSFN.forEach((sfN) => setSF(sfN, sfLvl)()), [setSF]); const clearExploits = () => (Player.exploits = []); const addSleeve = useCallback(() => { if (Player.sleevesFromCovenant >= 10) return; Player.sleevesFromCovenant += 1; Sleeve.recalculateNumOwned(); parentRerender(); }, [parentRerender]); const removeSleeve = useCallback(() => { if (Player.sleevesFromCovenant <= 0) return; Player.sleevesFromCovenant -= 1; Sleeve.recalculateNumOwned(); parentRerender(); }, [parentRerender]); const devLvls = [0, 1, 2, 3]; const buttonRow = (sfN?: number) => { const title = sfN ? `SF-${sfN}` : "Set All"; const level = sfN ? Player.sourceFileLvl(sfN) : 0; return ( {title} {devLvls.map((lvl) => ( ))} {sfN === 12 && [1, 10, 100].map((numLevels) => ( ))} {sfN && {`Level: ${level}`}} {sfN === 10 && ( <> -1 sleeve = MaxSleevesFromCovenant ? "Already at maximum" : ""} onClick={addSleeve} > +1 sleeve Extra sleeves: {Player.sleevesFromCovenant} )} ); }; return ( }> Source-Files {[undefined, ...validSFN].map((sfN) => buttonRow(sfN))}
Exploits:
); }