diff --git a/src/components/game/map/partials/PlacedMapObject.vue b/src/components/game/map/partials/PlacedMapObject.vue index e754290..48d21f4 100644 --- a/src/components/game/map/partials/PlacedMapObject.vue +++ b/src/components/game/map/partials/PlacedMapObject.vue @@ -5,7 +5,7 @@ <script setup lang="ts"> import type { PlacedMapObject, TextureData } from '@/application/types' import { loadTexture } from '@/composables/gameComposable' -import { calculateIsometricDepth, tileToWorldX, tileToWorldY } from '@/composables/mapComposable' +import { calculateIsometricDepth } from '@/composables/mapComposable' import { useGameStore } from '@/stores/gameStore' import { Image, useScene } from 'phavuer' import { computed, onMounted } from 'vue' @@ -31,22 +31,13 @@ const imageProps = computed(() => ({ originY: props.placedMapObject.mapObject.originY })) -function calculateObjectPlacement(mapObj: PlacedMapObject, tileCenterSnap: boolean) : {x: number; y: number} { - let position : {x: number; y: number} - if (tileCenterSnap) { - let halfTileWidth = config.tile_size.width/2 - let halfTileHeight = config.tile_size.height/2 - position = { - x: Math.ceil((mapObj.positionX-config.tile_size.height)/halfTileWidth) * halfTileWidth, - y: Math.ceil((mapObj.positionY-config.tile_size.height)/halfTileWidth) * halfTileWidth, - } - } - else { - position = { x: mapObj.positionX, y: mapObj.positionY } - } +function calculateObjectPlacement(mapObj: PlacedMapObject) : {x: number; y: number} { + let position = { x: mapObj.positionX, y: mapObj.positionY } + let halfTileWidth = config.tile_size.width/2 + let halfTileHeight = config.tile_size.height/2 return { x: position.x-mapObj.mapObject.frameWidth/2, - y: position.y-mapObj.mapObject.frameHeight/2 + y: position.y-mapObj.mapObject.frameHeight/2-halfTileHeight } } diff --git a/src/components/gameMaster/mapEditor/Map.vue b/src/components/gameMaster/mapEditor/Map.vue index fb8da71..cf74943 100644 --- a/src/components/gameMaster/mapEditor/Map.vue +++ b/src/components/gameMaster/mapEditor/Map.vue @@ -1,7 +1,7 @@ <template> <MapTiles ref="mapTiles" @tileMap:create="tileMap = $event" /> - <PlacedMapObjects ref="mapObjects" v-if="tileMap" /> - <MapEventTiles ref="eventTiles" v-if="tileMap" :tileMap="tileMap as Phaser.Tilemaps.Tilemap" /> + <PlacedMapObjects ref="mapObjects" v-if="tileMap" :tileMap /> + <MapEventTiles ref="eventTiles" v-if="tileMap" :tileMap /> </template> <script setup lang="ts"> diff --git a/src/components/gameMaster/mapEditor/mapPartials/PlacedMapObjects.vue b/src/components/gameMaster/mapEditor/mapPartials/PlacedMapObjects.vue index 1fea785..f6c0c04 100644 --- a/src/components/gameMaster/mapEditor/mapPartials/PlacedMapObjects.vue +++ b/src/components/gameMaster/mapEditor/mapPartials/PlacedMapObjects.vue @@ -11,13 +11,22 @@ import SelectedPlacedMapObjectComponent from '@/components/gameMaster/mapEditor/ import { useMapEditorComposable } from '@/composables/useMapEditorComposable' import { useScene } from 'phavuer' import { ref, watch } from 'vue' +import { getTile, tileToWorldX, tileToWorldY } from '@/composables/mapComposable' +import Tilemap = Phaser.Tilemaps.Tilemap const scene = useScene() const mapEditor = useMapEditorComposable() defineExpose({ handlePointer }) +const props = defineProps<{ + tileMap: Tilemap +}>() + function pencil(pointer: Phaser.Input.Pointer, map: MapT) { + const tile = getTile(props.tileMap, pointer.worldX, pointer.worldY) + if (!tile) return + // Check if object already exists on position const existingPlacedMapObject = findInMap(pointer, map) if (existingPlacedMapObject) return @@ -29,8 +38,8 @@ function pencil(pointer: Phaser.Input.Pointer, map: MapT) { map: map, mapObject: mapEditor.selectedMapObject.value, isRotated: false, - positionX: pointer.worldX, - positionY: pointer.worldY + positionX: tileToWorldX(props.tileMap, tile.x, tile.y), + positionY: tileToWorldY(props.tileMap, tile.x, tile.y) } // Add new object to mapObjects diff --git a/src/components/screens/MapEditor.vue b/src/components/screens/MapEditor.vue index 713a24b..f161734 100644 --- a/src/components/screens/MapEditor.vue +++ b/src/components/screens/MapEditor.vue @@ -98,18 +98,17 @@ function save() { if (!currentMap) return const data = { - mapId: currentMap.id, + mapId: {...currentMap}, name: currentMap.name, width: currentMap.width, height: currentMap.height, - tiles: currentMap.tiles, + tiles: {...currentMap.tiles}, pvp: currentMap.pvp, - mapEffects: currentMap.mapEffects?.map(({ id, effect, strength }) => ({ id, effect, strength })) ?? [], - mapEventTiles: currentMap.mapEventTiles?.map(({ id, type, positionX, positionY, teleport }) => ({ id, type, positionX, positionY, teleport: {...teleport} })), + mapEffects: {...currentMap.mapEffects}, + mapEventTiles: {...currentMap.mapEventTiles}, placedMapObjects: currentMap.placedMapObjects?.map(({ id, mapObject, depth, isRotated, positionX, positionY }) => ({ id, mapObject: {...mapObject}, depth, isRotated, positionX, positionY })) ?? [] } - console.log(data.placedMapObjects) gameStore.connection?.emit('gm:map:update', data, (response: MapT) => { mapStorage.update(response.id, response) })