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 } }