]> git.localhorst.tv Git - alttp.git/blobdiff - resources/js/components/tracker/ToggleIcon.js
clean up manual tracking
[alttp.git] / resources / js / components / tracker / ToggleIcon.js
index 49375ef97695b09f00b9998f484e5962ad21d11d..f7cc0744b81f22619634fecfc047cf66451b098a 100644 (file)
@@ -3,14 +3,18 @@ import React from 'react';
 
 import ZeldaIcon from '../common/ZeldaIcon';
 import {
+       addDungeonCheck,
        decrement,
        getDungeonBoss,
+       getDungeonRemainingItems,
        getDungeonPrize,
        hasDungeonBoss,
        hasDungeonPrize,
        highestActive,
        increment,
+       removeDungeonCheck,
        toggleBoolean,
+       toggleBossDefeated,
 } from '../../helpers/tracker';
 import { useTracker } from '../../hooks/tracker';
 
@@ -110,23 +114,23 @@ ToggleIcon.dungeonBossController = (dungeon) => ({
        handlePrimary: dungeon.bosses.length > 1
                ? nextString(`${dungeon.id}-boss`)
                : (state, setState) => {
-                       setState(toggleBoolean(`${dungeon.id}-boss-defeated`));
+                       setState(toggleBossDefeated(dungeon));
                },
        handleSecondary: dungeon.bosses.length > 1 ?
                previousString(`${dungeon.id}-boss`)
                : (state, setState) => {
-                       setState(toggleBoolean(`${dungeon.id}-boss-defeated`));
+                       setState(toggleBossDefeated(dungeon));
                },
 });
 
-ToggleIcon.dungeonCheckController = (dungeon, max) => ({
-       getActive: (state, icons) => state[`${dungeon.id}-checks`] < max ? icons[1] : null,
+ToggleIcon.dungeonCheckController = (dungeon) => ({
+       getActive: (state, icons) => getDungeonRemainingItems(state, dungeon) ? icons[1] : null,
        getDefault: firstIcon,
        handlePrimary: (state, setState) => {
-               setState(increment(`${dungeon.id}-checks`, max));
+               setState(addDungeonCheck(dungeon));
        },
        handleSecondary: (state, setState) => {
-               setState(decrement(`${dungeon.id}-checks`, max));
+               setState(removeDungeonCheck(dungeon));
        },
 });
 
@@ -163,7 +167,38 @@ ToggleIcon.medallionController = {
        getActive: highestActive,
        getDefault: firstIcon,
        handlePrimary: nextIcon,
-       handleSecondary: doNothing,
+       handleSecondary: (state, setState, icons) => {
+               const mm = state['mm-medallion'];
+               const tr = state['tr-medallion'];
+               const isMM = mm === icons[0];
+               const isTR = tr === icons[0];
+               console.log({ mm, isMM, tr, isTR });
+               if (!isMM && !isTR) {
+                       // empty: set as MM if mire is unset, else set as TR if TR is unset
+                       if (!mm) {
+                               setState(s => ({ ...s, 'mm-medallion': icons[0] }));
+                       } else if (!tr) {
+                               setState(s => ({ ...s, 'tr-medallion': icons[0] }));
+                       }
+               } else if (isMM && !isTR) {
+                       // MM: if TR is free, switch to TR, otherwise remove MM
+                       if (!tr) {
+                               setState(s => ({ ...s, 'mm-medallion': null, 'tr-medallion': icons[0] }));
+                       } else {
+                               setState(s => ({ ...s, 'mm-medallion': null }));
+                       }
+               } else if (!isMM && isTR) {
+                       // TR: if MM is free, switch to both, otherwise remove TR
+                       if (!mm) {
+                               setState(s => ({ ...s, 'mm-medallion': icons[0] }));
+                       } else {
+                               setState(s => ({ ...s, 'tr-medallion': null }));
+                       }
+               } else {
+                       // both: remove both
+                       setState(s => ({ ...s, 'mm-medallion': null, 'tr-medallion': null }));
+               }
+       },
 };
 
 ToggleIcon.modulusController = ctrl => ({