import React, { useState, useEffect } from "react"; import { IEngine } from "../../IEngine"; import { IPlayer } from "../../PersonObjects/IPlayer"; import { iTutorialSteps, iTutorialNextStep, ITutorial } from "../../InteractiveTutorial"; import { getAvailableCreatePrograms } from "../../Programs/ProgramHelpers"; import { ICorporation } from "../../Corporation/ICorporation"; import { IGang } from "../../Gang/IGang"; interface IProps { player: IPlayer; engine: IEngine; } export function SidebarRoot(props: IProps): React.ReactElement { const setRerender = useState(false)[1]; function rerender(): void { setRerender((old) => !old); } const [divisionName, setDivisionName] = useState("Overview"); useEffect(() => { const id = setInterval(rerender, 20); return () => clearInterval(id); }, []); const [hackingOpen, setHackingOpen] = useState(true); const [characterOpen, setCharacterOpen] = useState(true); const [worldOpen, setWorldOpen] = useState(true); const [helpOpen, setHelpOpen] = useState(true); const flashTerminal = ITutorial.currStep === iTutorialSteps.CharacterGoToTerminalPage || ITutorial.currStep === iTutorialSteps.ActiveScriptsPage; const flashStats = ITutorial.currStep === iTutorialSteps.GoToCharacterPage; const flashActiveScripts = ITutorial.currStep === iTutorialSteps.TerminalGoToActiveScriptsPage; const flashHacknet = ITutorial.currStep === iTutorialSteps.GoToHacknetNodesPage; const flashCity = ITutorial.currStep === iTutorialSteps.HacknetNodesGoToWorldPage; const flashTutorial = ITutorial.currStep === iTutorialSteps.WorldDescription; function clickTerminal() { props.engine.loadTerminalContent(); if (flashTerminal) iTutorialNextStep(); } function clickStats() { props.engine.loadTerminalContent(); if (flashStats) iTutorialNextStep(); } function clickActiveScripts() { props.engine.loadActiveScriptsContent(); if (flashActiveScripts) iTutorialNextStep(); } function clickHacknet() { props.engine.loadHacknetNodesContent(); if (flashHacknet) iTutorialNextStep(); } function clickCity() { props.engine.loadLocationContent(); if (flashCity) iTutorialNextStep(); } function clickTutorial() { props.engine.loadTutorialContent(); if (flashTutorial) iTutorialNextStep(); } const programCount = getAvailableCreatePrograms(props.player).length; const canCreateProgram = programCount > 0 || props.player.augmentations.length > 0 || props.player.queuedAugmentations.length > 0 || props.player.sourceFiles.length > 0; const canOpenFactions = props.player.factionInvitations.length > 0 || props.player.factions.length > 0 || props.player.augmentations.length > 0 || props.player.queuedAugmentations.length > 0 || props.player.sourceFiles.length > 0; const canOpenAugmentations = props.player.augmentations.length > 0 || props.player.queuedAugmentations.length > 0 || props.player.sourceFiles.length > 0; const canOpenSleeves = props.player.sleeves.length > 0; const canCorporation = props.player.corporation != null; const canGang = props.player.gang != null; return ( ); }