X-Git-Url: https://git.localhorst.tv/?a=blobdiff_plain;f=resources%2Fjs%2Fhooks%2Ftracker.js;h=ec1e8ce25c2a6725c5ebbd726377eb6a890755ad;hb=07c9bbbb2c6ddde460f48245699f27eaf66b8ac3;hp=b77ee58dbf48233524feee501facad34a7242ab9;hpb=4a9ad147aedfae6d5488a7121cacf9a18775ff21;p=alttp.git diff --git a/resources/js/hooks/tracker.js b/resources/js/hooks/tracker.js index b77ee58..ec1e8ce 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 { + BOSSES, + CONFIG, + DUNGEONS, + applyLogic, + 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,7 +33,7 @@ export const TrackerProvider = ({ children }) => { React.useEffect(() => { const savedConfig = localStorage.getItem('tracker.config'); if (savedConfig) { - setConfig(JSON.parse(savedConfig)); + setConfig(c => ({ ...c, ...JSON.parse(savedConfig) })); } }, []); @@ -44,8 +52,8 @@ export const TrackerProvider = ({ children }) => { if (config.wildBig && dungeon.bk && !dungeon.dropBk) { ++newDungeon.items; } - if (!config.bossShuffle && dungeon.boss) { - newDungeon.bosses = [dungeon.boss]; + if (dungeon.boss) { + newDungeon.bosses = config.bossShuffle ? BOSSES : [dungeon.boss]; } return newDungeon; }); @@ -56,10 +64,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} ;