diff --git a/src/ipc/types.ts b/src/ipc/types.ts index 95c96262..00c95f48 100644 --- a/src/ipc/types.ts +++ b/src/ipc/types.ts @@ -62,7 +62,7 @@ type WidgetWellKnownFlag = 'hide-on-focus' export const defaultConfig: Config = { - configVersion: 7, + configVersion: 8, priceCheckKey: 'D', priceCheckKeyHold: 'Ctrl', priceCheckLocked: 'Ctrl + Alt + D', @@ -148,41 +148,27 @@ export const defaultConfig: Config = { wmZorder: 'exclusive', wmFlags: ['hide-on-blur', 'skip-menu'], maps: { + showNewStats: false, selectedStats: [ { matcher: 'Slaying Enemies close together has a #% chance to attract monsters from Beyond', - invert: false, - valueWarning: '', - valueDanger: '', - valueDesirable: '+' + decision: 'desirable' }, { matcher: '#% maximum Player Resistances', - invert: true, - valueWarning: '-10', - valueDanger: '', - valueDesirable: '' + decision: 'warning' }, { matcher: 'Monsters reflect #% of Physical Damage', - invert: false, - valueWarning: '', - valueDanger: '+', - valueDesirable: '' + decision: 'danger' }, { matcher: 'Monsters reflect #% of Elemental Damage', - invert: false, - valueWarning: '', - valueDanger: '+', - valueDesirable: '' + decision: 'danger' }, { matcher: 'Area contains two Unique Bosses', - invert: false, - valueWarning: '', - valueDanger: '', - valueDesirable: '+' + decision: 'desirable' } ] } diff --git a/src/main/config.ts b/src/main/config.ts index c92d5a01..e870dbaf 100644 --- a/src/main/config.ts +++ b/src/main/config.ts @@ -118,7 +118,7 @@ export const config = (() => { if (config.configVersion < 7) { const mapCheck = config.widgets.find(w => w.wmType === 'map-check')! mapCheck.wmType = 'item-check' - ;(mapCheck as ItemCheckWidget).maps = { selectedStats: mapCheck.selectedStats } + mapCheck.maps = { selectedStats: mapCheck.selectedStats } mapCheck.selectedStats = undefined config.itemCheckKey = (config as any).mapCheckKey || null @@ -127,6 +127,21 @@ export const config = (() => { config.configVersion = 7 } + if (config.configVersion < 8) { + const itemCheck = config.widgets.find(w => w.wmType === 'item-check')! + ;(itemCheck as ItemCheckWidget).maps.showNewStats = false + itemCheck.maps.selectedStats = (itemCheck as ItemCheckWidget).maps.selectedStats.map(entry => ({ + matcher: entry.matcher, + decision: + (entry as any).valueDanger ? 'danger' + : (entry as any).valueWarning ? 'warning' + : (entry as any).valueDesirable ? 'desirable' + : 'seen' + })) + + config.configVersion = 8 + } + store.store = config return store })() diff --git a/src/web/map-check/MapStatButton.vue b/src/web/map-check/MapStatButton.vue index 435102f4..ae0ab186 100644 --- a/src/web/map-check/MapStatButton.vue +++ b/src/web/map-check/MapStatButton.vue @@ -2,24 +2,24 @@
-
- -
+
@@ -42,89 +42,47 @@ export default defineComponent({ const config = computed(() => { return Config.store.widgets.find(widget => widget.wmType === 'item-check') as ItemCheckWidget }) - - const entryInSelected = computed(() => { + const entry = computed(() => { return config.value.maps.selectedStats.find(_ => _.matcher === props.stat.matcher) }) - const state = computed(() => { - if (!entryInSelected.value) return undefined - - const valueDanger = Number(entryInSelected.value.valueDanger || 'NaN') - const valueWarning = Number(entryInSelected.value.valueWarning || 'NaN') - const valueDesirable = Number(entryInSelected.value.valueDesirable || 'NaN') - - if (entryInSelected.value.valueDanger !== '' && Number.isNaN(valueDanger)) { - return 'danger' - } - if (entryInSelected.value.valueWarning !== '' && Number.isNaN(valueWarning)) { - return 'warning' - } - if (entryInSelected.value.valueDesirable !== '' && Number.isNaN(valueDesirable)) { - return 'desirable' - } - - if (!entryInSelected.value.invert) { - if (!Number.isNaN(valueDanger) && props.stat.roll! >= valueDanger) { - return 'danger' - } - if (!Number.isNaN(valueWarning) && props.stat.roll! >= valueWarning) { - return 'warning' - } - if (!Number.isNaN(valueDesirable) && props.stat.roll! >= valueDesirable) { - return 'desirable' - } - } else { - if (!Number.isNaN(valueDanger) && props.stat.roll! <= valueDanger) { - return 'danger' - } - if (!Number.isNaN(valueWarning) && props.stat.roll! <= valueWarning) { - return 'warning' - } - if (!Number.isNaN(valueDesirable) && props.stat.roll! <= valueDesirable) { - return 'desirable' - } - } - - return 'not-matched' + const showNewStatIcon = computed(() => { + return config.value.maps.showNewStats && !entry.value }) - const canCycle = computed(() => { - const values = [ - entryInSelected.value!.valueDanger, - entryInSelected.value!.valueWarning, - entryInSelected.value!.valueDesirable - ] - return ( - values.filter(_ => _ === '+').length === 1 && - values.filter(_ => _ === '').length === 2 - ) - }) + function toggleSeenStatus () { + if (!config.value.maps.showNewStats) return + + if (!entry.value) { + config.value.maps.selectedStats.push({ + matcher: props.stat.matcher, + decision: 'seen' + }) + } else if (entry.value.decision === 'seen') { + config.value.maps.selectedStats = config.value.maps.selectedStats.filter(selected => selected !== entry.value) + } + } return { - state, + decision: computed(() => entry.value?.decision), + showNewStatIcon, + toggleSeenStatus, handleClick () { - if (!entryInSelected.value) { + if (!entry.value) { config.value.maps.selectedStats.push({ matcher: props.stat.matcher, - invert: false, - valueDanger: '+', - valueWarning: '', - valueDesirable: '' + decision: 'danger' }) - return - } - - if (!canCycle.value) return - - if (entryInSelected.value.valueDanger === '+') { - entryInSelected.value.valueDanger = '' - entryInSelected.value.valueWarning = '+' - } else if (entryInSelected.value.valueWarning === '+') { - entryInSelected.value.valueWarning = '' - entryInSelected.value.valueDesirable = '+' - } else if (entryInSelected.value.valueDesirable === '+') { - config.value.maps.selectedStats = config.value.maps.selectedStats.filter(selected => selected !== entryInSelected.value) + } else { + if (entry.value.decision === 'danger') { + entry.value.decision = 'warning' + } else if (entry.value.decision === 'warning') { + entry.value.decision = 'desirable' + } else if (entry.value.decision === 'desirable') { + entry.value.decision = 'seen' + } else if (entry.value.decision === 'seen') { + entry.value.decision = 'danger' + } } } } diff --git a/src/web/overlay/interfaces.ts b/src/web/overlay/interfaces.ts index 11f237f1..cd0ae389 100644 --- a/src/web/overlay/interfaces.ts +++ b/src/web/overlay/interfaces.ts @@ -53,12 +53,10 @@ export interface PriceCheckWidget extends Widget { export interface ItemCheckWidget extends Widget { maps: { + showNewStats: boolean selectedStats: Array<{ matcher: string - invert: boolean - valueWarning: string - valueDanger: string - valueDesirable: string + decision: string }> } } diff --git a/src/web/settings/MapsStatEntry.vue b/src/web/settings/MapsStatEntry.vue index 0daaf98e..02147a6a 100644 --- a/src/web/settings/MapsStatEntry.vue +++ b/src/web/settings/MapsStatEntry.vue @@ -1,13 +1,12 @@