From 3ef73f1874d2c06fe33b2c8eb6196839512f7d6c Mon Sep 17 00:00:00 2001 From: Alexander Drozdov Date: Tue, 9 Mar 2021 23:51:41 +0200 Subject: [PATCH] WIP transform map-check into item-info --- src/ipc/ipc-event.ts | 4 +- src/ipc/main-process-bindings.ts | 4 +- src/ipc/types.ts | 88 ++++++++--------- src/main/config.ts | 15 ++- src/main/shortcuts.ts | 14 +-- src/web/item-check/ItemInfo.vue | 48 ++++++++++ src/web/item-check/WidgetItemCheck.vue | 94 +++++++++++++++++++ src/web/map-check/MapCheck.vue | 71 ++++++++++++++ src/web/map-check/MapStatButton.vue | 10 +- src/web/map-check/WidgetMapCheck.vue | 125 ------------------------- src/web/overlay/OverlayWindow.vue | 4 +- src/web/overlay/interfaces.ts | 18 ++-- src/web/settings/MapsStatEntry.vue | 14 +-- src/web/settings/hotkeys.vue | 6 +- src/web/settings/maps.vue | 6 +- 15 files changed, 313 insertions(+), 208 deletions(-) create mode 100644 src/web/item-check/ItemInfo.vue create mode 100644 src/web/item-check/WidgetItemCheck.vue create mode 100644 src/web/map-check/MapCheck.vue delete mode 100644 src/web/map-check/WidgetMapCheck.vue diff --git a/src/ipc/ipc-event.ts b/src/ipc/ipc-event.ts index e41c09ef..2030e04e 100644 --- a/src/ipc/ipc-event.ts +++ b/src/ipc/ipc-event.ts @@ -30,8 +30,8 @@ export interface IpcPriceCheck { position: { x: number, y: number } } -export const MAP_CHECK = 'MAIN->OVERLAY::map-check' -export interface IpcMapCheck { +export const ITEM_CHECK = 'MAIN->OVERLAY::item-check' +export interface IpcItemCheck { clipboard: string position: { x: number, y: number } } diff --git a/src/ipc/main-process-bindings.ts b/src/ipc/main-process-bindings.ts index 45c88c64..5d807cd8 100644 --- a/src/ipc/main-process-bindings.ts +++ b/src/ipc/main-process-bindings.ts @@ -16,8 +16,8 @@ class MainProcessBinding extends EventTarget { this.selfEmitPriceCheck(data) }) - electron.ipcRenderer.on(ipcEvent.MAP_CHECK, (e, data) => { - this.dispatchEvent(new CustomEvent(ipcEvent.MAP_CHECK, { + electron.ipcRenderer.on(ipcEvent.ITEM_CHECK, (e, data) => { + this.dispatchEvent(new CustomEvent(ipcEvent.ITEM_CHECK, { detail: data })) }) diff --git a/src/ipc/types.ts b/src/ipc/types.ts index 58971cd0..95c96262 100644 --- a/src/ipc/types.ts +++ b/src/ipc/types.ts @@ -1,4 +1,4 @@ -import { MapCheckWidget, PriceCheckWidget } from '@/web/overlay/interfaces' +import { ItemCheckWidget, PriceCheckWidget } from '@/web/overlay/interfaces' export interface League { id: string @@ -18,7 +18,7 @@ export interface Config { overlayBackgroundExclusive: boolean overlayBackgroundClose: boolean priceCheckShowCursor: boolean - mapCheckKey: string | null + itemCheckKey: string | null delveGridKey: string | null restoreClipboard: boolean commands: Array<{ @@ -62,7 +62,7 @@ type WidgetWellKnownFlag = 'hide-on-focus' export const defaultConfig: Config = { - configVersion: 6, + configVersion: 7, priceCheckKey: 'D', priceCheckKeyHold: 'Ctrl', priceCheckLocked: 'Ctrl + Alt + D', @@ -73,7 +73,7 @@ export const defaultConfig: Config = { overlayBackgroundExclusive: true, overlayBackgroundClose: true, priceCheckShowCursor: true, - mapCheckKey: null, + itemCheckKey: null, delveGridKey: null, restoreClipboard: true, commands: [{ @@ -142,49 +142,51 @@ export const defaultConfig: Config = { } as PriceCheckWidget, { wmId: 3, - wmType: 'map-check', + wmType: 'item-check', wmTitle: '', wmWants: 'hide', wmZorder: 'exclusive', wmFlags: ['hide-on-blur', 'skip-menu'], - selectedStats: [ - { - matcher: 'Slaying Enemies close together has a #% chance to attract monsters from Beyond', - invert: false, - valueWarning: '', - valueDanger: '', - valueDesirable: '+' - }, - { - matcher: '#% maximum Player Resistances', - invert: true, - valueWarning: '-10', - valueDanger: '', - valueDesirable: '' - }, - { - matcher: 'Monsters reflect #% of Physical Damage', - invert: false, - valueWarning: '', - valueDanger: '+', - valueDesirable: '' - }, - { - matcher: 'Monsters reflect #% of Elemental Damage', - invert: false, - valueWarning: '', - valueDanger: '+', - valueDesirable: '' - }, - { - matcher: 'Area contains two Unique Bosses', - invert: false, - valueWarning: '', - valueDanger: '', - valueDesirable: '+' - } - ] - } as MapCheckWidget, + maps: { + selectedStats: [ + { + matcher: 'Slaying Enemies close together has a #% chance to attract monsters from Beyond', + invert: false, + valueWarning: '', + valueDanger: '', + valueDesirable: '+' + }, + { + matcher: '#% maximum Player Resistances', + invert: true, + valueWarning: '-10', + valueDanger: '', + valueDesirable: '' + }, + { + matcher: 'Monsters reflect #% of Physical Damage', + invert: false, + valueWarning: '', + valueDanger: '+', + valueDesirable: '' + }, + { + matcher: 'Monsters reflect #% of Elemental Damage', + invert: false, + valueWarning: '', + valueDanger: '+', + valueDesirable: '' + }, + { + matcher: 'Area contains two Unique Bosses', + invert: false, + valueWarning: '', + valueDanger: '', + valueDesirable: '+' + } + ] + } + } as ItemCheckWidget, { wmId: 4, wmType: 'delve-grid', diff --git a/src/main/config.ts b/src/main/config.ts index 93120a2f..0fe5e47e 100644 --- a/src/main/config.ts +++ b/src/main/config.ts @@ -7,6 +7,7 @@ import { GET_CONFIG, PUSH_CONFIG, CLOSE_SETTINGS_WINDOW } from '@/ipc/ipc-event' import { overlayWindow } from './overlay-window' import { logger } from './logger' import { LogWatcher } from './LogWatcher' +import { ItemCheckWidget } from '@/web/overlay/interfaces' export function setupConfigEvents () { ipcMain.on(GET_CONFIG, (e) => { @@ -33,7 +34,7 @@ export const config = (() => { if (forbidden.includes(config.priceCheckLocked as string)) { config.priceCheckLocked = null } if (forbidden.includes(config.wikiKey as string)) { config.wikiKey = null } if (forbidden.includes(config.craftOfExileKey as string)) { config.craftOfExileKey = null } - if (forbidden.includes(config.mapCheckKey as string)) { config.mapCheckKey = null } + if (forbidden.includes(config.itemCheckKey as string)) { config.itemCheckKey = null } if (config.priceCheckKeyHold === 'Ctrl' && forbiddenCtrl.includes(config.priceCheckKey as string)) { config.priceCheckKey = null } @@ -117,6 +118,18 @@ export const config = (() => { config.configVersion = 6 } + 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.selectedStats = undefined + + config.itemCheckKey = (config as any).mapCheckKey || null + ;(config as any).mapCheckKey = undefined + + config.configVersion = 7 + } + store.store = config return store })() diff --git a/src/main/shortcuts.ts b/src/main/shortcuts.ts index aa2832cc..2b973d33 100644 --- a/src/main/shortcuts.ts +++ b/src/main/shortcuts.ts @@ -39,12 +39,12 @@ function priceCheck (lockedMode: boolean) { } } -function mapCheck () { - logger.info('Map check', { source: 'shortcuts' }) +function itemCheck () { + logger.info('Item check', { source: 'shortcuts' }) pollClipboard() .then(clipboard => { - overlayWindow!.webContents.send(ipc.MAP_CHECK, { clipboard, position: hotkeyPressPosition! } as ipc.IpcMapCheck) + overlayWindow!.webContents.send(ipc.ITEM_CHECK, { clipboard, position: hotkeyPressPosition! } as ipc.IpcItemCheck) assertOverlayActive() }) .catch(() => {}) @@ -83,8 +83,8 @@ function registerGlobal () { } ), shortcutCallback( - config.get('mapCheckKey'), - mapCheck + config.get('itemCheckKey'), + itemCheck ), shortcutCallback( config.get('delveGridKey'), @@ -166,8 +166,8 @@ export function setupShortcuts () { pollClipboard().then(openCraftOfExile).catch(() => {}) robotjs.keyTap('C', ['Ctrl']) }).cb() - } else if (pressed === config.get('mapCheckKey')) { - shortcutCallback(pressed, mapCheck).cb() + } else if (pressed === config.get('itemCheckKey')) { + shortcutCallback(pressed, itemCheck).cb() } else if (pressed === config.get('delveGridKey')) { shortcutCallback(pressed, toggleDelveGrid, { doNotResetModKey: true }).cb() } else { diff --git a/src/web/item-check/ItemInfo.vue b/src/web/item-check/ItemInfo.vue new file mode 100644 index 00000000..fc9a5f74 --- /dev/null +++ b/src/web/item-check/ItemInfo.vue @@ -0,0 +1,48 @@ + + + + + +{ + "ru": { + } +} + diff --git a/src/web/item-check/WidgetItemCheck.vue b/src/web/item-check/WidgetItemCheck.vue new file mode 100644 index 00000000..99373ff0 --- /dev/null +++ b/src/web/item-check/WidgetItemCheck.vue @@ -0,0 +1,94 @@ + + + + + +{ + "ru": { + } +} + diff --git a/src/web/map-check/MapCheck.vue b/src/web/map-check/MapCheck.vue new file mode 100644 index 00000000..3e27d6f3 --- /dev/null +++ b/src/web/map-check/MapCheck.vue @@ -0,0 +1,71 @@ + + + + + +{ + "ru": { + "Item has no modifiers.": "На предмете нету модов." + } +} + diff --git a/src/web/map-check/MapStatButton.vue b/src/web/map-check/MapStatButton.vue index 553e86fc..435102f4 100644 --- a/src/web/map-check/MapStatButton.vue +++ b/src/web/map-check/MapStatButton.vue @@ -28,7 +28,7 @@ import { defineComponent, PropType, computed } from 'vue' import ItemModifierText from '../ui/ItemModifierText.vue' import { Config } from '@/web/Config' import { PreparedStat } from './prepare-map-stats' -import { MapCheckWidget } from '../overlay/interfaces' +import { ItemCheckWidget } from '../overlay/interfaces' export default defineComponent({ components: { ItemModifierText }, @@ -40,11 +40,11 @@ export default defineComponent({ }, setup (props) { const config = computed(() => { - return Config.store.widgets.find(widget => widget.wmType === 'map-check') as MapCheckWidget + return Config.store.widgets.find(widget => widget.wmType === 'item-check') as ItemCheckWidget }) const entryInSelected = computed(() => { - return config.value.selectedStats.find(_ => _.matcher === props.stat.matcher) + return config.value.maps.selectedStats.find(_ => _.matcher === props.stat.matcher) }) const state = computed(() => { @@ -105,7 +105,7 @@ export default defineComponent({ state, handleClick () { if (!entryInSelected.value) { - config.value.selectedStats.push({ + config.value.maps.selectedStats.push({ matcher: props.stat.matcher, invert: false, valueDanger: '+', @@ -124,7 +124,7 @@ export default defineComponent({ entryInSelected.value.valueWarning = '' entryInSelected.value.valueDesirable = '+' } else if (entryInSelected.value.valueDesirable === '+') { - config.value.selectedStats = config.value.selectedStats.filter(selected => selected !== entryInSelected.value) + config.value.maps.selectedStats = config.value.maps.selectedStats.filter(selected => selected !== entryInSelected.value) } } } diff --git a/src/web/map-check/WidgetMapCheck.vue b/src/web/map-check/WidgetMapCheck.vue deleted file mode 100644 index c6a19fb4..00000000 --- a/src/web/map-check/WidgetMapCheck.vue +++ /dev/null @@ -1,125 +0,0 @@ - - - - - -{ - "ru": { - "Item under cursor is not a craftable map-like item.": "Предмет под курсором не является крафтовым предметом, таким как карта.", - "Invalid item": "Неверный предмет", - "Item has no modifiers.": "На предмете нету модов." - } -} - diff --git a/src/web/overlay/OverlayWindow.vue b/src/web/overlay/OverlayWindow.vue index f048e991..7f43f4d6 100644 --- a/src/web/overlay/OverlayWindow.vue +++ b/src/web/overlay/OverlayWindow.vue @@ -26,7 +26,7 @@ import WidgetStashSearch from './WidgetStashSearch' import WidgetMenu from './WidgetMenu' import PriceCheckWindow from '@/web/price-check/PriceCheckWindow' import WidgetDebug from './WidgetDebug' -import WidgetMapCheck from '@/web/map-check/WidgetMapCheck' +import WidgetItemCheck from '@/web/item-check/WidgetItemCheck' import WidgetImageStrip from './WidgetImageStrip' import WidgetDelveGrid from './WidgetDelveGrid' import { registerOtherServices } from '../other-services' @@ -45,7 +45,7 @@ export default { WidgetMenu, WidgetPriceCheck: PriceCheckWindow, WidgetDebug, - WidgetMapCheck, + WidgetItemCheck, WidgetImageStrip, WidgetDelveGrid, LoadingAnimation diff --git a/src/web/overlay/interfaces.ts b/src/web/overlay/interfaces.ts index 57932647..11f237f1 100644 --- a/src/web/overlay/interfaces.ts +++ b/src/web/overlay/interfaces.ts @@ -51,14 +51,16 @@ export interface PriceCheckWidget extends Widget { apiLatencySeconds: number } -export interface MapCheckWidget extends Widget { - selectedStats: Array<{ - matcher: string - invert: boolean - valueWarning: string - valueDanger: string - valueDesirable: string - }> +export interface ItemCheckWidget extends Widget { + maps: { + selectedStats: Array<{ + matcher: string + invert: boolean + valueWarning: string + valueDanger: string + valueDesirable: string + }> + } } export interface StopwatchWidget extends Widget { diff --git a/src/web/settings/MapsStatEntry.vue b/src/web/settings/MapsStatEntry.vue index ac0d4135..0daaf98e 100644 --- a/src/web/settings/MapsStatEntry.vue +++ b/src/web/settings/MapsStatEntry.vue @@ -19,7 +19,7 @@ import { defineComponent, computed, nextTick } from 'vue' import { useI18n } from 'vue-i18n' import { Config } from '@/web/Config' -import { MapCheckWidget } from '../overlay/interfaces' +import { ItemCheckWidget } from '../overlay/interfaces' export default defineComponent({ emits: [], @@ -35,10 +35,10 @@ export default defineComponent({ }, setup (props) { const config = computed(() => { - return Config.store.widgets.find(widget => widget.wmType === 'map-check') as MapCheckWidget + return Config.store.widgets.find(widget => widget.wmType === 'item-check') as ItemCheckWidget }) const entryInSelected = computed(() => { - return config.value.selectedStats.find(_ => _.matcher === props.matcher) + return config.value.maps.selectedStats.find(_ => _.matcher === props.matcher) }) const invert = computed({ @@ -58,9 +58,9 @@ export default defineComponent({ set (value) { setProp('valueDesirable', value) } }) - function setProp ( + function setProp ( key: T, - value: MapCheckWidget['selectedStats'][number][T] + value: ItemCheckWidget['maps']['selectedStats'][number][T] ) { if (entryInSelected.value) { entryInSelected.value[key] = value @@ -68,7 +68,7 @@ export default defineComponent({ removeIfNotUsed() } } else { - config.value.selectedStats.push({ + config.value.maps.selectedStats.push({ matcher: props.matcher, invert: false, valueWarning: '', @@ -94,7 +94,7 @@ export default defineComponent({ function remove () { if (!entryInSelected.value) return - config.value.selectedStats = config.value.selectedStats + config.value.maps.selectedStats = config.value.maps.selectedStats .filter(selected => selected !== entryInSelected.value) } diff --git a/src/web/settings/hotkeys.vue b/src/web/settings/hotkeys.vue index 6e1fadae..68c815d2 100644 --- a/src/web/settings/hotkeys.vue +++ b/src/web/settings/hotkeys.vue @@ -32,8 +32,8 @@
-
{{ t('Map check') }}
- +
{{ t('Item info') }}
+
@@ -88,7 +88,7 @@ export default defineComponent({ "Open without auto-hide": "Открыть без авто-скрытия", "Overlay": "Оверлей", "Open item on wiki": "Открыть предмет в вики", - "Map check": "Проверка карты", + "Item info": "Проверка предмета", "Stash tab scrolling": "Прокрутка вкладок тайника", "Delve grid": "Сетка \"Спуска\"" } diff --git a/src/web/settings/maps.vue b/src/web/settings/maps.vue index b6f80dd2..433c51d4 100644 --- a/src/web/settings/maps.vue +++ b/src/web/settings/maps.vue @@ -48,7 +48,7 @@ import { useI18n } from 'vue-i18n' import { Config } from '@/web/Config' import { STATS } from '@/assets/data' import MapsStatEntry from './MapsStatEntry.vue' -import { MapCheckWidget } from '../overlay/interfaces' +import { ItemCheckWidget } from '../overlay/interfaces' import VirtualScroll from '../ui/VirtualScroll.vue' const statList = computed(() => { @@ -67,7 +67,7 @@ export default defineComponent({ const onlySelected = ref(true) const config = computed(() => { - return Config.store.widgets.find(widget => widget.wmType === 'map-check') as MapCheckWidget + return Config.store.widgets.find(widget => widget.wmType === 'item-check') as ItemCheckWidget }) const { t } = useI18n() @@ -82,7 +82,7 @@ export default defineComponent({ return statList.value.filter(stat => q.every(part => stat.searchStr.includes(part)) && (onlySelected.value - ? (config.value.selectedStats.some(selected => selected.matcher === stat.matchStr)) + ? (config.value.maps.selectedStats.some(selected => selected.matcher === stat.matchStr)) : true) ) }),