]> git.localhorst.tv Git - alttp.git/blobdiff - resources/js/hooks/tracker.js
respond to whispers
[alttp.git] / resources / js / hooks / tracker.js
index 30bf2426a7a125781f2aa5579e9e9a389f74511e..d0fb6b8e028e400bb4f0f3287eeebb3df6e5a1f4 100644 (file)
@@ -5,6 +5,7 @@ import {
        CONFIG,
        DUNGEONS,
        applyLogic,
+       configureDungeons,
        makeEmptyState,
        mergeStates,
 } from '../helpers/tracker';
@@ -20,6 +21,7 @@ export const TrackerProvider = ({ children }) => {
        const [manualState, setManualState] = React.useState(makeEmptyState());
        const [dungeons, setDungeons] = React.useState(DUNGEONS);
        const [logic, setLogic] = React.useState({});
+       const [pins, setPins] = React.useState([]);
 
        const saveConfig = React.useCallback((values) => {
                setConfig(s => {
@@ -29,6 +31,17 @@ export const TrackerProvider = ({ children }) => {
                });
        }, []);
 
+       const addPin = React.useCallback((pin) => {
+               setPins(ps => {
+                       const id = ps.length ? ps[ps.length - 1].id + 1 : 1;
+                       return [...ps, { ...pin, id }];
+               });
+       }, []);
+
+       const removePin = React.useCallback((pin) => {
+               setPins(ps => ps.filter(p => p.id !== pin.id));
+       }, []);
+
        React.useEffect(() => {
                const savedConfig = localStorage.getItem('tracker.config');
                if (savedConfig) {
@@ -37,25 +50,7 @@ export const TrackerProvider = ({ children }) => {
        }, []);
 
        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]);
 
@@ -68,9 +63,19 @@ export const TrackerProvider = ({ children }) => {
        }, [config, dungeons, state]);
 
        const value = React.useMemo(() => {
-               console.log(logic);
-               return { config, dungeons, logic, saveConfig, setAutoState, setManualState, state };
-       }, [config, dungeons, logic, state]);
+               return {
+                       addPin,
+                       config,
+                       dungeons,
+                       logic,
+                       pins,
+                       removePin,
+                       saveConfig,
+                       setAutoState,
+                       setManualState,
+                       state,
+               };
+       }, [config, dungeons, logic, pins, state]);
 
        return <context.Provider value={value}>
                {children}