From dd1cc795de768047b5072763e6ce4a38eff9a642 Mon Sep 17 00:00:00 2001 From: Dennis Postma <dennis@directonline.io> Date: Tue, 11 Feb 2025 23:13:15 +0100 Subject: [PATCH] Replaced all event names with numbers for less bandwidth usage --- package-lock.json | 159 +++++------------- src/application/enums.ts | 56 ++++++ src/components/game/gui/Chat.vue | 5 +- src/components/game/gui/Clock.vue | 3 +- src/components/game/map/Characters.vue | 16 +- src/components/game/map/Map.vue | 5 +- .../characterHair/CharacterHairDetails.vue | 9 +- .../characterHair/CharacterHairList.vue | 7 +- .../characterType/CharacterTypeDetails.vue | 9 +- .../characterType/CharacterTypeList.vue | 7 +- .../partials/item/itemDetails.vue | 9 +- .../assetManager/partials/item/itemList.vue | 7 +- .../partials/mapObject/MapObjectDetails.vue | 5 +- .../partials/mapObject/MapObjectList.vue | 7 +- .../partials/sprite/SpriteDetails.vue | 9 +- .../partials/sprite/SpriteList.vue | 7 +- .../partials/tile/TileDetails.vue | 5 +- .../assetManager/partials/tile/TileList.vue | 7 +- .../mapEditor/partials/CreateMap.vue | 3 +- .../gameMaster/mapEditor/partials/MapList.vue | 5 +- .../mapEditor/partials/TeleportModal.vue | 3 +- src/components/screens/Characters.vue | 18 +- src/components/screens/MapEditor.vue | 3 +- src/components/utilities/Notifications.vue | 5 +- .../controls/useGameControlsComposable.ts | 10 +- src/stores/gameStore.ts | 9 +- 26 files changed, 191 insertions(+), 197 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5a8258f..d2f4d88 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2535,9 +2535,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.96", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.96.tgz", - "integrity": "sha512-8AJUW6dh75Fm/ny8+kZKJzI1pgoE8bKLZlzDU2W1ENd+DXKJrx7I7l9hb8UWR4ojlnb5OlixMt00QWiYJoVw1w==", + "version": "1.5.97", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.97.tgz", + "integrity": "sha512-HKLtaH02augM7ZOdYRuO19rWDeY+QSJ1VxnXFa/XDFLf07HvM90pALIJFgrO+UVaajI3+aJMMpojoUTLZyQ7JQ==", "dev": true, "license": "ISC" }, @@ -2881,25 +2881,22 @@ } }, "node_modules/glob": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.1.tgz", - "integrity": "sha512-zrQDm8XPnYEKawJScsnM0QzobJxlT/kHOOlRTio8IH/GrmxRE5fjllkzdaHclIuNjUQTJYH2xHNIGfdpJkDJUw==", + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^4.0.1", - "minimatch": "^10.0.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", - "path-scurry": "^2.0.0" + "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" }, - "engines": { - "node": "20 || >=22" - }, "funding": { "url": "https://github.com/sponsors/isaacs" } @@ -2918,16 +2915,16 @@ } }, "node_modules/glob/node_modules/minimatch": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz", - "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, "engines": { - "node": "20 || >=22" + "node": ">=16 || 14 >=14.17" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -3204,19 +3201,19 @@ "license": "ISC" }, "node_modules/jackspeak": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.0.2.tgz", - "integrity": "sha512-bZsjR/iRjl1Nk1UkjGpAzLNfQtzuijhn2g+pbZb98HQ1Gk8vM9hfbxeMBP+M2/UUdwj0RqGG3mlvk2MsAqwvEw==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" }, - "engines": { - "node": "20 || >=22" - }, "funding": { "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" } }, "node_modules/jiti": { @@ -3230,15 +3227,15 @@ } }, "node_modules/js-beautify": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.15.2.tgz", - "integrity": "sha512-mcG6CHJxxih+EFAbd5NEBwrosIs6MoJmiNLFYN6kj5SeJMf7n29Ii/H4lt6zGTvmdB9AApuj5cs4zydjuLeqjw==", + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.15.3.tgz", + "integrity": "sha512-rKKGuyTxGNlyN4EQKWzNndzXpi0bOl8Gl8YQAW1as/oMz0XhD6sHJO1hTvoBDOSzKuJb9WkwoAb34FfdkKMv2A==", "dev": true, "license": "MIT", "dependencies": { "config-chain": "^1.1.13", "editorconfig": "^1.0.4", - "glob": "^11.0.0", + "glob": "^10.4.2", "js-cookie": "^3.0.5", "nopt": "^8.0.0" }, @@ -3787,32 +3784,22 @@ "license": "MIT" }, "node_modules/path-scurry": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", - "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { - "lru-cache": "^11.0.0", - "minipass": "^7.1.2" + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { - "node": "20 || >=22" + "node": ">=16 || 14 >=14.18" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.2.tgz", - "integrity": "sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA==", - "dev": true, - "license": "ISC", - "engines": { - "node": "20 || >=22" - } - }, "node_modules/pathe": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", @@ -3831,9 +3818,9 @@ } }, "node_modules/phaser": { - "version": "3.87.0", - "resolved": "https://registry.npmjs.org/phaser/-/phaser-3.87.0.tgz", - "integrity": "sha512-AyI1b3T5fp05gzf6WUmu2FNqaZL+Y7w88yBRLf7YZXF9bncUSHpnDrupnTGoPqy/RKHRLBcay7zWeqQ2wiMWcw==", + "version": "3.88.0", + "resolved": "https://registry.npmjs.org/phaser/-/phaser-3.88.0.tgz", + "integrity": "sha512-VLhKMjFBaoSQQU2Q9tqic7gfIrRjX9xqWi1BooFNB2pO2ssTzU4nNOirW8oUXrM/GPgtIR8xNoXmdYmqeKcZrw==", "license": "MIT", "dependencies": { "eventemitter3": "^5.0.1" @@ -3950,9 +3937,9 @@ } }, "node_modules/postcss": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.1.tgz", - "integrity": "sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==", + "version": "8.5.2", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.2.tgz", + "integrity": "sha512-MjOadfU3Ys9KYoX0AdkBlFEF1Vx37uCCeN4ZHnmwm9FfpbsGWMZeBLMmmpY+6Ocqod7mkdZ0DT31OlbsFrLlkA==", "funding": [ { "type": "opencollective", @@ -4664,76 +4651,6 @@ "node": ">= 6" } }, - "node_modules/sucrase/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/sucrase/node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/sucrase/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/sucrase/node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -5363,9 +5280,9 @@ } }, "node_modules/whatwg-url": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.1.0.tgz", - "integrity": "sha512-jlf/foYIKywAt3x/XWKZ/3rz8OSJPiWktjmk891alJUEjiVxKX9LEO92qH3hv4aJ0mN3MWPvGMCy8jQi95xK4w==", + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.1.1.tgz", + "integrity": "sha512-mDGf9diDad/giZ/Sm9Xi2YcyzaFpbdLpJPr+E9fSkyQ7KpQD4SdFcugkRQYzhmfI4KeV4Qpnn2sKPdo+kmsgRQ==", "dev": true, "license": "MIT", "dependencies": { diff --git a/src/application/enums.ts b/src/application/enums.ts index 8dd4620..85a412c 100644 --- a/src/application/enums.ts +++ b/src/application/enums.ts @@ -3,3 +3,59 @@ export enum Direction { NEGATIVE, UNCHANGED } + +export enum SocketEvent { + CLOSE = '52', + DATA = '51', + CHARACTER_CONNECT = '50', + CHARACTER_CREATE = '49', + CHARACTER_DELETE = '48', + CHARACTER_LIST = '47', + GM_CHARACTERHAIR_CREATE = '46', + GM_CHARACTERHAIR_REMOVE = '45', + GM_CHARACTERHAIR_LIST = '44', + GM_CHARACTERHAIR_UPDATE = '43', + GM_CHARACTERTYPE_CREATE = '42', + GM_CHARACTERTYPE_REMOVE = '41', + GM_CHARACTERTYPE_LIST = '40', + GM_CHARACTERTYPE_UPDATE = '39', + GM_ITEM_CREATE = '38', + GM_ITEM_REMOVE = '37', + GM_ITEM_LIST = '36', + GM_ITEM_UPDATE = '35', + GM_MAPOBJECT_LIST = '34', + GM_MAPOBJECT_REMOVE = '33', + GM_MAPOBJECT_UPDATE = '32', + GM_MAPOBJECT_UPLOAD = '31', + GM_SPRITE_COPY = '30', + GM_SPRITE_CREATE = '29', + GM_SPRITE_DELETE = '28', + GM_SPRITE_LIST = '27', + GM_SPRITE_UPDATE = '26', + GM_TILE_DELETE = '25', + GM_TILE_LIST = '24', + GM_TILE_UPDATE = '23', + GM_TILE_UPLOAD = '22', + GM_MAP_CREATE = '21', + GM_MAP_DELETE = '20', + GM_MAP_REQUEST = '19', + GM_MAP_UPDATE = '18', + MAP_CHARACTER_MOVEERROR = '17', + DISCONNECT = '16', + USER_DISCONNECT = '15', + LOGIN = '14', + LOGGED_IN = '13', + NOTIFICATION = '12', + DATE = '11', + FAILED = '10', + COMPLETED = '9', + CONNECTION = '8', + WEATHER = '7', + CHARACTER_DISCONNECT = '6', + MAP_CHARACTER_ATTACK = '5', + MAP_CHARACTER_TELEPORT = '4', + MAP_CHARACTER_JOIN = '3', + MAP_CHARACTER_LEAVE = '2', + MAP_CHARACTER_MOVE = '1', + CHAT_MESSAGE = '0', +} \ No newline at end of file diff --git a/src/components/game/gui/Chat.vue b/src/components/game/gui/Chat.vue index 5c50f35..8c19584 100644 --- a/src/components/game/gui/Chat.vue +++ b/src/components/game/gui/Chat.vue @@ -27,6 +27,7 @@ import { useMapStore } from '@/stores/mapStore' import { onClickOutside, useFocus } from '@vueuse/core' import { useScene } from 'phavuer' import { nextTick, onBeforeUnmount, onMounted, ref } from 'vue' +import { SocketEvent } from '@/application/enums' const scene = useScene() const gameStore = useGameStore() @@ -79,7 +80,7 @@ const scrollToBottom = () => { }) } -gameStore.connection?.on('chat:message', (data: Chat) => { +gameStore.connection?.on(SocketEvent.CHAT_MESSAGE, (data: Chat) => { chats.value.push(data) scrollToBottom() @@ -144,7 +145,7 @@ onMounted(() => { }) onBeforeUnmount(() => { - gameStore.connection?.off('chat:message') + gameStore.connection?.off(SocketEvent.CHAT_MESSAGE) removeEventListener('keydown', focusChat) }) </script> diff --git a/src/components/game/gui/Clock.vue b/src/components/game/gui/Clock.vue index 5d97111..55c20db 100644 --- a/src/components/game/gui/Clock.vue +++ b/src/components/game/gui/Clock.vue @@ -10,10 +10,11 @@ import { useGameStore } from '@/stores/gameStore' import { useDateFormat } from '@vueuse/core' import { onUnmounted } from 'vue' +import { SocketEvent } from '@/application/enums' const gameStore = useGameStore() onUnmounted(() => { - gameStore.connection?.off('date') + gameStore.connection?.off(SocketEvent.DATE) }) </script> diff --git a/src/components/game/map/Characters.vue b/src/components/game/map/Characters.vue index 611cc88..d40c115 100644 --- a/src/components/game/map/Characters.vue +++ b/src/components/game/map/Characters.vue @@ -3,6 +3,7 @@ </template> <script setup lang="ts"> +import { SocketEvent } from '@/application/enums'; import type { MapCharacter, UUID } from '@/application/types' import Character from '@/components/game/character/Character.vue' import { useGameStore } from '@/stores/gameStore' @@ -16,15 +17,15 @@ const props = defineProps<{ tileMap: Phaser.Tilemaps.Tilemap }>() -gameStore.connection?.on('map:character:join', async (data: MapCharacter) => { +gameStore.connection?.on(SocketEvent.MAP_CHARACTER_JOIN, (data: MapCharacter) => { mapStore.addCharacter(data) }) -gameStore.connection?.on('map:character:leave', (characterId: UUID) => { +gameStore.connection?.on(SocketEvent.MAP_CHARACTER_LEAVE, (characterId: UUID) => { mapStore.removeCharacter(characterId) }) -gameStore.connection?.on('map:character:move', (data: { characterId: UUID; positionX: number; positionY: number; rotation: number; isMoving: boolean }) => { +gameStore.connection?.on(SocketEvent.MAP_CHARACTER_MOVE, (data: { characterId: UUID; positionX: number; positionY: number; rotation: number; isMoving: boolean }) => { mapStore.updateCharacterPosition(data) // @TODO: Replace with universal class, composable or store if (data.characterId === gameStore.character?.id) { @@ -34,13 +35,14 @@ gameStore.connection?.on('map:character:move', (data: { characterId: UUID; posit } }) -gameStore.connection?.on('map:character:attack', (characterId: UUID) => { +gameStore.connection?.on(SocketEvent.MAP_CHARACTER_ATTACK, (characterId: UUID) => { mapStore.updateCharacterProperty(characterId, 'isAttacking', true) }) onUnmounted(() => { - gameStore.connection?.off('map:character:join') - gameStore.connection?.off('map:character:leave') - gameStore.connection?.off('map:character:move') + gameStore.connection?.off(SocketEvent.MAP_CHARACTER_ATTACK) + gameStore.connection?.off(SocketEvent.MAP_CHARACTER_MOVE) + gameStore.connection?.off(SocketEvent.MAP_CHARACTER_JOIN) + gameStore.connection?.off(SocketEvent.MAP_CHARACTER_LEAVE) }) </script> diff --git a/src/components/game/map/Map.vue b/src/components/game/map/Map.vue index cb38a11..8916d82 100644 --- a/src/components/game/map/Map.vue +++ b/src/components/game/map/Map.vue @@ -16,6 +16,7 @@ import { useGameStore } from '@/stores/gameStore' import { useMapStore } from '@/stores/mapStore' import { useScene } from 'phavuer' import { onMounted, onUnmounted, shallowRef, watch } from 'vue' +import { SocketEvent } from '@/application/enums' const scene = useScene() @@ -28,7 +29,7 @@ const tileMap = shallowRef<Phaser.Tilemaps.Tilemap>() const tileMapLayer = shallowRef<Phaser.Tilemaps.TilemapLayer>() // Event listeners -gameStore.connection?.on('map:character:teleport', async (data: mapLoadData) => { +gameStore.connection?.on(SocketEvent.MAP_CHARACTER_TELEPORT, (data: mapLoadData) => { mapStore.setMapId(data.mapId) mapStore.setCharacters(data.characters) }) @@ -64,6 +65,6 @@ onUnmounted(() => { tileMap.value.destroy() } - gameStore.connection?.off('map:character:teleport') + gameStore.connection?.off(SocketEvent.MAP_CHARACTER_TELEPORT) }) </script> diff --git a/src/components/gameMaster/assetManager/partials/characterHair/CharacterHairDetails.vue b/src/components/gameMaster/assetManager/partials/characterHair/CharacterHairDetails.vue index 71f5501..2cf4b52 100644 --- a/src/components/gameMaster/assetManager/partials/characterHair/CharacterHairDetails.vue +++ b/src/components/gameMaster/assetManager/partials/characterHair/CharacterHairDetails.vue @@ -34,6 +34,7 @@ </template> <script setup lang="ts"> +import { SocketEvent } from '@/application/enums'; import type { CharacterGender, CharacterHair, Sprite } from '@/application/types' import { useAssetManagerStore } from '@/stores/assetManagerStore' import { useGameStore } from '@/stores/gameStore' @@ -65,7 +66,7 @@ if (selectedCharacterHair.value) { function removeCharacterHair() { if (!selectedCharacterHair.value) return - gameStore.connection?.emit('gm:characterHair:remove', { id: selectedCharacterHair.value.id }, (response: boolean) => { + gameStore.connection?.emit(SocketEvent.GM_CHARACTERHAIR_REMOVE, { id: selectedCharacterHair.value.id }, (response: boolean) => { if (!response) { console.error('Failed to remove character hair') return @@ -75,7 +76,7 @@ function removeCharacterHair() { } function refreshCharacterHairList(unsetSelectedCharacterHair = true) { - gameStore.connection?.emit('gm:characterHair:list', {}, (response: CharacterHair[]) => { + gameStore.connection?.emit(SocketEvent.GM_CHARACTERHAIR_LIST, {}, (response: CharacterHair[]) => { assetManagerStore.setCharacterHairList(response) if (unsetSelectedCharacterHair) { @@ -93,7 +94,7 @@ function saveCharacterHair() { spriteId: characterSpriteId.value } - gameStore.connection?.emit('gm:characterHair:update', characterHairData, (response: boolean) => { + gameStore.connection?.emit(SocketEvent.GM_CHARACTERHAIR_UPDATE, characterHairData, (response: boolean) => { if (!response) { console.error('Failed to save character type') return @@ -113,7 +114,7 @@ watch(selectedCharacterHair, (characterHair: CharacterHair | null) => { onMounted(() => { if (!selectedCharacterHair.value) return - gameStore.connection?.emit('gm:sprite:list', {}, (response: Sprite[]) => { + gameStore.connection?.emit(SocketEvent.GM_SPRITE_LIST, {}, (response: Sprite[]) => { assetManagerStore.setSpriteList(response) }) }) diff --git a/src/components/gameMaster/assetManager/partials/characterHair/CharacterHairList.vue b/src/components/gameMaster/assetManager/partials/characterHair/CharacterHairList.vue index de95deb..186f8cb 100644 --- a/src/components/gameMaster/assetManager/partials/characterHair/CharacterHairList.vue +++ b/src/components/gameMaster/assetManager/partials/characterHair/CharacterHairList.vue @@ -32,6 +32,7 @@ </template> <script setup lang="ts"> +import { SocketEvent } from '@/application/enums'; import type { CharacterHair } from '@/application/types' import { useAssetManagerStore } from '@/stores/assetManagerStore' import { useGameStore } from '@/stores/gameStore' @@ -52,13 +53,13 @@ const handleSearch = () => { } const createNewCharacterHair = () => { - gameStore.connection?.emit('gm:characterHair:create', {}, (response: boolean) => { + gameStore.connection?.emit(SocketEvent.GM_CHARACTERHAIR_CREATE, {}, (response: boolean) => { if (!response) { console.error('Failed to create new character type') return } - gameStore.connection?.emit('gm:characterHair:list', {}, (response: CharacterHair[]) => { + gameStore.connection?.emit(SocketEvent.GM_CHARACTERHAIR_LIST, {}, (response: CharacterHair[]) => { assetManagerStore.setCharacterHairList(response) }) }) @@ -92,7 +93,7 @@ function toTop() { } onMounted(() => { - gameStore.connection?.emit('gm:characterHair:list', {}, (response: CharacterHair[]) => { + gameStore.connection?.emit(SocketEvent.GM_CHARACTERHAIR_LIST, {}, (response: CharacterHair[]) => { assetManagerStore.setCharacterHairList(response) }) }) diff --git a/src/components/gameMaster/assetManager/partials/characterType/CharacterTypeDetails.vue b/src/components/gameMaster/assetManager/partials/characterType/CharacterTypeDetails.vue index 11a4155..cbd4b4d 100644 --- a/src/components/gameMaster/assetManager/partials/characterType/CharacterTypeDetails.vue +++ b/src/components/gameMaster/assetManager/partials/characterType/CharacterTypeDetails.vue @@ -40,6 +40,7 @@ </template> <script setup lang="ts"> +import { SocketEvent } from '@/application/enums'; import type { CharacterGender, CharacterRace, CharacterType, Sprite } from '@/application/types' import { useAssetManagerStore } from '@/stores/assetManagerStore' import { useGameStore } from '@/stores/gameStore' @@ -74,7 +75,7 @@ if (selectedCharacterType.value) { function removeCharacterType() { if (!selectedCharacterType.value) return - gameStore.connection?.emit('gm:characterType:remove', { id: selectedCharacterType.value.id }, (response: boolean) => { + gameStore.connection?.emit(SocketEvent.GM_CHARACTERTYPE_REMOVE, { id: selectedCharacterType.value.id }, (response: boolean) => { if (!response) { console.error('Failed to remove character type') return @@ -84,7 +85,7 @@ function removeCharacterType() { } function refreshCharacterTypeList(unsetSelectedCharacterType = true) { - gameStore.connection?.emit('gm:characterType:list', {}, (response: CharacterType[]) => { + gameStore.connection?.emit(SocketEvent.GM_CHARACTERTYPE_LIST, {}, (response: CharacterType[]) => { assetManagerStore.setCharacterTypeList(response) if (unsetSelectedCharacterType) { @@ -103,7 +104,7 @@ function saveCharacterType() { spriteId: characterSpriteId.value } - gameStore.connection?.emit('gm:characterType:update', characterTypeData, (response: boolean) => { + gameStore.connection?.emit(SocketEvent.GM_CHARACTERTYPE_UPDATE, characterTypeData, (response: boolean) => { if (!response) { console.error('Failed to save character type') return @@ -124,7 +125,7 @@ watch(selectedCharacterType, (characterType: CharacterType | null) => { onMounted(() => { if (!selectedCharacterType.value) return - gameStore.connection?.emit('gm:sprite:list', {}, (response: Sprite[]) => { + gameStore.connection?.emit(SocketEvent.GM_SPRITE_LIST, {}, (response: Sprite[]) => { assetManagerStore.setSpriteList(response) }) }) diff --git a/src/components/gameMaster/assetManager/partials/characterType/CharacterTypeList.vue b/src/components/gameMaster/assetManager/partials/characterType/CharacterTypeList.vue index 73e340f..84bcf3f 100644 --- a/src/components/gameMaster/assetManager/partials/characterType/CharacterTypeList.vue +++ b/src/components/gameMaster/assetManager/partials/characterType/CharacterTypeList.vue @@ -32,6 +32,7 @@ </template> <script setup lang="ts"> +import { SocketEvent } from '@/application/enums'; import type { CharacterType } from '@/application/types' import { useAssetManagerStore } from '@/stores/assetManagerStore' import { useGameStore } from '@/stores/gameStore' @@ -52,13 +53,13 @@ const handleSearch = () => { } const createNewCharacterType = () => { - gameStore.connection?.emit('gm:characterType:create', {}, (response: boolean) => { + gameStore.connection?.emit(SocketEvent.GM_CHARACTERTYPE_CREATE, {}, (response: boolean) => { if (!response) { console.error('Failed to create new character type') return } - gameStore.connection?.emit('gm:characterType:list', {}, (response: CharacterType[]) => { + gameStore.connection?.emit(SocketEvent.GM_CHARACTERTYPE_LIST, {}, (response: CharacterType[]) => { assetManagerStore.setCharacterTypeList(response) }) }) @@ -92,7 +93,7 @@ function toTop() { } onMounted(() => { - gameStore.connection?.emit('gm:characterType:list', {}, (response: CharacterType[]) => { + gameStore.connection?.emit(SocketEvent.GM_CHARACTERTYPE_LIST, {}, (response: CharacterType[]) => { assetManagerStore.setCharacterTypeList(response) }) }) diff --git a/src/components/gameMaster/assetManager/partials/item/itemDetails.vue b/src/components/gameMaster/assetManager/partials/item/itemDetails.vue index 35db9b3..f435f61 100644 --- a/src/components/gameMaster/assetManager/partials/item/itemDetails.vue +++ b/src/components/gameMaster/assetManager/partials/item/itemDetails.vue @@ -44,6 +44,7 @@ </template> <script setup lang="ts"> +import { SocketEvent } from '@/application/enums'; import type { Item, ItemRarity, ItemType, Sprite } from '@/application/types' import { useAssetManagerStore } from '@/stores/assetManagerStore' import { useGameStore } from '@/stores/gameStore' @@ -80,7 +81,7 @@ if (selectedItem.value) { function removeItem() { if (!selectedItem.value) return - gameStore.connection?.emit('gm:item:remove', { id: selectedItem.value.id }, (response: boolean) => { + gameStore.connection?.emit(SocketEvent.GM_ITEM_REMOVE, { id: selectedItem.value.id }, (response: boolean) => { if (!response) { console.error('Failed to remove item') return @@ -90,7 +91,7 @@ function removeItem() { } function refreshItemList(unsetSelectedItem = true) { - gameStore.connection?.emit('gm:item:list', {}, (response: Item[]) => { + gameStore.connection?.emit(SocketEvent.GM_ITEM_LIST, {}, (response: Item[]) => { assetManagerStore.setItemList(response) if (unsetSelectedItem) { @@ -110,7 +111,7 @@ function saveItem() { spriteId: itemSpriteId.value } - gameStore.connection?.emit('gm:item:update', itemData, (response: boolean) => { + gameStore.connection?.emit(SocketEvent.GM_ITEM_UPDATE, itemData, (response: boolean) => { if (!response) { console.error('Failed to save item') return @@ -132,7 +133,7 @@ watch(selectedItem, (item: Item | null) => { onMounted(() => { if (!selectedItem.value) return - gameStore.connection?.emit('gm:sprite:list', {}, (response: Sprite[]) => { + gameStore.connection?.emit(SocketEvent.GM_SPRITE_LIST, {}, (response: Sprite[]) => { assetManagerStore.setSpriteList(response) }) }) diff --git a/src/components/gameMaster/assetManager/partials/item/itemList.vue b/src/components/gameMaster/assetManager/partials/item/itemList.vue index e0627bc..ca0a37b 100644 --- a/src/components/gameMaster/assetManager/partials/item/itemList.vue +++ b/src/components/gameMaster/assetManager/partials/item/itemList.vue @@ -29,6 +29,7 @@ </template> <script setup lang="ts"> +import { SocketEvent } from '@/application/enums'; import type { Item } from '@/application/types' import { useAssetManagerStore } from '@/stores/assetManagerStore' import { useGameStore } from '@/stores/gameStore' @@ -48,13 +49,13 @@ const handleSearch = () => { } const createNewItem = () => { - gameStore.connection?.emit('gm:item:create', {}, (response: boolean) => { + gameStore.connection?.emit(SocketEvent.GM_ITEM_CREATE, {}, (response: boolean) => { if (!response) { console.error('Failed to create new item') return } - gameStore.connection?.emit('gm:item:list', {}, (response: Item[]) => { + gameStore.connection?.emit(SocketEvent.GM_ITEM_LIST, {}, (response: Item[]) => { assetManagerStore.setItemList(response) }) }) @@ -88,7 +89,7 @@ function toTop() { } onMounted(() => { - gameStore.connection?.emit('gm:item:list', {}, (response: Item[]) => { + gameStore.connection?.emit(SocketEvent.GM_ITEM_LIST, {}, (response: Item[]) => { assetManagerStore.setItemList(response) }) }) diff --git a/src/components/gameMaster/assetManager/partials/mapObject/MapObjectDetails.vue b/src/components/gameMaster/assetManager/partials/mapObject/MapObjectDetails.vue index 0e80eda..c650449 100644 --- a/src/components/gameMaster/assetManager/partials/mapObject/MapObjectDetails.vue +++ b/src/components/gameMaster/assetManager/partials/mapObject/MapObjectDetails.vue @@ -43,6 +43,7 @@ </template> <script setup lang="ts"> +import { SocketEvent } from '@/application/enums'; import config from '@/application/config' import type { MapObject } from '@/application/types' import ChipsInput from '@/components/forms/ChipsInput.vue' @@ -78,7 +79,7 @@ if (selectedMapObject.value) { } function removeObject() { - gameStore.connection?.emit('gm:mapObject:remove', { mapObject: selectedMapObject.value?.id }, (response: boolean) => { + gameStore.connection?.emit(SocketEvent.GM_MAPOBJECT_REMOVE, { mapObject: selectedMapObject.value?.id }, (response: boolean) => { if (!response) { console.error('Failed to remove mapObject') return @@ -88,7 +89,7 @@ function removeObject() { } function refreshObjectList(unsetSelectedMapObject = true) { - gameStore.connection?.emit('gm:mapObject:list', {}, (response: MapObject[]) => { + gameStore.connection?.emit(SocketEvent.GM_MAPOBJECT_LIST, {}, (response: MapObject[]) => { assetManagerStore.setMapObjectList(response) if (unsetSelectedMapObject) { diff --git a/src/components/gameMaster/assetManager/partials/mapObject/MapObjectList.vue b/src/components/gameMaster/assetManager/partials/mapObject/MapObjectList.vue index 38ec6df..8e076f4 100644 --- a/src/components/gameMaster/assetManager/partials/mapObject/MapObjectList.vue +++ b/src/components/gameMaster/assetManager/partials/mapObject/MapObjectList.vue @@ -28,6 +28,7 @@ </template> <script setup lang="ts"> +import { SocketEvent } from '@/application/enums'; import config from '@/application/config' import type { MapObject } from '@/application/types' import { useAssetManagerStore } from '@/stores/assetManagerStore' @@ -47,13 +48,13 @@ const elementToScroll = ref() const handleFileUpload = (e: Event) => { const files = (e.target as HTMLInputElement).files if (!files) return - gameStore.connection?.emit('gm:mapObject:upload', files, (response: boolean) => { + gameStore.connection?.emit(SocketEvent.GM_MAPOBJECT_UPLOAD, files, (response: boolean) => { if (!response) { if (config.environment === 'development') console.error('Failed to upload map object') return } - gameStore.connection?.emit('gm:mapObject:list', {}, (response: MapObject[]) => { + gameStore.connection?.emit(SocketEvent.GM_MAPOBJECT_LIST, {}, (response: MapObject[]) => { assetManagerStore.setMapObjectList(response) }) }) @@ -92,7 +93,7 @@ function toTop() { } onMounted(() => { - gameStore.connection?.emit('gm:mapObject:list', {}, (response: MapObject[]) => { + gameStore.connection?.emit(SocketEvent.GM_MAPOBJECT_LIST, {}, (response: MapObject[]) => { assetManagerStore.setMapObjectList(response) }) }) diff --git a/src/components/gameMaster/assetManager/partials/sprite/SpriteDetails.vue b/src/components/gameMaster/assetManager/partials/sprite/SpriteDetails.vue index 7c3d2d6..a186958 100644 --- a/src/components/gameMaster/assetManager/partials/sprite/SpriteDetails.vue +++ b/src/components/gameMaster/assetManager/partials/sprite/SpriteDetails.vue @@ -68,6 +68,7 @@ </template> <script setup lang="ts"> +import { SocketEvent } from '@/application/enums'; import type { Sprite, SpriteAction, UUID } from '@/application/types' import { uuidv4 } from '@/application/utilities' import SpriteActionsInput from '@/components/gameMaster/assetManager/partials/sprite/partials/SpriteImagesInput.vue' @@ -97,7 +98,7 @@ if (selectedSprite.value) { } function deleteSprite() { - gameStore.connection?.emit('gm:sprite:delete', { id: selectedSprite.value?.id }, (response: boolean) => { + gameStore.connection?.emit(SocketEvent.GM_SPRITE_DELETE, { id: selectedSprite.value?.id }, (response: boolean) => { if (!response) { console.error('Failed to delete sprite') return @@ -107,7 +108,7 @@ function deleteSprite() { } function copySprite() { - gameStore.connection?.emit('gm:sprite:copy', { id: selectedSprite.value?.id }, (response: boolean) => { + gameStore.connection?.emit(SocketEvent.GM_SPRITE_COPY, { id: selectedSprite.value?.id }, (response: boolean) => { if (!response) { console.error('Failed to copy sprite') return @@ -117,7 +118,7 @@ function copySprite() { } function refreshSpriteList(unsetSelectedSprite = true) { - gameStore.connection?.emit('gm:sprite:list', {}, (response: Sprite[]) => { + gameStore.connection?.emit(SocketEvent.GM_SPRITE_LIST, {}, (response: Sprite[]) => { assetManagerStore.setSpriteList(response) if (unsetSelectedSprite) { @@ -149,7 +150,7 @@ function saveSprite() { }) ?? [] } - gameStore.connection?.emit('gm:sprite:update', updatedSprite, (response: boolean) => { + gameStore.connection?.emit(SocketEvent.GM_SPRITE_UPDATE, updatedSprite, (response: boolean) => { if (!response) { console.error('Failed to save sprite') return diff --git a/src/components/gameMaster/assetManager/partials/sprite/SpriteList.vue b/src/components/gameMaster/assetManager/partials/sprite/SpriteList.vue index 5cfa03d..192bdc0 100644 --- a/src/components/gameMaster/assetManager/partials/sprite/SpriteList.vue +++ b/src/components/gameMaster/assetManager/partials/sprite/SpriteList.vue @@ -24,6 +24,7 @@ </template> <script setup lang="ts"> +import { SocketEvent } from '@/application/enums'; import config from '@/application/config' import type { Sprite } from '@/application/types' import { useAssetManagerStore } from '@/stores/assetManagerStore' @@ -40,13 +41,13 @@ const hasScrolled = ref(false) const elementToScroll = ref() function newButtonClickHandler() { - gameStore.connection?.emit('gm:sprite:create', {}, (response: boolean) => { + gameStore.connection?.emit(SocketEvent.GM_SPRITE_CREATE, {}, (response: boolean) => { if (!response) { if (config.environment === 'development') console.error('Failed to create new sprite') return } - gameStore.connection?.emit('gm:sprite:list', {}, (response: Sprite[]) => { + gameStore.connection?.emit(SocketEvent.GM_SPRITE_LIST, {}, (response: Sprite[]) => { assetManagerStore.setSpriteList(response) }) }) @@ -85,7 +86,7 @@ function toTop() { } onMounted(() => { - gameStore.connection?.emit('gm:sprite:list', {}, (response: Sprite[]) => { + gameStore.connection?.emit(SocketEvent.GM_SPRITE_LIST, {}, (response: Sprite[]) => { assetManagerStore.setSpriteList(response) }) }) diff --git a/src/components/gameMaster/assetManager/partials/tile/TileDetails.vue b/src/components/gameMaster/assetManager/partials/tile/TileDetails.vue index 5248919..8603ed0 100644 --- a/src/components/gameMaster/assetManager/partials/tile/TileDetails.vue +++ b/src/components/gameMaster/assetManager/partials/tile/TileDetails.vue @@ -23,6 +23,7 @@ </template> <script setup lang="ts"> +import { SocketEvent } from '@/application/enums'; import config from '@/application/config' import type { Tile } from '@/application/types' import ChipsInput from '@/components/forms/ChipsInput.vue' @@ -56,7 +57,7 @@ watch(selectedTile, (tile: Tile | null) => { }) async function deleteTile() { - gameStore.connection?.emit('gm:tile:delete', { id: selectedTile.value?.id }, async (response: boolean) => { + gameStore.connection?.emit(SocketEvent.GM_TILE_DELETE, { id: selectedTile.value?.id }, async (response: boolean) => { if (!response) { console.error('Failed to delete tile') return @@ -67,7 +68,7 @@ async function deleteTile() { } function refreshTileList(unsetSelectedTile = true) { - gameStore.connection?.emit('gm:tile:list', {}, (response: Tile[]) => { + gameStore.connection?.emit(SocketEvent.GM_TILE_LIST, {}, (response: Tile[]) => { assetManagerStore.setTileList(response) if (unsetSelectedTile) { diff --git a/src/components/gameMaster/assetManager/partials/tile/TileList.vue b/src/components/gameMaster/assetManager/partials/tile/TileList.vue index cd1ab2b..59d61df 100644 --- a/src/components/gameMaster/assetManager/partials/tile/TileList.vue +++ b/src/components/gameMaster/assetManager/partials/tile/TileList.vue @@ -28,6 +28,7 @@ </template> <script setup lang="ts"> +import { SocketEvent } from '@/application/enums'; import config from '@/application/config' import type { Tile } from '@/application/types' import { useAssetManagerStore } from '@/stores/assetManagerStore' @@ -47,13 +48,13 @@ const elementToScroll = ref() const handleFileUpload = (e: Event) => { const files = (e.target as HTMLInputElement).files if (!files) return - gameStore.connection?.emit('gm:tile:upload', files, (response: boolean) => { + gameStore.connection?.emit(SocketEvent.GM_TILE_UPLOAD, files, (response: boolean) => { if (!response) { if (config.environment === 'development') console.error('Failed to upload tile') return } - gameStore.connection?.emit('gm:tile:list', {}, (response: Tile[]) => { + gameStore.connection?.emit(SocketEvent.GM_TILE_LIST, {}, (response: Tile[]) => { assetManagerStore.setTileList(response) }) }) @@ -92,7 +93,7 @@ function toTop() { } onMounted(() => { - gameStore.connection?.emit('gm:tile:list', {}, (response: Tile[]) => { + gameStore.connection?.emit(SocketEvent.GM_TILE_LIST, {}, (response: Tile[]) => { assetManagerStore.setTileList(response) }) }) diff --git a/src/components/gameMaster/mapEditor/partials/CreateMap.vue b/src/components/gameMaster/mapEditor/partials/CreateMap.vue index 437770a..db6cd46 100644 --- a/src/components/gameMaster/mapEditor/partials/CreateMap.vue +++ b/src/components/gameMaster/mapEditor/partials/CreateMap.vue @@ -35,6 +35,7 @@ </template> <script setup lang="ts"> +import { SocketEvent } from '@/application/enums'; import type { Map } from '@/application/types' import Modal from '@/components/utilities/Modal.vue' import { useMapEditorComposable } from '@/composables/useMapEditorComposable' @@ -56,7 +57,7 @@ const pvp = ref(false) defineExpose({ open: () => modalRef.value?.open() }) async function submit() { - gameStore.connection?.emit('gm:map:create', { name: name.value, width: width.value, height: height.value }, async (response: Map | false) => { + gameStore.connection?.emit(SocketEvent.GM_MAP_CREATE, { name: name.value, width: width.value, height: height.value }, async (response: Map | false) => { if (!response) { return } diff --git a/src/components/gameMaster/mapEditor/partials/MapList.vue b/src/components/gameMaster/mapEditor/partials/MapList.vue index a7af24d..d5212e5 100644 --- a/src/components/gameMaster/mapEditor/partials/MapList.vue +++ b/src/components/gameMaster/mapEditor/partials/MapList.vue @@ -29,6 +29,7 @@ </template> <script setup lang="ts"> +import { SocketEvent } from '@/application/enums'; import type { Map, UUID } from '@/application/types' import CreateMap from '@/components/gameMaster/mapEditor/partials/CreateMap.vue' import Modal from '@/components/utilities/Modal.vue' @@ -61,14 +62,14 @@ async function fetchMaps() { } function loadMap(id: UUID) { - gameStore.connection?.emit('gm:map:request', { mapId: id }, (response: Map) => { + gameStore.connection?.emit(SocketEvent.GM_MAP_REQUEST, { mapId: id }, (response: Map) => { mapEditor.loadMap(response) }) modalRef.value?.close() } async function deleteMap(id: UUID) { - gameStore.connection?.emit('gm:map:delete', { mapId: id }, async (response: boolean) => { + gameStore.connection?.emit(SocketEvent.GM_MAP_DELETE, { mapId: id }, async (response: boolean) => { if (!response) { gameStore.addNotification({ title: 'Error', diff --git a/src/components/gameMaster/mapEditor/partials/TeleportModal.vue b/src/components/gameMaster/mapEditor/partials/TeleportModal.vue index 19af98d..13c90d4 100644 --- a/src/components/gameMaster/mapEditor/partials/TeleportModal.vue +++ b/src/components/gameMaster/mapEditor/partials/TeleportModal.vue @@ -39,6 +39,7 @@ </template> <script setup lang="ts"> +import { SocketEvent } from '@/application/enums'; import type { Map } from '@/application/types' import Modal from '@/components/utilities/Modal.vue' import { useGameStore } from '@/stores/gameStore' @@ -58,7 +59,7 @@ defineExpose({ onMounted(fetchMaps) function fetchMaps() { - gameStore.connection?.emit('gm:map:list', {}, (response: Map[]) => { + gameStore.connection?.emit(SocketEvent.GM_MAP_LIST, {}, (response: Map[]) => { mapList.value = response }) } diff --git a/src/components/screens/Characters.vue b/src/components/screens/Characters.vue index b1f3c51..89f821d 100644 --- a/src/components/screens/Characters.vue +++ b/src/components/screens/Characters.vue @@ -128,6 +128,7 @@ import { useSoundComposable } from '@/composables/useSoundComposable' import { CharacterHairStorage } from '@/storage/storages' import { useGameStore } from '@/stores/gameStore' import { onBeforeUnmount, onMounted, ref, watch } from 'vue' +import { SocketEvent } from '@/application/enums' const { playSound } = useSoundComposable() const gameStore = useGameStore() @@ -141,10 +142,11 @@ const selectedHairId = ref<string | null>(null) // Fetch characters setTimeout(() => { - gameStore.connection?.emit('character:list') + console.log(SocketEvent.CHARACTER_LIST) + gameStore.connection?.emit(SocketEvent.CHARACTER_LIST) }, 750) -gameStore.connection?.on('character:list', (data: any) => { +gameStore.connection?.on(SocketEvent.CHARACTER_LIST, (data: any) => { characters.value = data isLoading.value = false }) @@ -153,9 +155,7 @@ gameStore.connection?.on('character:list', (data: any) => { function loginWithCharacter() { if (!selectedCharacterId.value) return - gameStore.connection?.emit( - 'character:connect', - { + gameStore.connection?.emit(SocketEvent.CHARACTER_CONNECT, { characterId: selectedCharacterId.value, characterHairId: selectedHairId.value }, @@ -167,7 +167,7 @@ function loginWithCharacter() { // Create character logics function createCharacter() { - gameStore.connection?.emit('character:create', { name: newCharacterName.value }, (success: boolean) => { + gameStore.connection?.emit(SocketEvent.CHARACTER_LIST, { name: newCharacterName.value }, (success: boolean) => { if (success) return isCreateNewCharacterModalOpen.value = false }) @@ -186,8 +186,8 @@ onMounted(async () => { }) onBeforeUnmount(() => { - gameStore.connection?.off('character:list') - gameStore.connection?.off('character:connect') - gameStore.connection?.off('character:create:success') + gameStore.connection?.off(SocketEvent.CHARACTER_LIST) + gameStore.connection?.off(SocketEvent.CHARACTER_CONNECT) + gameStore.connection?.off(SocketEvent.CHARACTER_CREATE) }) </script> diff --git a/src/components/screens/MapEditor.vue b/src/components/screens/MapEditor.vue index 0f5bbdf..feccfad 100644 --- a/src/components/screens/MapEditor.vue +++ b/src/components/screens/MapEditor.vue @@ -18,6 +18,7 @@ </template> <script setup lang="ts"> +import { SocketEvent } from '@/application/enums'; import config from '@/application/config' import 'phaser' import type { Map as MapT } from '@/application/types' @@ -97,7 +98,7 @@ function save() { placedMapObjects: currentMap.placedMapObjects.map(({ id, mapObject, isRotated, positionX, positionY }) => ({ id, mapObject, isRotated, positionX, positionY })) ?? [] } - gameStore.connection?.emit('gm:map:update', data, (response: MapT) => { + gameStore.connection?.emit(SocketEvent.GM_MAP_UPDATE, data, (response: MapT) => { mapStorage.update(response.id, response) }) } diff --git a/src/components/utilities/Notifications.vue b/src/components/utilities/Notifications.vue index bfd8e31..6865d07 100644 --- a/src/components/utilities/Notifications.vue +++ b/src/components/utilities/Notifications.vue @@ -10,6 +10,7 @@ </template> <script setup lang="ts"> +import { SocketEvent } from '@/application/enums'; import Modal from '@/components/utilities/Modal.vue' import { useGameStore } from '@/stores/gameStore' import { onBeforeMount, onBeforeUnmount, onMounted, onUnmounted, watch } from 'vue' @@ -26,7 +27,7 @@ type Notification = { } function setupNotificationListener(connection: any) { - connection.on('notification', (data: Notification) => { + connection.on(SocketEvent.NOTIFICATION, (data: Notification) => { gameStore.addNotification({ title: data.title, message: data.message @@ -52,7 +53,7 @@ onMounted(() => { onUnmounted(() => { const connection = gameStore.connection if (connection) { - connection.off('notification') + connection.off(SocketEvent.NOTIFICATION) } }) </script> diff --git a/src/composables/controls/useGameControlsComposable.ts b/src/composables/controls/useGameControlsComposable.ts index 3325997..38dad7b 100644 --- a/src/composables/controls/useGameControlsComposable.ts +++ b/src/composables/controls/useGameControlsComposable.ts @@ -1,3 +1,4 @@ +import { SocketEvent } from '@/application/enums'; import { getTile } from '@/services/mapService' import { useGameStore } from '@/stores/gameStore' import type { Ref } from 'vue' @@ -22,7 +23,7 @@ export function useGameControlsComposable(scene: Phaser.Scene, layer: Phaser.Til const pointerTile = getTile(layer, pointer.worldX, pointer.worldY) if (!pointerTile) return - gameStore.connection?.emit('map:character:move', { + gameStore.connection?.emit(SocketEvent.MAP_CHARACTER_MOVE, { positionX: pointerTile.x, positionY: pointerTile.y }) @@ -49,7 +50,7 @@ export function useGameControlsComposable(scene: Phaser.Scene, layer: Phaser.Til // Attack on CTRL if (event.key === 'Control') { - gameStore.connection?.emit('map:character:attack') + gameStore.connection?.emit(SocketEvent.MAP_CHARACTER_ATTACK) } } @@ -65,9 +66,6 @@ export function useGameControlsComposable(scene: Phaser.Scene, layer: Phaser.Til function moveCharacter() { if (!gameStore.character) return - - // Don't allow movement while attacking - if (gameStore.character.isAttacking) return const { positionX, positionY } = gameStore.character let newX = positionX @@ -81,7 +79,7 @@ export function useGameControlsComposable(scene: Phaser.Scene, layer: Phaser.Til // Only emit if position changed if (newX !== positionX || newY !== positionY) { - gameStore.connection?.emit('map:character:move', { + gameStore.connection?.emit(SocketEvent.MAP_CHARACTER_MOVE, { positionX: newX, positionY: newY }) diff --git a/src/stores/gameStore.ts b/src/stores/gameStore.ts index 75fb55e..1c88d18 100644 --- a/src/stores/gameStore.ts +++ b/src/stores/gameStore.ts @@ -1,3 +1,4 @@ +import { SocketEvent } from '@/application/enums'; import config from '@/application/config' import type { Character, Notification, User, WorldSettings } from '@/application/types' import { useCookies } from '@vueuse/integrations/useCookies' @@ -85,10 +86,10 @@ export const useGameStore = defineStore('game', { }) // Let the server know the user is logged in - this.connection.emit('login') + this.connection.emit(SocketEvent.LOGIN) // set user - this.connection.on('logged_in', (user: User) => { + this.connection.on(SocketEvent.LOGGED_IN, (user: User) => { this.setUser(user) }) @@ -98,7 +99,7 @@ export const useGameStore = defineStore('game', { }) // Listen for new date from socket - this.connection.on('date', (data: Date) => { + this.connection.on(SocketEvent.DATE, (data: Date) => { this.world.date = new Date(data) }) }, @@ -106,7 +107,7 @@ export const useGameStore = defineStore('game', { // Remove event listeners this.connection?.off('connect_error') this.connection?.off('reconnect_failed') - this.connection?.off('date') + this.connection?.off(SocketEvent.DATE) this.connection?.disconnect() useCookies().remove('token', {