X-Git-Url: https://git.localhorst.tv/?a=blobdiff_plain;f=resources%2Fjs%2Fhooks%2Ftracker.js;h=ce01c4b94079dd646e17f9263882a85544bc3153;hb=816690cc4fadff954f4407999550f7feec2884da;hp=b77ee58dbf48233524feee501facad34a7242ab9;hpb=4a9ad147aedfae6d5488a7121cacf9a18775ff21;p=alttp.git diff --git a/resources/js/hooks/tracker.js b/resources/js/hooks/tracker.js index b77ee58..ce01c4b 100644 --- a/resources/js/hooks/tracker.js +++ b/resources/js/hooks/tracker.js @@ -1,7 +1,14 @@ import PropTypes from 'prop-types'; import React from 'react'; -import { CONFIG, DUNGEONS, makeEmptyState, mergeStates } from '../helpers/tracker'; +import { + CONFIG, + DUNGEONS, + applyLogic, + configureDungeons, + makeEmptyState, + mergeStates, +} from '../helpers/tracker'; const context = React.createContext({}); @@ -13,6 +20,7 @@ export const TrackerProvider = ({ children }) => { const [autoState, setAutoState] = React.useState(makeEmptyState()); const [manualState, setManualState] = React.useState(makeEmptyState()); const [dungeons, setDungeons] = React.useState(DUNGEONS); + const [logic, setLogic] = React.useState({}); const saveConfig = React.useCallback((values) => { setConfig(s => { @@ -25,30 +33,12 @@ export const TrackerProvider = ({ children }) => { React.useEffect(() => { const savedConfig = localStorage.getItem('tracker.config'); if (savedConfig) { - setConfig(JSON.parse(savedConfig)); + setConfig(c => ({ ...c, ...JSON.parse(savedConfig) })); } }, []); React.useEffect(() => { - const newDungeons = DUNGEONS.map(dungeon => { - const newDungeon = JSON.parse(JSON.stringify(dungeon)); - if (config.wildMap && dungeon.map) { - ++newDungeon.items; - } - if (config.wildCompass && dungeon.compass) { - ++newDungeon.items; - } - if (config.wildSmall) { - newDungeon.items += dungeon.sk; - } - if (config.wildBig && dungeon.bk && !dungeon.dropBk) { - ++newDungeon.items; - } - if (!config.bossShuffle && dungeon.boss) { - newDungeon.bosses = [dungeon.boss]; - } - return newDungeon; - }); + const newDungeons = configureDungeons(config); setDungeons(newDungeons); }, [config]); @@ -56,10 +46,14 @@ export const TrackerProvider = ({ children }) => { setState(mergeStates(autoState, manualState)); }, [autoState, manualState]); - const value = React.useMemo(() => { - return { config, saveConfig, dungeons, setAutoState, setManualState, state }; + React.useEffect(() => { + setLogic(applyLogic(config, dungeons, state)); }, [config, dungeons, state]); + const value = React.useMemo(() => { + return { config, dungeons, logic, saveConfig, setAutoState, setManualState, state }; + }, [config, dungeons, logic, state]); + return {children} ;