From 7a2dd16092e95b73707bcedbb355fd72f427dafc Mon Sep 17 00:00:00 2001 From: Olivier Gagnon Date: Sun, 19 Sep 2021 17:05:27 -0400 Subject: [PATCH] Hacking missions inside GameRoot --- src/Faction/ui/FactionRoot.tsx | 3 +-- src/HackingMission/ui/HackingMissionRoot.tsx | 13 +++++++++++++ src/Missions.jsx | 2 ++ src/engine.jsx | 12 ------------ src/index.html | 12 ------------ src/ui/GameRoot.tsx | 13 +++++++++++-- src/ui/React/CharacterOverview.tsx | 1 - src/ui/React/Overview.tsx | 4 ++++ src/ui/Router.ts | 2 ++ 9 files changed, 33 insertions(+), 29 deletions(-) create mode 100644 src/HackingMission/ui/HackingMissionRoot.tsx diff --git a/src/Faction/ui/FactionRoot.tsx b/src/Faction/ui/FactionRoot.tsx index 2cc155c10..e2fffe45b 100644 --- a/src/Faction/ui/FactionRoot.tsx +++ b/src/Faction/ui/FactionRoot.tsx @@ -23,7 +23,6 @@ import { CreateGangPopup } from "./CreateGangPopup"; type IProps = { faction: Faction; - startHackingMissionFn: (faction: Faction) => void; }; // Info text for all options on the UI @@ -114,7 +113,7 @@ export function FactionRoot(props: IProps): React.ReactElement { function startHackingMission(faction: Faction): void { player.singularityStopWork(); - props.startHackingMissionFn(faction); + router.toHackingMission(faction); } function startSecurityWork(faction: Faction): void { diff --git a/src/HackingMission/ui/HackingMissionRoot.tsx b/src/HackingMission/ui/HackingMissionRoot.tsx new file mode 100644 index 000000000..38548a351 --- /dev/null +++ b/src/HackingMission/ui/HackingMissionRoot.tsx @@ -0,0 +1,13 @@ +import React, { useEffect } from "react"; + +import { startHackingMission } from "../../Faction/FactionHelpers"; +import { Faction } from "../../Faction/Faction"; + +interface IProps { + faction: Faction; +} + +export function HackingMissionRoot(props: IProps): React.ReactElement { + useEffect(() => startHackingMission(props.faction)); + return
; +} diff --git a/src/Missions.jsx b/src/Missions.jsx index eb005fdf1..92ff13ca1 100644 --- a/src/Missions.jsx +++ b/src/Missions.jsx @@ -10,6 +10,7 @@ import { getRandomInt } from "../utils/helpers/getRandomInt"; import { isString } from "../utils/helpers/isString"; import { clearEventListeners } from "../utils/uiHelpers/clearEventListeners"; +import { Router } from "./ui/GameRoot"; // For some reason `jsplumb` needs to be imported exactly like this, // lowercase p, and later in the code used as `jsPlumb` uppercase P. wtf. @@ -1593,6 +1594,7 @@ HackingMission.prototype.finishMission = function (win) { } else { dialogBoxCreate("Mission lost/forfeited! You did not gain any faction reputation."); } + Router.toFaction(); }; export { HackingMission, inMission, setInMission, currMission }; diff --git a/src/engine.jsx b/src/engine.jsx index 258c50639..347186aa1 100644 --- a/src/engine.jsx +++ b/src/engine.jsx @@ -51,12 +51,6 @@ import React from "react"; import ReactDOM from "react-dom"; const Engine = { - // Display objects - // TODO-Refactor this into its own component - Display: { - missionContent: null, - }, - indexedDb: undefined, // Time variables (milliseconds unix epoch time) @@ -258,7 +252,6 @@ const Engine = { // Load game from save or create new game if (loadGame(saveString)) { initBitNodeMultipliers(Player); - Engine.setDisplayElements(); // Sets variables for important DOM elements updateSourceFileFlags(Player); initAugmentations(); // Also calls Player.reapplyAllAugmentations() Player.reapplyAllSourceFiles(); @@ -418,11 +411,6 @@ const Engine = { ); }, - setDisplayElements: function () { - Engine.Display.missionContent = document.getElementById("mission-container"); - Engine.Display.missionContent.style.display = "none"; - }, - start: function () { // Get time difference const _thisUpdate = new Date().getTime(); diff --git a/src/index.html b/src/index.html index dcb03238d..6caf93279 100644 --- a/src/index.html +++ b/src/index.html @@ -45,18 +45,6 @@
-
- - -
-
-

