You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
66 lines
1.4 KiB
TypeScript
66 lines
1.4 KiB
TypeScript
import { ref } from 'vue'
|
|
|
|
export default function useInput() {
|
|
let inputX = ref(0)
|
|
let inputY = ref(0)
|
|
let digging = ref(false)
|
|
let paused = ref(false)
|
|
|
|
function handleKeyDown(event: KeyboardEvent) {
|
|
switch (event.key) {
|
|
case 'ArrowUp':
|
|
inputY.value = -1
|
|
break
|
|
case 'ArrowDown':
|
|
inputY.value = 1
|
|
break
|
|
case 'ArrowRight':
|
|
inputX.value = 1
|
|
break
|
|
case 'ArrowLeft':
|
|
inputX.value = -1
|
|
break
|
|
case 'p':
|
|
paused.value = !paused.value
|
|
break
|
|
case ' ':
|
|
digging.value = true
|
|
break
|
|
}
|
|
}
|
|
|
|
function handleKeyUp(event: KeyboardEvent) {
|
|
switch (event.key) {
|
|
// Arrow Keys
|
|
case 'ArrowUp':
|
|
inputY.value = inputY.value === -1 ? 0 : 1
|
|
break
|
|
case 'ArrowDown':
|
|
inputY.value = inputY.value === 1 ? 0 : 1
|
|
break
|
|
case 'ArrowRight':
|
|
inputX.value = inputX.value === 1 ? 0 : -1
|
|
break
|
|
case 'ArrowLeft':
|
|
inputX.value = inputX.value === -1 ? 0 : 1
|
|
break
|
|
case ' ':
|
|
digging.value = false
|
|
break
|
|
}
|
|
}
|
|
|
|
document.removeEventListener('keydown', handleKeyDown)
|
|
document.removeEventListener('keyup', handleKeyUp)
|
|
|
|
document.addEventListener('keydown', handleKeyDown)
|
|
document.addEventListener('keyup', handleKeyUp)
|
|
|
|
return {
|
|
inputX,
|
|
inputY,
|
|
digging,
|
|
paused,
|
|
}
|
|
}
|