]> git.localhorst.tv Git - alttp.git/blobdiff - resources/js/helpers/tracker.js
clean up manual tracking
[alttp.git] / resources / js / helpers / tracker.js
index 92508d46f1bc9434b97e641c8132a4fd94f0a095..bc18847fcc10e47ad7f0a8c8405b64ce0323a37b 100644 (file)
@@ -1598,24 +1598,59 @@ export const unclearAll = names => state => {
        return { ...state, ...changes };
 };
 
-export const hasDungeonBoss = (state, dungeon) => !!state[`${dungeon.id}-boss-defeated`];
+export const countClearedLocations = (state, locations) =>
+       locations.reduce((acc, cur) => state[cur] ? acc + 1 : acc, 0);
+
+export const hasClearedLocations = (state, locations) =>
+       countClearedLocations(state, locations) === locations.length;
+
+export const countRemainingLocations = (state, locations) =>
+       locations.reduce((acc, cur) => state[cur] ? acc : acc + 1, 0);
+
+export const hasDungeonBoss = (state, dungeon) =>
+       !dungeon.boss || !!state[`${dungeon.id}-boss-defeated`];
 
 export const getDungeonBoss = (state, dungeon) =>
        state[`${dungeon.id}-boss`] || dungeon.boss || null;
 
-export const hasDungeonPrize = (state, dungeon) => !!state[`${dungeon.id}-prize-acquired`];
+export const hasDungeonPrize = (state, dungeon) =>
+       !dungeon.prize || !!state[`${dungeon.id}-prize-acquired`];
 
 export const getDungeonPrize = (state, dungeon) => state[`${dungeon.id}-prize`] || null;
 
+export const getDungeonClearedItems = (state, dungeon) => state[`${dungeon.id}-checks`] || 0;
+
+export const getDungeonRemainingItems = (state, dungeon) =>
+       Math.max(0, dungeon.items - getDungeonClearedItems(state, dungeon));
+
+export const getDungeonAcquiredSKs = (state, dungeon) => state[`${dungeon.id}-small-key`] || 0;
+
 export const isDungeonCleared = (state, dungeon) => {
-       const cleared = state[`${dungeon.id}-checks`] || 0;
-       const total = dungeon.items;
-       const hasItems = cleared >= total;
-       const hasBoss = !dungeon.boss || hasDungeonBoss(state, dungeon);
-       const hasPrize = !dungeon.porize || hasDungeonPrize(state, dungeon);
+       const hasItems = !getDungeonRemainingItems(state, dungeon);
+       const hasBoss = hasDungeonBoss(state, dungeon);
+       const hasPrize = hasDungeonPrize(state, dungeon);
        return hasItems && hasBoss && hasPrize;
 };
 
+export const toggleBossDefeated = dungeon => toggleBoolean(`${dungeon.id}-boss-defeated`);
+
+export const setBossDefeated = (dungeon, defeated) =>
+       state => ({ ...state, [`${dungeon.id}-boss-defeated`]: !!defeated });
+
+export const togglePrizeAcquired = dungeon => toggleBoolean(`${dungeon.id}-prize-acquired`);
+
+export const setPrizeAcquired = (dungeon, acquired) =>
+       state => ({ ...state, [`${dungeon.id}-prize-acquired`]: !!acquired });
+
+export const addDungeonCheck = dungeon => increment(`${dungeon.id}-checks`, dungeon.items);
+
+export const removeDungeonCheck = dungeon => decrement(`${dungeon.id}-checks`, dungeon.items);
+
+export const resetDungeonChecks = dungeon => state => ({ ...state, [`${dungeon.id}-checks`]: 0 });
+
+export const completeDungeonChecks = dungeon =>
+       state => ({ ...state, [`${dungeon.id}-checks`]: dungeon.items });
+
 export const makeEmptyState = () => {
        const state = {};
        BOOLEAN_STATES.forEach(p => {