- - - -
-
-

diff --git a/src/ui/GameRoot.tsx b/src/ui/GameRoot.tsx index 535a028f1..3da009078 100644 --- a/src/ui/GameRoot.tsx +++ b/src/ui/GameRoot.tsx @@ -56,6 +56,7 @@ import { TerminalRoot } from "../Terminal/ui/TerminalRoot"; import { TutorialRoot } from "../Tutorial/ui/TutorialRoot"; import { ActiveScriptsRoot } from "../ui/ActiveScripts/ActiveScriptsRoot"; import { FactionsRoot } from "../Faction/ui/FactionsRoot"; +import { HackingMissionRoot } from "../HackingMission/ui/HackingMissionRoot"; import { FactionRoot } from "../Faction/ui/FactionRoot"; import { CharacterStats } from "./CharacterStats"; import { TravelAgencyRoot } from "../Locations/ui/TravelAgencyRoot"; @@ -65,7 +66,6 @@ import { CharacterOverview } from "./React/CharacterOverview"; import { BladeburnerCinematic } from "../Bladeburner/ui/BladeburnerCinematic"; import { workerScripts } from "../Netscript/WorkerScripts"; -import { startHackingMission } from "../Faction/FactionHelpers"; import { enterBitNode } from "../RedPill"; import { Context } from "./Context"; @@ -173,6 +173,9 @@ export let Router: IRouter = { toLocation: () => { throw new Error("Router called before initialization"); }, + toHackingMission: () => { + throw new Error("Router called before initialization"); + }, }; function determineStartPage(player: IPlayer): Page { @@ -262,6 +265,10 @@ export function GameRoot({ player, engine, terminal }: IProps): React.ReactEleme setLocation(location); setPage(Page.Location); }, + toHackingMission: (faction: Faction) => { + setPage(Page.HackingMission); + setFaction(faction); + }, }; useEffect(() => { @@ -284,6 +291,8 @@ export function GameRoot({ player, engine, terminal }: IProps): React.ReactEleme ) : page === Page.Infiltration ? ( + ) : page === Page.HackingMission ? ( + ) : page === Page.BladeburnerCinematic ? ( ) : page === Page.Work ? ( @@ -309,7 +318,7 @@ export function GameRoot({ player, engine, terminal }: IProps): React.ReactEleme ) : page === Page.Factions ? ( ) : page === Page.Faction ? ( - + ) : page === Page.Milestones ? ( ) : page === Page.Tutorial ? ( diff --git a/src/ui/React/CharacterOverview.tsx b/src/ui/React/CharacterOverview.tsx index c0ed4e73f..8f0a331b7 100644 --- a/src/ui/React/CharacterOverview.tsx +++ b/src/ui/React/CharacterOverview.tsx @@ -117,7 +117,6 @@ export function CharacterOverview({ save }: IProps): React.ReactElement { const player = use.Player(); const router = use.Router(); - if (router.page() === Page.BitVerse) return <>; const setRerender = useState(false)[1]; useEffect(() => { diff --git a/src/ui/React/Overview.tsx b/src/ui/React/Overview.tsx index fdbcc3f3c..9e3aefe3f 100644 --- a/src/ui/React/Overview.tsx +++ b/src/ui/React/Overview.tsx @@ -5,6 +5,8 @@ import Box from "@mui/material/Box"; import Collapse from "@mui/material/Collapse"; import Fab from "@mui/material/Fab"; import VisibilityOffIcon from "@mui/icons-material/VisibilityOff"; +import { use } from "../Context"; +import { Page } from "../Router"; const useStyles = makeStyles({ nobackground: { @@ -19,6 +21,8 @@ interface IProps { export function Overview({ children }: IProps): React.ReactElement { const [open, setOpen] = useState(true); const classes = useStyles(); + const router = use.Router(); + if (router.page() === Page.BitVerse || router.page() === Page.HackingMission) return <>; return (
diff --git a/src/ui/Router.ts b/src/ui/Router.ts index 019dbad99..30d4c6fa4 100644 --- a/src/ui/Router.ts +++ b/src/ui/Router.ts @@ -34,6 +34,7 @@ export enum Page { Work, BladeburnerCinematic, Location, + HackingMission, } /** @@ -73,4 +74,5 @@ export interface IRouter { toWork(): void; toBladeburnerCinematic(): void; toLocation(location: Location): void; + toHackingMission(faction: Faction): void; }