From 700bd57e67af79e6d0d6bd636ef2e641da828003 Mon Sep 17 00:00:00 2001 From: Dennis Postma Date: Fri, 3 Jan 2025 14:35:08 +0100 Subject: [PATCH] Almost finalised refactoring --- src/application/types.ts | 24 +-- src/components/Effects.vue | 4 +- src/components/game/character/Character.vue | 2 +- .../character/partials/CharacterChest.vue | 2 +- .../game/character/partials/CharacterHair.vue | 2 +- src/components/game/map/Map.vue | 16 +- .../gameMaster/assetManager/AssetManager.vue | 12 +- .../characterHair/CharacterHairDetails.vue | 4 +- .../characterHair/CharacterHairList.vue | 1 + .../characterType/CharacterTypeDetails.vue | 4 +- .../characterType/CharacterTypeList.vue | 1 + .../partials/item/itemDetails.vue | 2 +- .../partials/mapObject/MapObjectDetails.vue | 163 ++++++++++++++++++ .../MapObjectList.vue} | 24 +-- .../partials/object/ObjectDetails.vue | 163 ------------------ .../partials/sprite/SpriteDetails.vue | 1 + .../gameMaster/mapEditor/MapEditor.vue | 16 +- .../mapEditor/mapPartials/MapObjects.vue | 19 +- .../mapEditor/partials/CreateMap.vue | 2 +- .../gameMaster/mapEditor/partials/MapList.vue | 6 +- .../mapEditor/partials/ObjectList.vue | 6 +- .../mapEditor/partials/TeleportModal.vue | 2 +- src/components/gui/Chat.vue | 2 +- src/components/gui/Clock.vue | 2 +- src/components/screens/Characters.vue | 4 +- src/components/screens/MapEditor.vue | 5 +- src/stores/assetManagerStore.ts | 22 +-- src/stores/mapEditorStore.ts | 18 +- src/stores/mapStore.ts | 8 +- 29 files changed, 264 insertions(+), 273 deletions(-) create mode 100644 src/components/gameMaster/assetManager/partials/mapObject/MapObjectDetails.vue rename src/components/gameMaster/assetManager/partials/{object/ObjectList.vue => mapObject/MapObjectList.vue} (74%) delete mode 100644 src/components/gameMaster/assetManager/partials/object/ObjectDetails.vue diff --git a/src/application/types.ts b/src/application/types.ts index 2ea2bce..5f337f8 100644 --- a/src/application/types.ts +++ b/src/application/types.ts @@ -34,7 +34,7 @@ export type Tile = { updatedAt: Date } -export type Object = { +export type MapObject = { id: UUID name: string tags: any | null @@ -46,7 +46,6 @@ export type Object = { frameHeight: number createdAt: Date updatedAt: Date - MapObject: PlacedMapObject[] } export type Item = { @@ -56,7 +55,6 @@ export type Item = { itemType: ItemType stackable: boolean rarity: ItemRarity - spriteId: UUID | null sprite?: Sprite createdAt: Date updatedAt: Date @@ -74,7 +72,7 @@ export type Map = { pvp: boolean mapEffects: MapEffect[] mapEventTiles: MapEventTile[] - mapObjects: PlacedMapObject[] + placedMapObjects: PlacedMapObject[] characters: Character[] chats: Chat[] createdAt: Date @@ -83,7 +81,6 @@ export type Map = { export type MapEffect = { id: UUID - mapId: UUID map: Map effect: string strength: number @@ -91,10 +88,8 @@ export type MapEffect = { export type PlacedMapObject = { id: UUID - mapId: UUID map: Map - objectId: UUID - object: Object + mapObject: MapObject depth: number isRotated: boolean positionX: number @@ -110,7 +105,6 @@ export enum MapEventTileType { export type MapEventTile = { id: UUID - mapId: UUID map: Map type: MapEventTileType positionX: number @@ -120,7 +114,6 @@ export type MapEventTile = { export type MapEventTileTeleport = { id: UUID - mapEventTileId: UUID mapEventTile: MapEventTile toMapId: UUID toMap: Map @@ -155,8 +148,6 @@ export type CharacterType = { gender: CharacterGender race: CharacterRace isSelectable: boolean - characters: Character[] - spriteId?: string sprite?: Sprite createdAt: Date updatedAt: Date @@ -165,7 +156,7 @@ export type CharacterType = { export type CharacterHair = { id: UUID name: string - sprite: Sprite + sprite?: Sprite gender: CharacterGender isSelectable: boolean } @@ -184,9 +175,7 @@ export type Character = { positionX: number positionY: number rotation: number - characterTypeId: UUID | null characterType: CharacterType | null | string - characterHairId: UUID | null characterHair: CharacterHair | null mapId: UUID map: Map @@ -202,9 +191,7 @@ export type MapCharacter = { export type CharacterItem = { id: UUID - characterId: UUID character: Character - itemId: UUID item: Item quantity: number } @@ -212,7 +199,6 @@ export type CharacterItem = { export type CharacterEquipment = { id: UUID slot: CharacterEquipmentSlotType - characterItemId: UUID characterItem: CharacterItem } @@ -250,9 +236,7 @@ export type SpriteAction = { export type Chat = { id: UUID - characterId: UUID character: Character - mapId: UUID map: Map message: string createdAt: Date diff --git a/src/components/Effects.vue b/src/components/Effects.vue index 610e406..ab90819 100644 --- a/src/components/Effects.vue +++ b/src/components/Effects.vue @@ -146,12 +146,12 @@ const setupSocketListeners = () => { updateScene() }) - gameStore.connection!.on('weather', (data: WeatherState) => { + gameStore.connection?.on('weather', (data: WeatherState) => { weatherState.value = data updateScene() }) - gameStore.connection!.on('date', updateScene) + gameStore.connection?.on('date', updateScene) } const handleResize = () => { diff --git a/src/components/game/character/Character.vue b/src/components/game/character/Character.vue index 2fda954..9a88243 100644 --- a/src/components/game/character/Character.vue +++ b/src/components/game/character/Character.vue @@ -10,7 +10,7 @@ diff --git a/src/components/gameMaster/assetManager/AssetManager.vue b/src/components/gameMaster/assetManager/AssetManager.vue index ab08a13..fc7c2bc 100644 --- a/src/components/gameMaster/assetManager/AssetManager.vue +++ b/src/components/gameMaster/assetManager/AssetManager.vue @@ -5,8 +5,8 @@ Tiles - - Objects + + Map objects Sprites @@ -40,7 +40,7 @@
- + @@ -50,7 +50,7 @@
- + @@ -66,8 +66,8 @@ import CharacterTypeDetails from '@/components/gameMaster/assetManager/partials/ import CharacterTypeList from '@/components/gameMaster/assetManager/partials/characterType/CharacterTypeList.vue' import ItemDetails from '@/components/gameMaster/assetManager/partials/item/itemDetails.vue' import ItemList from '@/components/gameMaster/assetManager/partials/item/itemList.vue' -import ObjectDetails from '@/components/gameMaster/assetManager/partials/object/ObjectDetails.vue' -import ObjectList from '@/components/gameMaster/assetManager/partials/object/ObjectList.vue' +import MapObjectDetails from '@/components/gameMaster/assetManager/partials/mapObject/MapObjectDetails.vue' +import MapObjectList from '@/components/gameMaster/assetManager/partials/mapObject/MapObjectList.vue' import SpriteDetails from '@/components/gameMaster/assetManager/partials/sprite/SpriteDetails.vue' import SpriteList from '@/components/gameMaster/assetManager/partials/sprite/SpriteList.vue' import TileDetails from '@/components/gameMaster/assetManager/partials/tile/TileDetails.vue' diff --git a/src/components/gameMaster/assetManager/partials/characterHair/CharacterHairDetails.vue b/src/components/gameMaster/assetManager/partials/characterHair/CharacterHairDetails.vue index 0d6de91..71f5501 100644 --- a/src/components/gameMaster/assetManager/partials/characterHair/CharacterHairDetails.vue +++ b/src/components/gameMaster/assetManager/partials/characterHair/CharacterHairDetails.vue @@ -59,7 +59,7 @@ if (selectedCharacterHair.value) { characterName.value = selectedCharacterHair.value.name characterGender.value = selectedCharacterHair.value.gender characterIsSelectable.value = selectedCharacterHair.value.isSelectable - characterSpriteId.value = selectedCharacterHair.value.spriteId + characterSpriteId.value = selectedCharacterHair.value.sprite?.id } function removeCharacterHair() { @@ -107,7 +107,7 @@ watch(selectedCharacterHair, (characterHair: CharacterHair | null) => { characterName.value = characterHair.name characterGender.value = characterHair.gender characterIsSelectable.value = characterHair.isSelectable - characterSpriteId.value = characterHair.spriteId + characterSpriteId.value = characterHair.sprite?.id }) onMounted(() => { diff --git a/src/components/gameMaster/assetManager/partials/characterHair/CharacterHairList.vue b/src/components/gameMaster/assetManager/partials/characterHair/CharacterHairList.vue index d2df36f..e675c4a 100644 --- a/src/components/gameMaster/assetManager/partials/characterHair/CharacterHairList.vue +++ b/src/components/gameMaster/assetManager/partials/characterHair/CharacterHairList.vue @@ -93,6 +93,7 @@ function toTop() { onMounted(() => { gameStore.connection?.emit('gm:characterHair:list', {}, (response: CharacterHair[]) => { + console.log(response) assetManagerStore.setCharacterHairList(response) }) }) diff --git a/src/components/gameMaster/assetManager/partials/characterType/CharacterTypeDetails.vue b/src/components/gameMaster/assetManager/partials/characterType/CharacterTypeDetails.vue index ed02aef..11a4155 100644 --- a/src/components/gameMaster/assetManager/partials/characterType/CharacterTypeDetails.vue +++ b/src/components/gameMaster/assetManager/partials/characterType/CharacterTypeDetails.vue @@ -68,7 +68,7 @@ if (selectedCharacterType.value) { characterGender.value = selectedCharacterType.value.gender characterRace.value = selectedCharacterType.value.race characterIsSelectable.value = selectedCharacterType.value.isSelectable - characterSpriteId.value = selectedCharacterType.value.spriteId + characterSpriteId.value = selectedCharacterType.value.sprite?.id } function removeCharacterType() { @@ -118,7 +118,7 @@ watch(selectedCharacterType, (characterType: CharacterType | null) => { characterGender.value = characterType.gender characterRace.value = characterType.race characterIsSelectable.value = characterType.isSelectable - characterSpriteId.value = characterType.spriteId + characterSpriteId.value = characterType.sprite?.id }) onMounted(() => { diff --git a/src/components/gameMaster/assetManager/partials/characterType/CharacterTypeList.vue b/src/components/gameMaster/assetManager/partials/characterType/CharacterTypeList.vue index c75f0b5..0555677 100644 --- a/src/components/gameMaster/assetManager/partials/characterType/CharacterTypeList.vue +++ b/src/components/gameMaster/assetManager/partials/characterType/CharacterTypeList.vue @@ -93,6 +93,7 @@ function toTop() { onMounted(() => { gameStore.connection?.emit('gm:characterType:list', {}, (response: CharacterType[]) => { + console.log(response) assetManagerStore.setCharacterTypeList(response) }) }) diff --git a/src/components/gameMaster/assetManager/partials/item/itemDetails.vue b/src/components/gameMaster/assetManager/partials/item/itemDetails.vue index f8b0408..35db9b3 100644 --- a/src/components/gameMaster/assetManager/partials/item/itemDetails.vue +++ b/src/components/gameMaster/assetManager/partials/item/itemDetails.vue @@ -44,7 +44,7 @@ diff --git a/src/components/gameMaster/assetManager/partials/object/ObjectList.vue b/src/components/gameMaster/assetManager/partials/mapObject/MapObjectList.vue similarity index 74% rename from src/components/gameMaster/assetManager/partials/object/ObjectList.vue rename to src/components/gameMaster/assetManager/partials/mapObject/MapObjectList.vue index 3cee279..3b6748c 100644 --- a/src/components/gameMaster/assetManager/partials/object/ObjectList.vue +++ b/src/components/gameMaster/assetManager/partials/mapObject/MapObjectList.vue @@ -10,12 +10,12 @@
- +
- Object + Object
- {{ object.name }} + {{ mapObject.name }}
@@ -29,7 +29,7 @@ diff --git a/src/components/gameMaster/assetManager/partials/object/ObjectDetails.vue b/src/components/gameMaster/assetManager/partials/object/ObjectDetails.vue deleted file mode 100644 index 3fa181c..0000000 --- a/src/components/gameMaster/assetManager/partials/object/ObjectDetails.vue +++ /dev/null @@ -1,163 +0,0 @@ - - - diff --git a/src/components/gameMaster/assetManager/partials/sprite/SpriteDetails.vue b/src/components/gameMaster/assetManager/partials/sprite/SpriteDetails.vue index f0cea3f..f11d55a 100644 --- a/src/components/gameMaster/assetManager/partials/sprite/SpriteDetails.vue +++ b/src/components/gameMaster/assetManager/partials/sprite/SpriteDetails.vue @@ -184,6 +184,7 @@ function addNewImage() { } function sortSpriteActions(actions: SpriteAction[]): SpriteAction[] { + if (!actions) return [] return [...actions].sort((a, b) => a.action.localeCompare(b.action)) } diff --git a/src/components/gameMaster/mapEditor/MapEditor.vue b/src/components/gameMaster/mapEditor/MapEditor.vue index e274cfe..5e90323 100644 --- a/src/components/gameMaster/mapEditor/MapEditor.vue +++ b/src/components/gameMaster/mapEditor/MapEditor.vue @@ -15,16 +15,16 @@ diff --git a/src/components/gameMaster/mapEditor/partials/TeleportModal.vue b/src/components/gameMaster/mapEditor/partials/TeleportModal.vue index a8f6846..5a0906b 100644 --- a/src/components/gameMaster/mapEditor/partials/TeleportModal.vue +++ b/src/components/gameMaster/mapEditor/partials/TeleportModal.vue @@ -52,7 +52,7 @@ const gameStore = useGameStore() onMounted(fetchMaps) function fetchMaps() { - gameStore.connection?.emit('gm:map_editor:map:list', {}, (response: Map[]) => { + gameStore.connection?.emit('gm:mapObject:list', {}, (response: Map[]) => { mapEditorStore.setMapList(response) }) } diff --git a/src/components/gui/Chat.vue b/src/components/gui/Chat.vue index 41dc82d..83de408 100644 --- a/src/components/gui/Chat.vue +++ b/src/components/gui/Chat.vue @@ -79,7 +79,7 @@ const scrollToBottom = () => { }) } -gameStore.connection!.on('chat:message', (data: Chat) => { +gameStore.connection?.on('chat:message', (data: Chat) => { chats.value.push(data) scrollToBottom() diff --git a/src/components/gui/Clock.vue b/src/components/gui/Clock.vue index e3ed41d..cebb827 100644 --- a/src/components/gui/Clock.vue +++ b/src/components/gui/Clock.vue @@ -11,7 +11,7 @@ import { onUnmounted } from 'vue' const gameStore = useGameStore() // Listen for new date from socket -gameStore.connection!.on('date', (data: Date) => { +gameStore.connection?.on('date', (data: Date) => { gameStore.world.date = new Date(data) }) diff --git a/src/components/screens/Characters.vue b/src/components/screens/Characters.vue index 741b663..36fe0a5 100644 --- a/src/components/screens/Characters.vue +++ b/src/components/screens/Characters.vue @@ -145,7 +145,7 @@ setTimeout(() => { gameStore.connection?.emit('character:list') }, 750) -gameStore.connection!.on('character:list', (data: any) => { +gameStore.connection?.on('character:list', (data: any) => { characters.value = data isLoading.value = false @@ -174,7 +174,7 @@ function loginWithCharacter() { // Create character logics function createCharacter() { - gameStore.connection!.on('character:create:success', (data: CharacterT) => { + gameStore.connection?.on('character:create:success', (data: CharacterT) => { gameStore.setCharacter(data) isCreateNewCharacterModalOpen.value = false }) diff --git a/src/components/screens/MapEditor.vue b/src/components/screens/MapEditor.vue index 0f8bc1c..6c22b62 100644 --- a/src/components/screens/MapEditor.vue +++ b/src/components/screens/MapEditor.vue @@ -72,8 +72,9 @@ const preloadScene = async (scene: Phaser.Scene) => { * Then load them into the scene. */ scene.load.rexAwait(async function (successCallback: any) { - const tiles: AssetDataT[] = await fetch(config.server_endpoint + '/assets/list_tiles').then((response) => response.json()) - for await (const tile of tiles) { + const tiles: { data: AssetDataT[] } = await fetch(config.server_endpoint + '/assets/list_tiles').then((response) => response.json()) + + for await (const tile of tiles?.data ?? []) { await loadTexture(scene, tile) } diff --git a/src/stores/assetManagerStore.ts b/src/stores/assetManagerStore.ts index eda0180..edcd128 100644 --- a/src/stores/assetManagerStore.ts +++ b/src/stores/assetManagerStore.ts @@ -1,4 +1,4 @@ -import type { CharacterHair, CharacterType, Item, Object, Sprite, Tile } from '@/application/types' +import type { CharacterHair, CharacterType, Item, MapObject, Sprite, Tile } from '@/application/types' import { defineStore } from 'pinia' import { ref } from 'vue' @@ -6,8 +6,8 @@ export const useAssetManagerStore = defineStore('assetManager', () => { const tileList = ref([]) const selectedTile = ref(null) - const objectList = ref([]) - const selectedObject = ref(null) + const mapObjectList = ref([]) + const selectedMapObject = ref(null) const spriteList = ref([]) const selectedSprite = ref(null) @@ -29,12 +29,12 @@ export const useAssetManagerStore = defineStore('assetManager', () => { selectedTile.value = tile } - function setObjectList(objects: Object[]) { - objectList.value = objects + function setMapObjectList(objects: MapObject[]) { + mapObjectList.value = objects } - function setSelectedObject(object: Object | null) { - selectedObject.value = object + function setSelectedObject(object: MapObject | null) { + selectedMapObject.value = object } function setSpriteList(sprites: Sprite[]) { @@ -72,8 +72,8 @@ export const useAssetManagerStore = defineStore('assetManager', () => { return { tileList, selectedTile, - objectList, - selectedObject, + mapObjectList, + selectedMapObject, spriteList, selectedSprite, characterTypeList, @@ -84,9 +84,9 @@ export const useAssetManagerStore = defineStore('assetManager', () => { selectedItem, setTileList, setSelectedTile, - setObjectList, + setMapObjectList, setCharacterTypeList, - setSelectedObject, + setSelectedMapObject: setSelectedObject, setSpriteList, setSelectedSprite, setSelectedCharacterType, diff --git a/src/stores/mapEditorStore.ts b/src/stores/mapEditorStore.ts index def8757..85dfd4b 100644 --- a/src/stores/mapEditorStore.ts +++ b/src/stores/mapEditorStore.ts @@ -1,4 +1,4 @@ -import type { Object, Tile, Map, MapEffect, PlacedMapObject } from '@/application/types' +import type { Map, MapEffect, MapObject, PlacedMapObject, Tile } from '@/application/types' import { useGameStore } from '@/stores/gameStore' import { defineStore } from 'pinia' @@ -19,11 +19,11 @@ export const useMapEditorStore = defineStore('mapEditor', { eraserMode: 'tile', mapList: [] as Map[], tileList: [] as Tile[], - objectList: [] as Object[], + mapObjectList: [] as MapObject[], selectedTile: '', - selectedObject: null as Object | null, + selectedObject: null as MapObject | null, isTileListModalShown: false, - isObjectListModalShown: false, + isMapObjectListModalShown: false, isMapListModalShown: false, isCreateMapModalShown: false, isSettingsModalShown: false, @@ -85,13 +85,13 @@ export const useMapEditorStore = defineStore('mapEditor', { setTileList(tiles: Tile[]) { this.tileList = tiles }, - setObjectList(objects: Object[]) { - this.objectList = objects + setMapObjectList(objects: MapObject[]) { + this.mapObjectList = objects }, setSelectedTile(tile: string) { this.selectedTile = tile }, - setSelectedObject(object: Object) { + setSelectedObject(object: MapObject) { this.selectedObject = object }, toggleSettingsModal() { @@ -118,13 +118,13 @@ export const useMapEditorStore = defineStore('mapEditor', { if (resetMap) this.map = null this.mapList = [] this.tileList = [] - this.objectList = [] + this.mapObjectList = [] this.tool = 'move' this.drawMode = 'tile' this.selectedTile = '' this.selectedObject = null this.isTileListModalShown = false - this.isObjectListModalShown = false + this.isMapObjectListModalShown = false this.isSettingsModalShown = false this.isMapListModalShown = false this.isCreateMapModalShown = false diff --git a/src/stores/mapStore.ts b/src/stores/mapStore.ts index d3abf10..c03206a 100644 --- a/src/stores/mapStore.ts +++ b/src/stores/mapStore.ts @@ -1,4 +1,4 @@ -import type { Map, MapCharacter } from '@/application/types' +import type { Map, MapCharacter, UUID } from '@/application/types' import { defineStore } from 'pinia' export const useMapStore = defineStore('map', { @@ -11,7 +11,7 @@ export const useMapStore = defineStore('map', { }, getters: { getCharacterById: (state) => { - return (id: number) => state.characters.find((char) => char.character.id === id) + return (id: UUID) => state.characters.find((char) => char.character.id === id) }, getCharacterCount: (state) => { return state.characters.length @@ -34,13 +34,13 @@ export const useMapStore = defineStore('map', { const index = this.characters.findIndex((char) => char.character.id === updatedCharacter.character.id) if (index !== -1) this.characters[index] = updatedCharacter }, - removeCharacter(characterId: number) { + removeCharacter(characterId: UUID) { this.characters = this.characters.filter((char) => char.character.id !== characterId) }, setCharacterLoaded(loaded: boolean) { this.characterLoaded = loaded }, - updateCharacterPosition(data: { characterId: number; positionX: number; positionY: number; rotation: number; isMoving: boolean }) { + updateCharacterPosition(data: { characterId: UUID; positionX: number; positionY: number; rotation: number; isMoving: boolean }) { const character = this.characters.find((char) => char.character.id === data.characterId) if (character) { character.character.positionX = data.positionX