forked from external-repos/LifeTrinket
Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
28c2ff536f | ||
|
|
6beddf06e2 |
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "life-trinket",
|
"name": "life-trinket",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "0.9.0",
|
"version": "0.9.1",
|
||||||
"type": "commonjs",
|
"type": "commonjs",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=18",
|
"node": ">=18",
|
||||||
|
|||||||
@@ -9,10 +9,10 @@ import { useGlobalSettings } from '../../../Hooks/useGlobalSettings';
|
|||||||
import { usePlayers } from '../../../Hooks/usePlayers';
|
import { usePlayers } from '../../../Hooks/usePlayers';
|
||||||
import { Cog, Info } from '../../../Icons/generated';
|
import { Cog, Info } from '../../../Icons/generated';
|
||||||
import {
|
import {
|
||||||
GameFormat,
|
|
||||||
InitialGameSettings,
|
InitialGameSettings,
|
||||||
Orientation,
|
Orientation,
|
||||||
PreStartMode,
|
PreStartMode,
|
||||||
|
defaultInitialGameSettings,
|
||||||
} from '../../../Types/Settings';
|
} from '../../../Types/Settings';
|
||||||
import { InfoModal } from '../../Misc/InfoModal';
|
import { InfoModal } from '../../Misc/InfoModal';
|
||||||
import { SettingsModal } from '../../Misc/SettingsModal';
|
import { SettingsModal } from '../../Misc/SettingsModal';
|
||||||
@@ -97,13 +97,7 @@ const Start = () => {
|
|||||||
const [openSettingsModal, setOpenSettingsModal] = useState(false);
|
const [openSettingsModal, setOpenSettingsModal] = useState(false);
|
||||||
|
|
||||||
const [playerOptions, setPlayerOptions] = useState<InitialGameSettings>(
|
const [playerOptions, setPlayerOptions] = useState<InitialGameSettings>(
|
||||||
initialGameSettings || {
|
initialGameSettings || defaultInitialGameSettings
|
||||||
numberOfPlayers: 4,
|
|
||||||
startingLifeTotal: 40,
|
|
||||||
useCommanderDamage: true,
|
|
||||||
orientation: Orientation.Portrait,
|
|
||||||
gameFormat: GameFormat.Commander,
|
|
||||||
}
|
|
||||||
);
|
);
|
||||||
|
|
||||||
const doStartGame = () => {
|
const doStartGame = () => {
|
||||||
|
|||||||
@@ -7,9 +7,10 @@ import {
|
|||||||
import { useAnalytics } from '../Hooks/useAnalytics';
|
import { useAnalytics } from '../Hooks/useAnalytics';
|
||||||
import {
|
import {
|
||||||
InitialGameSettings,
|
InitialGameSettings,
|
||||||
initialGameSettingsSchema,
|
|
||||||
PreStartMode,
|
|
||||||
Settings,
|
Settings,
|
||||||
|
defaultInitialGameSettings,
|
||||||
|
defaultSettings,
|
||||||
|
initialGameSettingsSchema,
|
||||||
settingsSchema,
|
settingsSchema,
|
||||||
} from '../Types/Settings';
|
} from '../Types/Settings';
|
||||||
|
|
||||||
@@ -53,19 +54,18 @@ export const GlobalSettingsProvider = ({
|
|||||||
savedGameSettings ? JSON.parse(savedGameSettings) : null
|
savedGameSettings ? JSON.parse(savedGameSettings) : null
|
||||||
);
|
);
|
||||||
|
|
||||||
const parsedSettings = settingsSchema.safeParse(
|
const setInitialGameSettingsAndLocalStorage = (
|
||||||
JSON.parse(savedSettings ?? '')
|
initialGameSettings: InitialGameSettings
|
||||||
|
) => {
|
||||||
|
setInitialGameSettings(initialGameSettings);
|
||||||
|
localStorage.setItem(
|
||||||
|
'initialGameSettings',
|
||||||
|
JSON.stringify(initialGameSettings)
|
||||||
);
|
);
|
||||||
|
};
|
||||||
|
|
||||||
const [settings, setSettings] = useState<Settings>(
|
const [settings, setSettings] = useState<Settings>(
|
||||||
parsedSettings.success
|
savedSettings ? JSON.parse(savedSettings) : defaultSettings
|
||||||
? parsedSettings.data
|
|
||||||
: {
|
|
||||||
goFullscreenOnStart: true,
|
|
||||||
keepAwake: true,
|
|
||||||
showStartingPlayer: true,
|
|
||||||
showPlayerMenuCog: true,
|
|
||||||
preStartMode: PreStartMode.None,
|
|
||||||
}
|
|
||||||
);
|
);
|
||||||
|
|
||||||
const setSettingsAndLocalStorage = (settings: Settings) => {
|
const setSettingsAndLocalStorage = (settings: Settings) => {
|
||||||
@@ -85,10 +85,29 @@ export const GlobalSettingsProvider = ({
|
|||||||
setPreStartCompleted(false);
|
setPreStartCompleted(false);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Set settings if they are not valid
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (savedGameSettings && JSON.parse(savedGameSettings).gridAreas) {
|
// If there are no saved settings, set default settings
|
||||||
removeLocalStorage();
|
if (!savedSettings) {
|
||||||
window.location.reload();
|
setSettingsAndLocalStorage(defaultSettings);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const parsedSettings = settingsSchema.safeParse(JSON.parse(savedSettings));
|
||||||
|
|
||||||
|
// If saved settings are not valid, remove them
|
||||||
|
if (!parsedSettings.success) {
|
||||||
|
console.error('invalid settings, resetting to default settings');
|
||||||
|
setSettingsAndLocalStorage(defaultSettings);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
localStorage.setItem('settings', JSON.stringify(parsedSettings.data));
|
||||||
|
}, [settings, savedSettings]);
|
||||||
|
|
||||||
|
// Set initial game settings if they are not valid
|
||||||
|
useEffect(() => {
|
||||||
|
if (!savedGameSettings) {
|
||||||
|
setInitialGameSettingsAndLocalStorage(defaultInitialGameSettings);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -97,14 +116,14 @@ export const GlobalSettingsProvider = ({
|
|||||||
initialGameSettingsSchema.safeParse(initialGameSettings);
|
initialGameSettingsSchema.safeParse(initialGameSettings);
|
||||||
|
|
||||||
if (!parsedInitialGameSettings.success) {
|
if (!parsedInitialGameSettings.success) {
|
||||||
removeLocalStorage();
|
console.error('invalid game settings, resetting to default settings');
|
||||||
window.location.reload();
|
setInitialGameSettingsAndLocalStorage(defaultInitialGameSettings);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
localStorage.setItem(
|
localStorage.setItem(
|
||||||
'initialGameSettings',
|
'initialGameSettings',
|
||||||
JSON.stringify(initialGameSettings)
|
JSON.stringify(parsedInitialGameSettings.data)
|
||||||
);
|
);
|
||||||
}, [initialGameSettings, savedGameSettings]);
|
}, [initialGameSettings, savedGameSettings]);
|
||||||
|
|
||||||
|
|||||||
@@ -35,17 +35,33 @@ export type InitialGameSettings = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export const initialGameSettingsSchema = z.object({
|
export const initialGameSettingsSchema = z.object({
|
||||||
startingLifeTotal: z.number().min(1).max(200).default(20),
|
startingLifeTotal: z.number().min(1).max(200),
|
||||||
useCommanderDamage: z.boolean().default(false),
|
useCommanderDamage: z.boolean(),
|
||||||
gameFormat: z.nativeEnum(GameFormat).optional(),
|
gameFormat: z.nativeEnum(GameFormat),
|
||||||
numberOfPlayers: z.number().min(1).max(6).default(2),
|
numberOfPlayers: z.number().min(1).max(6),
|
||||||
orientation: z.nativeEnum(Orientation).default(Orientation.Landscape),
|
orientation: z.nativeEnum(Orientation),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
export const defaultInitialGameSettings = {
|
||||||
|
numberOfPlayers: 4,
|
||||||
|
startingLifeTotal: 40,
|
||||||
|
useCommanderDamage: true,
|
||||||
|
orientation: Orientation.Landscape,
|
||||||
|
gameFormat: GameFormat.Commander,
|
||||||
|
};
|
||||||
|
|
||||||
export const settingsSchema = z.object({
|
export const settingsSchema = z.object({
|
||||||
keepAwake: z.boolean().default(true),
|
keepAwake: z.boolean(),
|
||||||
showStartingPlayer: z.boolean().default(true),
|
showStartingPlayer: z.boolean(),
|
||||||
showPlayerMenuCog: z.boolean().default(true),
|
showPlayerMenuCog: z.boolean(),
|
||||||
goFullscreenOnStart: z.boolean().default(true),
|
goFullscreenOnStart: z.boolean(),
|
||||||
preStartMode: z.nativeEnum(PreStartMode).default(PreStartMode.None),
|
preStartMode: z.nativeEnum(PreStartMode),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
export const defaultSettings: Settings = {
|
||||||
|
goFullscreenOnStart: true,
|
||||||
|
keepAwake: true,
|
||||||
|
showStartingPlayer: true,
|
||||||
|
showPlayerMenuCog: true,
|
||||||
|
preStartMode: PreStartMode.None,
|
||||||
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user