From 25c56e9a9813ab97e7b7c6e79bee5723921378f8 Mon Sep 17 00:00:00 2001 From: izure <=> Date: Tue, 11 May 2021 02:59:25 +0900 Subject: [PATCH] fix https://github.com/izure1/eriengine/issues/74 --- package-lock.json | 29 ++- package.json | 2 + .../Manager/Data/Scene/Map/Main.vue | 223 ++++++++++++++---- .../Data/Scene/Map/Phaser/PreviewScene.ts | 67 ++++-- .../Scene/Map/Phaser/SceneDataTransfer.ts | 30 +-- .../Data/Scene/Map/Phaser/SceneMapManager.ts | 57 ++++- src/background.ts | 1 - 7 files changed, 319 insertions(+), 90 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1c8053e..76dfc66 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "eriengine", - "version": "1.0.0-alpha.14", + "version": "1.0.0-alpha.16", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "eriengine", - "version": "1.0.0-alpha.14", + "version": "1.0.0-alpha.16", "hasInstallScript": true, "dependencies": { "@eriengine/plugin-actor": "^1.3.0", @@ -40,6 +40,7 @@ "pid-from-port": "^1.1.3", "sanitize-filename": "^1.6.3", "scrollmonitor": "^1.2.4", + "string-similarity": "^4.0.4", "tiny-typed-emitter": "^2.0.3", "trash": "^7.0.0", "tree-kill": "^1.2.2", @@ -62,6 +63,7 @@ "@types/node-fetch": "^2.5.8", "@types/normalize-path": "^3.0.0", "@types/pid-from-port": "^1.1.0", + "@types/string-similarity": "^4.0.0", "@typescript-eslint/eslint-plugin": "^4.12.0", "@typescript-eslint/parser": "^4.12.0", "@vue/cli-plugin-babel": "~4.5.0", @@ -1890,6 +1892,13 @@ "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==", "dev": true }, + "node_modules/@types/string-similarity": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/string-similarity/-/string-similarity-4.0.0.tgz", + "integrity": "sha512-dMS4S07fbtY1AILG/RhuwmptmzK1Ql8scmAebOTJ/8iBtK/KI17NwGwKzu1uipjj8Kk+3mfPxum56kKZE93mzQ==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/tapable": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.6.tgz", @@ -16662,6 +16671,11 @@ "safe-buffer": "~5.1.0" } }, + "node_modules/string-similarity": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/string-similarity/-/string-similarity-4.0.4.tgz", + "integrity": "sha512-/q/8Q4Bl4ZKAPjj8WerIBJWALKkaPRfrvhfF8k/B23i4nzrlRj2/go1m90In7nG/3XDSbOo0+pu6RvCTM9RGMQ==" + }, "node_modules/string-width": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", @@ -22329,6 +22343,12 @@ "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==", "dev": true }, + "@types/string-similarity": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/string-similarity/-/string-similarity-4.0.0.tgz", + "integrity": "sha512-dMS4S07fbtY1AILG/RhuwmptmzK1Ql8scmAebOTJ/8iBtK/KI17NwGwKzu1uipjj8Kk+3mfPxum56kKZE93mzQ==", + "dev": true + }, "@types/tapable": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.6.tgz", @@ -34727,6 +34747,11 @@ "safe-buffer": "~5.1.0" } }, + "string-similarity": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/string-similarity/-/string-similarity-4.0.4.tgz", + "integrity": "sha512-/q/8Q4Bl4ZKAPjj8WerIBJWALKkaPRfrvhfF8k/B23i4nzrlRj2/go1m90In7nG/3XDSbOo0+pu6RvCTM9RGMQ==" + }, "string-width": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", diff --git a/package.json b/package.json index 582bca9..1408440 100644 --- a/package.json +++ b/package.json @@ -42,6 +42,7 @@ "pid-from-port": "^1.1.3", "sanitize-filename": "^1.6.3", "scrollmonitor": "^1.2.4", + "string-similarity": "^4.0.4", "tiny-typed-emitter": "^2.0.3", "trash": "^7.0.0", "tree-kill": "^1.2.2", @@ -64,6 +65,7 @@ "@types/node-fetch": "^2.5.8", "@types/normalize-path": "^3.0.0", "@types/pid-from-port": "^1.1.0", + "@types/string-similarity": "^4.0.0", "@typescript-eslint/eslint-plugin": "^4.12.0", "@typescript-eslint/parser": "^4.12.0", "@vue/cli-plugin-babel": "~4.5.0", diff --git a/src/Renderer/components/Manager/Data/Scene/Map/Main.vue b/src/Renderer/components/Manager/Data/Scene/Map/Main.vue index 5755eb7..90ba61b 100644 --- a/src/Renderer/components/Manager/Data/Scene/Map/Main.vue +++ b/src/Renderer/components/Manager/Data/Scene/Map/Main.vue @@ -14,8 +14,7 @@ dense > - @@ -107,27 +106,11 @@ 스프라이트 - - - @@ -222,8 +203,7 @@ - - 기본 사용법 - 씬 에디터를 이용하여 씬을 GUI 환경에서 디자인할 수 있습니다. + 씬 파렛트를 이용하여 씬을 GUI 환경에서 디자인할 수 있습니다.
만들어둔 스프라이트나 이미지, 액터 데이터를 사용합니다.
@@ -336,8 +315,7 @@
- @@ -345,7 +323,7 @@ 맵의 한 변의 크기를 지정합니다. 큰 맵은 성능 저하를 유발합니다. + + + 씬 파렛트 에셋 누락 + + 씬을 구성하는 데이터 중 {{ missingAssets.length }}개의 에셋이 누락되었으며, 다음과 같습니다. + + + + + + {{ missingAsset }} + {{ getSimilarPath(missingAsset, allDatasPath) }} 아닌가요? + + + + + 바꾸기 + + + + 제거 + + + + 고쳤으므로 무시하겠습니다 + + + + +

