Skip to content

Commit

Permalink
cache game mode storage
Browse files Browse the repository at this point in the history
  • Loading branch information
ItsSammyM committed Dec 29, 2024
1 parent f9e74d5 commit a7c6d9e
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 31 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,18 @@ import { GameModeContext } from "./GameModesEditor";
import { Button } from "../Button";

export function EnabledModifiersSelector(props: Readonly<{
disabled: boolean,
disabled?: boolean,
enabledModifiers?: ModifierType[],
onChange?: (modifiers: ModifierType[]) => void,
}>): ReactElement {
let { enabledModifiers } = useContext(GameModeContext);
enabledModifiers = props.enabledModifiers ?? enabledModifiers;


return <div className="chat-menu-colors selector-section">
<h2>{translate("modifiers")}</h2>
<EnabledModifiersDisplay
disabled={props.disabled}
disabled={props.disabled===undefined ? false : props.disabled}
modifiable={!props.disabled}
enabledModifiers={enabledModifiers}
onEnableModifiers={(modifiers: ModifierType[]) => {
Expand Down
12 changes: 6 additions & 6 deletions client/src/components/gameModeSettings/GameModeSelector.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import React, { ReactElement, useCallback, useContext, useEffect, useState } from "react";
import { deleteGameModes, loadGameModes, saveGameModes } from "../../game/localStorage";
import { deleteGameModes, loadGameModes, loadGameModesParsed, saveGameModes } from "../../game/localStorage";
import { AnchorControllerContext } from "../../menu/Anchor";
import { CopyButton, PasteButton } from "../../components/ClipboardButtons";
import Icon from "../Icon";
Expand All @@ -21,7 +21,7 @@ export function GameModeSelector(props: {
canModifySavedGameModes?: boolean,
loadGameMode: (gameMode: GameModeData) => void,
}): ReactElement {
const [gameModeParseResult, setGameModeParseResult] = useState(parseFromJson("GameModeStorage", loadGameModes()));
const [gameModeParseResult, setGameModeParseResult] = useState(loadGameModesParsed());

return <section className="chat-menu-colors selector-section">
<h2>{translate("menu.lobby.gameModes")}</h2>
Expand All @@ -32,16 +32,16 @@ export function GameModeSelector(props: {
<br />
<code>{gameModeParseResult.toString()}</code>
</div>
<button onClick={() => {
<Button onClick={() => {
deleteGameModes();
setGameModeParseResult(parseFromJson("GameModeStorage", loadGameModes()));
setGameModeParseResult(loadGameModesParsed());
}}>
<Icon>delete</Icon>{translate("deleteOutdatedGameModeSaveData")}
</button>
</Button>
</div>
: <GameModeSelectorPanel {...props}
gameModeStorage={gameModeParseResult.value}
reloadGameModeStorage={() => setGameModeParseResult(parseFromJson("GameModeStorage", loadGameModes()))}
reloadGameModeStorage={() => setGameModeParseResult(loadGameModesParsed())}
/>
}
</section>
Expand Down
53 changes: 31 additions & 22 deletions client/src/game/localStorage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ import { Language } from "./lang";
import { Role } from "./roleState.d";
import parseFromJson from "../components/gameModeSettings/gameMode/dataFixer";
import { ContentMenu } from "../menu/game/GameScreen";
import { ParseResult, Success } from "../components/gameModeSettings/gameMode/parse";


export function saveReconnectData(roomCode: number, playerId: number) {
localStorage.setItem(
Expand Down Expand Up @@ -67,7 +69,26 @@ export function loadSettingsParsed(): Settings {
return result.value;
}
}

export function getDefaultSettings(): Readonly<Settings> {
return {
format: "v3",
volume: 0.5,
fontSize: 1,
accessibilityFont: false,
language: "en_us",
defaultName: null,
maxMenus: window.innerWidth < 600 ? 1 : 6,
menuOrder: [
ContentMenu.WikiMenu,
ContentMenu.GraveyardMenu,
ContentMenu.PlayerListMenu,
ContentMenu.ChatMenu,
ContentMenu.WillMenu,
ContentMenu.RoleSpecificMenu
],
roleSpecificMenus: []
}
}
export function loadSettings(): unknown {
const data = localStorage.getItem("settings");
if (data !== null) {
Expand Down Expand Up @@ -96,13 +117,21 @@ export function saveSettings(newSettings: Partial<Settings>) {
}
}

let cachedGameModes: ParseResult<GameModeStorage> | null = null;

export function loadGameModesParsed(): ParseResult<GameModeStorage> {

if(cachedGameModes !== null) return cachedGameModes;

cachedGameModes = parseFromJson("GameModeStorage", loadGameModes());
return cachedGameModes;
}
export function defaultGameModes(): unknown {
// Typescript is a Division One tweaker
return DEFAULT_GAME_MODES;
}

export function saveGameModes(gameModes: GameModeStorage) {
cachedGameModes = Success(gameModes);
localStorage.setItem("savedGameModes", JSON.stringify(gameModes));
}
export function loadGameModes(): unknown {
Expand All @@ -120,23 +149,3 @@ export function deleteGameModes() {
localStorage.removeItem("savedGameModes");
}

export function getDefaultSettings(): Readonly<Settings> {
return {
format: "v3",
volume: 0.5,
fontSize: 1,
accessibilityFont: false,
language: "en_us",
defaultName: null,
maxMenus: window.innerWidth < 600 ? 1 : 6,
menuOrder: [
ContentMenu.WikiMenu,
ContentMenu.GraveyardMenu,
ContentMenu.PlayerListMenu,
ContentMenu.ChatMenu,
ContentMenu.WillMenu,
ContentMenu.RoleSpecificMenu
],
roleSpecificMenus: []
}
}
2 changes: 1 addition & 1 deletion client/src/menu/lobby/LobbyMenu.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ function LobbyMenuSettings(props: Readonly<{

return <GameModeContext.Provider value={context}>
{mobile && <h1>{translate("menu.lobby.settings")}</h1>}
{props.isHost && <GameModeSelector
{props.isHost === true && <GameModeSelector
canModifySavedGameModes={false}
loadGameMode={gameMode => {
GAME_MANAGER.sendSetPhaseTimesPacket(gameMode.phaseTimes);
Expand Down

0 comments on commit a7c6d9e

Please sign in to comment.