forked from noxious/client
Hierarchical pointer handling logic
This commit is contained in:
@ -9,7 +9,6 @@ import { uuidv4 } from '@/application/utilities'
|
||||
import PlacedMapObject from '@/components/gameMaster/mapEditor/mapPartials/PlacedMapObject.vue'
|
||||
import SelectedPlacedMapObjectComponent from '@/components/gameMaster/mapEditor/partials/SelectedPlacedMapObject.vue'
|
||||
import { getTile } from '@/composables/mapComposable'
|
||||
import { useMapEditorStore } from '@/stores/mapEditorStore'
|
||||
import { useScene } from 'phavuer'
|
||||
import { ref, watch } from 'vue'
|
||||
import { useMapEditorComposable } from '@/composables/useMapEditorComposable'
|
||||
@ -19,15 +18,17 @@ const mapEditor = useMapEditorComposable()
|
||||
const selectedPlacedMapObject = ref<PlacedMapObjectT | null>(null)
|
||||
const movingPlacedMapObject = ref<PlacedMapObjectT | null>(null)
|
||||
|
||||
const tileLayer = ref<Phaser.Tilemaps.TilemapLayer>()
|
||||
|
||||
const props = defineProps<{
|
||||
tileMap: Phaser.Tilemaps.Tilemap
|
||||
}>()
|
||||
|
||||
defineExpose({handlePointer})
|
||||
|
||||
function pencil(pointer: Phaser.Input.Pointer, tileMapLayer: Phaser.Tilemaps.TilemapLayer, map: MapT) {
|
||||
function pencil(pointer: Phaser.Input.Pointer, map: MapT) {
|
||||
// Check if there is a tile
|
||||
const tile = getTile(tileMapLayer, pointer.worldX, pointer.worldY)
|
||||
const tile = getTile(tileLayer, pointer.worldX, pointer.worldY)
|
||||
if (!tile) return
|
||||
|
||||
// Check if object already exists on position
|
||||
@ -48,7 +49,7 @@ function pencil(pointer: Phaser.Input.Pointer, tileMapLayer: Phaser.Tilemaps.Til
|
||||
map.placedMapObjects.concat(newPlacedMapObject)
|
||||
}
|
||||
|
||||
function eraser(pointer: Phaser.Input.Pointer, tileMapLayer: Phaser.Tilemaps.TilemapLayer, map: MapT) {
|
||||
function eraser(pointer: Phaser.Input.Pointer, map: MapT) {
|
||||
// Check if there is a tile
|
||||
const tile = getTile(tileMapLayer, pointer.worldX, pointer.worldY)
|
||||
if (!tile) return
|
||||
@ -61,7 +62,7 @@ function eraser(pointer: Phaser.Input.Pointer, tileMapLayer: Phaser.Tilemaps.Til
|
||||
map.placedMapObjects = map.placedMapObjects.filter((placedMapObject) => placedMapObject.id !== existingPlacedMapObject.id)
|
||||
}
|
||||
|
||||
function objectPicker(pointer: Phaser.Input.Pointer, tileMapLayer: Phaser.Tilemaps.TilemapLayer, map: MapT) {
|
||||
function objectPicker(pointer: Phaser.Input.Pointer, map: MapT) {
|
||||
// Check if there is a tile
|
||||
const tile = getTile(tileMapLayer, pointer.worldX, pointer.worldY)
|
||||
if (!tile) return
|
||||
@ -74,7 +75,7 @@ function objectPicker(pointer: Phaser.Input.Pointer, tileMapLayer: Phaser.Tilema
|
||||
mapEditor.setSelectedMapObject(existingPlacedMapObject.mapObject)
|
||||
}
|
||||
|
||||
function moveMapObject(id: string, tileMapLayer: Phaser.Tilemaps.TilemapLayer, map: MapT) {
|
||||
function moveMapObject(id: string, map: MapT) {
|
||||
movingPlacedMapObject.value = map.placedMapObjects.find((object) => object.id === id) as PlacedMapObjectT
|
||||
|
||||
function handlePointerMove(pointer: Phaser.Input.Pointer) {
|
||||
@ -123,7 +124,7 @@ function clickPlacedMapObject(placedMapObject: PlacedMapObjectT) {
|
||||
}
|
||||
}
|
||||
|
||||
function handlePointer(pointer: Phaser.Input.Pointer, tileMapLayer: Phaser.Tilemaps.TilemapLayer) {
|
||||
function handlePointer(pointer: Phaser.Input.Pointer) {
|
||||
const map = mapEditor.currentMap.value
|
||||
if (!map) return
|
||||
|
||||
@ -141,11 +142,14 @@ function handlePointer(pointer: Phaser.Input.Pointer, tileMapLayer: Phaser.Tilem
|
||||
// Check if tool is pencil
|
||||
switch (mapEditor.tool.value) {
|
||||
case 'pencil':
|
||||
if (mapEditor.selectedMapObject.value) pencil(pointer, tileMapLayer, map)
|
||||
if (mapEditor.selectedMapObject.value) pencil(pointer, map)
|
||||
break
|
||||
case 'eraser':
|
||||
eraser(pointer, tileMapLayer, map)
|
||||
eraser(pointer, map)
|
||||
break
|
||||
case 'object picker':
|
||||
objectPicker(pointer, tileMapLayer, map)
|
||||
objectPicker(pointer, map)
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user