1
0
forked from noxious/client
noxious_client/src/composables/useCameraControls.ts

47 lines
1.2 KiB
TypeScript

import { ref } from 'vue'
import { useGameStore } from '@/stores/game'
export function useCameraControls(scene: Phaser.Scene): any {
const gameStore = useGameStore()
const camera = ref(scene.cameras.main)
const isDragging = ref(false)
let pointerDownTimer: number | null | NodeJS.Timeout = null
let pointerUpTimer: number | null | NodeJS.Timeout = null
const DRAG_DELAY = 150
const MOVE_RESET_DELAY = 100
function onPointerDown(pointer: Phaser.Input.Pointer) {
if (pointer.event instanceof MouseEvent || pointer.event.shiftKey) {
pointerDownTimer = setTimeout(() => {
isDragging.value = true
gameStore.setMovingCamera(true)
}, DRAG_DELAY)
}
}
function onPointerUp() {
if (pointerDownTimer) {
clearTimeout(pointerDownTimer)
pointerDownTimer = null
}
isDragging.value = false
if (pointerUpTimer) {
clearTimeout(pointerUpTimer)
}
pointerUpTimer = setTimeout(() => {
gameStore.setMovingCamera(false)
}, MOVE_RESET_DELAY)
}
scene.input.on(Phaser.Input.Events.POINTER_DOWN, onPointerDown)
scene.input.on(Phaser.Input.Events.POINTER_UP, onPointerUp)
return {
camera,
isDragging
}
}