import React, { useState } from "react"; import { Accordion, AccordionSummary, AccordionDetails, Button, FormControl, FormControlLabel, IconButton, InputLabel, MenuItem, Select, SelectChangeEvent, Typography, RadioGroup, Radio, } from "@mui/material"; import Tooltip from "@mui/material/Tooltip"; import ExpandMoreIcon from "@mui/icons-material/ExpandMore"; import ReplyAllIcon from "@mui/icons-material/ReplyAll"; import ReplyIcon from "@mui/icons-material/Reply"; import ChatIcon from "@mui/icons-material/Chat"; import ChatBubbleIcon from "@mui/icons-material/ChatBubble"; import { Player } from "@player"; import { FactionName, FactionDiscovery } from "@enums"; import { Adjuster } from "./Adjuster"; import { Factions } from "../../Faction/Factions"; import { getRecordValues } from "../../Types/Record"; import { getEnumHelper } from "../../utils/EnumHelper"; const bigNumber = 1e12; export function FactionsDev(): React.ReactElement { const [factionName, setFactionName] = useState(FactionName.Illuminati); const [factionDiscovery, setFactionDiscovery] = useState(Factions[FactionName.Illuminati].discovery); function setFactionDropdown(event: SelectChangeEvent): void { if (!getEnumHelper("FactionName").isMember(event.target.value)) return; setFactionName(event.target.value); setFactionDiscovery(Factions[event.target.value].discovery); } function receiveInvite(): void { Player.receiveInvite(factionName); Factions[factionName].alreadyInvited = true; } function receiveAllInvites(): void { Object.values(FactionName).forEach((faction) => { Player.receiveInvite(faction); Factions[factionName].alreadyInvited = true; }); } function receiveRumor(): void { Player.receiveRumor(factionName); setFactionDiscovery(Factions[factionName].discovery); } function receiveAllRumors(): void { Object.values(FactionName).forEach((faction) => Player.receiveRumor(faction)); } function resetAllDiscovery(): void { Object.values(Factions).forEach((faction) => { faction.discovery = FactionDiscovery.unknown; }); Player.factionRumors.length = 0; setFactionDiscovery(Factions[factionName].discovery); } function modifyFactionRep(modifier: number): (x: number) => void { return function (reputation: number): void { const fac = Factions[factionName]; if (!isNaN(reputation)) { fac.playerReputation += reputation * modifier; } }; } function resetFactionRep(): void { const fac = Factions[factionName]; fac.playerReputation = 0; } function modifyFactionFavor(modifier: number): (x: number) => void { return function (favor: number): void { const fac = Factions[factionName]; if (!isNaN(favor)) { fac.favor += favor * modifier; } }; } function resetFactionFavor(): void { const fac = Factions[factionName]; fac.favor = 0; } function tonsOfRep(): void { for (const faction of getRecordValues(Factions)) { faction.playerReputation = bigNumber; } } function resetAllRep(): void { for (const faction of getRecordValues(Factions)) { faction.playerReputation = 0; } } function tonsOfFactionFavor(): void { for (const faction of getRecordValues(Factions)) { faction.favor = bigNumber; } } function resetAllFactionFavor(): void { for (const faction of getRecordValues(Factions)) { faction.favor = 0; } } function setDiscovery(event: React.ChangeEvent, value: string): void { const disco = value as FactionDiscovery; Factions[factionName].discovery = disco; setFactionDiscovery(disco); } return ( }> Factions
Faction: Faction
Discovery: {Object.entries(FactionDiscovery).map(([discoveryLabel, discovery]) => ( } /> ))}
Reputation: modifyFactionRep(1)(bigNumber)} add={modifyFactionRep(1)} subtract={modifyFactionRep(-1)} reset={resetFactionRep} />
Favor: modifyFactionFavor(1)(2000)} add={modifyFactionFavor(1)} subtract={modifyFactionFavor(-1)} reset={resetFactionFavor} />
All Factions:
All Reputation:
All Favor:
); }