mirror of
https://github.com/bitburner-official/bitburner-src.git
synced 2024-12-27 16:37:33 +01:00
Merge pull request #2600 from MartinFournier/revert/previous-page
Revert previous page feature
This commit is contained in:
commit
5b65cd81c5
@ -2582,7 +2582,6 @@ function installAugmentations(): boolean {
|
||||
augmentationList += aug.name + level + "<br>";
|
||||
}
|
||||
Player.queuedAugmentations = [];
|
||||
|
||||
dialogBoxCreate(
|
||||
"You slowly drift to sleep as scientists put you under in order " +
|
||||
"to install the following Augmentations:<br>" +
|
||||
|
@ -161,8 +161,6 @@ export function prestigeAugmentation(): void {
|
||||
resetPidCounter();
|
||||
ProgramsSeen.splice(0, ProgramsSeen.length);
|
||||
InvitationsSeen.splice(0, InvitationsSeen.length);
|
||||
|
||||
Router.clearHistory();
|
||||
}
|
||||
|
||||
// Prestige by destroying Bit Node and gaining a Source File
|
||||
@ -308,7 +306,5 @@ export function prestigeSourceFile(flume: boolean): void {
|
||||
// Gain int exp
|
||||
if (SourceFileFlags[5] !== 0 && !flume) Player.gainIntelligenceExp(300);
|
||||
|
||||
Router.clearHistory();
|
||||
|
||||
resetPidCounter();
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
import React, { useState, useEffect } from "react";
|
||||
import { cloneDeep, isEqual } from "lodash";
|
||||
|
||||
import { IPlayer } from "../PersonObjects/IPlayer";
|
||||
import { IEngine } from "../IEngine";
|
||||
import { ITerminal } from "../Terminal/ITerminal";
|
||||
@ -86,11 +86,6 @@ interface IProps {
|
||||
engine: IEngine;
|
||||
}
|
||||
|
||||
interface PageHistoryEntry {
|
||||
page: Page;
|
||||
args: any[];
|
||||
}
|
||||
|
||||
const useStyles = makeStyles((theme: Theme) =>
|
||||
createStyles({
|
||||
root: {
|
||||
@ -110,15 +105,6 @@ export let Router: IRouter = {
|
||||
page: () => {
|
||||
throw new Error("Router called before initialization");
|
||||
},
|
||||
previousPage: () => {
|
||||
throw new Error("Router called before initialization");
|
||||
},
|
||||
clearHistory: () => {
|
||||
throw new Error("Router called before initialization");
|
||||
},
|
||||
toPreviousPage: (): boolean => {
|
||||
throw new Error("Router called before initialization");
|
||||
},
|
||||
toActiveScripts: () => {
|
||||
throw new Error("Router called before initialization");
|
||||
},
|
||||
@ -217,9 +203,7 @@ function determineStartPage(player: IPlayer): Page {
|
||||
export function GameRoot({ player, engine, terminal }: IProps): React.ReactElement {
|
||||
const classes = useStyles();
|
||||
const [{ files, vim }, setEditorOptions] = useState({ files: {}, vim: false });
|
||||
const startPage = determineStartPage(player);
|
||||
const [page, setPage] = useState(startPage);
|
||||
const [pageHistory, setPageHistory] = useState<PageHistoryEntry[]>([{ page: startPage, args: [] }]);
|
||||
const [page, setPage] = useState(determineStartPage(player));
|
||||
const setRerender = useState(0)[1];
|
||||
const [faction, setFaction] = useState<Faction>(
|
||||
player.currentWorkFactionName ? Factions[player.currentWorkFactionName] : (undefined as unknown as Faction),
|
||||
@ -250,136 +234,70 @@ export function GameRoot({ player, engine, terminal }: IProps): React.ReactEleme
|
||||
setTimeout(() => htmlLocation.reload(), 2000);
|
||||
}
|
||||
|
||||
function setCurrentPage(page: Page, ...args: any): void {
|
||||
const newPage = { page, args: cloneDeep(args) };
|
||||
const previousPage = pageHistory[0];
|
||||
const isDifferentThenPrevious = page !== previousPage?.page || !isEqual([...args], previousPage?.args);
|
||||
if (isDifferentThenPrevious) {
|
||||
const history = [
|
||||
newPage,
|
||||
...pageHistory
|
||||
].slice(0, 20);
|
||||
setPageHistory(history)
|
||||
}
|
||||
setPage(page)
|
||||
}
|
||||
|
||||
function goBack(fallback: (...args: any[]) => void): void {
|
||||
const [ , previousPage ] = pageHistory;
|
||||
if (previousPage) {
|
||||
const handler = pageToRouterMap[previousPage?.page];
|
||||
handler(...previousPage.args);
|
||||
} else {
|
||||
if (fallback) fallback();
|
||||
}
|
||||
const [ , ...history] = pageHistory;
|
||||
setPageHistory(cloneDeep(history));
|
||||
}
|
||||
|
||||
const pageToRouterMap: { [key: number] : (...args: any[]) => void } = {
|
||||
[Page.ActiveScripts]: Router.toActiveScripts,
|
||||
[Page.Augmentations]: Router.toAugmentations,
|
||||
[Page.Bladeburner]: Router.toBladeburner,
|
||||
[Page.Stats]: Router.toStats,
|
||||
[Page.Corporation]: Router.toCorporation,
|
||||
[Page.CreateProgram]: Router.toCreateProgram,
|
||||
[Page.DevMenu]: Router.toDevMenu,
|
||||
[Page.Faction]: Router.toFaction,
|
||||
[Page.Factions]: Router.toFactions,
|
||||
[Page.Options]: Router.toGameOptions,
|
||||
[Page.Gang]: Router.toGang,
|
||||
[Page.Hacknet]: Router.toHacknetNodes,
|
||||
[Page.Milestones]: Router.toMilestones,
|
||||
[Page.Resleeves]: Router.toResleeves,
|
||||
[Page.ScriptEditor]: Router.toScriptEditor,
|
||||
[Page.Sleeves]: Router.toSleeves,
|
||||
[Page.StockMarket]: Router.toStockMarket,
|
||||
[Page.Terminal]: Router.toTerminal,
|
||||
[Page.Tutorial]: Router.toTutorial,
|
||||
[Page.Job]: Router.toJob,
|
||||
[Page.City]: Router.toCity,
|
||||
[Page.Travel]: Router.toTravel,
|
||||
[Page.BitVerse]: Router.toBitVerse,
|
||||
[Page.Infiltration]: Router.toInfiltration,
|
||||
[Page.Work]: Router.toWork,
|
||||
[Page.BladeburnerCinematic]: Router.toBladeburnerCinematic,
|
||||
[Page.Location]: Router.toLocation,
|
||||
[Page.StaneksGift]: Router.toStaneksGift,
|
||||
[Page.Achievements]: Router.toAchievements,
|
||||
}
|
||||
|
||||
Router = {
|
||||
page: () => page,
|
||||
previousPage: () => {
|
||||
const [ , previousPage] = pageHistory;
|
||||
return previousPage?.page ?? -1;
|
||||
},
|
||||
clearHistory: () => setPageHistory([]),
|
||||
toPreviousPage: goBack,
|
||||
toActiveScripts: () => setCurrentPage(Page.ActiveScripts),
|
||||
toAugmentations: () => setCurrentPage(Page.Augmentations),
|
||||
toBladeburner: () => setCurrentPage(Page.Bladeburner),
|
||||
toStats: () => setCurrentPage(Page.Stats),
|
||||
toCorporation: () => setCurrentPage(Page.Corporation),
|
||||
toCreateProgram: () => setCurrentPage(Page.CreateProgram),
|
||||
toDevMenu: () => setCurrentPage(Page.DevMenu),
|
||||
toActiveScripts: () => setPage(Page.ActiveScripts),
|
||||
toAugmentations: () => setPage(Page.Augmentations),
|
||||
toBladeburner: () => setPage(Page.Bladeburner),
|
||||
toStats: () => setPage(Page.Stats),
|
||||
toCorporation: () => setPage(Page.Corporation),
|
||||
toCreateProgram: () => setPage(Page.CreateProgram),
|
||||
toDevMenu: () => setPage(Page.DevMenu),
|
||||
toFaction: (faction?: Faction) => {
|
||||
setCurrentPage(Page.Faction, faction);
|
||||
setPage(Page.Faction);
|
||||
if (faction) setFaction(faction);
|
||||
},
|
||||
toFactions: () => setCurrentPage(Page.Factions),
|
||||
toGameOptions: () => setCurrentPage(Page.Options),
|
||||
toGang: () => setCurrentPage(Page.Gang),
|
||||
toHacknetNodes: () => setCurrentPage(Page.Hacknet),
|
||||
toMilestones: () => setCurrentPage(Page.Milestones),
|
||||
toResleeves: () => setCurrentPage(Page.Resleeves),
|
||||
toFactions: () => setPage(Page.Factions),
|
||||
toGameOptions: () => setPage(Page.Options),
|
||||
toGang: () => setPage(Page.Gang),
|
||||
toHacknetNodes: () => setPage(Page.Hacknet),
|
||||
toMilestones: () => setPage(Page.Milestones),
|
||||
toResleeves: () => setPage(Page.Resleeves),
|
||||
toScriptEditor: (files: Record<string, string>, options?: ScriptEditorRouteOptions) => {
|
||||
setEditorOptions({
|
||||
files,
|
||||
vim: !!options?.vim,
|
||||
});
|
||||
setCurrentPage(Page.ScriptEditor, files, options);
|
||||
setPage(Page.ScriptEditor);
|
||||
},
|
||||
toSleeves: () => setCurrentPage(Page.Sleeves),
|
||||
toStockMarket: () => setCurrentPage(Page.StockMarket),
|
||||
toTerminal: () => setCurrentPage(Page.Terminal),
|
||||
toTutorial: () => setCurrentPage(Page.Tutorial),
|
||||
toSleeves: () => setPage(Page.Sleeves),
|
||||
toStockMarket: () => setPage(Page.StockMarket),
|
||||
toTerminal: () => setPage(Page.Terminal),
|
||||
toTutorial: () => setPage(Page.Tutorial),
|
||||
toJob: () => {
|
||||
setLocation(Locations[player.companyName]);
|
||||
setCurrentPage(Page.Job);
|
||||
setPage(Page.Job);
|
||||
},
|
||||
toCity: () => {
|
||||
setCurrentPage(Page.City);
|
||||
setPage(Page.City);
|
||||
},
|
||||
toTravel: () => {
|
||||
player.gotoLocation(LocationName.TravelAgency);
|
||||
setCurrentPage(Page.Travel);
|
||||
setPage(Page.Travel);
|
||||
},
|
||||
toBitVerse: (flume: boolean, quick: boolean) => {
|
||||
setFlume(flume);
|
||||
setQuick(quick);
|
||||
setCurrentPage(Page.BitVerse, flume, quick);
|
||||
setPage(Page.BitVerse);
|
||||
},
|
||||
toInfiltration: (location: Location) => {
|
||||
setLocation(location);
|
||||
setCurrentPage(Page.Infiltration, location);
|
||||
},
|
||||
toWork: () => {
|
||||
setCurrentPage(Page.Work);
|
||||
setPage(Page.Infiltration);
|
||||
},
|
||||
toWork: () => setPage(Page.Work),
|
||||
toBladeburnerCinematic: () => {
|
||||
setCurrentPage(Page.BladeburnerCinematic);
|
||||
setPage(Page.BladeburnerCinematic);
|
||||
setCinematicText(cinematicText);
|
||||
},
|
||||
toLocation: (location: Location) => {
|
||||
setLocation(location);
|
||||
setCurrentPage(Page.Location, location);
|
||||
setPage(Page.Location);
|
||||
},
|
||||
toStaneksGift: () => {
|
||||
setCurrentPage(Page.StaneksGift);
|
||||
setPage(Page.StaneksGift);
|
||||
},
|
||||
toAchievements: () => {
|
||||
setCurrentPage(Page.Achievements);
|
||||
setPage(Page.Achievements);
|
||||
},
|
||||
};
|
||||
|
||||
@ -582,11 +500,7 @@ export function GameRoot({ player, engine, terminal }: IProps): React.ReactEleme
|
||||
<SnackbarProvider>
|
||||
<Overview mode={ITutorial.isRunning ? "tutorial" : "overview"}>
|
||||
{!ITutorial.isRunning ? (
|
||||
<CharacterOverview
|
||||
save={() => saveObject.saveGame()}
|
||||
killScripts={killAllScripts}
|
||||
router={Router}
|
||||
allowBackButton={withSidebar} />
|
||||
<CharacterOverview save={() => saveObject.saveGame()} killScripts={killAllScripts} />
|
||||
) : (
|
||||
<InteractiveTutorialRoot />
|
||||
)}
|
||||
|
@ -17,22 +17,19 @@ import Typography from "@mui/material/Typography";
|
||||
import Button from "@mui/material/Button";
|
||||
import IconButton from "@mui/material/IconButton";
|
||||
import SaveIcon from "@mui/icons-material/Save";
|
||||
import ArrowBackIcon from "@mui/icons-material/ArrowBack";
|
||||
import ClearAllIcon from "@mui/icons-material/ClearAll";
|
||||
|
||||
import { Settings } from "../../Settings/Settings";
|
||||
import { use } from "../Context";
|
||||
import { StatsProgressOverviewCell } from "./StatsProgressBar";
|
||||
import { BitNodeMultipliers } from "../../BitNode/BitNodeMultipliers";
|
||||
import { IRouter, Page } from "../Router";
|
||||
|
||||
import { Box, Tooltip } from "@mui/material";
|
||||
import { CONSTANTS } from "../../Constants";
|
||||
|
||||
interface IProps {
|
||||
save: () => void;
|
||||
killScripts: () => void;
|
||||
router: IRouter;
|
||||
allowBackButton: boolean;
|
||||
}
|
||||
|
||||
function Intelligence(): React.ReactElement {
|
||||
@ -239,7 +236,7 @@ const useStyles = makeStyles((theme: Theme) =>
|
||||
|
||||
export { useStyles as characterOverviewStyles };
|
||||
|
||||
export function CharacterOverview({ save, killScripts, router, allowBackButton }: IProps): React.ReactElement {
|
||||
export function CharacterOverview({ save, killScripts }: IProps): React.ReactElement {
|
||||
const [killOpen, setKillOpen] = useState(false);
|
||||
const player = use.Player();
|
||||
|
||||
@ -278,9 +275,6 @@ export function CharacterOverview({ save, killScripts, router, allowBackButton }
|
||||
player.charisma_mult * BitNodeMultipliers.CharismaLevelMultiplier,
|
||||
);
|
||||
|
||||
const previousPageName =
|
||||
router.previousPage() < 0 ? "" : Page[router.previousPage() ?? 0].replace(/([a-z])([A-Z])/g, "$1 $2");
|
||||
|
||||
return (
|
||||
<>
|
||||
<Table sx={{ display: "block", m: 1 }}>
|
||||
@ -464,13 +458,6 @@ export function CharacterOverview({ save, killScripts, router, allowBackButton }
|
||||
<SaveIcon color={Settings.AutosaveInterval !== 0 ? "primary" : "error"} />
|
||||
</Tooltip>
|
||||
</IconButton>
|
||||
{allowBackButton && (
|
||||
<IconButton disabled={!previousPageName} onClick={() => router.toPreviousPage()}>
|
||||
<Tooltip title={previousPageName ? `Go back to "${previousPageName}"` : ""}>
|
||||
<ArrowBackIcon />
|
||||
</Tooltip>
|
||||
</IconButton>
|
||||
)}
|
||||
</Box>
|
||||
<Box sx={{ display: "flex", flex: 1, justifyContent: "flex-end", alignItems: "center" }}>
|
||||
<IconButton onClick={() => setKillOpen(true)}>
|
||||
|
@ -53,9 +53,6 @@ export interface IRouter {
|
||||
// toRedPill(): void;
|
||||
// toworkInProgress(): void;
|
||||
page(): Page;
|
||||
previousPage(): Page;
|
||||
clearHistory(): void;
|
||||
toPreviousPage(fallback?: (...args: any[]) => void): void;
|
||||
toActiveScripts(): void;
|
||||
toAugmentations(): void;
|
||||
toBitVerse(flume: boolean, quick: boolean): void;
|
||||
|
@ -36,12 +36,12 @@ export function WorkInProgressRoot(): React.ReactElement {
|
||||
const faction = Factions[player.currentWorkFactionName];
|
||||
if (player.workType == CONSTANTS.WorkTypeFaction) {
|
||||
function cancel(): void {
|
||||
router.toFaction(faction);
|
||||
player.finishFactionWork(true);
|
||||
router.toPreviousPage(() => router.toFaction(faction));
|
||||
}
|
||||
function unfocus(): void {
|
||||
router.toFaction(faction);
|
||||
player.stopFocusing();
|
||||
router.toPreviousPage(() => router.toFaction(faction));
|
||||
}
|
||||
return (
|
||||
<Grid container direction="column" justifyContent="center" alignItems="center" style={{ minHeight: "100vh" }}>
|
||||
@ -120,12 +120,13 @@ export function WorkInProgressRoot(): React.ReactElement {
|
||||
if (player.className !== "") {
|
||||
function cancel(): void {
|
||||
player.finishClass(true);
|
||||
router.toPreviousPage(() => router.toCity());
|
||||
router.toCity();
|
||||
}
|
||||
|
||||
function unfocus(): void {
|
||||
router.toFaction(faction);
|
||||
router.toCity();
|
||||
player.stopFocusing();
|
||||
router.toPreviousPage(() => router.toCity());
|
||||
}
|
||||
|
||||
let stopText = "";
|
||||
@ -211,11 +212,11 @@ export function WorkInProgressRoot(): React.ReactElement {
|
||||
|
||||
function cancel(): void {
|
||||
player.finishWork(true);
|
||||
router.toPreviousPage(() => router.toJob());
|
||||
router.toJob();
|
||||
}
|
||||
function unfocus(): void {
|
||||
player.stopFocusing();
|
||||
router.toPreviousPage(() => router.toJob());
|
||||
router.toJob();
|
||||
}
|
||||
|
||||
const position = player.jobs[player.companyName];
|
||||
@ -303,11 +304,11 @@ export function WorkInProgressRoot(): React.ReactElement {
|
||||
if (player.workType == CONSTANTS.WorkTypeCompanyPartTime) {
|
||||
function cancel(): void {
|
||||
player.finishWorkPartTime(true);
|
||||
router.toPreviousPage(() => router.toJob());
|
||||
router.toJob();
|
||||
}
|
||||
function unfocus(): void {
|
||||
player.stopFocusing();
|
||||
router.toPreviousPage(() => router.toJob());
|
||||
router.toJob();
|
||||
}
|
||||
const comp = Companies[player.companyName];
|
||||
let companyRep = 0;
|
||||
@ -439,11 +440,11 @@ export function WorkInProgressRoot(): React.ReactElement {
|
||||
if (player.createProgramName !== "") {
|
||||
function cancel(): void {
|
||||
player.finishCreateProgramWork(true);
|
||||
router.toPreviousPage(() => router.toTerminal());
|
||||
router.toTerminal();
|
||||
}
|
||||
function unfocus(): void {
|
||||
router.toTerminal();
|
||||
player.stopFocusing();
|
||||
router.toPreviousPage(() => router.toTerminal());
|
||||
}
|
||||
return (
|
||||
<Grid container direction="column" justifyContent="center" alignItems="center" style={{ minHeight: "100vh" }}>
|
||||
|
Loading…
Reference in New Issue
Block a user