+ 해당 내용을 기반으로 에셋의 위치를 확인하고 고치십시오. +

+
+ + + + + + mdi-check + + +
+
+
import path from 'path' +import fs from 'fs-extra' import { ipcRenderer } from 'electron' +import glob from 'fast-glob' import normalize from 'normalize-path' import Phaser from 'phaser' import { Vue, Component, Watch } from 'vue-property-decorator' import NonReactivity from 'vue-nonreactivity-decorator' +import similarity from 'string-similarity' import PreviewScene from './Phaser/PreviewScene' import GuiScene from './Phaser/GuiScene' @@ -436,12 +501,17 @@ export default class SceneMapEditor extends Vue { private isMapResizerOpen: boolean = false private isContextmenuOpen: boolean = false private isPropertiesOpen: boolean = false + private isAssetMissingOpen: boolean = false + private isWillBeRestartAfterSave: boolean = false private contextmenuOffset: Types.Point2 = { x: 0, y: 0 } private propertyAlias: string = '' private propertyIsSensor: boolean = false private propertyScale: number = 1 + private missingAssets: string[] = [] + private allDatasPath: string[] = [] + private propertyOnlyPositiveNumber: Rule = (v: string) => { const n: any = v if (isNaN(n)) { @@ -453,6 +523,7 @@ export default class SceneMapEditor extends Vue { return true } + private map: Engine.GameProject.SceneMap = { side: 2000, walls: [], floors: [] } private paletteImages: Types.PaletteImage[] = [] private paletteSprites: Types.PaletteSprite[] = [] private paletteBrush: Types.PaletteImage|null = null @@ -461,7 +532,6 @@ export default class SceneMapEditor extends Vue { private selectionType: number = 0 private brushType: number = 0 private disposeBrush: Types.PaletteImage|Types.PaletteSprite|null = null - private mapSceneSide: number = 2000 private buttons: ActionButton[] = [ { @@ -477,7 +547,7 @@ export default class SceneMapEditor extends Vue { { text: '저장하기', click: (): void => { - this.save() + this.requestSave() } } ] @@ -615,8 +685,13 @@ export default class SceneMapEditor extends Vue { .on('load-map-fail', (message: string): void => { this.goBack(message) }) - .on('load-map-success', (map: Engine.GameProject.SceneMap): void => { - this.mapSceneSide = map.side + .on('load-map-success', (map: Engine.GameProject.SceneMap, missingAssets: string[]): void => { + this.map.side = map.side + + if (missingAssets.length > 0) { + this.isAssetMissingOpen = true + this.missingAssets = missingAssets + } }) .on('save-map-fail', (message: string): void => { this.isSaving = false @@ -625,6 +700,10 @@ export default class SceneMapEditor extends Vue { .on('save-map-success', (): void => { this.isSaving = false this.$store.dispatch('snackbar', '저장되었습니다!') + + if (this.isWillBeRestartAfterSave) { + this.restart() + } }) this.resizeCanvas() @@ -782,7 +861,7 @@ export default class SceneMapEditor extends Vue { this.setDisposeBrush(null) } - private save(): void { + private requestSave(): void { if (!this.scene) { return } @@ -874,7 +953,7 @@ export default class SceneMapEditor extends Vue { if (!this.scene) { return } - this.scene.transfer.emit('receive-map-side', this.mapSceneSide) + this.scene.transfer.emit('receive-map-side', this.map.side) } private requestDeleteSelection(): void { @@ -911,8 +990,14 @@ export default class SceneMapEditor extends Vue { const spriteModule = __non_webpack_require__(spriteModulePath) const imageModule = __non_webpack_require__(imageModulePath) - this.paletteSprites = Object.values(spriteModule) as Types.PaletteSprite[] - this.paletteImages = Object.values(imageModule) as Types.PaletteImage[] + const checkAssetExists = (rawModuledata: unknown) => { + const { key } = rawModuledata as Types.PaletteSprite|Types.PaletteImage + const filePath = path.resolve(this.$store.state.projectDirectory, key) + return fs.existsSync(filePath) + } + + this.paletteSprites = Object.values(spriteModule).filter(checkAssetExists) as Types.PaletteSprite[] + this.paletteImages = Object.values(imageModule).filter(checkAssetExists) as Types.PaletteImage[] } catch (e) { this.isBuiltFail = true return @@ -926,13 +1011,65 @@ export default class SceneMapEditor extends Vue { this.watchResizeWindow() } - @Watch('mapSceneSide') + private async restart(): Promise { + const location = this.$route.fullPath + await this.$router.replace('/manager/engine/home') + await this.$router.replace(location) + } + + private saveAndRestart(): void { + this.isWillBeRestartAfterSave = true + this.requestSave() + } + + private async setAllDatasPath(): Promise { + const root: string = this.$store.state.projectDirectory + const dataRoot = path.resolve(root, PROJECT_SRC_DIRECTORY_NAME, PROJECT_SRC_DATA_DIRECTORY_NAME) + const imageDirectory = path.resolve(dataRoot, PROJECT_SRC_DATA_IMAGE_DIRECTORY_NAME) + const animationDirectory = path.resolve(dataRoot, PROJECT_SRC_DATA_ANIMATION_DIRECTORY_NAME) + + const images = await glob('**/*.ts', { cwd: imageDirectory, onlyFiles: true, absolute: true }) + const animations = await glob('**/*.ts', { cwd: animationDirectory, onlyFiles: true, absolute: true }) + const changeToRelative = (assetPath: string): string => { + return path.relative(root, assetPath) + } + + this.allDatasPath = [ + ...images.map(changeToRelative), + ...animations.map(changeToRelative) + ] + } + + private getSimilarPath(main: string, samples: string[]): string { + return similarity.findBestMatch(main, samples).bestMatch.target + } + + private requestChangeAssetPath(before: string, after: string): void { + this.scene?.transfer.emit('receive-change-asset-path', before, after) + this.deleteMissingAsset(before) + } + + private requestDeleteMissingAsset(assetPath: string): void { + // 정말로 이 에셋을 씬에서 제거하시겠습니까? 이 작업은 복구할 수 없습니다. + this.scene?.transfer.emit('receive-delete-asset', assetPath) + this.deleteMissingAsset(assetPath) + } + + private deleteMissingAsset(assetPath: string): void { + const i = this.missingAssets.indexOf(assetPath) + if (i !== -1) { + this.missingAssets.splice(i, 1) + } + } + + @Watch('map.side') private onChanageMapSceneSide(): void { - this.setMapSide(this.mapSceneSide) + this.setMapSide(this.map.side) } - mounted(): void { - this.start() + async mounted(): Promise { + await this.setAllDatasPath() + await this.start() } beforeDestroy(): void { diff --git a/src/Renderer/components/Manager/Data/Scene/Map/Phaser/PreviewScene.ts b/src/Renderer/components/Manager/Data/Scene/Map/Phaser/PreviewScene.ts index d16cf10..6e0f4f5 100644 --- a/src/Renderer/components/Manager/Data/Scene/Map/Phaser/PreviewScene.ts +++ b/src/Renderer/components/Manager/Data/Scene/Map/Phaser/PreviewScene.ts @@ -25,7 +25,7 @@ export default class PreviewScene extends Phaser.Scene { private dialogue!: DialoguePlugin readonly transfer: SceneDataTransfer = new SceneDataTransfer - readonly mapData: SceneMapManager = new SceneMapManager({ side: 2000, walls: [], floors: [] }) + readonly map: SceneMapManager = new SceneMapManager({ side: 2000, walls: [], floors: [] }) private projectDirectory: string = '' private storageKey: string = '' @@ -232,12 +232,12 @@ export default class PreviewScene extends Phaser.Scene { private deleteSelectionObjects(): void { this.selectionWalls.forEach((wall): void => { - this.mapData.dropWallData(wall) + this.map.dropWallData(wall) wall.destroy() }) this.selectionFloors.forEach((floor): void => { - this.mapData.dropFloorData(floor) + this.map.dropFloorData(floor) floor.destroy() }) @@ -251,7 +251,7 @@ export default class PreviewScene extends Phaser.Scene { // 올바르지 않은 값이 넘어왔을 경우 객체를 삭제하고 데이터에서도 제거함 if (isNaN(scale) || typeof scale !== 'number') { - this.mapData.dropWallData(wall) + this.map.dropWallData(wall) wall.destroy() return } @@ -260,7 +260,7 @@ export default class PreviewScene extends Phaser.Scene { wall.setSensor(isSensor) wall.data.set('alias', alias) - this.mapData.modifyWallData(wall) + this.map.modifyWallData(wall) } private calcStraightDisposeOffset(x: number, y: number): Types.Point2 { @@ -319,7 +319,7 @@ export default class PreviewScene extends Phaser.Scene { const wall = this.isometric.setWalltile(x, y, brushKey, undefined, animsKey) wall.setDataEnabled() if (insertData) { - this.mapData.insertWallData(wall) + this.map.insertWallData(wall) } return wall } @@ -327,7 +327,7 @@ export default class PreviewScene extends Phaser.Scene { case 3: { const floor = this.isometric.setFloortile(x, y, brushKey, undefined, animsKey) if (insertData) { - this.mapData.insertFloorData(floor) + this.map.insertFloorData(floor) } return floor } @@ -413,22 +413,37 @@ export default class PreviewScene extends Phaser.Scene { this.transfer.emit('load-map-fail', sceneMapRead.message) return false } - this.mapData.setData(sceneMapRead.content) - this.transfer.emit('load-map-success', this.mapData) - this.setWorldSize(this.mapData.side) + const { side, walls, floors } = sceneMapRead.content - for (const props of this.mapData.walls) { - const wall = this.dispose(props.x, props.y, 2, props.key, false) + this.setWorldSize(side) + + const missingAssets: Set = new Set + + for (const prop of walls) { + const wall = this.dispose(prop.x, prop.y, 2, prop.key, false) + // 맵데이터 파일에는 기록되어있지만, 에셋이 삭제되었을 경우 에셋을 목록에서 제거합니다. if (!wall) { + missingAssets.add(prop.key) continue } - this.setWallProperties(wall as Phaser.Physics.Matter.Sprite, props) + // 벽의 정보를 설정합니다. 센서, 비율, 이름 등의 정보를 게임 오브젝트에 삽입합니다. + // 이후 씬에서 우클릭으로 오브젝트를 선택했을 때, 해당 오브젝트에서 이 정보를 읽어옵니다. + this.setWallProperties(wall as Phaser.Physics.Matter.Sprite, prop) } - for (const { key, x, y } of this.mapData.floors) { - this.dispose(x, y, 3, key, false) + + for (const prop of floors) { + const floor = this.dispose(prop.x, prop.y, 3, prop.key, false) + // 맵데이터 파일에는 기록되어있지만, 에셋이 삭제되었을 경우 에셋을 목록에서 제거합니다. + if (!floor) { + missingAssets.add(prop.key) + } } + // 읽어들인 원본 맵 데이터를 기반으로 씬 파렛트 맵 데이터 인스턴스 생성 + this.map.setData({ side, walls, floors }) + this.transfer.emit('load-map-success', this.map, [...missingAssets.values()]) + return true } @@ -497,19 +512,21 @@ export default class PreviewScene extends Phaser.Scene { .on('receive-save-request', (): void => { this.save() }) + .on('receive-change-asset-path', (before: string, after: string): void => { + this.changeAssetPath(before, after) + }) + .on('receive-delete-asset', (assetPath: string): void => { + this.deleteAssetPath(assetPath) + }) } private setWorldSize(side: number): void { - this.mapData.modifySide(side) + this.map.modifySide(side) this.isometric.setWorldSize(side) } private async save(): Promise { - if (!this.mapData) { - this.transfer.emit('save-map-fail', '데이터 인스턴스가 없습니다') - return - } - const mapData = this.mapData.data + const mapData = this.map.data const mapWrite: Engine.GameProject.WriteSceneMapSuccess|Engine.GameProject.WriteSceneMapFail = await ipcRenderer.invoke('write-scene-map', this.projectDirectory, this.storageKey, mapData) if (!mapWrite.success) { this.transfer.emit('save-map-fail', mapWrite.message) @@ -518,6 +535,14 @@ export default class PreviewScene extends Phaser.Scene { this.transfer.emit('save-map-success', mapData) } + private async changeAssetPath(before: string, after: string): Promise { + this.map.changeAssetPath(before, after) + } + + private async deleteAssetPath(assetPath: string): Promise { + this.map.deleteAssetPath(assetPath) + } + init(): void { this.plugins.installScenePlugin('ActorPlugin', ActorPlugin, 'actor', this) this.plugins.installScenePlugin('IsometricScenePlugin', IsometricScenePlugin, 'isometric', this) diff --git a/src/Renderer/components/Manager/Data/Scene/Map/Phaser/SceneDataTransfer.ts b/src/Renderer/components/Manager/Data/Scene/Map/Phaser/SceneDataTransfer.ts index 3b5f6e3..023f488 100644 --- a/src/Renderer/components/Manager/Data/Scene/Map/Phaser/SceneDataTransfer.ts +++ b/src/Renderer/components/Manager/Data/Scene/Map/Phaser/SceneDataTransfer.ts @@ -2,20 +2,22 @@ import { TypedEmitter } from 'tiny-typed-emitter' import * as Types from './Vars/Types' interface SceneDataTransferEvents { - 'load-map-fail': (message: string) => void - 'load-map-success': (map: Engine.GameProject.SceneMap) => void - 'save-map-fail': (message: string) => void - 'save-map-success': (map: Engine.GameProject.SceneMap) => void - 'receive-map-side': (side: number) => void - 'receive-selection-type': (type: number) => void - 'receive-dispose-mode': (activity: boolean) => void - 'receive-dispose-brush': (brush: Types.PaletteImage|Types.PaletteSprite|null) => void - 'receive-image-list': (list: Types.PaletteImage[]) => void - 'receive-sprite-list': (list: Types.PaletteSprite[]) => void - 'receive-open-properties': () => void - 'receive-delete-selection': () => void - 'receive-wall-properties': (properties: Types.PaletteProperties) => void - 'receive-save-request': () => void + 'load-map-fail': (message: string) => void + 'load-map-success': (map: Engine.GameProject.SceneMap, missingAssets: string[]) => void + 'save-map-fail': (message: string) => void + 'save-map-success': (map: Engine.GameProject.SceneMap) => void + 'receive-map-side': (side: number) => void + 'receive-selection-type': (type: number) => void + 'receive-dispose-mode': (activity: boolean) => void + 'receive-dispose-brush': (brush: Types.PaletteImage|Types.PaletteSprite|null) => void + 'receive-image-list': (list: Types.PaletteImage[]) => void + 'receive-sprite-list': (list: Types.PaletteSprite[]) => void + 'receive-open-properties': () => void + 'receive-delete-selection': () => void + 'receive-wall-properties': (properties: Types.PaletteProperties) => void + 'receive-save-request': () => void + 'receive-change-asset-path': (before: string, after: string) => void + 'receive-delete-asset': (assetPath: string) => void } export class SceneDataTransfer extends TypedEmitter {} \ No newline at end of file diff --git a/src/Renderer/components/Manager/Data/Scene/Map/Phaser/SceneMapManager.ts b/src/Renderer/components/Manager/Data/Scene/Map/Phaser/SceneMapManager.ts index a4042e4..ce74ae3 100644 --- a/src/Renderer/components/Manager/Data/Scene/Map/Phaser/SceneMapManager.ts +++ b/src/Renderer/components/Manager/Data/Scene/Map/Phaser/SceneMapManager.ts @@ -1,6 +1,6 @@ import { Engine } from 'matter' +import normalize from 'normalize-path' import Phaser from 'phaser' -import * as Types from './Vars/Types' export class SceneMapManager implements Engine.GameProject.SceneMap { side!: number @@ -81,6 +81,45 @@ export class SceneMapManager implements Engine.GameProject.SceneMap { return { key: object.texture.key, x, y } } + changeAssetPath(before: string, after: string): this { + const changeAssetPath = (target: Engine.GameProject.SceneMapWall|Engine.GameProject.SceneMapFloor, before: string, after: string): void => { + if (target.key === before) { + target.key = after + } + } + for (const wall of this.walls) { + changeAssetPath(wall, before, after) + } + for (const floor of this.floors) { + changeAssetPath(floor, before, after) + } + return this + } + + deleteAssetPath(assetPath: string): this { + let i = this.walls.length + let j = this.floors.length + + const normalizeAssetPath = normalize(assetPath) + while (i--) { + const { key } = this.walls[i] + if (normalize(key) !== normalizeAssetPath) { + continue + } + this.walls.splice(i, 1) + } + + while (j--) { + const { key } = this.floors[j] + if (normalize(key) !== normalizeAssetPath) { + continue + } + this.floors.splice(j, 1) + } + + return this + } + insertWallData(object: Phaser.Physics.Matter.Sprite): this { const has = !!this.getWall(object.x, object.y) if (has) { @@ -132,24 +171,24 @@ export class SceneMapManager implements Engine.GameProject.SceneMap { return this } - dropWallData({ x, y }: Phaser.Physics.Matter.Sprite): this { - const wall = this.getWall(x, y) - if (!wall) { + dropWallData({ x, y }: Point2): this { + const key = this.getWall(x, y) + if (!key) { return this } - const index = this.walls.indexOf(wall) + const index = this.walls.indexOf(key) this.walls.splice(index, 1) return this } - dropFloorData({ x, y }: Phaser.GameObjects.Sprite): this { - const floor = this.getFloor(x, y) - if (!floor) { + dropFloorData({ x, y }: Point2): this { + const key = this.getFloor(x, y) + if (!key) { return this } - const index = this.floors.indexOf(floor) + const index = this.floors.indexOf(key) this.floors.splice(index, 1) return this } diff --git a/src/background.ts b/src/background.ts index d5559ed..210cfa0 100644 --- a/src/background.ts +++ b/src/background.ts @@ -131,7 +131,6 @@ async function createWindow() { // Load the index.html when not in development win.loadURL('app://./index.html') } - //console.log(await a()) win.setMenu(null) win.once('ready-to-show', win.show)