1
0
forked from noxious/client

zoneEditor reactivity fixes

This commit is contained in:
Dennis Postma 2024-09-20 16:59:02 +02:00
parent f3b56ef5fa
commit 1a7546ba4f

View File

@ -67,8 +67,8 @@ const { objectList, zone, selectedTile, selectedObject, selectedZoneObject, eras
const zoneTilemap = createTilemap() const zoneTilemap = createTilemap()
const tiles = createTileLayer() const tiles = createTileLayer()
let zoneObjects = <ZoneObject[]>[] const zoneObjects = ref<ZoneObject[]>([])
let zoneEventTiles = <ZoneEventTile[]>[] const zoneEventTiles = ref<ZoneEventTile[]>([])
let tileArray = createTileArray() let tileArray = createTileArray()
const shouldShowTeleportModal = computed(() => zoneEditorStore.tool === 'pencil' && drawMode.value === 'teleport') const shouldShowTeleportModal = computed(() => zoneEditorStore.tool === 'pencil' && drawMode.value === 'teleport')
@ -125,9 +125,9 @@ function eraser(tile: Phaser.Tilemaps.Tile) {
placeTile(zoneTilemap as Tilemap, tiles as TilemapLayer, tile.x, tile.y, 'blank_tile') placeTile(zoneTilemap as Tilemap, tiles as TilemapLayer, tile.x, tile.y, 'blank_tile')
tileArray[tile.y][tile.x] = 'blank_tile' tileArray[tile.y][tile.x] = 'blank_tile'
} else if (eraserMode.value === 'object') { } else if (eraserMode.value === 'object') {
zoneObjects = zoneObjects.filter((object) => object.positionX !== tile.x || object.positionY !== tile.y) zoneObjects.value = zoneObjects.value.filter((object) => object.positionX !== tile.x || object.positionY !== tile.y)
} else if (eraserMode.value === 'blocking tile' || eraserMode.value === 'teleport') { } else if (eraserMode.value === 'blocking tile' || eraserMode.value === 'teleport') {
zoneEventTiles = zoneEventTiles.filter((eventTile) => eventTile.positionX !== tile.x || eventTile.positionY !== tile.y || (eraserMode.value === 'teleport' && eventTile.type !== ZoneEventTileType.TELEPORT)) zoneEventTiles.value = zoneEventTiles.value.filter((eventTile) => eventTile.positionX !== tile.x || eventTile.positionY !== tile.y || (eraserMode.value === 'teleport' && eventTile.type !== ZoneEventTileType.TELEPORT))
} }
} }
@ -144,7 +144,7 @@ function pencil(tile: Phaser.Tilemaps.Tile) {
function addZoneObject(tile: Phaser.Tilemaps.Tile) { function addZoneObject(tile: Phaser.Tilemaps.Tile) {
// Check if object already exists on position // Check if object already exists on position
const existingObject = zoneObjects.find((object) => object.positionX === tile.x && object.positionY === tile.y) const existingObject = zoneObjects.value.find((object) => object.positionX === tile.x && object.positionY === tile.y)
if (existingObject) return if (existingObject) return
const newObject = { const newObject = {
@ -157,12 +157,13 @@ function addZoneObject(tile: Phaser.Tilemaps.Tile) {
positionX: tile.x, positionX: tile.x,
positionY: tile.y positionY: tile.y
} }
zoneObjects = [...new Set([...zoneObjects, newObject])] // Add new object to zoneObjects
zoneObjects.value = zoneObjects.value.concat(newObject)
} }
function addZoneEventTile(tile: Phaser.Tilemaps.Tile) { function addZoneEventTile(tile: Phaser.Tilemaps.Tile) {
// Check if event tile already exists on position // Check if event tile already exists on position
const existingEventTile = zoneEventTiles.find((eventTile) => eventTile.positionX === tile.x && eventTile.positionY === tile.y) const existingEventTile = zoneEventTiles.value.find((eventTile) => eventTile.positionX === tile.x && eventTile.positionY === tile.y)
if (existingEventTile) return if (existingEventTile) return
const newEventTile = { const newEventTile = {
@ -181,7 +182,7 @@ function addZoneEventTile(tile: Phaser.Tilemaps.Tile) {
} }
: undefined : undefined
} }
zoneEventTiles = [...new Set([...zoneEventTiles, newEventTile])] as any zoneEventTiles.value = zoneEventTiles.value.concat(newEventTile as any)
} }
function paint() { function paint() {
@ -213,8 +214,8 @@ function save() {
height: zoneEditorStore.zoneSettings.height, height: zoneEditorStore.zoneSettings.height,
tiles: tileArray, tiles: tileArray,
pvp: zone.value.pvp, pvp: zone.value.pvp,
zoneEventTiles: zoneEventTiles.map(({ id, zoneId, type, positionX, positionY, teleport }) => ({ id, zoneId, type, positionX, positionY, teleport })), zoneEventTiles: zoneEventTiles.value.map(({ id, zoneId, type, positionX, positionY, teleport }) => ({ id, zoneId, type, positionX, positionY, teleport })),
zoneObjects: zoneObjects.map(({ id, zoneId, objectId, depth, positionX, positionY }) => ({ id, zoneId, objectId, depth, positionX, positionY })) zoneObjects: zoneObjects.value.map(({ id, zoneId, objectId, depth, positionX, positionY }) => ({ id, zoneId, objectId, depth, positionX, positionY }))
} }
if (zoneEditorStore.isSettingsModalShown) { if (zoneEditorStore.isSettingsModalShown) {
@ -237,16 +238,16 @@ function clear() {
} }
} }
zoneEventTiles = [] zoneEventTiles.value = []
zoneObjects = [] zoneObjects.value = []
} }
function updateZoneObjectDepth(depth: number) { function updateZoneObjectDepth(depth: number) {
zoneObjects = zoneObjects.map((object) => (object.id === selectedZoneObject.value?.id ? { ...object, depth } : object)) zoneObjects.value = zoneObjects.value.map((object) => (object.id === selectedZoneObject.value?.id ? { ...object, depth } : object))
} }
function deleteZoneObject(objectId: string) { function deleteZoneObject(objectId: string) {
zoneObjects = zoneObjects.filter((object) => object.id !== objectId) zoneObjects.value = zoneObjects.value.filter((object) => object.id !== objectId)
} }
function handleMove() { function handleMove() {
@ -261,8 +262,8 @@ onBeforeMount(async () => {
tileArray = zone.value.tiles.map((row) => row.map((tileId) => tileId || 'blank_tile')) tileArray = zone.value.tiles.map((row) => row.map((tileId) => tileId || 'blank_tile'))
} }
zoneEventTiles = zone.value?.zoneEventTiles ?? [] zoneEventTiles.value = zone.value?.zoneEventTiles ?? []
zoneObjects = sortByIsometricDepth(zone.value?.zoneObjects ?? []) zoneObjects.value = sortByIsometricDepth(zone.value?.zoneObjects ?? [])
// Center camera // Center camera
const centerY = (zoneTilemap.height * zoneTilemap.tileHeight) / 2 const centerY = (zoneTilemap.height * zoneTilemap.tileHeight) / 2
@ -271,8 +272,8 @@ onBeforeMount(async () => {
}) })
onUnmounted(() => { onUnmounted(() => {
zoneEventTiles = [] zoneEventTiles.value = []
zoneObjects = [] zoneObjects.value = []
tiles?.destroy() tiles?.destroy()
zoneTilemap?.removeAllLayers() zoneTilemap?.removeAllLayers()
zoneTilemap?.destroy() zoneTilemap?.destroy()
@ -283,7 +284,7 @@ onUnmounted(() => {
watch( watch(
objectList, objectList,
(newObjects) => { (newObjects) => {
zoneObjects = zoneObjects.map((zoneObject) => { zoneObjects.value = zoneObjects.value.map((zoneObject) => {
const updatedObject = newObjects.find((obj) => obj.id === zoneObject.objectId) const updatedObject = newObjects.find((obj) => obj.id === zoneObject.objectId)
if (updatedObject) { if (updatedObject) {
return { return {