47 lines
1.8 KiB
TypeScript
47 lines
1.8 KiB
TypeScript
import { getTile } from '@/composables/mapComposable'
|
|
import { useGameStore } from '@/stores/gameStore'
|
|
import { useBaseControlsComposable } from './useBaseControlsComposable'
|
|
import type { Ref } from 'vue'
|
|
|
|
export function useGameControlsComposable(scene: Phaser.Scene, layer: Phaser.Tilemaps.TilemapLayer, waypoint: Ref<{ visible: boolean; x: number; y: number }>, camera: Phaser.Cameras.Scene2D.Camera) {
|
|
const gameStore = useGameStore()
|
|
const baseHandlers = useBaseControlsComposable(scene, layer, waypoint, camera)
|
|
|
|
function handlePointerDown(pointer: Phaser.Input.Pointer) {
|
|
baseHandlers.startDragging(pointer)
|
|
}
|
|
|
|
function handlePointerMove(pointer: Phaser.Input.Pointer) {
|
|
baseHandlers.updateWaypoint(pointer.worldX, pointer.worldY)
|
|
baseHandlers.handleDragMap(pointer)
|
|
}
|
|
|
|
function handlePointerUp(pointer: Phaser.Input.Pointer) {
|
|
baseHandlers.stopDragging()
|
|
|
|
const pointerTile = getTile(layer, pointer.worldX, pointer.worldY)
|
|
if (!pointerTile) return
|
|
|
|
gameStore.connection?.emit('map:character:move', {
|
|
positionX: pointerTile.x,
|
|
positionY: pointerTile.y
|
|
})
|
|
}
|
|
|
|
const setupControls = () => {
|
|
scene.input.on(Phaser.Input.Events.POINTER_DOWN, handlePointerDown)
|
|
scene.input.on(Phaser.Input.Events.POINTER_MOVE, handlePointerMove)
|
|
scene.input.on(Phaser.Input.Events.POINTER_UP, handlePointerUp)
|
|
scene.input.on(Phaser.Input.Events.POINTER_WHEEL, baseHandlers.handleZoom)
|
|
}
|
|
|
|
const cleanupControls = () => {
|
|
scene.input.off(Phaser.Input.Events.POINTER_DOWN, handlePointerDown)
|
|
scene.input.off(Phaser.Input.Events.POINTER_MOVE, handlePointerMove)
|
|
scene.input.off(Phaser.Input.Events.POINTER_UP, handlePointerUp)
|
|
scene.input.off(Phaser.Input.Events.POINTER_WHEEL, baseHandlers.handleZoom)
|
|
}
|
|
|
|
return { setupControls, cleanupControls }
|
|
}
|